mirror of
https://github.com/FlourishingWorld/hk4e.git
synced 2026-03-01 00:35:36 +08:00
更新配置表
This commit is contained in:
203
gdconf/game_data_config/lua/common/BlossomGroupV2.lua
Normal file
203
gdconf/game_data_config/lua/common/BlossomGroupV2.lua
Normal file
@@ -0,0 +1,203 @@
|
||||
--地脉花循环营地模板
|
||||
|
||||
--local defs = {
|
||||
-- group_id = xxx ,
|
||||
-- monster_waves = 4,
|
||||
-- chest_id = xxx,
|
||||
-- operator1_id = xxx,
|
||||
-- operator2_id = xxx
|
||||
--}
|
||||
|
||||
|
||||
|
||||
|
||||
local Tri = {
|
||||
[1] = { name = "any_monster_die", config_id = 8000001, event = EventType.EVENT_ANY_MONSTER_DIE, source = "", condition = "", action = "action_any_monster_die", trigger_count = 0 },
|
||||
[2] = { name = "blossom_progress_finish", config_id = 8000002, event = EventType.EVENT_BLOSSOM_PROGRESS_FINISH, source = "", condition= "", action = "action_blossom_progress_finish", trigger_count = 0 },
|
||||
[4] = { name = "group_load", config_id = 8000004, event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_group_load", trigger_count = 0 },
|
||||
[5] = { name = "group_refresh", config_id = 8000005, event = EventType.EVENT_GROUP_REFRESH, source = "", condition = "", action = "action_group_refresh", trigger_count = 0 },
|
||||
--[6] = { name = "chest_die", config_id = 8000006, event = EventType.EVENT_ANY_GADGET_DIE, source = "", condition = "", action = "action_any_gadget_die", trigger_count = 0 },
|
||||
[7] = { name = "select_option", config_id = 8000007, event = EventType.EVENT_SELECT_OPTION, source = "", condition = "", action = "action_select_option", trigger_count = 0 },
|
||||
[8] = { name = "blossom_chest_die", config_id = 8000008, event = EventType.EVENT_BLOSSOM_CHEST_DIE, source = "", condition = "", action = "action_blossom_chest_die", trigger_count = 0 },
|
||||
|
||||
}
|
||||
|
||||
function Initialize()
|
||||
for k,v in pairs(Tri) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
|
||||
--注入一个blossom的标志位。下次groupload时如果为1,说明玩法已经开始了,不再走一次init
|
||||
table.insert(variables,{ config_id=50000001,name = "HasStarted", value = 0, no_refresh = true})
|
||||
table.insert(variables,{ config_id=50000002,name = "wave", value = 0, no_refresh = true})
|
||||
|
||||
|
||||
|
||||
end
|
||||
|
||||
----------------------------------
|
||||
|
||||
function action_any_monster_die(context, evt)
|
||||
--当怪物死的时候,增加循环营地进度
|
||||
ScriptLib.AddBlossomScheduleProgressByGroupId(context, 0)
|
||||
--如果还有怪物活着,无事发生
|
||||
if ScriptLib.GetGroupMonsterCountByGroupId(context, 0) ~= 0 then
|
||||
return -1
|
||||
end
|
||||
--当前波次怪物死光了,则加载下一波怪物
|
||||
LF_Create_Next_Monster_Wave(context)
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_group_load(context, evt)
|
||||
--group加载时,刷新循环营地
|
||||
ScriptLib.PrintContextLog(context,"BG: Group has been loaded!")
|
||||
ScriptLib.SetGroupVariableValue(context,"GroupCompletion",0)
|
||||
|
||||
--group load时判定一下这个group是否已经开启,如果已经开启则无事发生
|
||||
local has_started = ScriptLib.GetGroupVariableValue(context,"HasStarted")
|
||||
if (has_started == 1) then
|
||||
ScriptLib.PrintContextLog(context,"BG: Group has been started, refresh failed!")
|
||||
return 0
|
||||
end
|
||||
|
||||
ScriptLib.RefreshBlossomGroup(context, { group_id = 0, suite = 1, exclude_prev = true, is_delay_unload = true })
|
||||
LF_Init_Blossom_Group(context)
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_group_refresh(context, evt)
|
||||
|
||||
ScriptLib.PrintContextLog(context,"BG: Group has been refreshed!")
|
||||
|
||||
--group load时判定一下这个group是否已经开启,如果已经开启则无事发生
|
||||
local has_started = ScriptLib.GetGroupVariableValue(context,"HasStarted")
|
||||
if (has_started == 1) then
|
||||
ScriptLib.PrintContextLog(context,"BG: Group has been started, refresh failed!")
|
||||
return 0
|
||||
end
|
||||
|
||||
--group刷新时,初始化整个group
|
||||
LF_Init_Blossom_Group(context)
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
function action_blossom_chest_die(context,evt)
|
||||
--领取完奖励后,刷新循环营地
|
||||
if evt.param1 == defs.gadget_id_chest then
|
||||
ScriptLib.PrintContextLog(context,"BG: blossom has been opened. Refreh the next blossom group")
|
||||
--group重置为没有开始的状态
|
||||
ScriptLib.SetGroupVariableValue(context,"HasStarted",0)
|
||||
ScriptLib.SetGroupVariableValue(context,"wave",0)
|
||||
ScriptLib.RefreshBlossomGroup(context, { group_id = 0, suite = 1, exclude_prev = true })
|
||||
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_select_option(context,evt)
|
||||
--玩家选择选项后,隐藏地脉淤积gadget,清除gadget上的选项,激活第一波怪物
|
||||
ScriptLib.PrintContextLog(context,"BG: Option has been selected! Monster waves start!")
|
||||
ScriptLib.SetGadgetStateByConfigId(context, LF_Get_Blossom_Operator(context), 201)
|
||||
ScriptLib.DelWorktopOptionByGroupId(context,0,LF_Get_Blossom_Operator(context),187)
|
||||
|
||||
|
||||
--所有东西成功刷出来了,将group设置为已开始状态
|
||||
ScriptLib.SetGroupVariableValue(context,"HasStarted",1)
|
||||
LF_Start_Monster_Wave(context)
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
function action_blossom_progress_finish(context,evt)
|
||||
--进度打满以后,创建奖励
|
||||
LF_Create_Reward(context)
|
||||
ScriptLib.SetGroupVariableValue(context,"GroupCompletion",1)
|
||||
return 0
|
||||
end
|
||||
----------------------------------
|
||||
|
||||
function LF_Create_Reward(context)
|
||||
--创建循环营地奖励方法,并将循环营地进度置到reward
|
||||
ScriptLib.PrintContextLog(context,"BG: Monster wave has ended, creating blossom group reward")
|
||||
ScriptLib.SetBlossomScheduleStateByGroupId(context,0,3)
|
||||
ScriptLib.PrintContextLog(context,"BG: Creaing blossom chest!!")
|
||||
ScriptLib.CreateBlossomChestByGroupId(context,0,defs.gadget_id_chest)
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
function LF_Create_Next_Monster_Wave(context)
|
||||
--更新下一波怪物潮的方法,如果已经到了最后一波,则不刷新(此时理论上来说打完应该直接触发blossom group finish)
|
||||
local wave = ScriptLib.GetGroupVariableValue(context,"wave")
|
||||
--local wave = ScriptLib.GetGroupTempValue(context, "wave", {})
|
||||
local nextWave = wave + 1
|
||||
if nextWave+1 > #suites then
|
||||
ScriptLib.PrintContextLog(context, "BG: This is final wave ")
|
||||
else
|
||||
ScriptLib.PrintContextLog(context,"BG: Creating monster wave: "..nextWave)
|
||||
ScriptLib.AddExtraGroupSuite(context, 0, nextWave+1)
|
||||
|
||||
ScriptLib.PrintContextLog(context,"BG: We are trying to load suite : "..nextWave+1)
|
||||
ScriptLib.SetGroupVariableValue(context,"wave",nextWave)
|
||||
--ScriptLib.SetGroupTempValue(context, "wave", nextWave, {})
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function LF_Start_Monster_Wave(context)
|
||||
--启动怪物潮,进入打怪阶段
|
||||
ScriptLib.SetBlossomScheduleStateByGroupId(context, 0, 2)
|
||||
ScriptLib.SetGroupVariableValue(context,"wave",0)
|
||||
--ScriptLib.SetGroupTempValue(context, "wave", 0, {})
|
||||
--加载第一波怪物
|
||||
LF_Create_Next_Monster_Wave(context)
|
||||
end
|
||||
|
||||
|
||||
|
||||
function LF_Init_Blossom_Group(context)
|
||||
--初始化循环营地方法,移除全部的怪物group,并刷新地脉淤积操作台
|
||||
ScriptLib.PrintContextLog(context,"BG: Blossom group is initiating")
|
||||
|
||||
--初始化时,先移除掉所有怪物的suite
|
||||
for i = 2, #suites do
|
||||
ScriptLib.RemoveExtraGroupSuite(context,0,i)
|
||||
end
|
||||
if (LF_Get_Blossom_Operator(context) == -1) then
|
||||
return -1
|
||||
end
|
||||
|
||||
ScriptLib.PrintContextLog(context,"BG: Current operator config id is: "..LF_Get_Blossom_Operator(context))
|
||||
|
||||
--加载地脉淤积的gadget
|
||||
local ret = ScriptLib.CreateGadget(context, {config_id = LF_Get_Blossom_Operator(context)})
|
||||
|
||||
ScriptLib.PrintContextLog(context,"BG: Create worktop result: "..ret)
|
||||
|
||||
--给地脉淤积的gadget增加操作选项
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context,0,LF_Get_Blossom_Operator(context),{187})
|
||||
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
|
||||
function LF_Get_Blossom_Operator(context)
|
||||
--获取当前BlossomGroup的地脉淤积操作台的方法,根据当前的刷新类型,返回不同的操作台
|
||||
|
||||
local operator = {[1]=defs.gadget_id_operator_1,[2]=nil,[3]=defs.gadget_id_operator_2}
|
||||
local refreshType = ScriptLib.GetBlossomRefreshTypeByGroupId(context, 0)
|
||||
if not (refreshType == 1 or refreshType == 3) then
|
||||
return -1
|
||||
end
|
||||
ScriptLib.PrintContextLog(context,"BG: Current blossom group refresh type: "..refreshType)
|
||||
|
||||
return operator[refreshType]
|
||||
end
|
||||
----------------------------------
|
||||
Initialize()
|
||||
185
gdconf/game_data_config/lua/common/V3_3/BrickBreaker.lua
Normal file
185
gdconf/game_data_config/lua/common/V3_3/BrickBreaker.lua
Normal file
@@ -0,0 +1,185 @@
|
||||
---
|
||||
--- Generated by EmmyLua(https://github.com/EmmyLua)
|
||||
--- Created by binghong.shen.
|
||||
--- DateTime: 2022/8/8 16:33
|
||||
---
|
||||
--[[======================================
|
||||
|| filename: BrickBreaker
|
||||
|| owner: binghong.shen
|
||||
|| description: 3.3打砖块活动
|
||||
|| LogName: BrickBreaker
|
||||
|| Protection: [Protection]
|
||||
=======================================]]
|
||||
|
||||
|
||||
|
||||
-- 测试gadget 70290608
|
||||
|
||||
--miscs配置内容
|
||||
--[[
|
||||
|
||||
--传送触发器物件
|
||||
defs.gadget_teleport = 10001
|
||||
--砖块玩法物件
|
||||
defs.gadget_bricks = 10002
|
||||
--空气墙
|
||||
defs.gadget_airWall = 10003
|
||||
--是否是地城
|
||||
defs.isDungeon = 0
|
||||
--地城氛围物件
|
||||
defs.gadget_envLamp = 10004
|
||||
|
||||
defs.envWeather =
|
||||
{
|
||||
[1]=10169,
|
||||
[2]=10170,
|
||||
[3]=10171,
|
||||
}
|
||||
|
||||
|
||||
--地城对应的天气配置
|
||||
local DungeonWeather = {
|
||||
10039,10040,10041,10042
|
||||
}
|
||||
|
||||
local defs = {
|
||||
group_id = 235801002,
|
||||
worktop_id = 123, --操作台对应的操作数
|
||||
air_wall = 2005, --场内空气墙对应的ConfigID
|
||||
minion_fever = 5, --普通怪物死亡增加的热度值
|
||||
game_time = 360, --挑战时间
|
||||
min_monster_count = 5, --场上最少怪物数量
|
||||
max_monster_count = 5, --场上最多怪物数量
|
||||
environment_suite = 4, --环境灯光所在的Suite
|
||||
noswitch_punishment_interval = 30, --不换人开始有惩罚的最小时间间隔
|
||||
num_killed_per_tide = {20, 20, 20, 20, 0} --每组怪物潮对应需要的杀怪数量
|
||||
}
|
||||
|
||||
]]
|
||||
|
||||
|
||||
local local_defs = {
|
||||
worktop_option = 30110,
|
||||
progress_key = 1,
|
||||
team_global_value = "FEVER_LEVEL",
|
||||
team_noswitch_pubishment = "NOSWITCH_PUNISHMENT",
|
||||
team_has_switch = "HAS_SWITCHED_TEAM",
|
||||
burn_effect_level = 2,
|
||||
environment_change_level = 1,
|
||||
base_upgrade_reminder = 358010102,
|
||||
team_noswitch_pubishment_reminder = 144,
|
||||
punish_inAdvance_reminder = 201
|
||||
}
|
||||
|
||||
local Tri = {
|
||||
[1] = { name = "group_load", config_id = 8000001, event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_group_load", trigger_count = 0},
|
||||
[2] = { name = "gadget_talk_done", config_id = 8000002, event = EventType.EVENT_GADGETTALK_DONE, source = "", condition = "", action = "action_gadget_talk_done", trigger_count = 0},
|
||||
[3] = { name = "gallery_pre_start", config_id = 8000003, event = EventType.EVENT_GALLERY_PRE_START, source = "", condition = "", action = "action_gallery_pre_start", trigger_count = 0},
|
||||
[4] = { name = "dungeon_settle", config_id = 8000004, event = EventType.EVENT_DUNGEON_SETTLE, source = "", condition = "", action = "action_dungeon_settle", trigger_count = 0},
|
||||
[5] = { name = "gallery_stop", config_id = 8000005, event = EventType.EVENT_GALLERY_STOP, source = "", condition = "", action = "action_gallery_stop", trigger_count = 0},
|
||||
|
||||
--[2] = { name = "select_option", config_id = 8000002, event = EventType.EVENT_SELECT_OPTION, source = "", condition = "", action = "action_select_option", trigger_count = 0},
|
||||
--[3] = { name = "time_axis_pass", config_id = 8000003, event = EventType.EVENT_TIME_AXIS_PASS, source = "", condition = "", action = "action_time_axis_pass", trigger_count = 0},
|
||||
--[4] = { name = "gallery_progress_pass", config_id = 8000004, event = EventType.EVENT_GALLERY_PROGRESS_PASS, source = "", condition = "", action = "action_gallery_progress_pass", trigger_count = 0},
|
||||
--[6] = { name = "sumo_switch_team", config_id = 8000008, event = EventType.EVENT_SUMO_SWITCH_TEAM_EVENT, source = "", condition = "", action = "action_sumo_switch_team", trigger_count = 0},
|
||||
--[7] = { name = "dungeon_all_avatar_die", config_id = 8000009, event = EventType.EVENT_DUNGEON_ALL_AVATAR_DIE, source = "", condition = "", action = "action_dungeon_all_avatar_die", trigger_count = 0},
|
||||
--[8] = { name = "enter_start_region", config_id = 8000011, event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_enter_start_region", trigger_count = 0},
|
||||
|
||||
}
|
||||
|
||||
function Initialize()
|
||||
for k,v in pairs(Tri) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
|
||||
table.insert(variables,{ config_id=50000003,name = "fever_ratio", value = 1})
|
||||
--用于记录是否已经创建空气墙,防止玩家卡在空气墙外
|
||||
table.insert(variables,{ config_id=50000006,name = "is_air_wall_created", value = 0})
|
||||
end
|
||||
|
||||
------------------------------------------------------------------
|
||||
|
||||
function action_group_load(context,evt)
|
||||
ScriptLib.PrintContextLog(context,"BrickBreaker groupLoad")
|
||||
SLC_SetEnvLevel(context,1)
|
||||
return 0
|
||||
end
|
||||
function action_gadget_talk_done(context,evt)
|
||||
ScriptLib.PrintContextLog(context,"BrickBreaker action_gadget_talk_done")
|
||||
|
||||
local talkName = evt.source_name
|
||||
local talkID = evt.param2
|
||||
if talkID == 6800419 or talkName == 6800419 then
|
||||
ScriptLib.CreateGadget(context, { config_id = defs.gadget_teleport })
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_gallery_pre_start(context,evt)
|
||||
ScriptLib.PrintContextLog(context,"BrickBreaker action_gallery_pre_start")
|
||||
|
||||
local curGallery = evt.param1
|
||||
ScriptLib.SetGroupTempValue(context, "curGallery", curGallery, {})
|
||||
|
||||
if defs then
|
||||
if defs.gadget_bricks then
|
||||
ScriptLib.CreateGadget(context, { config_id = defs.gadget_bricks })
|
||||
end
|
||||
if defs.gadget_airWall then
|
||||
ScriptLib.CreateGadget(context, { config_id = defs.gadget_airWall })
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_dungeon_settle(context,evt)
|
||||
ScriptLib.PrintContextLog(context,"BrickBreaker action_dungeon_settle")
|
||||
|
||||
local curGallery = ScriptLib.GetGroupTempValue(context, "curGallery", {})
|
||||
ScriptLib.StopGallery(context, curGallery, true)
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_gallery_stop(context,evt)
|
||||
ScriptLib.PrintContextLog(context,"BrickBreaker action_gallery_stop")
|
||||
ScriptLib.RemoveEntityByConfigId(context, 0, EntityType.GADGET, defs.gadget_bricks)
|
||||
ScriptLib.RemoveEntityByConfigId(context, 0, EntityType.GADGET, defs.gadget_airWall)
|
||||
SLC_SetEnvLevel(context,1)
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
function SLC_SetEnvLevel(context,value)
|
||||
ScriptLib.PrintContextLog(context,"BrickBreaker SLC_SetEnvLevel In")
|
||||
|
||||
if value and defs.gadget_envLamp then
|
||||
if value == 1 then
|
||||
ScriptLib.PrintContextLog(context,"BrickBreaker SLC_SetEnvLevel 1")
|
||||
ScriptLib.SetGadgetStateByConfigId(context, defs.gadget_envLamp, 0)
|
||||
end
|
||||
if value == 2 then
|
||||
ScriptLib.PrintContextLog(context,"BrickBreaker SLC_SetEnvLevel 2")
|
||||
ScriptLib.SetGadgetStateByConfigId(context, defs.gadget_envLamp, 201)
|
||||
end
|
||||
if value == 3 then
|
||||
ScriptLib.PrintContextLog(context,"BrickBreaker SLC_SetEnvLevel 3")
|
||||
ScriptLib.SetGadgetStateByConfigId(context, defs.gadget_envLamp, 202)
|
||||
end
|
||||
end
|
||||
|
||||
if value and defs.envWeather and defs.envWeather[value] then
|
||||
for _,v in pairs(defs.envWeather) do
|
||||
ScriptLib.SetWeatherAreaState(context, v, 0)
|
||||
end
|
||||
ScriptLib.PrintContextLog(context,"BrickBreaker ChangeWeather "..tostring(defs.envWeather[value]))
|
||||
|
||||
ScriptLib.SetWeatherAreaState(context, defs.envWeather[value], 1)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
------------------------------------------------------------------
|
||||
Initialize()
|
||||
|
||||
680
gdconf/game_data_config/lua/common/V3_3/CoinCollect.lua
Normal file
680
gdconf/game_data_config/lua/common/V3_3/CoinCollect.lua
Normal file
@@ -0,0 +1,680 @@
|
||||
--[[======================================
|
||||
|| filename: CoinCollect
|
||||
|| owner: shuyi.chang
|
||||
|| description: 3.3短距寻物
|
||||
|| LogName: ## TD_CoinCollect:
|
||||
|| Protection:
|
||||
=======================================]]
|
||||
|
||||
--[[
|
||||
local defs =
|
||||
{
|
||||
-- 还剩多少秒的时候出现金币提示光柱
|
||||
hintTime = 30,
|
||||
|
||||
-- 限时金币出现的时长
|
||||
coinTime = 10,
|
||||
|
||||
-- 挑战总时长【不配的话就默认是120】
|
||||
totalTime = 120,
|
||||
|
||||
-- 技能持续时长【不配的话默认是10】
|
||||
skillDuration = 10,
|
||||
|
||||
-- 对应的gallery id
|
||||
galleryId = 99,
|
||||
}
|
||||
|
||||
local defs_miscs =
|
||||
{
|
||||
-- 特殊金币和它们关联的普通金币们,有几个特殊金币就应该有几项
|
||||
specialCoinTable = {
|
||||
-- 每项格式如下
|
||||
[specialCoin_configId] = {coin_configId_01, coin_configId_02, coin_configId_03, ...},
|
||||
},
|
||||
|
||||
}
|
||||
--]]
|
||||
|
||||
-- 注意这个动态group卸载会先于gallery结束,所以不能用event_gallery_stop,保底在group will unload里
|
||||
local extraTriggers =
|
||||
{
|
||||
{ config_id = 50000001, name = "GROUP_LOAD", event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_EVENT_GROUP_LOAD", trigger_count = 0 },
|
||||
{ config_id = 50000002, name = "TIME_AXIS_PASS", event = EventType.EVENT_TIME_AXIS_PASS, source = "", condition = "", action = "action_EVENT_TIME_AXIS_PASS", trigger_count = 0 },
|
||||
-- { config_id = 50000003, name = "GADGET_STATE_CHANGE", event = EventType.EVENT_GADGET_STATE_CHANGE, source = "", condition = "", action = "action_EVENT_GADGET_STATE_CHANGE", trigger_count = 0 },
|
||||
{ config_id = 50000004, name = "ENTER_REGION", event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_EVENT_ENTER_REGION", forbid_guest = false, trigger_count = 0 },
|
||||
-- { config_id = 50000005, name = "VARIABLE_CHANGE_COUNT", event = EventType.EVENT_VARIABLE_CHANGE, source = "collectedCoins", condition = "condition_EVENT_VARIABLE_CHANGE_COUNT", action = "action_EVENT_VARIABLE_CHANGE_COUNT", trigger_count = 0, tag = "99" },
|
||||
-- { config_id = 50000006, name = "SELECT_OPTION", event = EventType.EVENT_SELECT_OPTION, source = "", condition = "", action = "action_EVENT_SELECT_OPTION", trigger_count = 0, },
|
||||
{ config_id = 50000009, name = "VARIABLE_CHANGE", event = EventType.EVENT_VARIABLE_CHANGE, source = "", condition = "", action = "action_EVENT_VARIABLE_CHANGE", trigger_count = 0, },
|
||||
{ config_id = 50000010, name = "GALLERY_START", event = EventType.EVENT_GALLERY_START, source = "", condition = "", action = "action_EVENT_GALLERY_START", trigger_count = 0, },
|
||||
{ config_id = 50000011, name = "LEAVE_REGION", event = EventType.EVENT_LEAVE_REGION, source = "", condition = "", action = "action_EVENT_LEAVE_REGION", trigger_count = 0 },
|
||||
{ config_id = 50000012, name = "GROUP_WILL_UNLOAD", event = EventType.EVENT_GROUP_WILL_UNLOAD, source = "", condition = "", action = "action_EVENT_GROUP_WILL_UNLOAD", trigger_count = 0 },
|
||||
{ config_id = 50000013, name = "MP_ALL_PLAYER_DIE", event = EventType.EVENT_SCENE_MP_PLAY_ALL_AVATAR_DIE, source = "", condition = "", action = "action_EVENT_MP_ALL_PLAYER_DIE", trigger_count = 0 },
|
||||
|
||||
}
|
||||
|
||||
local extraVariables =
|
||||
{
|
||||
{ config_id = 50000101, name = "final", value = 0, no_refresh = false },
|
||||
{ config_id = 50000102, name = "collectedCoins", value = 0, no_refresh = false },
|
||||
{ config_id = 50000103, name = "levelStart", value = 0, no_refresh = false },
|
||||
}
|
||||
|
||||
local coin_gadgetId = 70220131
|
||||
local specialCoin_gadgetId = 70220132
|
||||
|
||||
-- 所有不跟特殊金币挂钩的普通金币
|
||||
local indieCoins = {}
|
||||
|
||||
-- 所有跟特殊金币挂钩的普通金币
|
||||
local tempCoins = {}
|
||||
|
||||
local abilityGroup = "ActivityAbility_CoinCollect_AbilityGroup"
|
||||
|
||||
local totalCoinCount = 0
|
||||
|
||||
local totalTime = 120
|
||||
|
||||
local skillTable =
|
||||
{
|
||||
["coin"] = {name = "coin", duration = 10},
|
||||
["charge"] = {name = "charge", duration = 10},
|
||||
}
|
||||
|
||||
local skillDuration = 10
|
||||
|
||||
local coinState = {
|
||||
["default"] = 0,
|
||||
["show"] = 201,
|
||||
["highlight"] = 901,
|
||||
["special"] = 902,
|
||||
["dead"] = 202,
|
||||
}
|
||||
--================================================================
|
||||
-- Local Functions
|
||||
--================================================================
|
||||
function LF_Initialize_Group(triggers, suites, variables, gadgets, regions)
|
||||
|
||||
-- insert triggers
|
||||
for i = 1, #extraTriggers do
|
||||
table.insert(triggers, extraTriggers[i])
|
||||
end
|
||||
|
||||
-- add triggers to suite
|
||||
for i = 1, #extraTriggers do
|
||||
-- 都放到初始suite 1中
|
||||
table.insert(suites[1].triggers,extraTriggers[i].name)
|
||||
end
|
||||
|
||||
-- insert variables
|
||||
for i = 1, #extraVariables do
|
||||
table.insert(variables, extraVariables[i])
|
||||
end
|
||||
|
||||
local temp = 0
|
||||
for i, v in pairs(defs_miscs.specialCoinTable) do
|
||||
for j = 1, #v do
|
||||
-- 每个限时金币记一下自己属于哪个特殊金币
|
||||
gadgets[v[j]]["specialCoin"] = i
|
||||
|
||||
-- add all temp coins to table
|
||||
table.insert(tempCoins, v[j])
|
||||
end
|
||||
|
||||
-- 每个特殊金币一个group var记录自己的限时金币被吃掉了多少个
|
||||
temp = temp + 1
|
||||
local coinVar = { config_id = 60000000 + temp, name = tostring(i), value = 0, no_refresh = true }
|
||||
table.insert(variables, coinVar)
|
||||
end
|
||||
|
||||
-- add all independent coins to table
|
||||
for i, v in pairs(gadgets) do
|
||||
if v.gadget_id == coin_gadgetId then
|
||||
-- 不能是跟特殊金币关联的普通金币
|
||||
for j = 1, #tempCoins do
|
||||
if v.config_id == tempCoins[j] then
|
||||
break
|
||||
end
|
||||
|
||||
if j == #tempCoins then
|
||||
-- 最后一项还没break,就是它了
|
||||
table.insert(indieCoins, v.config_id)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- add ability group
|
||||
-- regions[defs.maxRegion].team_ability_group_list = {abilityGroup}
|
||||
|
||||
totalCoinCount = #indieCoins + #tempCoins
|
||||
|
||||
-- 处理下挑战时长
|
||||
if defs.totalTime ~= nil then
|
||||
totalTime = defs.totalTime
|
||||
end
|
||||
|
||||
-- 处理下技能时长
|
||||
if defs.skillDuration ~= nil then
|
||||
skillDuration = defs.skillDuration
|
||||
end
|
||||
end
|
||||
|
||||
function LF_PrintList(context, name, list)
|
||||
local emptyStr = ""
|
||||
for k, v in pairs(list) do
|
||||
emptyStr = emptyStr..v..", "
|
||||
end
|
||||
ScriptLib.PrintContextLog(context, "## TD_CoinCollect: list name = "..name..", list content = "..emptyStr)
|
||||
end
|
||||
|
||||
-- 从所有201金币中随机1个金币(特殊金币+不和特殊金币关联的普通金币)
|
||||
function LF_RandomCoin(context)
|
||||
local tempTable = {}
|
||||
-- 特殊金币
|
||||
for i, v in pairs(defs_miscs.specialCoinTable) do
|
||||
if ScriptLib.GetGadgetStateByConfigId(context, base_info.group_id, i) == coinState.show then
|
||||
table.insert(tempTable, i)
|
||||
end
|
||||
end
|
||||
|
||||
-- 不和特殊金币关联的普通金币
|
||||
for i = 1, #indieCoins do
|
||||
if ScriptLib.GetGadgetStateByConfigId(context, base_info.group_id, indieCoins[i]) == coinState.show then
|
||||
table.insert(tempTable, indieCoins[i])
|
||||
end
|
||||
end
|
||||
|
||||
LF_PrintList(context, "randomCoins", tempTable)
|
||||
|
||||
if #tempTable == 0 then
|
||||
ScriptLib.PrintContextLog(context, "## TD_CoinCollect: no 201 coins")
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
math.randomseed(tostring(ScriptLib.GetServerTime(context)):reverse():sub(1, 6))
|
||||
local coinId = tempTable[math.random(#tempTable)]
|
||||
|
||||
ScriptLib.PrintContextLog(context, "## TD_CoinCollect: LF_RandomCoin is called, coin id = "..coinId)
|
||||
|
||||
return coinId
|
||||
end
|
||||
|
||||
function LF_ThreeRandomCoins(context)
|
||||
ScriptLib.PrintContextLog(context, "## TD_CoinCollect: LF_ThreeRandomCoins is called")
|
||||
|
||||
local tempTable = {}
|
||||
-- 特殊金币
|
||||
for i, v in pairs(defs_miscs.specialCoinTable) do
|
||||
if ScriptLib.GetGadgetStateByConfigId(context, base_info.group_id, i) == coinState.show then
|
||||
table.insert(tempTable, i)
|
||||
end
|
||||
end
|
||||
|
||||
-- 不和特殊金币关联的普通金币
|
||||
for i = 1, #indieCoins do
|
||||
if ScriptLib.GetGadgetStateByConfigId(context, base_info.group_id, indieCoins[i]) == coinState.show then
|
||||
table.insert(tempTable, indieCoins[i])
|
||||
end
|
||||
end
|
||||
|
||||
LF_PrintList(context, "201Coins", tempTable)
|
||||
|
||||
-- 要是不足三个金币在201,有几个用几个
|
||||
if #tempTable <= 3 then
|
||||
return tempTable
|
||||
end
|
||||
|
||||
-- 多余三个
|
||||
math.randomseed(tostring(ScriptLib.GetServerTime(context)):reverse():sub(1, 6))
|
||||
local middle = math.random(#tempTable)
|
||||
if middle <= 1 then
|
||||
-- 随到了1,取2
|
||||
middle = 2
|
||||
elseif middle == #tempTable then
|
||||
-- 随到了最后一项,取倒数第二项
|
||||
middle = #tempTable - 1
|
||||
end
|
||||
local middleId = tempTable[middle]
|
||||
|
||||
local top = math.random(middle - 1)
|
||||
local topId = tempTable[top]
|
||||
|
||||
local bottom = math.random(middle + 1, #tempTable)
|
||||
local bottomId = tempTable[bottom]
|
||||
|
||||
local returnTable = {}
|
||||
if topId ~= 0 then
|
||||
table.insert(returnTable, topId)
|
||||
end
|
||||
if middleId ~= 0 then
|
||||
table.insert(returnTable, middleId)
|
||||
end
|
||||
if bottomId ~= 0 then
|
||||
table.insert(returnTable, bottomId)
|
||||
end
|
||||
LF_PrintList(context, "hintCoins", returnTable)
|
||||
return returnTable
|
||||
end
|
||||
|
||||
function LF_ResetGroup(context, start)
|
||||
|
||||
for i, v in pairs(defs_miscs.specialCoinTable) do
|
||||
ScriptLib.SetGroupVariableValue(context, tostring(i), 0)
|
||||
end
|
||||
|
||||
if start == false then
|
||||
-- 结束的时候不设置任何状态
|
||||
return
|
||||
end
|
||||
|
||||
-- 重置所有金币
|
||||
-- 保底把所有temp coins设置为【显示】状态
|
||||
for i = 1, #tempCoins do
|
||||
ScriptLib.SetGadgetStateByConfigId(context, tempCoins[i], coinState.show)
|
||||
end
|
||||
|
||||
-- 保底把所有indie coins设置为显示状态
|
||||
for i = 1, #indieCoins do
|
||||
ScriptLib.SetGadgetStateByConfigId(context, indieCoins[i], coinState.show)
|
||||
end
|
||||
|
||||
-- 把特殊金币设置为显示状态
|
||||
for k, v in pairs(defs_miscs.specialCoinTable) do
|
||||
ScriptLib.SetGadgetStateByConfigId(context, k, coinState.show)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function LF_ResetVariables(context, start)
|
||||
-- 各种变量都归零
|
||||
ScriptLib.SetGroupVariableValue(context, "final", 0)
|
||||
ScriptLib.SetGroupVariableValue(context, "collectedCoins", 0)
|
||||
ScriptLib.SetGroupVariableValue(context, "levelStart", 0)
|
||||
|
||||
ScriptLib.SetGroupTempValue(context, "lastCoin", 0, {})
|
||||
|
||||
-- 所有人的各种sgv都归零
|
||||
local value = 0
|
||||
if start == true then
|
||||
value = 0
|
||||
elseif start == false then
|
||||
value = -3
|
||||
end
|
||||
|
||||
local uidList = ScriptLib.GetSceneUidList(context)
|
||||
for i = 1, #uidList do
|
||||
-- 保底,value是负数的话能量一定不会随时间增长
|
||||
ScriptLib.SetTeamServerGlobalValue(context, uidList[i], "SGV_CoinCollect_Skill_Charge", value)
|
||||
ScriptLib.SetTeamServerGlobalValue(context, uidList[i], "SGV_CoinCollect_Skill_Coin", 0)
|
||||
ScriptLib.SetTeamServerGlobalValue(context, uidList[i], "SGV_CoinCollect_Widget_SkillEnabled", 0)
|
||||
|
||||
-- 小道具初始给100能量,结束的时候能量清空(上限是200,-200肯定能清空)
|
||||
local ret = ScriptLib.AddTeamEntityGlobalFloatValue(context, {uidList[i]}, "GV_CoinCollect_Widget_Energy", 100 * (value + 1))
|
||||
ScriptLib.PrintContextLog(context, "## TD_CoinCollect: GV_CoinCollect_Widget_Energy is set to "..100 * (value + 1)..", uid = "..uidList[i]..", ret = "..ret)
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function LF_LevelStart(context, start)
|
||||
|
||||
LF_ResetVariables(context, start)
|
||||
LF_ResetGroup(context, start)
|
||||
|
||||
if start == true then
|
||||
-- 设置vision type
|
||||
local uid_list = ScriptLib.GetSceneUidList(context)
|
||||
ScriptLib.SetPlayerGroupVisionType(context, uid_list, {0})
|
||||
|
||||
elseif start == false then
|
||||
-- vision type恢复正常
|
||||
local uid_list = ScriptLib.GetSceneUidList(context)
|
||||
ScriptLib.SetPlayerGroupVisionType(context, uid_list, {1})
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function LF_CheckSkill(context, uid)
|
||||
local list = ScriptLib.GetCoinCollectGalleryPlayerSkillInfo(context, uid, defs.galleryId)
|
||||
LF_PrintList(context, "skillList"..uid, list)
|
||||
|
||||
if #list == 0 then
|
||||
ScriptLib.PrintContextLog(context, "## TD_CoinCollect: WARNING!! no player skill data")
|
||||
return 0
|
||||
end
|
||||
|
||||
ScriptLib.SetGroupTempValue(context, "skill_"..uid, list[1], {})
|
||||
ScriptLib.SetGroupTempValue(context, "charge_"..uid, list[2], {})
|
||||
ScriptLib.SetGroupTempValue(context, "coin_"..uid, list[3], {})
|
||||
ScriptLib.SetGroupTempValue(context, "times_"..uid, 0, {})
|
||||
|
||||
ScriptLib.PrintContextLog(context, "## TD_CoinCollect: LF_CheckSkill is called, uid = "..uid..", skill_id = "..list[1]..", charge = "..list[2]..", coin = "..list[3])
|
||||
|
||||
end
|
||||
|
||||
|
||||
function LF_GetTableLength(t)
|
||||
local count = 0
|
||||
for _ in pairs(t) do count = count + 1 end
|
||||
return count
|
||||
end
|
||||
|
||||
--================================================================
|
||||
-- Triggers
|
||||
--================================================================
|
||||
function action_EVENT_GROUP_LOAD(context, evt)
|
||||
ScriptLib.PrintContextLog(context, "## TD_CoinCollect: group is loaded")
|
||||
-- 打印一下各种变量
|
||||
LF_PrintList(context, "tempCoins", tempCoins)
|
||||
LF_PrintList(context, "indieCoins", indieCoins)
|
||||
ScriptLib.PrintContextLog(context, "## TD_CoinCollect: total coins = "..totalCoinCount)
|
||||
|
||||
-- 每个玩家记三个temp var给小道具技能
|
||||
local uid_list = ScriptLib.GetSceneUidList(context)
|
||||
for i = 1, #uid_list do
|
||||
ScriptLib.SetGroupTempValue(context, "skill_"..uid_list[i], 0, {})
|
||||
ScriptLib.SetGroupTempValue(context, "charge_"..uid_list[i], 0, {})
|
||||
ScriptLib.SetGroupTempValue(context, "coin_"..uid_list[i], 0, {})
|
||||
|
||||
end
|
||||
|
||||
-- 初始化其他group temp var
|
||||
ScriptLib.SetGroupTempValue(context, "galleryStart", 0, {})
|
||||
|
||||
-- 气球默认0不出现,这个时候就要设置气球状态了!
|
||||
LF_ResetGroup(context, true)
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_EVENT_GROUP_WILL_UNLOAD(context, evt)
|
||||
ScriptLib.PrintContextLog(context, "## TD_CoinCollect: group will unload")
|
||||
-- 埋点:每个玩家用了多少次技能
|
||||
local transaction = ScriptLib.GetGalleryTransaction(context, defs.galleryId)
|
||||
local uidList = ScriptLib.GetSceneUidList(context)
|
||||
for i = 1, #uidList do
|
||||
local skill_id = ScriptLib.GetGroupTempValue(context, "skill_"..uidList[i], {})
|
||||
local times = ScriptLib.GetGroupTempValue(context, "times_"..uidList[i], {})
|
||||
ScriptLib.PrintContextLog(context,"## TD_CoinCollect: transaction = "..transaction..
|
||||
", skill_id = "..skill_id..", times = "..times..", gallery_id = "..defs.galleryId)
|
||||
ScriptLib.MarkGroupLuaAction(context, "CoinCollect_1", transaction,
|
||||
{["gallery_id"] = defs.galleryId, ["skill_id"] = skill_id, ["times"]= times})
|
||||
end
|
||||
|
||||
-- 保底
|
||||
LF_LevelStart(context, false)
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
function action_EVENT_ENTER_REGION(context, evt)
|
||||
ScriptLib.PrintContextLog(context, "## TD_CoinCollect: player enters region")
|
||||
-- 玩家加载时间过长,可能会导致gallery开启后才enter scene(大世界均可传送),如果enter scene的时候gallery已经开了,再统计一次技能
|
||||
if ScriptLib.GetGroupTempValue(context, "galleryStart", {}) == 1 then
|
||||
LF_CheckSkill(context, context.uid)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_EVENT_LEAVE_REGION(context, evt)
|
||||
ScriptLib.PrintContextLog(context, "## TD_CoinCollect: player leaves region")
|
||||
|
||||
LF_LevelStart(context, false)
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_EVENT_TIME_AXIS_PASS(context, evt)
|
||||
local timeProcess = evt.param1
|
||||
ScriptLib.PrintContextLog(context, "## TD_CoinCollect: time axis "..evt.source_name..", stage "..timeProcess.. " is finished")
|
||||
|
||||
if evt.source_name == "levelCountDown" then
|
||||
-- 随机若干普通金币和特殊金币光柱提示
|
||||
ScriptLib.SetGroupVariableValue(context, "final", 1)
|
||||
ScriptLib.ShowReminder(context, 400902)
|
||||
local randomCoins = LF_ThreeRandomCoins(context)
|
||||
for i = 1, #randomCoins do
|
||||
ScriptLib.SetGroupGadgetStateByConfigId(context, base_info.group_id, randomCoins[i], coinState.highlight)
|
||||
|
||||
-- 在对应位置生成一个雷达显示专用物件
|
||||
if gadgets[randomCoins[i]] ~= nil then
|
||||
local pos = gadgets[randomCoins[i]].pos
|
||||
local rot = gadgets[randomCoins[i]].rot
|
||||
ScriptLib.CreateGadgetByParamTable(context, {config_id = bait, pos = pos, rot = rot})
|
||||
end
|
||||
end
|
||||
|
||||
elseif string.sub(evt.source_name, 1, 12) == "specialCoin_" then
|
||||
-- 所有201限时金币都消失回到0,特殊金币重新出现
|
||||
local configId = tonumber(string.sub(evt.source_name, 13))
|
||||
local tempCoins = defs_miscs.specialCoinTable[configId]
|
||||
ScriptLib.SetGroupGadgetStateByConfigId(context, base_info.group_id, configId, coinState.show)
|
||||
for i = 1, #tempCoins do
|
||||
-- 还在902的金币消失
|
||||
if ScriptLib.GetGadgetStateByConfigId(context, base_info.group_id, tempCoins[i]) == coinState.special then
|
||||
ScriptLib.SetGroupGadgetStateByConfigId(context, base_info.group_id, tempCoins[i], 0)
|
||||
end
|
||||
end
|
||||
else
|
||||
-- 技能结束
|
||||
local uid = tonumber(evt.source_name)
|
||||
if uid == nil then
|
||||
ScriptLib.PrintContextLog(context, "## TD_CoinCollect: WARNING!!! no valid uid when widget skill is supposed to end")
|
||||
return 0
|
||||
end
|
||||
|
||||
-- 不在乎这个技能有没有金币和充能,都可以归零
|
||||
ScriptLib.SetTeamServerGlobalValue(context, uid, "SGV_CoinCollect_Skill_Charge", 0)
|
||||
ScriptLib.SetTeamServerGlobalValue(context, uid, "SGV_CoinCollect_Skill_Coin", 0)
|
||||
ScriptLib.SetTeamServerGlobalValue(context, uid, "SGV_CoinCollect_Widget_SkillEnabled", 0)
|
||||
|
||||
ScriptLib.PrintContextLog(context, "## TD_CoinCollect: uid = "..uid..", skill end")
|
||||
-- elseif string.sub(evt.source_name, 1, 4) == "coin" then
|
||||
-- -- 金币技能结束
|
||||
-- local uid = tonumber(string.gsub(evt.source_name, "coin_", ""))
|
||||
|
||||
-- if uid == nil then
|
||||
-- ScriptLib.PrintContextLog(context, "## TD_CoinCollect: WARNING!!! no valid uid when coin skill is supposed to end")
|
||||
-- return 0
|
||||
-- end
|
||||
|
||||
-- ScriptLib.SetTeamServerGlobalValue(context, uid, "SGV_CoinCollect_Skill_Coin", 0)
|
||||
-- ScriptLib.PrintContextLog(context, "## TD_CoinCollect: uid = "..uid..", skill = coin, end")
|
||||
|
||||
-- elseif string.sub(evt.source_name, 1, 6) == "charge" then
|
||||
-- -- 充能技能结束
|
||||
-- local uid = tonumber(string.gsub(evt.source_name, "charge_", ""))
|
||||
|
||||
-- if uid == nil then
|
||||
-- ScriptLib.PrintContextLog(context, "## TD_CoinCollect: WARNING!!! no valid uid when charge skill is supposed to end")
|
||||
-- return 0
|
||||
-- end
|
||||
|
||||
-- ScriptLib.SetTeamServerGlobalValue(context, uid, "SGV_CoinCollect_Skill_Charge", 0)
|
||||
-- ScriptLib.PrintContextLog(context, "## TD_CoinCollect: uid = "..uid..", skill = charge, end")
|
||||
end
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
-- function condition_EVENT_VARIABLE_CHANGE_COUNT(context, evt)
|
||||
-- if evt.param2 ~= evt.param1 then return true end
|
||||
-- return false
|
||||
-- end
|
||||
|
||||
-- function action_EVENT_VARIABLE_CHANGE_COUNT(context, evt)
|
||||
-- ScriptLib.PrintContextLog(context, "## TD_CoinCollect: "..evt.source_name.." changes from "..evt.param2.." to ".. evt.param1)
|
||||
|
||||
-- return 0
|
||||
-- end
|
||||
|
||||
function action_EVENT_VARIABLE_CHANGE(context, evt)
|
||||
ScriptLib.PrintContextLog(context, "## TD_CoinCollect: "..evt.source_name.." changes from "..evt.param2.." to ".. evt.param1)
|
||||
|
||||
if evt.param1 == evt.param2 then
|
||||
return 0
|
||||
end
|
||||
|
||||
if evt.param1 == 1 and evt.source_name == "levelStart" then
|
||||
|
||||
-- todo 应该服务器开启gallery,暂时先lua这里手动开
|
||||
local ret = ScriptLib.StartGallery(context, defs.galleryId)
|
||||
ScriptLib.PrintContextLog(context, "## TD_CoinCollect: start gallery = "..defs.galleryId..", ret = "..ret)
|
||||
|
||||
end
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_EVENT_GALLERY_START(context, evt)
|
||||
ScriptLib.PrintContextLog(context, "## TD_CoinCollect: gallery = "..evt.param1.." starts")
|
||||
|
||||
ScriptLib.SetGroupTempValue(context, "galleryStart", 1, {})
|
||||
|
||||
-- 重置变量,小道具初始给100,所有金币都显示
|
||||
LF_LevelStart(context, true)
|
||||
|
||||
-- gallery开启后开始时间轴计时
|
||||
ScriptLib.InitTimeAxis(context, "levelCountDown", {totalTime - defs.hintTime, totalTime}, false)
|
||||
|
||||
-- 把所有temp coins设置为【隐藏】状态
|
||||
for i = 1, #tempCoins do
|
||||
ScriptLib.SetGadgetStateByConfigId(context, tempCoins[i], coinState.default)
|
||||
end
|
||||
|
||||
-- -- todo 应该gallery自带左侧进度显示,客户端还没接,先用挑战代替
|
||||
-- ScriptLib.StartChallenge(context, defs.challengeId, defs.challengeId, {totalTime, 3, 99, totalCoinCount})
|
||||
|
||||
-- 判断此局使用的技能
|
||||
local uid_list = ScriptLib.GetSceneUidList(context)
|
||||
for i = 1, #uid_list do
|
||||
LF_CheckSkill(context, uid_list[i])
|
||||
end
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_EVENT_MP_ALL_PLAYER_DIE(context, evt)
|
||||
ScriptLib.PrintContextLog(context, "## TD_CoinCollect: all players die in mp mode")
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
|
||||
--================================================================
|
||||
-- SLCs
|
||||
--================================================================
|
||||
function SLC_Player_Approach_Coin(context, param1, param2)
|
||||
-- param1是金币的类型,param2
|
||||
local configId = ScriptLib.GetGadgetConfigId(context, { gadget_eid = context.target_entity_id })
|
||||
local gadgetState = ScriptLib.GetGadgetStateByConfigId(context, base_info.group_id, configId)
|
||||
if configId == 0 then
|
||||
ScriptLib.PrintContextLog(context, "## TD_CoinCollect: SLC_Player_Approach_Coin is called, configId = "..configId..", empty config id, return immediately")
|
||||
return 0
|
||||
end
|
||||
|
||||
if gadgets[configId] == nil or ScriptLib.CheckIsInGroup(context, 0, configId) == false then
|
||||
ScriptLib.PrintContextLog(context, "## TD_CoinCollect: SLC_Player_Approach_Coin is called, configId = "..configId..", cannot find entity in group, return immediately")
|
||||
return 0
|
||||
end
|
||||
|
||||
if gadgets[configId].gadget_id ~= coin_gadgetId and gadgets[configId].gadget_id ~= specialCoin_gadgetId then
|
||||
ScriptLib.PrintContextLog(context, "## TD_CoinCollect: SLC_Player_Approach_Coin is called, configId = "..configId..", illegal gadget id, return immediately")
|
||||
return 0
|
||||
end
|
||||
|
||||
ScriptLib.PrintContextLog(context, "## TD_CoinCollect: SLC_Player_Approach_Coin is called, configId = "..configId)
|
||||
|
||||
-- 1普通金币,2特殊金币
|
||||
if param1 == 1 then
|
||||
-- ScriptLib.SetGroupGadgetStateByConfigId(context, base_info.group_id, configId, 202)
|
||||
ScriptLib.KillEntityByConfigId(context, { config_id = configId })
|
||||
|
||||
|
||||
-- todo 通知gallery修改计分,暂时先用挑战做了
|
||||
ScriptLib.ChangeGroupVariableValue(context, "collectedCoins", 1)
|
||||
local collectedCoins = ScriptLib.GetGroupVariableValue(context, "collectedCoins")
|
||||
|
||||
-- param2是消耗了多少时间
|
||||
-- local timePassed = totalTime - param2/1000
|
||||
local timePassed = param2/1000
|
||||
ScriptLib.UpdatePlayerGalleryScore(context, defs.galleryId, {["coin_collect_num"] = collectedCoins, ["last_collect_coin_left_time"] = timePassed})
|
||||
ScriptLib.PrintContextLog(context, "## TD_CoinCollect: a coin is picked up, gallery score: coin_collect_num = "..collectedCoins..", last_collect_coin_left_time = "..timePassed)
|
||||
|
||||
-- 如果是特殊金币关联的限时金币
|
||||
local specialCoin_configId = gadgets[configId].specialCoin
|
||||
if specialCoin_configId ~= nil then
|
||||
-- if evt.param3 == 902 then
|
||||
ScriptLib.ChangeGroupVariableValue(context, tostring(specialCoin_configId), 1)
|
||||
|
||||
-- 如果某一个特殊金币周围的限时金币都被拾取了,关联的特殊金币消失,时间轴取消(不能把关联的限时金币重置回来了)
|
||||
if ScriptLib.GetGroupVariableValue(context, tostring(specialCoin_configId)) == #defs_miscs.specialCoinTable[specialCoin_configId] then
|
||||
ScriptLib.SetGroupGadgetStateByConfigId(context, base_info.group_id, specialCoin_configId, coinState.dead)
|
||||
ScriptLib.EndTimeAxis(context, "specialCoin_"..specialCoin_configId)
|
||||
end
|
||||
end
|
||||
|
||||
-- 如果已经吃完所有金币,直接触发gallery成功结算
|
||||
if collectedCoins >= totalCoinCount then
|
||||
-- true是fail
|
||||
ScriptLib.StopGallery(context, defs.galleryId, false)
|
||||
end
|
||||
elseif param1 == 2 then
|
||||
-- 2特殊金币,特殊金币消失,通知这个特殊金币关联的限时普通金币出现
|
||||
ScriptLib.SetGroupGadgetStateByConfigId(context, base_info.group_id, configId, coinState.special)
|
||||
|
||||
local tempCoins = defs_miscs.specialCoinTable[configId]
|
||||
for i = 1, #tempCoins do
|
||||
ScriptLib.SetGroupGadgetStateByConfigId(context, base_info.group_id, tempCoins[i], coinState.special)
|
||||
ScriptLib.InitTimeAxis(context, "specialCoin_"..configId, {defs.coinTime}, false)
|
||||
end
|
||||
end
|
||||
|
||||
-- 如果是最后高亮提示时刻,吃掉一个高亮金币就得再随机一个出来
|
||||
if gadgetState == coinState.highlight and ScriptLib.GetGroupVariableValue(context, "final") == 1 then
|
||||
ScriptLib.SetGroupGadgetStateByConfigId(context, base_info.group_id, LF_RandomCoin(context), coinState.highlight)
|
||||
end
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
function SLC_CoinCollect_WidgetUsed(context)
|
||||
|
||||
-- 使用了一次小道具,需要判断是否需要修改小道具tick速度和金币拾取范围(别的技能的开关是SGV_CoinCollect_Widget_SkillEnabled)
|
||||
local coin = ScriptLib.GetGroupTempValue(context, "coin_"..context.uid,{})
|
||||
local charge = ScriptLib.GetGroupTempValue(context, "charge_"..context.uid,{})
|
||||
ScriptLib.PrintContextLog(context, "## TD_CoinCollect: SLC_CoinCollect_WidgetUsed is called, uid = "..context.uid..", coin = "..coin..", charge = "..charge)
|
||||
|
||||
local times = ScriptLib.GetGroupTempValue(context, "times_"..context.uid, {})
|
||||
ScriptLib.SetGroupTempValue(context, "times_"..context.uid, times + 1, {})
|
||||
|
||||
if coin == 1 then
|
||||
-- 能扩大金币范围
|
||||
ScriptLib.SetTeamServerGlobalValue(context, context.uid, "SGV_CoinCollect_Skill_Coin", 1)
|
||||
-- ScriptLib.InitTimeAxis(context, "coin_"..context.uid, {skillTable.coin.duration}, false)
|
||||
end
|
||||
|
||||
if charge == 1 then
|
||||
-- 充能加速
|
||||
ScriptLib.SetTeamServerGlobalValue(context, context.uid, "SGV_CoinCollect_Skill_Charge", 1)
|
||||
-- ScriptLib.InitTimeAxis(context, "charge_"..context.uid, {skillTable.coin.duration}, false)
|
||||
end
|
||||
|
||||
-- 其他战斗负责的技能,只听这个sgv控制
|
||||
local ret = ScriptLib.SetTeamServerGlobalValue(context, context.uid, "SGV_CoinCollect_Widget_SkillEnabled", 1)
|
||||
-- ScriptLib.PrintContextLog(context, "## TD_CoinCollect: SGV_CoinCollect_Widget_SkillEnabled is set to 1, ret = "..ret)
|
||||
|
||||
-- 据说所有技能持续时长是一致的,只起一个时间轴统一管了
|
||||
ScriptLib.InitTimeAxis(context, tostring(context.uid), {skillDuration}, false)
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
--================================================================
|
||||
-- Initialization
|
||||
--================================================================
|
||||
LF_Initialize_Group(triggers, suites, variables, gadgets, regions)
|
||||
@@ -0,0 +1,840 @@
|
||||
--[[======================================
|
||||
|| filename: HideAndSeek_Gallery_V3
|
||||
|| owner: shuyi.chang
|
||||
|| description: 风行迷踪三期
|
||||
|| LogName: ## HideAndSeek_V3
|
||||
|| Protection: [Protection]
|
||||
=======================================]]
|
||||
|
||||
--[[
|
||||
|
||||
local defs =
|
||||
{
|
||||
gadget_prison = gadget_id,
|
||||
duration = 240,
|
||||
rampage_time = 40,
|
||||
|
||||
-- 用于固定lod 1的region,千万不能填错,填错了一定会炸服务器
|
||||
eye_point = region_id,
|
||||
}
|
||||
|
||||
local energy_info =
|
||||
{
|
||||
[1] = { time = 80, step = {-30,30}, points = {1,2,3,4,5,6}},
|
||||
[2] = { time = 160, step = {-30,30}, points = {1,2,3,4,5,6}}
|
||||
}
|
||||
|
||||
-- 这个group对应的图用哪些,这里就填哪些
|
||||
local disguiseList = {1, 2, 3}
|
||||
|
||||
--]]
|
||||
|
||||
--初始化给的state,V2开始全部由SGV实现
|
||||
local HS_State = {
|
||||
["Play"] = { name = "SGV_HideAndSeek_PlayerState_Play", value = 3 },
|
||||
["Visible"] = { name = "SGV_HideAndSeek_PlayerState_Visible", value = 0 },
|
||||
["OnMap"] = { name = "SGV_HideAndSeek_PlayerState_OnMap", value = 0 },
|
||||
["Moveable"] = { name = "SGV_HideAndSeek_PlayerState_Moveable", value = 0 },
|
||||
["Transfer"] = { name = "SGV_HideAndSeek_PlayerState_Transfer", value = 0 },
|
||||
["TransferCache"] = { name = "SGV_HideAndSeek_PlayerState_TransferCache", value = 0},
|
||||
["UltraMark"] = { name = "SGV_Is_In_UltraMark", value = 0 },
|
||||
["GlobalSight"] = { name = "SGV_Is_In_GlobalSight", value = 0 },
|
||||
["SuperPrison"] = { name = "SGV_Is_In_SuperPrison", value = 0 },
|
||||
["Rampage"] = { name = "SGV_Is_In_Rampage", value = 0 },
|
||||
["Dead"] = { name = "SGV_HideAndSeek_PlayerState_Dead", value = 0},
|
||||
["Is_Detected"] = { name = "SGV_HideAndSeek_PlayerState_Is_Detected", value = 0},
|
||||
-- ===========================【三期新增】隐身诱饵造成的隐身状态==========================
|
||||
["Visible_Bait"] = { name = "SGV_HideAndSeek_PlayerState_Visible_Bait", value = 0},
|
||||
["Visible_Mark"] = { name = "SGV_HideSeek_Real_Invisible_Mark", value = 0},
|
||||
}
|
||||
|
||||
local skill_info = {
|
||||
["HideAndSeek_Skill_CatchPrey"] = { radius = 4 },
|
||||
["HideAndSeek_Skill_Guide"] = { radius = 500 },
|
||||
["HideAndSeek_Skill_Detect_F"] = { radius = 10 },
|
||||
["HideAndSeek_Skill_UltraMark"] = { radius = 500, duration = 60 },
|
||||
["HideAndSeek_Skill_GlobalSight"] = { radius = 500, duration = 20 },
|
||||
["HideAndSeek_Skill_SuperPrison"] = { radius = 500, duration = 40 },
|
||||
-- ===========================【三期新增】隐身诱饵==========================
|
||||
["HideAndSeek_Skill_InvisibleBait_Check"] = { radius = 6, duration = 40 },
|
||||
-- ===========================【三期新增】四方八方之网==========================
|
||||
["HideAndSeek_Skill_HunterNet"] = { radius = 12 },
|
||||
}
|
||||
|
||||
local hunter_win_by_EX = 30
|
||||
local hunter_win_in_time = 120
|
||||
local hunter_catch_by_guide = 10
|
||||
local final_time = 180 --抓捕阶段第180秒后为决胜时间,猎手在该时间内抓两人,记录翻牌
|
||||
|
||||
local map_info = {
|
||||
--一期
|
||||
[1001003] = { name = "QingCe", list = {1,2,3} },
|
||||
[1001022] = { name = "QingQuan", list = {4,5} },
|
||||
[1001004] = { name = "WuWang", list = {4,8} },
|
||||
[1001002] = { name = "JiuZhuang", list = {7,8} },
|
||||
[1001023] = { name = "XueShan", list = {4,8} },
|
||||
--二期地图
|
||||
[1001006] = { name = "test_1", list = {1,2,3} },--轻策庄二期
|
||||
[1001007] = { name = "test_2", list = {4,8} },
|
||||
[1001008] = { name = "test_3", list = {4,8} },
|
||||
[1001009] = { name = "test_4", list = {19,17,18,20} },--离岛
|
||||
[1001010] = { name = "test_5", list = {4,8} },
|
||||
[1001011] = { name = "test_6", list = {11,12,13} },--神里
|
||||
[1001012] = { name = "test_7", list = {14,11,15} },--绯木
|
||||
[1001013] = { name = "test_8", list = {16,17,18} },--九条
|
||||
[1001014] = { name = "test_9", list = {4,8} },
|
||||
[1001015] = { name = "test_10", list = {4,8} },
|
||||
[1001015] = { name = "test_11", list = {4,21} },--初始林地
|
||||
[1001016] = { name = "test_12", list = {4,8} },
|
||||
[1001017] = { name = "test_13", list = {4,8} },
|
||||
[1001018] = { name = "test_14", list = {4,8} },
|
||||
[1001019] = { name = "test_15", list = {4,21,22} },--璃月遗迹
|
||||
[1001020] = { name = "test_16", list = {4,8} },
|
||||
[1001021] = { name = "test_17", list = {4,8} },
|
||||
[1001026] = { name = "test_18", list = {7,8,23} },--酒庄
|
||||
--【三期新增】三期地图
|
||||
[1001027] = { name = "CengYan", list = {21,18,13} },--层岩
|
||||
[1001028] = { name = "HaiYueChi", list = {21,18,13} },--海月池
|
||||
[1001029] = { name = "ShanHuGong", list = {21,18,13} },--珊瑚宫
|
||||
[1001030] = { name = "GanTian", list = {20,11,15} },--绀田村
|
||||
[1001031] = { name = "QingCeZhuang", list = {21,18,2} },--轻策庄
|
||||
[1001032] = { name = "AuMoSi", list = {21,18,13} },--奥摩斯港
|
||||
[1001033] = { name = "ChanNaYuan", list = {21,18,13} },--禅那园
|
||||
[1001034] = { name = "KaSaZhaLai", list = {21,18,13} },--卡萨扎莱
|
||||
[1001035] = { name = "WeiMoZhuang", list = {21,18,13} },--维摩庄
|
||||
[1001036] = { name = "DaBaZha", list = {21,18,13} },--大巴扎
|
||||
|
||||
}
|
||||
|
||||
-- 上面那些变身物件的对应关系
|
||||
-- 1稻草人蓝,2稻草人红,3枯木,4丘丘人木箱,5草垛,6鬼火,7小路灯,8木桶,9火仙灵,10龙血矿石,
|
||||
-- 11木盆,12水桶,13纸灯,14咸菜缸,15泡菜缸,16稻草靶子,17经典木桶,18经典木箱,19米袋子,20小板凳,21qq人木桶,22璃月石灯,23凳子
|
||||
-- 24层岩巨渊木箱,25竖木桶,26横木桶,27石块,28枯木,29珊瑚,30灯柱,31稻妻陶罐,32大酒坛,33璃月木箱,34须弥木箱,35竹筐,36须弥路灯,37营地竖木桶,38营地横木桶,39营地罐子
|
||||
|
||||
--玩法中开启的天气
|
||||
local weather_id_list = {3151}
|
||||
|
||||
local Tri = {
|
||||
[1]={ name = "gallery_stop", config_id = 8000001, event = EventType.EVENT_GALLERY_STOP, source = "", condition = "", action = "action_gallery_stop", trigger_count = 0},
|
||||
[2]={ name = "challenge_success", config_id = 8000003, event = EventType.EVENT_CHALLENGE_SUCCESS, source = "", condition = "", action = "action_challenge_success", trigger_count = 0},
|
||||
[3]={ name = "challenge_fail", config_id = 8000004, event = EventType.EVENT_CHALLENGE_FAIL, source = "", condition = "", action = "action_challenge_fail", trigger_count = 0},
|
||||
[4]={ name = "variable_change", config_id = 8000005, event = EventType.EVENT_VARIABLE_CHANGE, source = "catch_sum", condition = "", action = "action_variable_change", trigger_count = 0, tag = "9012"},
|
||||
[5]={ name = "time_axis_pass", config_id = 8000006, event = EventType.EVENT_TIME_AXIS_PASS, source = "", condition = "", action = "action_time_axis_pass", trigger_count = 0},
|
||||
[6]={ name = "enter_region", config_id = 8000007, event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_enter_region", trigger_count = 0, forbid_guest = false},
|
||||
[7]={ name = "GM_Debug", config_id = 8000008, event = EventType.EVENT_VARIABLE_CHANGE, source = "", condition = "", action = "action_GM_Debug", trigger_count = 0 },
|
||||
[8]={ name = "multistage_end", config_id = 8000009, event = EventType.EVENT_SCENE_MULTISTAGE_PLAY_STAGE_END, source = "", condition = "", action = "action_multistage_end", trigger_count = 0 },
|
||||
[9]={ name = "group_load", config_id = 8000010, event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_group_load", trigger_count = 0 },
|
||||
[10]={name = "avatar_die", config_id = 8000011, event = EventType.EVENT_AVATAR_DIE, source = "", condition = "", action = "action_avatar_die", trigger_count = 0 },
|
||||
[11]={name = "player_quit", config_id = 8000012, event = EventType.EVENT_HIDE_AND_SEEK_PLAYER_QUIT, source = "", condition = "", action = "action_player_quit", trigger_count = 0 },
|
||||
[12]={name = "leave_region", config_id = 8000013, event = EventType.EVENT_LEAVE_REGION, source = "", condition = "", action = "action_leave_region", trigger_count = 0, forbid_guest = false},
|
||||
[13]={name = "group_will_unload", config_id = 8000014, event = EventType.EVENT_GROUP_WILL_UNLOAD, source = "", condition = "", action = "action_group_will_unload", trigger_count = 0 },
|
||||
}
|
||||
|
||||
local Var = {
|
||||
{ config_id=50000001,name = "catch_sum", value = 0, no_refresh = false},
|
||||
{ config_id=50000002,name = "GM_stage", value = 0, no_refresh = false},
|
||||
}
|
||||
|
||||
-- 【三期新增】有些ability specials gadget是lua自行创建的,但是需要一个config id,直接在lua里写死,就不用在关卡编辑器里配了
|
||||
-- 但是对pos和area id有一些限制,所以找个地方存一下一定合法的值,方便后面调用
|
||||
local regionDefaultValues = {
|
||||
pos = regions[defs.eye_point].pos,
|
||||
area_id = regions[defs.eye_point].area_id,
|
||||
radius = regions[defs.eye_point].radius,
|
||||
}
|
||||
|
||||
local extraGadgets = {
|
||||
|
||||
-- 隐身诱饵,一人一个
|
||||
-- 不太確定為什麼level = 10,不過二期都是10,所以三期先照抄
|
||||
[30000001] = { config_id = 30000001, gadget_id = 44000457, pos = regionDefaultValues.pos, rot = { x = 0.000, y = 0.000, z = 0.000 }, level = 10, area_id = regionDefaultValues.area_id },
|
||||
[30000002] = { config_id = 30000002, gadget_id = 44000457, pos = regionDefaultValues.pos, rot = { x = 0.000, y = 0.000, z = 0.000 }, level = 10, area_id = regionDefaultValues.area_id },
|
||||
[30000003] = { config_id = 30000003, gadget_id = 44000457, pos = regionDefaultValues.pos, rot = { x = 0.000, y = 0.000, z = 0.000 }, level = 10, area_id = regionDefaultValues.area_id },
|
||||
|
||||
-- 普通诱饵,一人三个
|
||||
[30000004] = { config_id = 30000004, gadget_id = 44000107, pos = regionDefaultValues.pos, rot = { x = 0.000, y = 0.000, z = 0.000 }, level = 10, area_id = regionDefaultValues.area_id },
|
||||
[30000005] = { config_id = 30000005, gadget_id = 44000107, pos = regionDefaultValues.pos, rot = { x = 0.000, y = 0.000, z = 0.000 }, level = 10, area_id = regionDefaultValues.area_id },
|
||||
[30000006] = { config_id = 30000006, gadget_id = 44000107, pos = regionDefaultValues.pos, rot = { x = 0.000, y = 0.000, z = 0.000 }, level = 10, area_id = regionDefaultValues.area_id },
|
||||
|
||||
[30000007] = { config_id = 30000007, gadget_id = 44000107, pos = regionDefaultValues.pos, rot = { x = 0.000, y = 0.000, z = 0.000 }, level = 10, area_id = regionDefaultValues.area_id },
|
||||
[30000008] = { config_id = 30000008, gadget_id = 44000107, pos = regionDefaultValues.pos, rot = { x = 0.000, y = 0.000, z = 0.000 }, level = 10, area_id = regionDefaultValues.area_id },
|
||||
[30000009] = { config_id = 30000009, gadget_id = 44000107, pos = regionDefaultValues.pos, rot = { x = 0.000, y = 0.000, z = 0.000 }, level = 10, area_id = regionDefaultValues.area_id },
|
||||
|
||||
[30000010] = { config_id = 30000010, gadget_id = 44000107, pos = regionDefaultValues.pos, rot = { x = 0.000, y = 0.000, z = 0.000 }, level = 10, area_id = regionDefaultValues.area_id },
|
||||
[30000011] = { config_id = 30000011, gadget_id = 44000107, pos = regionDefaultValues.pos, rot = { x = 0.000, y = 0.000, z = 0.000 }, level = 10, area_id = regionDefaultValues.area_id },
|
||||
[30000012] = { config_id = 30000012, gadget_id = 44000107, pos = regionDefaultValues.pos, rot = { x = 0.000, y = 0.000, z = 0.000 }, level = 10, area_id = regionDefaultValues.area_id },
|
||||
|
||||
-- 能量球,config id把不太吉利的数字跳过去
|
||||
[30000015] = { config_id = 30000015, gadget_id = 44000105, pos = regionDefaultValues.pos, rot = { x = 0.000, y = 0.000, z = 0.000 }, level = 10, area_id = regionDefaultValues.area_id },
|
||||
|
||||
}
|
||||
|
||||
local gadget_energy = 30000015
|
||||
|
||||
local invisible_bait_list = { 30000001, 30000002, 30000003 }
|
||||
|
||||
local bait_list = {
|
||||
[1] = {30000004, 30000005, 30000006},
|
||||
[2] = {30000007, 30000008, 30000009},
|
||||
[3] = {30000010, 30000011, 300000012},
|
||||
}
|
||||
|
||||
local extraRegions = {
|
||||
[40000001] = { config_id = 40000001, shape = RegionShape.SPHERE, radius = regionDefaultValues.radius + 5, pos = regionDefaultValues.pos, area_id = regionDefaultValues.area_id }
|
||||
}
|
||||
|
||||
local eyepoint_large_region = 40000001
|
||||
|
||||
local challengeTable = {
|
||||
fatherId = 9011,
|
||||
hunterId = 9012,
|
||||
hiderId = 9013,
|
||||
ghostId = 2013001,
|
||||
}
|
||||
|
||||
function Initialize_Base()
|
||||
for i,v in ipairs(Tri) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
for i,v in ipairs(Var) do
|
||||
table.insert(variables, v)
|
||||
end
|
||||
for i,v in pairs(extraGadgets) do
|
||||
table.insert(gadgets, v)
|
||||
end
|
||||
|
||||
for i,v in pairs(extraRegions) do
|
||||
table.insert(regions, v)
|
||||
end
|
||||
|
||||
-- 【三期新增】gadget_prison看起来只会用到一个,三期就不用list了,但是保底一下如果哪里的配置没改成新的
|
||||
if defs.gadget_prison == nil and defs.gadget_prison_list ~= nil then
|
||||
defs.gadget_prison = defs.gadget_prison_list[1]
|
||||
end
|
||||
end
|
||||
---------------------------------------
|
||||
function action_group_load(context, evt)
|
||||
--根据LD铺设随机生成障碍物
|
||||
LF_Bake_Random_Scene(context)
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_gallery_stop(context, evt)
|
||||
ScriptLib.PrintContextLog(context, "## HideAndSeek_V3_LOG : Gallery Stop")
|
||||
--实际gameplay仍在进行时玩法停止,则走意外终止流程
|
||||
if 1 == ScriptLib.GetGroupTempValue(context, "is_in_play", {}) then
|
||||
LF_Stop_Hide_And_Seek(context, 3)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_multistage_end(context, evt)
|
||||
ScriptLib.PrintContextLog(context, "## HideAndSeek_V3_LOG : Multistage End : "..evt.param2.." | is_succ : "..evt.param3)
|
||||
if evt.param3 == 0 then
|
||||
--异常终结玩法
|
||||
if 1 == ScriptLib.GetGroupTempValue(context, "is_in_play", {}) then
|
||||
LF_Stop_Hide_And_Seek(context, 3)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
if evt.param2 == 2 then
|
||||
--LF_Bake_Random_Scene(context)
|
||||
elseif evt.param2 == 3 then
|
||||
--进入逃跑阶段
|
||||
ScriptLib.SetGroupTempValue(context, "in_escape", 1, {})
|
||||
LF_Assign_Character_Card(context)
|
||||
elseif evt.param2 == 4 then
|
||||
--进入抓捕阶段
|
||||
ScriptLib.SetGroupTempValue(context, "in_escape", 0, {})
|
||||
LF_Start_Hide_And_Seek(context)
|
||||
|
||||
-- 【三期新增】这个时候通知一下在场的所有诱饵,根据本地gv值决定是否删除effect(感觉不太需要?猎人三期在逃跑阶段是4了,可以跟游侠区分开)
|
||||
-- LF_NotifyInvisibleBaits(context)
|
||||
elseif evt.param2 == 5 then
|
||||
--由于关卡流终止时说明游侠未全灭,判胜
|
||||
if 1 == ScriptLib.GetGroupTempValue(context, "is_in_play", {}) then
|
||||
LF_Stop_Hide_And_Seek(context, 2)
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_challenge_success(context, evt)
|
||||
ScriptLib.PrintContextLog(context, "## HideAndSeek_V3_Log : challenge_success -> "..evt.param1)
|
||||
--猎手完成了抓人的挑战,判胜
|
||||
if evt.source_name == "9012" then
|
||||
if 1 == ScriptLib.GetGroupTempValue(context, "is_in_play", {}) then
|
||||
LF_Stop_Hide_And_Seek(context, 1)
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_challenge_fail(context, evt)
|
||||
ScriptLib.PrintContextLog(context, "## HideAndSeek_V3_Log : challenge_fail -> "..evt.param1)
|
||||
--猎手未能完成抓人的挑战,判负
|
||||
if evt.source_name == "9011" then
|
||||
if 1 == ScriptLib.GetGroupTempValue(context, "is_in_play", {}) then
|
||||
LF_Stop_Hide_And_Seek(context, 2)
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_variable_change(context, evt)
|
||||
-- 只管catch_sum变化
|
||||
if evt.param1 == evt.param2 + 1 then
|
||||
-- 这段有用的,一个玩家在逃跑阶段死亡退出改变catch sum、并导致catch sum等于prey总数,从这里直接判猎人成功
|
||||
if 1 == ScriptLib.GetGroupTempValue(context, "in_escape", {}) then
|
||||
if evt.param1 == ScriptLib.GetGroupTempValue(context, "prey_sum", {}) then
|
||||
local _index = ScriptLib.GetHideAndSeekPlayIndex(context)
|
||||
ScriptLib.EndSceneMultiStagePlayStage(context, _index, "null", true)
|
||||
end
|
||||
end
|
||||
--]]
|
||||
return 0
|
||||
else
|
||||
return -1
|
||||
end
|
||||
end
|
||||
|
||||
function action_enter_region(context, evt)
|
||||
if evt.param1 ~= defs.eye_point then
|
||||
return -1
|
||||
end
|
||||
--开启视野锚点优化
|
||||
ScriptLib.SetPlayerEyePointStream(context, evt.param1, evt.param1, false)
|
||||
ScriptLib.PrintContextLog(context, "## HideAndSeek_V3_LOG SetPlayerEyePointStream")
|
||||
|
||||
-- -- 【三期新增】
|
||||
-- -- 开启锁lod1
|
||||
-- local ret = ScriptLib.SetPlayerEyePointLOD(context, defs.eye_point, eyepoint_large_region, 1)
|
||||
-- ScriptLib.PrintContextLog(context, "## HideAndSeek_V3 lod level is set to 1, succeed = "..ret)
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_leave_region(context, evt)
|
||||
if evt.param1 ~= defs.eye_point then
|
||||
return -1
|
||||
end
|
||||
--关闭视野锚点优化
|
||||
ScriptLib.ClearPlayerEyePoint(context, evt.param1)
|
||||
ScriptLib.PrintContextLog(context, "## HideAndSeek_V3_LOG ClearPlayerEyePoint")
|
||||
|
||||
|
||||
-- -- 【三期新增】
|
||||
-- -- 关闭锁lod1
|
||||
-- local ret = ScriptLib.ClearPlayerEyePoint(context, defs.eye_point)
|
||||
-- ScriptLib.PrintContextLog(context, "## HideAndSeek_V3 player eye point is cleared, succeed = "..ret)
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_group_will_unload(context, evt)
|
||||
--提前关闭性能圈保证关闭视野锚点优化
|
||||
ScriptLib.RemoveEntityByConfigId(context, 0, EntityType.REGION, defs.eye_point)
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_time_axis_pass(context, evt)
|
||||
ScriptLib.PrintContextLog(context, "## HideAndSeek_V3_LOG : time_axis "..evt.source_name.." -> "..evt.param1)
|
||||
if evt.source_name == "rampage" then
|
||||
--触发猎手暴走阶段
|
||||
HideAndSeek_Hunter_Rampage(context)
|
||||
elseif evt.source_name == "energy" then
|
||||
--刷新一个能量球
|
||||
ScriptLib.KillEntityByConfigId(context, {config_id = gadget_energy, entity_type = EntityType.GADGET})
|
||||
--随机选择位置创建能量球
|
||||
local p_list = energy_info[evt.param1].points
|
||||
math.randomseed(ScriptLib.GetServerTime(context))
|
||||
local ret = p_list[math.random(#p_list)]
|
||||
local p_pos = {}
|
||||
local p_rot = {}
|
||||
for k,v in ipairs(points) do
|
||||
if v.config_id == ret then
|
||||
p_pos = v.pos
|
||||
p_rot = v.rot
|
||||
break
|
||||
end
|
||||
end
|
||||
ScriptLib.CreateGadgetByConfigIdByPos(context, gadget_energy, p_pos, p_rot)
|
||||
local uid_list = ScriptLib.GetSceneUidList(context)
|
||||
--通知全体掉能量球
|
||||
ScriptLib.AssignPlayerUidOpNotify(context, {param_index = 12,param_list={},param_uid_list={},duration=3,target_uid_list=uid_list})
|
||||
elseif evt.source_name == "hunter_win_by_EX" or evt.source_name == "hunter_win_in_time" or evt.source_name == "hunter_catch_by_guide" then
|
||||
--相关陈列室统计
|
||||
ScriptLib.SetGroupTempValue(context, evt.source_name, 0, {})
|
||||
elseif evt.source_name == "final_time" then
|
||||
--抓捕阶段第180秒后为决胜时间,猎手在该时间内抓两人,记录翻牌
|
||||
ScriptLib.SetGroupTempValue(context,"is_in_final_time",1,{})
|
||||
else
|
||||
--终止游侠被捕阶段并转为真死亡
|
||||
for i=1,3 do
|
||||
local _uid = ScriptLib.GetGroupTempValue(context, "const_prey_"..i, {})
|
||||
if evt.source_name == tostring(_uid) then
|
||||
ScriptLib.PrintContextLog(context,"## HideAndSeek_V3_LOG realDie = "..tostring(_uid))
|
||||
|
||||
-- ScriptLib.AssignPlayerShowTemplateReminder(context, 138, {param_vec={},param_uid_vec={},uid_vec={_uid}})
|
||||
|
||||
-- 【三期新增】换了一个UI弹窗,要读表,改成下面了
|
||||
local _gallery = ScriptLib.GetGroupTempValue(context, "gallery_id", {})
|
||||
ScriptLib.UpdatePlayerGalleryScore(context, _gallery, {["update_type"]="updateGhostUid", ["ghost_uid"]= _uid})
|
||||
|
||||
LF_Set_Player_State_Value(context, _uid, HS_State.Dead.name, 1)
|
||||
|
||||
-- 【三期新增】游侠死亡后变成幽灵,上新挑战目标
|
||||
-- 这里挑战的具体参数不重要,只是为了显示下左侧文字,反正无论如何都完不成的,结束只需要听关卡通知
|
||||
if ScriptLib.GetGroupTempValue(context, HS_State.Play.name.."_".._uid, {}) == 2 then
|
||||
-- 游侠这时候应该已经是2了
|
||||
ScriptLib.AttachChildChallenge(context, challengeTable.fatherId, i*math.pow(10,5)+challengeTable.ghostId,challengeTable.ghostId,{base_info.group_id,10},{_uid},{success=1,fail=1})
|
||||
end
|
||||
return 0
|
||||
end
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_avatar_die(context, evt)
|
||||
--multistage内触发的死亡回调
|
||||
local char = ScriptLib.GetGroupTempValue(context, HS_State.Play.name.."_"..context.uid, {})
|
||||
ScriptLib.PrintContextLog(context, "## HideAndSeek_V3_LOG : avatar_die "..context.uid.." | character = "..char)
|
||||
--首先排除玩家死在玩法外的情况
|
||||
if ScriptLib.GetGroupTempValue(context, "is_in_play", {}) == 0 then
|
||||
ScriptLib.PrintContextLog(context, "## HideAndSeek_V3_LOG : is_in_play = 0")
|
||||
return -1
|
||||
end
|
||||
if char == 0 then
|
||||
--hunter死亡判负
|
||||
ScriptLib.StopChallenge(context, 9012, 0)
|
||||
elseif char == 1 then
|
||||
--prey死亡算被抓
|
||||
LF_Set_Prey_Die(context, context.uid)
|
||||
elseif char == 3 or char == 4 then
|
||||
for i = 1,3 do
|
||||
local prey = ScriptLib.GetGroupTempValue(context, "const_prey_"..i, {})
|
||||
if prey == context.uid then
|
||||
--prey提前死亡不参与游戏
|
||||
LF_Set_Prey_Die(context, context.uid)
|
||||
return 0
|
||||
end
|
||||
end
|
||||
--hunter提前死亡直接结算prey胜利
|
||||
local _index = ScriptLib.GetHideAndSeekPlayIndex(context)
|
||||
ScriptLib.EndSceneMultiStagePlayStage(context, _index, "null", true)
|
||||
LF_Stop_Hide_And_Seek(context, 2)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_player_quit(context, evt)
|
||||
--由multistage触发回调玩家离场
|
||||
for j=1,3 do
|
||||
if context.uid == ScriptLib.GetGroupTempValue(context, "prey_"..j, {}) then
|
||||
ScriptLib.PrintContextLog(context, "## HideAndSeek_V3_LOG : Running Player_Quit : "..context.uid)
|
||||
--进行中玩家离场视为hunter抓住了一个
|
||||
ScriptLib.ChangeGroupVariableValue(context, "catch_sum", 1)
|
||||
return 0
|
||||
end
|
||||
end
|
||||
ScriptLib.PrintContextLog(context, "## HideAndSeek_V3_LOG : Free Player_Quit : "..context.uid)
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_GM_Debug(context, evt)
|
||||
ScriptLib.PrintContextLog(context, "## HideAndSeek_V3_LOG : variable_change "..evt.source_name.." "..evt.param2.." -> "..evt.param1)
|
||||
if evt.param1 == evt.param2 then
|
||||
return -1
|
||||
end
|
||||
local uid_list = ScriptLib.GetSceneUidList(context)
|
||||
for i,v in ipairs(uid_list) do
|
||||
--处理玩家隐身显形
|
||||
if evt.source_name == HS_State.OnMap.name.."_"..v then
|
||||
LF_Notify_Player_Visible(context)
|
||||
return -1
|
||||
end
|
||||
end
|
||||
if evt.source_name == "catch_sum" then
|
||||
return -1
|
||||
end
|
||||
if evt.source_name == "GM_stage" then
|
||||
if evt.param1 == 1 then
|
||||
LF_Bake_Random_Scene(context)
|
||||
elseif evt.param1 == 2 then
|
||||
LF_Assign_Character_Card(context)
|
||||
elseif evt.param1 == 3 then
|
||||
LF_Start_Hide_And_Seek(context)
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
---------------------------------------
|
||||
function LF_Start_Hide_And_Seek(context)
|
||||
ScriptLib.PrintContextLog(context, "## HideAndSeek_V3_Log : LF_Start_Hide_And_Seek")
|
||||
LF_Start_Comp_Challenge(context)
|
||||
end
|
||||
|
||||
function LF_Stop_Hide_And_Seek(context, value)
|
||||
--1为hunter胜,2为游侠胜,3为意外中断
|
||||
ScriptLib.PrintContextLog(context, "## HideAndSeek_V3_Log : LF_Stop_Hide_And_Seek | value -> "..value)
|
||||
ScriptLib.SetGroupTempValue(context, "is_in_play", 0, {})
|
||||
ScriptLib.EndTimeAxis(context, "rampage")
|
||||
ScriptLib.EndTimeAxis(context, "energy")
|
||||
local hunter = ScriptLib.GetGroupTempValue(context, "hunter", {})
|
||||
--还未进入幽灵状态的,不用进了,所以关掉时间轴(已经结束)
|
||||
for i=1,3 do
|
||||
local _uid = ScriptLib.GetGroupTempValue(context, "const_prey_"..i, {})
|
||||
ScriptLib.EndTimeAxis(context, tostring(_uid))
|
||||
end
|
||||
--这个watcher比较特殊,需要在胜利时检测prey的state,所以要写在还原state之前。
|
||||
if value == 2 then
|
||||
for i = 1 , 3 do
|
||||
local _prey = ScriptLib.GetGroupTempValue(context, "prey_"..i, {})
|
||||
local _const = ScriptLib.GetGroupTempValue(context, "const_prey_"..i, {})
|
||||
if _const ~= 0 then
|
||||
--存活的prey
|
||||
if _prey ~= 0 then
|
||||
local logvalue = ScriptLib.GetGroupTempValue(context, HS_State.Transfer.name.."_".._const, {})
|
||||
ScriptLib.PrintContextLog(context,"## HideAndSeek_V3_LOG uid:".._const.."的Transfer值为:"..logvalue)
|
||||
--统计:胜利的时候处于变身状态
|
||||
if ScriptLib.GetGroupTempValue(context, HS_State.Transfer.name.."_".._const, {}) > 0 then
|
||||
ScriptLib.PrintContextLog(context,"## HideAndSeek_V3_LOG 统计:胜利的时候处于变身状态 uid:".._const)
|
||||
ScriptLib.AddExhibitionReplaceableData(context, _const, "prey_win_in_transfer", 1)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--还原玩家所有State
|
||||
local uid_list = ScriptLib.GetSceneUidList(context)
|
||||
for i,v in ipairs(uid_list) do
|
||||
LF_Init_Player_State(context, v)
|
||||
ScriptLib.RevertPlayerRegionVision(context, uid_list[i])
|
||||
end
|
||||
ScriptLib.SetPlayerGroupVisionType(context, uid_list, {1})
|
||||
for i,v in ipairs(bait_list) do
|
||||
for m,n in ipairs(v) do
|
||||
ScriptLib.KillEntityByConfigId(context, {config_id = n, entity_type = EntityType.GADGET})
|
||||
end
|
||||
end
|
||||
if value == 3 then
|
||||
--人数不足导致异常处理
|
||||
ScriptLib.StopChallenge(context, 9011, 0)
|
||||
return -1
|
||||
end
|
||||
local _gallery = ScriptLib.GetGroupTempValue(context, "gallery_id", {})
|
||||
-------
|
||||
local catch_sum = ScriptLib.GetGroupVariableValue(context, "catch_sum")
|
||||
--统计:抓捕总数
|
||||
ScriptLib.AddExhibitionReplaceableData(context, hunter, "hunter_catch_sum", catch_sum)
|
||||
--无论胜败都发的牌:
|
||||
--“是猎人”牌
|
||||
ScriptLib.AddExhibitionReplaceableData(context, hunter, "is_hunter", 1)
|
||||
--“是游侠”牌
|
||||
for i=1,3 do
|
||||
local _prey = ScriptLib.GetGroupTempValue(context, "prey_"..i, {})
|
||||
ScriptLib.AddExhibitionReplaceableData(context, _prey, "is_hunter", 2)
|
||||
|
||||
-- 【三期新增翻牌】游侠-使用隐身诱饵维持多长时间的隐身
|
||||
local invisible_time = ScriptLib.GetGroupTempValue(context, "Visible".._prey, {})
|
||||
ScriptLib.AddExhibitionReplaceableData(context, _prey, "prey_keep_invisible", invisible_time)
|
||||
|
||||
end
|
||||
--hunter胜利
|
||||
if value == 1 then
|
||||
--统计:清扫时刻
|
||||
ScriptLib.AddExhibitionReplaceableData(context, hunter, "hunter_miss_none", 1)
|
||||
--统计:迅捷攻势
|
||||
if 1 == ScriptLib.GetGroupTempValue(context, "hunter_win_by_EX", {}) then
|
||||
ScriptLib.AddExhibitionReplaceableData(context, hunter, "hunter_win_by_EX", 1)
|
||||
end
|
||||
--统计:终场倒计时
|
||||
if 1 == ScriptLib.GetGroupTempValue(context, "hunter_win_in_time", {}) then
|
||||
ScriptLib.AddExhibitionReplaceableData(context, hunter, "hunter_win_in_time", 1)
|
||||
end
|
||||
ScriptLib.UpdatePlayerGalleryScore(context, _gallery, {["update_type"]="updateGalleryResult", ["is_hunter_win"]=true})
|
||||
--prey胜利
|
||||
elseif value == 2 then
|
||||
LF_Handle_Exhibition_Prey_Win(context)
|
||||
ScriptLib.UpdatePlayerGalleryScore(context, _gallery, {["update_type"]="updateGalleryResult", ["is_hunter_win"]=false})
|
||||
end
|
||||
|
||||
-- 【三期新增翻牌】一次抓捕多个游侠
|
||||
local max = ScriptLib.GetGroupTempValue(context, "catch_multiple_prey_max", {})
|
||||
ScriptLib.AddExhibitionReplaceableData(context, hunter, "hunter_catch_multiple_prey_max", max)
|
||||
|
||||
LF_Clear_Random_Scene(context)
|
||||
end
|
||||
|
||||
function LF_Assign_Character_Card(context)
|
||||
-- 1)prey和hunter,以及各种其他局内值都用temp value记录
|
||||
-- 2)开启视野优化
|
||||
-- 3)初始化技能sgv
|
||||
ScriptLib.PrintContextLog(context, "## HideAndSeek_V3_LOG : LF_Assign_Character_Card is called")
|
||||
local _index = ScriptLib.GetHideAndSeekPlayIndex(context)
|
||||
local _gallery = ScriptLib.GetHideAndSeekPlayGalleryId(context, _index)
|
||||
ScriptLib.SetGroupTempValue(context, "gallery_id", _gallery, {})
|
||||
ScriptLib.SetGroupTempValue(context, "is_in_play", 1, {})
|
||||
|
||||
-- local uid_list = ScriptLib.GetSceneUidList(context)
|
||||
-- 【三期新增】新接口取prey,和服务器保持一致
|
||||
local prey_list = ScriptLib.GetHideAndSeekPreyUidList(context, _index)
|
||||
local hunter = ScriptLib.GetHideAndSeekHunter(context, _index)
|
||||
ScriptLib.PrintContextLog(context, "## HideAndSeek_V3_LOG : hunter_uid = "..hunter)
|
||||
-- 所有参加活动的玩家的uid list
|
||||
local all_player_list = {}
|
||||
for i = 1, #prey_list do
|
||||
table.insert(all_player_list, prey_list[i])
|
||||
end
|
||||
table.insert(all_player_list, hunter)
|
||||
|
||||
-- 开启视野优化
|
||||
for i = 1, #all_player_list do
|
||||
ScriptLib.ForbidPlayerRegionVision(context, all_player_list[i])
|
||||
end
|
||||
ScriptLib.SetPlayerGroupVisionType(context, all_player_list, {0})
|
||||
|
||||
--分配局内身份信息
|
||||
ScriptLib.SetGroupTempValue(context, "hunter", hunter, {})
|
||||
local cnt = 1
|
||||
for i,v in ipairs(prey_list) do
|
||||
if v ~= hunter then-- 其实不用判,先留着了
|
||||
ScriptLib.SetGroupTempValue(context, "prey_"..cnt, v, {})
|
||||
ScriptLib.SetGroupTempValue(context, "const_prey_"..cnt, v, {})
|
||||
cnt = cnt + 1
|
||||
end
|
||||
end
|
||||
--追加一次游侠数量统计,防止在这个阶段取不到值,考虑到不是很靠谱,四阶段重新计算一次
|
||||
ScriptLib.SetGroupTempValue(context, "prey_sum", #prey_list, {})
|
||||
|
||||
--关闭牢笼
|
||||
ScriptLib.SetGroupGadgetStateByConfigId(context, 0, defs.gadget_prison, 0)
|
||||
ScriptLib.PrintContextLog(context, "## HideAndSeek_V3_LOG : player_sum = "..#all_player_list)
|
||||
|
||||
--按选择初始化技能列表
|
||||
for i,v in ipairs(all_player_list) do
|
||||
LF_Init_Player_Skill(context, v, i)
|
||||
LF_Init_Player_State(context, v)
|
||||
if v == hunter then
|
||||
ScriptLib.AssignPlayerUidOpNotify(context, {param_index = 16,param_list={},param_uid_list={},duration=5,target_uid_list={v}})
|
||||
else
|
||||
ScriptLib.AssignPlayerUidOpNotify(context, {param_index = 17,param_list={},param_uid_list={},duration=5,target_uid_list={v}})
|
||||
|
||||
-- 【三期新增翻牌】初始化隐身状态的temp value,要在逃跑阶段一开始就初始化
|
||||
ScriptLib.SetGroupTempValue(context, "Visible_Mark"..v, 0, {})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function LF_Init_Player_Skill(context, uid, u_ptr)
|
||||
ScriptLib.PrintContextLog(context, "## HideAndSeek_V3_LOG : LF_Init_Player_Skill : "..uid)
|
||||
local _index = ScriptLib.GetHideAndSeekPlayIndex(context)
|
||||
local _gallery = ScriptLib.GetHideAndSeekPlayGalleryId(context, _index)
|
||||
local skill_list = ScriptLib.GetHideAndSeekPlayerSkillList(context, _index, uid)
|
||||
for p,q in ipairs(skill_list) do
|
||||
ScriptLib.AttachGalleryAbilityGroup(context, {uid}, _gallery, q)
|
||||
end
|
||||
end
|
||||
|
||||
function LF_Start_Comp_Challenge(context)
|
||||
ScriptLib.PrintContextLog(context, "## HideAndSeek_V3_LOG : LF_Start_Comp_Challenge")
|
||||
ScriptLib.CreateFatherChallenge(context, 9011, 9011, defs.duration, {success=10,fail=10})
|
||||
-- local uid_list = ScriptLib.GetSceneUidList(context)
|
||||
-- 【三期新增】新接口取prey,和服务器保持一致
|
||||
local _index = ScriptLib.GetHideAndSeekPlayIndex(context)
|
||||
local prey_list = ScriptLib.GetHideAndSeekPreyUidList(context, _index)
|
||||
|
||||
local hunter = ScriptLib.GetGroupTempValue(context, "hunter", {})
|
||||
LF_Set_Player_State_Value(context, hunter, HS_State.Play.name, 0)
|
||||
|
||||
ScriptLib.ForceRefreshAuthorityByConfigId(context, defs.gadget_prison, hunter)
|
||||
|
||||
local challenge_start_time = ScriptLib.GetServerTime(context)
|
||||
|
||||
--prey_sum这里统计就太晚了,需要三阶段开始先统计一次
|
||||
local prey_sum = 0
|
||||
for i,v in ipairs(prey_list) do
|
||||
-- if v == hunter then
|
||||
-- LF_Set_Player_State_Value(context, v, HS_State.Play.name, 0)
|
||||
-- else
|
||||
local idx = 0
|
||||
for j = 1,3 do
|
||||
if v == ScriptLib.GetGroupTempValue(context, "prey_"..j, {}) then
|
||||
idx = j
|
||||
break
|
||||
end
|
||||
end
|
||||
--只有非死亡状态的游侠才继续游戏
|
||||
if ScriptLib.GetGroupTempValue(context, HS_State.Play.name.."_"..v, {}) == 3 then
|
||||
LF_Set_Player_State_Value(context, v, HS_State.Play.name, 1)
|
||||
ScriptLib.AttachChildChallenge(context, 9011, idx*math.pow(10,5)+9013,9013,{base_info.group_id,10},{v},{success=1,fail=1})
|
||||
prey_sum = prey_sum + 1
|
||||
end
|
||||
|
||||
-- 【三期新增】开始隐身的时间先设成挑战开始时间
|
||||
ScriptLib.SetGroupTempValue(context, "VisibleStart"..v, challenge_start_time, {})
|
||||
|
||||
-- end
|
||||
end
|
||||
if prey_sum == 0 then
|
||||
LF_Stop_Hide_And_Seek(context, 1)
|
||||
-- 就不需要开挑战了
|
||||
return 0
|
||||
end
|
||||
--获取到正确的游侠数量
|
||||
ScriptLib.AttachChildChallenge(context, 9011, 9012, 9012, {0,3,9012,prey_sum}, {hunter},{success=10,fail=10})
|
||||
--启动组合挑战
|
||||
ScriptLib.StartFatherChallenge(context, 9011)
|
||||
ScriptLib.InitTimeAxis(context, "rampage", {defs.duration - defs.rampage_time}, false)
|
||||
--处理两个抓捕结算的初始化
|
||||
ScriptLib.InitTimeAxis(context, "hunter_win_in_time", {hunter_win_in_time}, false)
|
||||
ScriptLib.SetGroupTempValue(context, "hunter_win_in_time", 1, {})
|
||||
--新增翻牌用计时器 抓捕阶段第180秒后为决胜时间,猎手在该时间内抓两人,记录翻牌
|
||||
ScriptLib.InitTimeAxis(context, "final_time", {final_time}, false)
|
||||
--处理能量球计时
|
||||
LF_Set_Energy(context)
|
||||
--解除hunter限制
|
||||
ScriptLib.SetGroupGadgetStateByConfigId(context, 0, defs.gadget_prison, 201)
|
||||
end
|
||||
|
||||
function LF_Set_Energy(context)
|
||||
--出能量球的时间有略微偏移
|
||||
ScriptLib.PrintContextLog(context, "## HideAndSeek_V3_LOG : LF_Set_Energy")
|
||||
math.randomseed(ScriptLib.GetServerTime(context))
|
||||
local energy_list = {}
|
||||
for i,v in ipairs(energy_info) do
|
||||
table.insert(energy_list, v.time + math.random(energy_info[i].step[1],energy_info[i].step[2]))
|
||||
end
|
||||
ScriptLib.InitTimeAxis(context, "energy", energy_list, false)
|
||||
end
|
||||
|
||||
function LF_Bake_Random_Scene(context)
|
||||
ScriptLib.PrintContextLog(context, "## HideAndSeek_V3_LOG : LF_Bake_Random_Scene")
|
||||
--根据ld需求进行调整
|
||||
|
||||
--开启天气
|
||||
for i = 1 , #weather_id_list do
|
||||
ScriptLib.SetWeatherAreaState(context, weather_id_list[i], 1)
|
||||
end
|
||||
|
||||
--suite 2按权重随机创建
|
||||
if suites[2] ~= nil then
|
||||
math.randomseed(ScriptLib.GetServerTime(context))
|
||||
for i,v in ipairs(suites[2].gadgets) do
|
||||
if math.random(100) > 50 then
|
||||
ScriptLib.CreateGadget(context, {config_id = v})
|
||||
end
|
||||
end
|
||||
end
|
||||
--suite 3创建基本空气墙
|
||||
if suites[3] ~= nil then
|
||||
ScriptLib.AddExtraGroupSuite(context, 0, 3)
|
||||
end
|
||||
end
|
||||
|
||||
function LF_Clear_Random_Scene(context)
|
||||
ScriptLib.PrintContextLog(context, "## HideAndSeek_V3_LOG : LF_Clear_Random_Scene")
|
||||
--根据需求清理数据
|
||||
ScriptLib.EndTimeAxis(context, "hunter_win_by_EX")
|
||||
ScriptLib.EndTimeAxis(context, "hunter_win_in_time")
|
||||
ScriptLib.EndTimeAxis(context, "hunter_catch_by_guide")
|
||||
ScriptLib.RemoveExtraGroupSuite(context, 0, 3)
|
||||
ScriptLib.RemoveExtraGroupSuite(context, 0, 4)
|
||||
--清理诱饵防止local的残留
|
||||
ScriptLib.KillEntityByConfigId(context, {config_id = gadget_energy, entity_type = EntityType.GADGET})
|
||||
for i,v in ipairs(bait_list) do
|
||||
for m,n in ipairs(v) do
|
||||
ScriptLib.KillEntityByConfigId(context, {config_id = n, entity_type = EntityType.GADGET})
|
||||
end
|
||||
end
|
||||
|
||||
ScriptLib.KillEntityByConfigId(context, {config_id = defs.gadget_prison, entity_type = EntityType.GADGET})
|
||||
|
||||
--关闭天气
|
||||
for i = 1 , #weather_id_list do
|
||||
ScriptLib.SetWeatherAreaState(context, weather_id_list[i], 0)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function LF_Init_Player_State(context, uid)
|
||||
ScriptLib.PrintContextLog(context, "## HideAndSeek_V3_LOG : Init_Player_State : "..uid)
|
||||
for m,n in pairs(HS_State) do
|
||||
if n.name == "SGV_HideAndSeek_PlayerState_Play" then
|
||||
-- 【三期新增】唯独只有这个值,初始的时候要额外区分猎人4和游侠3
|
||||
if uid == ScriptLib.GetGroupTempValue(context, "hunter", {}) then
|
||||
LF_Set_Player_State_Value(context, uid, n.name, 4)
|
||||
else
|
||||
LF_Set_Player_State_Value(context, uid, n.name, n.value)
|
||||
end
|
||||
else
|
||||
LF_Set_Player_State_Value(context, uid, n.name, n.value)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--用于集中处理hunter失败的结算
|
||||
function LF_Handle_Exhibition_Prey_Win(context)
|
||||
ScriptLib.PrintContextLog(context, "## HideAndSeek_V3_LOG : LF_Handle_Exhibition_Prey_Win")
|
||||
local hunter = ScriptLib.GetGroupTempValue(context, "hunter", {})
|
||||
local prey_sum = ScriptLib.GetGroupTempValue(context, "prey_sum", {})
|
||||
local catch_sum = ScriptLib.GetGroupVariableValue(context, "catch_sum")
|
||||
--剩余人数结算
|
||||
local prey_alive = prey_sum - catch_sum
|
||||
if prey_alive == 1 then
|
||||
--统计:猎手的惜败
|
||||
ScriptLib.AddExhibitionReplaceableData(context, hunter, "hunter_miss_one", 1)
|
||||
for i=1,3 do
|
||||
local _prey = ScriptLib.GetGroupTempValue(context, "prey_"..i, {})
|
||||
if _prey ~= 0 then
|
||||
--统计:最后的火种
|
||||
ScriptLib.AddExhibitionReplaceableData(context, _prey, "prey_alive_only", 1)
|
||||
break
|
||||
end
|
||||
end
|
||||
elseif prey_alive == 2 then
|
||||
--统计:猎手的失误
|
||||
ScriptLib.AddExhibitionReplaceableData(context, hunter, "hunter_miss_two", 1)
|
||||
end
|
||||
if catch_sum == 0 then
|
||||
--统计:无从复命
|
||||
ScriptLib.AddExhibitionReplaceableData(context, hunter, "hunter_miss_all", 1)
|
||||
end
|
||||
for i=1,3 do
|
||||
local _prey = ScriptLib.GetGroupTempValue(context, "prey_"..i, {})
|
||||
local _const = ScriptLib.GetGroupTempValue(context, "const_prey_"..i, {})
|
||||
if _const ~= 0 then
|
||||
--存活的prey
|
||||
if _prey ~= 0 then
|
||||
--统计:抗争到底
|
||||
ScriptLib.AddExhibitionReplaceableData(context, _const, "prey_alive_win", 1)
|
||||
--统计:全身而退
|
||||
local guide_time = ScriptLib.GetGroupTempValue(context, "prey_win_by_guide", {})
|
||||
ScriptLib.AddExhibitionReplaceableData(context, _const, "prey_win_by_guide", guide_time)
|
||||
--统计:灯下取巧
|
||||
local detect_time = ScriptLib.GetGroupTempValue(context, "prey_win_by_detect_".._prey, {})
|
||||
ScriptLib.AddExhibitionReplaceableData(context, _prey, "prey_win_by_detect", detect_time)
|
||||
--统计:无技能胜利,要反转统计一次
|
||||
if 0 == ScriptLib.GetGroupTempValue(context, "prey_win_without_skill_".._const, {}) then
|
||||
ScriptLib.AddExhibitionReplaceableData(context, _const, "prey_win_without_skill", 1)
|
||||
end
|
||||
elseif _prey == 0 then
|
||||
--统计:默契之力
|
||||
ScriptLib.AddExhibitionReplaceableData(context, _const, "prey_dead_win", 1)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- 【三期新增】隐身诱饵相关
|
||||
function LF_NotifyInvisibleBaits(context)
|
||||
ScriptLib.PrintContextLog(context, "## HideAndSeek_V3_LOG : LF_NotifyInvisibleBaits")
|
||||
|
||||
for i = 1, #invisible_bait_list do
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, invisible_bait_list[i], "SGV_InvisibleBait_Display", 1)
|
||||
end
|
||||
end
|
||||
---------------------------------------
|
||||
Initialize_Base()
|
||||
1159
gdconf/game_data_config/lua/common/V3_3/HideAndSeek_Skill_V3.lua
Normal file
1159
gdconf/game_data_config/lua/common/V3_3/HideAndSeek_Skill_V3.lua
Normal file
File diff suppressed because it is too large
Load Diff
779
gdconf/game_data_config/lua/common/V3_3/MistTrialV3.lua
Normal file
779
gdconf/game_data_config/lua/common/V3_3/MistTrialV3.lua
Normal file
@@ -0,0 +1,779 @@
|
||||
--[[======================================
|
||||
|| filename: MistTrialV3
|
||||
|| owner: shuyi.chang
|
||||
|| description: 迷城战线三期
|
||||
|| LogName: TD_MistTrialV3
|
||||
|| Protection: [Protection]
|
||||
=======================================]]
|
||||
|
||||
--[[
|
||||
3.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,
|
||||
|
||||
--【三期新增】【暂时没用】电梯所在房间的两个region id,close是更大的,用于保底玩家离开之后又飞速冲回来
|
||||
elevatorRegion = 99,
|
||||
elevatorCloseRegion = 100,
|
||||
|
||||
--【三期新增】各种门的对应关系,center指和电梯房间对应的门,一定要注意左右的顺序
|
||||
keyDoor =
|
||||
{
|
||||
[1] = { center = config_id_01, left = config_id_02, right = config_id_03, }
|
||||
[2] = { center = config_id_04, left = config_id_05, right = config_id_06, }
|
||||
[3] = { center = config_id_07, left = config_id_08, right = config_id_09, }
|
||||
},
|
||||
|
||||
--【三期新增】【暂时没用】电梯所在房间的三个门,123需要跟上面keyDoor的[1][2][3]对应起来
|
||||
elevatorDoor = {config_id_01, config_id_02, config_id_03},
|
||||
}
|
||||
--]]
|
||||
|
||||
--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" },
|
||||
|
||||
--三期電梯房保底
|
||||
-- { config_id = 8000010, name = "Player_Enter_Room", event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_Player_Enter_Room",trigger_count = 0 },
|
||||
-- { config_id = 8000011, name = "Player_Leave_Room", event = EventType.EVENT_LEAVE_REGION, source = "", condition = "", action = "action_Player_Leave_Room",trigger_count = 0 },
|
||||
|
||||
-- 【三期新增】保底把所有门初始都打开
|
||||
{ config_id = 8000012, name = "Group_Load", event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_Group_Load",trigger_count = 0},
|
||||
|
||||
-- 测试用
|
||||
-- { config_id = 8000013, name = "CHALLENGE_SUCCESS", event = EventType.EVENT_CHALLENGE_SUCCESS, source = "", condition = "", action = "action_EVENT_CHALLENGE_SUCCESS", trigger_count = 0, },
|
||||
-- { config_id = 8000014, name = "CHALLENGE_FAIL", event = EventType.EVENT_CHALLENGE_FAIL, source = "", condition = "", action = "action_EVENT_CHALLENGE_FAIL", trigger_count = 0, },
|
||||
|
||||
}
|
||||
|
||||
local extraVariables = {
|
||||
--Gallery是否在进行 0-未开始 1-进行中 2-已成功(不再触发)
|
||||
{ config_id = 50000001, name = "gallery_state", value = 0, no_refresh = true},
|
||||
--父挑战状态 0-初始 1-进了地城但未开始 2-进行中(正在激活古代符文 3-进行中(启动遗迹控制台)4-进行中(最终挑战) 5-全部完成
|
||||
{ config_id = 50000002, name = "father_state", value = 0, no_refresh = true},
|
||||
--钥匙房 激活古代符文进度
|
||||
{ config_id = 50000003, name = "key_progress", value = 0, no_refresh = true},
|
||||
--子挑战用的触发器
|
||||
{ config_id = 50000004, name = "catchKey", value = 0, no_refresh = false},
|
||||
--地脉异常等级
|
||||
{ config_id = 50000005, name = "floor_level", value = 1, no_refresh = true},
|
||||
|
||||
-- 【三期新增】目前都用不到
|
||||
-- 玩家是否已經離開電梯房
|
||||
{ config_id = 50000006, name = "door_open", value = 0, no_refresh = true},
|
||||
-- 最后一次开启的room index,挑战已开启就改
|
||||
{ config_id = 50000007, name = "last_room_start", value = 0, no_refresh = true},
|
||||
-- 最后一次完成的room index,挑战成功才改
|
||||
{ config_id = 50000008, name = "last_room_finished", value = 0, no_refresh = true},
|
||||
|
||||
}
|
||||
|
||||
--和关卡约定的challenge Index
|
||||
local cfg = {
|
||||
["father_index"] = 999,
|
||||
["key_challenge_index"] = 901,
|
||||
["worktop_challenge_index"] = 902,
|
||||
["final_challenge_index"] = 903
|
||||
}
|
||||
|
||||
local doorState =
|
||||
{
|
||||
open = 201,
|
||||
close = 0,
|
||||
}
|
||||
|
||||
local abilitygroup = "ActivityAbility_MistTrial_AbilityGroup"
|
||||
|
||||
function LF_Initialize_Group(triggers, suites, variables)
|
||||
|
||||
-- insert triggers
|
||||
for i = 1, #extraTriggers do
|
||||
table.insert(triggers, extraTriggers[i])
|
||||
table.insert(suites[1].triggers,extraTriggers[i].name)
|
||||
end
|
||||
|
||||
-- insert variables
|
||||
for i = 1, #extraVariables do
|
||||
table.insert(variables, extraVariables[i])
|
||||
end
|
||||
|
||||
regions[defs.region_id].team_ability_group_list = {abilitygroup}
|
||||
|
||||
|
||||
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, "## TD_MistTrialV3 #WRONG# Trying to start a subchallenge while father is not actived!! ")
|
||||
end
|
||||
|
||||
-- 【三期新增】控制各种门的开启关闭,子挑战开启的时候来一次(结束的时候也来一次)
|
||||
LF_DoorController_Simple(context, true, child_index)
|
||||
|
||||
-- 【三期新增】回血的sgv在这个时候归零
|
||||
ScriptLib.SetTeamServerGlobalValue(context, context.owner_uid, "SGV_MistTrial_Revive", 0)
|
||||
|
||||
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, "## TD_MistTrialV3 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
|
||||
|
||||
local catchKey = ScriptLib.GetGroupVariableValue(context, "catchKey")
|
||||
ScriptLib.PrintContextLog(context, "## TD_MistTrialV3 SAddMistTrialChildChallengeScore is called, catchKey = "..catchKey)
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
--终止特定子挑战
|
||||
function StopMistTrialChildChallenge(context, prev_context, childIndex, isWin)
|
||||
-- isWin = 0 (失败) 1(完成)
|
||||
ScriptLib.StopChallenge(context, childIndex, isWin)
|
||||
return 0
|
||||
end
|
||||
|
||||
--当钥匙房被完成时,调这个方法-----
|
||||
--【三期新增,param通常应该为1,challengeId为成功的挑战id】
|
||||
function AddMistTrialKeyProgress(context, prev_context, param, child_index)
|
||||
ScriptLib.PrintContextLog(context, "## TD_MistTrialV3 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, "## TD_MistTrialV3 #WRONG# Trying to finish a key room while father challenge is @"..father_state.." (need 2)")
|
||||
--end
|
||||
|
||||
-- 【三期新增】控制各种门的开启关闭,子挑战结束的时候来一次(开启的时候也来一次)
|
||||
LF_DoorController_Simple(context, false, child_index)
|
||||
return 0
|
||||
end
|
||||
|
||||
-- 【三期应该没人在用这个了】由于复活的实现原因,不能反复Attach,如果一个地城有多个复活房,每次交互复活房操作台的时候先调用这个来移除
|
||||
function RemoveReviveAbility(context, prev_context)
|
||||
ScriptLib.PrintContextLog(context, "## TD_MistTrialV3 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, "## TD_MistTrialV3 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, "## TD_MistTrialV3 #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
|
||||
|
||||
--复活,三期改动,复活ability一直挂在角色身上,监听sgv上复活modifier
|
||||
ScriptLib.ChangeGroupTempValue(context, "Buff_Heal", 1, {})
|
||||
ScriptLib.SetTeamServerGlobalValue(context, context.owner_uid, "SGV_MistTrial_Revive", 1)
|
||||
return 0
|
||||
|
||||
else
|
||||
ScriptLib.PrintContextLog(context, "## TD_MistTrialV3 #WRONG# Unexpected ModifyMistTrialAbility param: Got@"..param.." (param is 0 or 1 in MistTrialV2)")
|
||||
end
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
--================================================================
|
||||
-- triggers
|
||||
--================================================================
|
||||
|
||||
--用于获知挑战进行到哪个阶段了.三符文完成
|
||||
function action_Key_Challenge_Success(context, evt)
|
||||
ScriptLib.PrintContextLog(context, "## TD_MistTrialV3 Get Challenge Success. @"..evt.param1)
|
||||
ScriptLib.SetGroupVariableValue(context, "father_state", 3)
|
||||
return 0
|
||||
end
|
||||
|
||||
--用于获知挑战进行到哪个阶段了.激活操作台完成
|
||||
function action_Worktop_Challenge_Success(context, evt)
|
||||
ScriptLib.PrintContextLog(context, "## TD_MistTrialV3 Get Challenge Success. @"..evt.param1)
|
||||
ScriptLib.SetGroupVariableValue(context, "father_state", 4)
|
||||
return 0
|
||||
end
|
||||
|
||||
--用于获知挑战进行到哪个阶段了.最终挑战完成
|
||||
function action_Final_Challenge_Success(context, evt)
|
||||
ScriptLib.PrintContextLog(context, "## TD_MistTrialV3 Get Challenge Success. @"..evt.param1)
|
||||
ScriptLib.SetGroupVariableValue(context, "father_state", 5)
|
||||
return 0
|
||||
end
|
||||
|
||||
--初始化标志位
|
||||
function action_Gallery_Start(context, evt)
|
||||
ScriptLib.PrintContextLog(context, "## TD_MistTrialV3 Gallery Start Detected!! GalleryId@"..evt.param1)
|
||||
ScriptLib.SetGroupVariableValue(context, "gallery_state", 1)
|
||||
ScriptLib.SetGroupVariableValue(context, "father_state", 2)
|
||||
ResetGroupTempVar(context)
|
||||
|
||||
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, "## TD_MistTrialV3 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 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, "## TD_MistTrialV3 Enter father region triggered...")
|
||||
|
||||
if ScriptLib.GetGroupVariableValue(context, "father_state") == 0 then
|
||||
|
||||
ScriptLib.SetGroupVariableValue(context, "father_state", 1)
|
||||
|
||||
ScriptLib.PrintContextLog(context, "## TD_MistTrialV3 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, "## TD_MistTrialV3 ...gallery is finished, will do nothing.")
|
||||
|
||||
return 0
|
||||
|
||||
elseif gallery_state == 1 then
|
||||
|
||||
ScriptLib.PrintContextLog(context, "## TD_MistTrialV3 Gallery_state = 1 & father_state is not 0, Trying to get Challenge Progress. ")
|
||||
|
||||
if ResumeMistTrial(context) == -1 then
|
||||
|
||||
ScriptLib.PrintContextLog(context, "## TD_MistTrialV3 #WRONG# Unexpected Challenge Progress!!")
|
||||
|
||||
end
|
||||
return 0
|
||||
|
||||
elseif gallery_state == 0 then
|
||||
|
||||
ScriptLib.PrintContextLog(context, "## TD_MistTrialV3 ...gallery is not started, will do nothing.")
|
||||
|
||||
return 0
|
||||
else
|
||||
|
||||
ScriptLib.PrintContextLog(context, "## TD_MistTrialV3 #WRONG# Unexpected Gallery state! gallery_state@".. gallery_state)
|
||||
return 0
|
||||
end
|
||||
|
||||
return 0
|
||||
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, "## TD_MistTrialV3 Gallery Stop Triggered. reason@ Time Up.")
|
||||
|
||||
ScriptLib.SetGroupVariableValue(context, "gallery_state", 2)
|
||||
|
||||
ScriptLib.FailMistTrialDungeonChallenge(context, cfg.father_index)
|
||||
|
||||
ScriptLib.SetGroupVariableValue(context, "father_state", 5)
|
||||
|
||||
elseif evt.param3 == 2 then
|
||||
|
||||
ScriptLib.PrintContextLog(context, "## TD_MistTrialV3 Gallery Stop Triggered. reason@ Client.")
|
||||
|
||||
ScriptLib.SetGroupVariableValue(context, "gallery_state", 2)
|
||||
|
||||
ScriptLib.FailMistTrialDungeonChallenge(context, cfg.father_index)
|
||||
|
||||
ScriptLib.SetGroupVariableValue(context, "father_state", 5)
|
||||
|
||||
elseif evt.param3 == 3 then
|
||||
ScriptLib.PrintContextLog(context, "## TD_MistTrialV3 Gallery Stop Triggered. reason@ Lua.")
|
||||
ScriptLib.SetGroupVariableValue(context, "gallery_state", 2)
|
||||
ScriptLib.SetGroupVariableValue(context, "father_state", 5)
|
||||
end
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_Group_Load(context, evt)
|
||||
ScriptLib.PrintContextLog(context, "## TD_MistTrialV3 group is loaded")
|
||||
LF_DoorController_Simple(context, false, 0)
|
||||
return 0
|
||||
end
|
||||
|
||||
-- function action_Player_Leave_Room(context, evt)
|
||||
-- ScriptLib.PrintContextLog(context, "## TD_MistTrialV3 leave region " .. evt.param1)
|
||||
|
||||
-- if evt.param1 == defs.elevatorCloseRegion then
|
||||
-- -- 在没有完成三个钥匙房之前离开电梯房,需要关门
|
||||
-- if ScriptLib.GetGroupVariableValue(context, "father_state") < 3 then
|
||||
-- -- 最后的param一定要填-1,中间的填啥都行,反正用不上
|
||||
-- LF_DoorController(context, true, -1)
|
||||
-- end
|
||||
-- end
|
||||
|
||||
-- return 0
|
||||
-- end
|
||||
|
||||
-- function action_Player_Enter_Room(context, evt)
|
||||
-- ScriptLib.PrintContextLog(context, "## TD_MistTrialV3 enter region " .. evt.param1)
|
||||
|
||||
-- if evt.param1 == defs.elevatorRegion then
|
||||
-- -- 如果玩家不知为何离开之后又冲进来了,而且还没完成三个钥匙房,得把所有门打开
|
||||
-- if ScriptLib.GetGroupVariableValue(context, "father_state") < 3 then
|
||||
|
||||
-- for i = 1, #defs.elevatorDoor do
|
||||
-- ScriptLib.SetGadgetStateByConfigId(context, defs.elevatorDoor[i], doorState.open)
|
||||
-- end
|
||||
|
||||
-- LF_CloseAllKeyDoors(context, false)
|
||||
-- end
|
||||
-- end
|
||||
-- return 0
|
||||
-- end
|
||||
|
||||
|
||||
-- function action_EVENT_CHALLENGE_SUCCESS(context, evt)
|
||||
-- ScriptLib.PrintContextLog(context, "## TD_CoinCollect: challenge index = "..evt.param1.." succeeds")
|
||||
|
||||
-- return 0
|
||||
-- end
|
||||
|
||||
|
||||
-- function action_EVENT_CHALLENGE_FAIL(context, evt)
|
||||
-- ScriptLib.PrintContextLog(context, "## TD_CoinCollect: challenge index = "..evt.param1.." fails")
|
||||
|
||||
-- return 0
|
||||
-- end
|
||||
|
||||
--================================================================
|
||||
-- local functions
|
||||
--================================================================
|
||||
function LF_DoorController_Simple(context, start, childIdx)
|
||||
ScriptLib.PrintContextLog(context, "## TD_MistTrialV3 LF_DoorController_Simple is called, start = "..tostring(start)..", childIdx = "..childIdx)
|
||||
|
||||
local destState
|
||||
if start == true then destState = doorState.close
|
||||
elseif start == false then destState = doorState.open
|
||||
end
|
||||
|
||||
-- 校验一下childIdx必须是0-3
|
||||
if childIdx > 3 or childIdx < 0 then
|
||||
ScriptLib.PrintContextLog(context, "## TD_MistTrialV3 LF_DoorController_Simple: child index = "..childIdx.." is illegal, return immediately")
|
||||
return 0
|
||||
end
|
||||
|
||||
if childIdx == 0 then
|
||||
-- 电梯房间的门全打开
|
||||
for i = 1, #defs.elevatorDoor do
|
||||
ScriptLib.SetGadgetStateByConfigId(context, defs.elevatorDoor[i], destState)
|
||||
end
|
||||
|
||||
-- 其他所有的门也全打开
|
||||
LF_OpenAllKeyDoors(context, true)
|
||||
return
|
||||
end
|
||||
|
||||
-- 钥匙房间的门
|
||||
ScriptLib.SetGadgetStateByConfigId(context, defs.keyDoor[childIdx].center, destState)
|
||||
ScriptLib.SetGadgetStateByConfigId(context, defs.keyDoor[childIdx].left, destState)
|
||||
ScriptLib.SetGadgetStateByConfigId(context, defs.keyDoor[childIdx].right, destState)
|
||||
|
||||
end
|
||||
|
||||
|
||||
-- 【三期新增】【暂时用不上】控制场景中各种门的开启和关闭(都没设保底),childIdx应该为1/2/3,离开电梯的特殊情况传-1
|
||||
function LF_DoorController(context, start, childIdx)
|
||||
-- 根据挑战id找房间在defs表里的id
|
||||
local progress = ScriptLib.GetGroupVariableValue(context, "key_progress")
|
||||
ScriptLib.PrintContextLog(context, "## TD_MistTrialV3 LF_DoorController is called, start = "..tostring(start)..", childIdx = "..childIdx)
|
||||
|
||||
if childIdx == -1 then
|
||||
-- 玩家离开电梯房间,所有电梯门都关上,其他门都打开(不存档,所以先不写这个保底,初始门应该都配成0,即本来就是开着的)
|
||||
for i = 1, #defs.elevatorDoor do
|
||||
ScriptLib.SetGadgetStateByConfigId(context, defs.elevatorDoor[i], doorState.close)
|
||||
end
|
||||
ScriptLib.PrintContextLog(context, "## TD_MistTrialV3 LF_DoorController: all doors in elevator room is closed")
|
||||
return 0
|
||||
end
|
||||
|
||||
if childIdx > 3 or childIdx < 1 then
|
||||
ScriptLib.PrintContextLog(context, "## TD_MistTrialV3 LF_DoorController: child index is illegal, return immediately")
|
||||
return 0
|
||||
end
|
||||
|
||||
if start == true then
|
||||
-- 玩家开启任何一个钥匙挑战,钥匙房的所有门都关上
|
||||
LF_OpenAllKeyDoors(context, false)
|
||||
|
||||
-- 门的状态设置完了再改相关挑战结束room group var
|
||||
ScriptLib.SetGroupVariableValue(context, "last_room_start", childIdx)
|
||||
ScriptLib.PrintContextLog(context, "## TD_MistTrialV3 LF_DoorController: all doors in room "..childIdx.." is closed")
|
||||
|
||||
elseif start == false then
|
||||
if progress == 1 then
|
||||
-- 其他房间和这个房间相连的门打开(两对,四个门)
|
||||
for i = 1, #defs.keyDoor do
|
||||
if i ~= childIdx then
|
||||
LF_OpenDoorPairs(context, i, childIdx)
|
||||
end
|
||||
end
|
||||
|
||||
elseif progress == 2 then
|
||||
-- 玩家完成第二个钥匙挑战,这个房间左右两个门里,不和上一个房间相连的门打开(一对,两个门)
|
||||
-- 找完上一个完成房间的idx,再设置成新的
|
||||
local finalRoomIdx
|
||||
local lastRoomIdx = ScriptLib.GetGroupVariableValue(context, "last_room_finished")
|
||||
for i = 1, #defs.keyDoor do
|
||||
if i ~= childIdx and i ~= lastRoomIdx then
|
||||
-- 找还没去过的那个房间
|
||||
finalRoomIdx = i
|
||||
end
|
||||
end
|
||||
LF_OpenDoorPairs(context, finalRoomIdx, childIdx)
|
||||
|
||||
|
||||
elseif progress == 3 then
|
||||
-- 玩家完成第三个钥匙挑战,这个房间和电梯对应的门开启,电梯和它对应的门也开启
|
||||
ScriptLib.SetGadgetStateByConfigId(context, defs.keyDoor[childIdx].center, doorState.open)
|
||||
ScriptLib.SetGadgetStateByConfigId(context, defs.elevatorDoor[childIdx], doorState.open)
|
||||
ScriptLib.PrintContextLog(context, "## TD_MistTrialV3 LF_DoorController: door = "..defs.keyDoor[childIdx].center..", "..defs.elevatorDoor[childIdx].." is open")
|
||||
|
||||
end
|
||||
|
||||
-- 门的状态设置完了再改相关挑战结束room group var
|
||||
ScriptLib.SetGroupVariableValue(context, "last_room_finished", childIdx)
|
||||
end
|
||||
end
|
||||
|
||||
-- 【暂时用不上】
|
||||
function LF_OpenDoorPairs(context, roomIdx_01, roomIdx_02)
|
||||
-- todo:判断下两个room idx,[1, 3]且不能重复
|
||||
-- 找这两个room idx之间的两个门的config id
|
||||
|
||||
-- 参数顺序无所谓,这里重新设一下
|
||||
local room01 = math.min(roomIdx_01, roomIdx_02)
|
||||
local room02 = math.max(roomIdx_01, roomIdx_02)
|
||||
|
||||
if room01 == 1 and room02 == 3 then
|
||||
ScriptLib.SetGadgetStateByConfigId(context, defs.keyDoor[room01].left, doorState.open)
|
||||
ScriptLib.SetGadgetStateByConfigId(context, defs.keyDoor[room02].right, doorState.open)
|
||||
|
||||
else
|
||||
ScriptLib.SetGadgetStateByConfigId(context, defs.keyDoor[room01].right, doorState.open)
|
||||
ScriptLib.SetGadgetStateByConfigId(context, defs.keyDoor[room02].left, doorState.open)
|
||||
|
||||
end
|
||||
|
||||
ScriptLib.PrintContextLog(context, "## TD_MistTrialV3 LF_GetNextDoor is called, room01 = "..room01..", room02 = "..room02..", door = "..defs.keyDoor[room01].right..
|
||||
", "..defs.keyDoor[room02].left)
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
function LF_OpenAllKeyDoors(context, open)
|
||||
ScriptLib.PrintContextLog(context, "## TD_MistTrialV3 LF_OpenAllKeyDoors is called, open = "..tostring(open))
|
||||
|
||||
local destState
|
||||
if open == true then destState = doorState.open
|
||||
elseif open == false then destState = doorState.close
|
||||
end
|
||||
|
||||
for i = 1, #defs.keyDoor do
|
||||
ScriptLib.SetGadgetStateByConfigId(context, defs.keyDoor[i].center, destState)
|
||||
ScriptLib.SetGadgetStateByConfigId(context, defs.keyDoor[i].left, destState)
|
||||
ScriptLib.SetGadgetStateByConfigId(context, defs.keyDoor[i].right, destState)
|
||||
end
|
||||
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, "## TD_MistTrialV3 #WRONG# Unexpected Key Progress Change! value@"..progress)
|
||||
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, "## TD_MistTrialV3 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, "## TD_MistTrialV3 #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: 次数;参数4:Bool,次数达成是否计为成功;参数5:初始次数值
|
||||
ScriptLib.AttachChildChallenge(context, cfg.father_index, cfg.key_challenge_index, defs.key_challenge, {3,cfg.key_challenge_index,defs.key_target,1,saved}, {}, {success=1, fail=1} )
|
||||
|
||||
local ret = LF_StartChallenge(context, cfg.father_index)
|
||||
|
||||
ScriptLib.PrintContextLog(context, "## TD_MistTrialV3 Resuming MistTrial Starting: 激活古代符文. Saved key num@"..saved..", start challenge ret = "..ret)
|
||||
|
||||
return 0
|
||||
|
||||
elseif father_state == 3 then
|
||||
|
||||
ScriptLib.PrintContextLog(context, "## TD_MistTrialV3 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: 次数;参数4:Bool,次数达成是否计为成功;参数5:初始次数值
|
||||
ScriptLib.AttachChildChallenge(context, cfg.father_index, cfg.worktop_challenge_index, defs.worktop_challenge, {7,cfg.worktop_challenge_index,1,1}, {}, {success=1, fail=1} )
|
||||
|
||||
LF_StartChallenge(context, cfg.father_index)
|
||||
|
||||
return 0
|
||||
|
||||
elseif father_state == 4 then
|
||||
|
||||
ScriptLib.PrintContextLog(context, "## TD_MistTrialV3 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,cfg.final_challenge_index,1,1}, {}, {success=99999, fail=1} )
|
||||
|
||||
LF_StartChallenge(context, cfg.father_index)
|
||||
|
||||
return 0
|
||||
|
||||
|
||||
elseif father_state == 5 then
|
||||
|
||||
--挑战还没开始过,就触发了接续挑战
|
||||
ScriptLib.PrintContextLog(context, "## TD_MistTrialV3 Trying to resume challenge but it is all clear. Do nothing.")
|
||||
|
||||
return 0
|
||||
end
|
||||
return -1
|
||||
end
|
||||
|
||||
function ResetGroupTempVar(context)
|
||||
for k,v in pairs(buff_gadgetId) do
|
||||
ScriptLib.SetGroupTempValue(context, v,0,{})
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
--上报运营日志数据埋点
|
||||
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, "## TD_MistTrialV3 UpLoadActionLog: "..log["Buff_Attack"].." |"..log["Buff_Heal"])
|
||||
return 0
|
||||
end
|
||||
|
||||
--用于检查value是否在目标table中
|
||||
function CheckIsInTable(context,check_value)
|
||||
--和关卡约定的challenge Index
|
||||
for k,v in pairs(cfg) do
|
||||
if v == check_value then
|
||||
--ScriptLib.PrintContextLog(context, "## TD_MistTrialV3 Check Is SpecialChallenge. return 1")
|
||||
return 1
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function LF_StartChallenge(context, challenge_index)
|
||||
-- 起challenge之前先检查一下是不是已经开了,开了就不能再起了,不然显示会被挤掉
|
||||
local success = -1
|
||||
local ret = -1
|
||||
if ScriptLib.IsChallengeStartedByChallengeIndex(context, base_info.group_id, challenge_index) == false then
|
||||
ret = ScriptLib.StartFatherChallenge(context, challenge_index)
|
||||
success = 0
|
||||
end
|
||||
|
||||
ScriptLib.PrintContextLog(context, "## TD_MistTrialV3 LF_StartChallenge is called, challenge index = "..challenge_index..", succees = "..success..", challenge ret = "..ret)
|
||||
|
||||
return success
|
||||
end
|
||||
|
||||
|
||||
--================================================================
|
||||
-- ServerLuaCall
|
||||
--================================================================
|
||||
function SLC_MistTrial_TryStartChallenge(context)
|
||||
-- 在这里第一次起挑战和gallery
|
||||
ScriptLib.CreateFatherChallenge(context, cfg.father_index, 228, 1800, {success = 99999, fail = 99999, fail_on_wipe=true})
|
||||
ScriptLib.AttachChildChallenge(context, cfg.father_index, cfg.key_challenge_index, 229, {3,cfg.key_challenge_index,3,1},{},{success=0,fail=0})
|
||||
local ret1 = LF_StartChallenge(context, cfg.father_index)
|
||||
local ret2 = ScriptLib.StartGallery(context, defs.gallery_id)
|
||||
ScriptLib.PrintContextLog(context, "## TD_MistTrialV3 SLC_MistTrial_TryStartChallenge is called, challenge ret = "..ret1..", gallery ret = "..ret2)
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
--================================================================
|
||||
-- Initialization
|
||||
--================================================================
|
||||
LF_Initialize_Group(triggers, suites, variables)
|
||||
@@ -0,0 +1,192 @@
|
||||
|
||||
--[[======================================
|
||||
|| filename: SandwormChallenge_DodgeChallenge
|
||||
|| owner: luyao.huang
|
||||
|| description:
|
||||
|| LogName: SandwormChallenge_DodgeChallenge
|
||||
|| Protection:
|
||||
=======================================]]--
|
||||
|
||||
|
||||
|
||||
local local_defs =
|
||||
{
|
||||
challenge_index = 666,
|
||||
challenge_id = 2012004,
|
||||
live_challenge_index = 667,
|
||||
live_challenge_id = 2012003,
|
||||
dodge_challenge_index = 668,
|
||||
dodge_challenge_id = 2012002,
|
||||
challenge_option = 177,
|
||||
}
|
||||
|
||||
|
||||
|
||||
local challenge_Tri = {
|
||||
[1] = { name = "select_option_dodge_challenge", config_id = 200010001, event = EventType.EVENT_SELECT_OPTION, source = "", condition = "", action = "action_select_option_dodge_challenge", trigger_count = 0},
|
||||
[2] = { name = "group_load_dodge_challenge", config_id = 200010002, event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_group_load_dodge_challenge", trigger_count = 0},
|
||||
[3] = { name = "challenge_fail_dodge_challenge", config_id = 200010003, event = EventType.EVENT_CHALLENGE_FAIL, source = "", condition = "", action = "action_challenge_fail_dodge_challenge", trigger_count = 0},
|
||||
[4] = { name = "challenge_success_dodge_challenge", config_id = 200010004, event = EventType.EVENT_CHALLENGE_SUCCESS, source = "", condition = "", action = "action_challenge_success_dodge_challenge", trigger_count = 0},
|
||||
[6] = { name = "gadget_state_change_dodge_challenge", config_id = 200010006, event = EventType.EVENT_GADGET_STATE_CHANGE, source = "", condition = "", action = "action_gadget_state_change_dodge_challenge", trigger_count = 0},
|
||||
}
|
||||
|
||||
function dodge_challenge_Initialize()
|
||||
for k,v in pairs(challenge_Tri) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
table.insert(variables,{ config_id = 200010001, name = "is_success", value = 0})
|
||||
end
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 触发器回调 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
function action_gadget_state_change_dodge_challenge(context,evt)
|
||||
if evt.param2 == defs.worktop_id then
|
||||
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormChallenge_DodgeChallenge] gadget_state_change:操作台状态变化")
|
||||
if evt.param1 == 0 then
|
||||
--恢复选项
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormChallenge_DodgeChallenge] gadget_state_change:操作台到0状态,恢复选项")
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, defs.worktop_id, {local_defs.challenge_option})
|
||||
end
|
||||
if evt.param1 == 201 or evt.param1 == 202 then
|
||||
--清选项
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormChallenge_DodgeChallenge] gadget_state_change:操作台到非0状态,清理选项")
|
||||
ScriptLib.DelWorktopOptionByGroupId(context, base_info.group_id, defs.worktop_id, local_defs.challenge_option)
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
function action_select_option_dodge_challenge(context,evt)
|
||||
if evt.param2 == local_defs.challenge_option then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormChallenge_DodgeChallenge] select_option:选择选项,开启挑战")
|
||||
--开挑战
|
||||
--ScriptLib.ActiveChallenge(context, local_defs.challenge_index, local_defs.challenge_id, defs.challenge_time, defs.max_hit_times, 0, 0)
|
||||
|
||||
local uid = ScriptLib.GetSceneOwnerUid(context)
|
||||
ScriptLib.CreateFatherChallenge(context, local_defs.challenge_index, local_defs.challenge_id, defs.challenge_time, {success = 10, fail = 5, fail_on_wipe = true})
|
||||
ScriptLib.StartFatherChallenge(context, local_defs.challenge_index)
|
||||
ScriptLib.AttachChildChallenge(context, local_defs.challenge_index, local_defs.dodge_challenge_index, local_defs.dodge_challenge_id,
|
||||
{3,1,defs.max_hit_times,0,0},{},{success=10, fail=5})
|
||||
ScriptLib.AttachChildChallenge(context, local_defs.challenge_index, local_defs.live_challenge_index, local_defs.live_challenge_id,
|
||||
{defs.challenge_time},{},{success=10, fail=5})
|
||||
|
||||
--转操作台状态
|
||||
ScriptLib.SetGadgetStateByConfigId(context, defs.worktop_id, GadgetState.GearStart)
|
||||
|
||||
|
||||
--开启挑战时立刻召一次沙虫
|
||||
LF_Create_Normal_Sandworm_By_Custom_Params(context, defs.ambush_times, defs.attack_times)
|
||||
|
||||
--开启玩法杂项
|
||||
LF_Start_Play(context)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_challenge_success_dodge_challenge(context,evt)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormChallenge_DodgeChallenge] challenge_success:挑战成功,挑战id为"..evt.param1)
|
||||
if evt.param1 == local_defs.live_challenge_id then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormChallenge_DodgeChallenge] challenge_success:挑战成功")
|
||||
|
||||
ScriptLib.StopChallenge(context,local_defs.challenge_index,1)
|
||||
|
||||
--记一个变量,方便下次恢复
|
||||
ScriptLib.SetGroupVariableValue(context, "is_success", 1)
|
||||
|
||||
--创建宝箱
|
||||
ScriptLib.CreateGadget(context, { config_id = defs.chest_id })
|
||||
|
||||
--转操作台状态到完成
|
||||
ScriptLib.SetGadgetStateByConfigId(context, defs.worktop_id, GadgetState.GearStop)
|
||||
|
||||
--清理玩法杂项
|
||||
LF_Clear_Play(context)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_challenge_fail_dodge_challenge(context,evt)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormChallenge_DodgeChallenge] challenge_success:挑战失败,挑战id为"..evt.param1)
|
||||
if evt.param1 == local_defs.live_challenge_id then
|
||||
ScriptLib.StopChallenge(context,local_defs.challenge_index,1)
|
||||
|
||||
|
||||
--记一个变量,方便下次恢复
|
||||
ScriptLib.SetGroupVariableValue(context, "is_success", 1)
|
||||
|
||||
--创建宝箱
|
||||
ScriptLib.CreateGadget(context, { config_id = defs.chest_id })
|
||||
|
||||
--转操作台状态到完成
|
||||
ScriptLib.SetGadgetStateByConfigId(context, defs.worktop_id, GadgetState.GearStop)
|
||||
|
||||
--清理玩法杂项
|
||||
LF_Clear_Play(context)
|
||||
end
|
||||
|
||||
|
||||
if evt.param1 == local_defs.dodge_challenge_id then
|
||||
|
||||
ScriptLib.StopChallenge(context,local_defs.challenge_index,0)
|
||||
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormChallenge_DodgeChallenge] challenge_fail:挑战失败")
|
||||
--转操作台状态到初始
|
||||
ScriptLib.SetGadgetStateByConfigId(context, defs.worktop_id, GadgetState.Default)
|
||||
|
||||
--清理玩法杂项
|
||||
LF_Clear_Play(context)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
function action_group_load_dodge_challenge(context,evt)
|
||||
|
||||
local is_success = ScriptLib.GetGroupVariableValue(context,"is_success") == 1
|
||||
if is_success then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormChallenge_DodgeChallenge] group_load:group加载,之前已成功")
|
||||
--如果之前已成功,将操作台直接转到完成状态
|
||||
ScriptLib.SetGadgetStateByConfigId(context, defs.worktop_id, GadgetState.GearStop)
|
||||
else
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormChallenge_DodgeChallenge] group_load:group加载,之前未成功")
|
||||
--如果之前未成功,则正常给操作台上选项
|
||||
ScriptLib.SetGadgetStateByConfigId(context, defs.worktop_id, GadgetState.Default)
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, defs.worktop_id, {local_defs.challenge_option})
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 杂项方法 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
function LF_Start_Play(context)
|
||||
|
||||
--开空气墙
|
||||
ScriptLib.CreateGadget(context, { config_id = defs.airwall_id })
|
||||
--打开沙虫计数开关
|
||||
ScriptLib.SetGroupVariableValue(context, "is_attack_count", 1)
|
||||
end
|
||||
|
||||
|
||||
function LF_Clear_Play(context)
|
||||
--清掉空气墙
|
||||
ScriptLib.KillEntityByConfigId(context, { config_id = defs.airwall_id })
|
||||
|
||||
--关掉计数
|
||||
ScriptLib.SetGroupVariableValue(context, "is_attack_count", 0)
|
||||
end
|
||||
|
||||
|
||||
|
||||
------------------------------------------------------------------
|
||||
dodge_challenge_Initialize()
|
||||
89
gdconf/game_data_config/lua/common/V3_3/TestEyepointLod.lua
Normal file
89
gdconf/game_data_config/lua/common/V3_3/TestEyepointLod.lua
Normal file
@@ -0,0 +1,89 @@
|
||||
--[[======================================
|
||||
|| filename: EyePointLOD
|
||||
|| owner: shuyi.chang
|
||||
|| description: EyePoint固定LOD测试
|
||||
|| LogName: ## [TestEyepointLOD]
|
||||
|| Protection:
|
||||
=======================================]]
|
||||
--[[
|
||||
local defs = {
|
||||
target_region_config_id = 1,
|
||||
related_big_region_config_id = 2,
|
||||
}
|
||||
--]]
|
||||
|
||||
local extraTriggers =
|
||||
{
|
||||
{ config_id = 50000001, name = "ENTER_REGION", event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_EVENT_ENTER_REGION", trigger_count = 0 },
|
||||
{ config_id = 50000002, name = "LEAVE_REGION", event = EventType.EVENT_LEAVE_REGION, source = "", condition = "", action = "action_EVENT_LEAVE_REGION", trigger_count = 0 },
|
||||
|
||||
}
|
||||
|
||||
local extraVariables =
|
||||
{
|
||||
-- 设置LOD层级
|
||||
{ config_id = 50000101, name = "lodLevel", value = 1, no_refresh = true },
|
||||
}
|
||||
|
||||
local pos = regions[defs.related_big_region_config_id].pos
|
||||
local markGadget = { config_id = 80001, gadget_id = 70220006, pos = { x = pos.x, y = pos.y, z = pos.z }, rot = { x = 0.000, y = 0.000, z = 0.000 }, level = 1 }
|
||||
|
||||
|
||||
--================================================================
|
||||
-- Local Functions
|
||||
--================================================================
|
||||
function LF_Initialize_Group(triggers, suites, variables, gadgets, regions)
|
||||
|
||||
-- insert triggers
|
||||
for i = 1, #extraTriggers do
|
||||
table.insert(triggers, extraTriggers[i])
|
||||
end
|
||||
|
||||
-- add triggers to suite
|
||||
for i = 1, #extraTriggers do
|
||||
-- 都放到初始suite 1中
|
||||
table.insert(suites[1].triggers,extraTriggers[i].name)
|
||||
|
||||
end
|
||||
|
||||
-- insert variables
|
||||
for i = 1, #extraVariables do
|
||||
table.insert(variables, extraVariables[i])
|
||||
end
|
||||
|
||||
-- table.insert(gadgets, markGadget)
|
||||
-- table.insert(suites[1].gadgets, markGadget.config_id)
|
||||
end
|
||||
|
||||
--================================================================
|
||||
-- Triggers
|
||||
--================================================================
|
||||
|
||||
function action_EVENT_ENTER_REGION(context, evt)
|
||||
ScriptLib.PrintContextLog(context, "## [TestEyepointLOD] player enters region "..evt.param1)
|
||||
|
||||
if evt.param1 == defs.target_region_config_id then
|
||||
local fix_lod_level = ScriptLib.GetGroupVariableValue(context, "lodLevel")
|
||||
local temp = ScriptLib.SetPlayerEyePointLOD(context, defs.target_region_config_id, defs.related_big_region_config_id, fix_lod_level)
|
||||
ScriptLib.PrintContextLog(context, "## [TestEyepointLOD] lod level is set to "..fix_lod_level..", succeed = "..temp)
|
||||
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_EVENT_LEAVE_REGION(context, evt)
|
||||
ScriptLib.PrintContextLog(context, "## [TestEyepointLOD] player leaves region "..evt.param1)
|
||||
|
||||
if evt.param1 == defs.target_region_config_id then
|
||||
local temp = ScriptLib.ClearPlayerEyePoint(context, defs.target_region_config_id)
|
||||
ScriptLib.PrintContextLog(context, "## [TestEyepointLOD] player eye point is cleared, succeed = "..temp)
|
||||
|
||||
end
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
--================================================================
|
||||
-- Initialization
|
||||
--================================================================
|
||||
LF_Initialize_Group(triggers, suites, variables, gadgets, regions)
|
||||
@@ -0,0 +1,460 @@
|
||||
--ServerUploadTool Save to [/root/env/data/lua/common/V3_4]
|
||||
--======================================================================================================================
|
||||
--|| Filename || Activity_SeaLampParkour
|
||||
--|| RelVersion || V3_4
|
||||
--|| Owner || shuo-yu
|
||||
--|| Description ||
|
||||
--|| LogName || ##[Activity_SeaLampParkour]
|
||||
--|| Protection ||
|
||||
--======================================================================================================================
|
||||
--Defs & Miscs || 需要LD配置的内容
|
||||
|
||||
--[[
|
||||
local defs = {
|
||||
|
||||
gallery_id = ,
|
||||
|
||||
--开启机关交互后,加载哪个/些suit
|
||||
load_on_start = {2},
|
||||
|
||||
--开启机关的configID,SelectOption为175
|
||||
starter_gadget = 0,
|
||||
|
||||
--终点region的configID
|
||||
end_regionID = 0,
|
||||
|
||||
--玩法RegionID,进入此圈开启性能优化,在suit1
|
||||
parkour_regions = {},
|
||||
|
||||
--全程终点在哪个suit,如果这个group非终点,则配0
|
||||
end_suite = 0,
|
||||
|
||||
--挑战限时秒
|
||||
challenge_time = 300,
|
||||
|
||||
--跑酷金币gadgetID
|
||||
gadget_token_id = 70220121,
|
||||
|
||||
--镜头注目
|
||||
look_EntityCid = 333004,
|
||||
follow_EntityCid = 333004,
|
||||
}
|
||||
--]]
|
||||
--Local Field
|
||||
|
||||
local RefData =
|
||||
{
|
||||
father_challenge_id = 2010050,
|
||||
child01_challenge_id = 2010051,
|
||||
child02_challenge_id = 2010052,
|
||||
}
|
||||
|
||||
local StartTriggers =
|
||||
{
|
||||
--gallery停止tirgger
|
||||
{ config_id = 34000010, name = "Gallery_Stop", event = EventType.EVENT_GALLERY_STOP, source = "", condition = "", action = "action_gallery_stop", trigger_count = 0 },
|
||||
--挑战操作台创建trigger
|
||||
{ config_id = 34000020, name = "Gadget_Create", event = EventType.EVENT_GADGET_CREATE, source = "", condition = "", action = "action_gadget_create", trigger_count = 0 },
|
||||
--选择操作台选项对应trigger
|
||||
{ config_id = 34000030, name = "Select_Option", event = EventType.EVENT_SELECT_OPTION, source = "", condition = "condition_select_option", action = "action_select_option", trigger_count = 0 },
|
||||
--挑战失败trigger 包括超时、主动关闭、团灭
|
||||
{ config_id = 34000040, name = "Challenge_Fail", event = EventType.EVENT_CHALLENGE_FAIL, source = "",condition = "", action = "action_challenge_fail", trigger_count= 0 },
|
||||
--coin_counter变化时更新gallery计分
|
||||
{ config_id = 34000050, name = "Coin_Get", event = EventType.EVENT_VARIABLE_CHANGE, source = "coin_counter", condition = "", action = "", trigger_count = 0, tag = "888" },
|
||||
--进入玩法region 打标记
|
||||
{ config_id = 34000060, name = "Enter_Gameplay_Region", event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_enter_GameplayRegion", trigger_count = 0 },
|
||||
--退出玩法region 挑战开启情况下退出region直接关闭gallery
|
||||
{ config_id = 34000070, name = "Leave_Gameplay_Region", event = EventType.EVENT_LEAVE_REGION, source = "", condition = "",action = "action_leave_GameplayRegion", trigger_count= 0 },
|
||||
--group卸载触发
|
||||
{ config_id = 34000080, name = "Group_Will_Unload", event = EventType.EVENT_GROUP_WILL_UNLOAD, source = "", condition = "", action = "action_group_will_unload", trigger_count = 0 },
|
||||
--进入教程region 弹相关reminderTemplate
|
||||
{ config_id = 34000090, name = "Enter_Tutorial_Region", event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_enter_TutorialRegion", trigger_count = 0 },
|
||||
}
|
||||
|
||||
local EndTriggers =
|
||||
{
|
||||
--跑酷终点trigger
|
||||
{ config_id = 34000091, name = "Enter_Region", event = EventType.EVENT_ENTER_REGION, source = "", condition = "condition_enter_final", action = "", trigger_count = 0, tag = "666" },
|
||||
--挑战成功trigger
|
||||
{ config_id = 34000092, name = "Challenge_Success", event = EventType.EVENT_CHALLENGE_SUCCESS, source = "", condition = "", action = "action_challenge_success", trigger_count= 0 },
|
||||
}
|
||||
|
||||
|
||||
--Condition Func
|
||||
--处理不能开启玩法的情况
|
||||
function condition_select_option(context, evt)
|
||||
--幻梦之门玩法中阻止挑战开启
|
||||
if ScriptLib.IsChallengeStartedByChallengeId(context, 267) then
|
||||
ScriptLib.ShowReminderByUid(context, {context.uid}, 400046)
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end
|
||||
--判断是不是终点圈
|
||||
function condition_enter_final(context, evt)
|
||||
if evt.param1 ~= defs.end_regionID then
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
--Action Func
|
||||
--进教程范围 弹教程reminder
|
||||
function action_enter_TutorialRegion(context, evt)
|
||||
|
||||
if defs.guide_regionID == nil then
|
||||
return 0
|
||||
elseif evt.param1 == defs.guide_regionID then
|
||||
LF_TryStartTutorial(context)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
--跑酷操作台创建时 加操作台选项
|
||||
function action_gadget_create(context, evt)
|
||||
|
||||
if defs.starter_gadget ~= evt.param1 then
|
||||
return -1
|
||||
end
|
||||
-- 设置操作台选项
|
||||
if 0 ~= ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, defs.starter_gadget, {175}) then
|
||||
LF_PrintLog(context, "设置操作台选项失败")
|
||||
return -1
|
||||
end
|
||||
|
||||
return 0
|
||||
end
|
||||
--点下选项后 玩法开启 改标记变量 切操作台 加载初始玩法suite 开启环境优化 开启gallery 开启挑战 触发镜头注目
|
||||
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
|
||||
for k,v in pairs(gadgets) do
|
||||
if v.config_id == defs.starter_gadget then
|
||||
center = v.pos
|
||||
break
|
||||
end
|
||||
end
|
||||
-- 400053:多人游戏状态下无法进行挑战
|
||||
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, base_info.group_id, defs.starter_gadget, 175)
|
||||
|
||||
--加载第一波suite
|
||||
for k, v in pairs(defs.load_on_start) do
|
||||
if 0 == ScriptLib.AddExtraGroupSuite(context, base_info.group_id, v) then
|
||||
LF_PrintLog(context, "加载suite"..v)
|
||||
end
|
||||
end
|
||||
|
||||
LF_SetEnvOptimize(context,true)
|
||||
|
||||
LF_InitChallenge(context)
|
||||
|
||||
-- --开启Gallery
|
||||
-- if 0 ~= ScriptLib.StartGallery(context, defs.gallery_id) then
|
||||
-- LF_PrintLog(context, "开启Gallery失败")
|
||||
-- else
|
||||
-- local nums = LF_GetCoinsNum()
|
||||
-- LF_PrintLog(context, "金币总数-"..nums)
|
||||
-- if 0 ~= ScriptLib.UpdatePlayerGalleryScore(context, defs.gallery_id, {["total_coin_count"] = nums}) then
|
||||
-- LF_PrintLog(context, "Gallery传金币数量失败")
|
||||
-- end
|
||||
-- end
|
||||
|
||||
--TODO:镜头注目
|
||||
LF_CameraAction(context)
|
||||
|
||||
return 0
|
||||
|
||||
end
|
||||
--挑战成功 关gallery reason lua设置成功
|
||||
function action_challenge_success(context,evt)
|
||||
if evt.param1 ~= RefData.father_challenge_id then
|
||||
return -1
|
||||
end
|
||||
|
||||
LF_PrintLog(context, "挑战成功处理")
|
||||
|
||||
LF_StopGamePlayByReason(context, 3)
|
||||
|
||||
return 0
|
||||
end
|
||||
--挑战失败 关gallery reason 超时、灭队、主动中断
|
||||
function action_challenge_fail(context, evt)
|
||||
if evt.param1 ~= RefData.father_challenge_id then
|
||||
return -1
|
||||
end
|
||||
--param2 剩余时间
|
||||
if evt.param2 <= 0 then
|
||||
-- 超时
|
||||
LF_StopGamePlayByReason(context, 1)
|
||||
else
|
||||
if ScriptLib.IsPlayerAllAvatarDie(context, context.owner_uid) then
|
||||
-- 团灭
|
||||
LF_PrintLog(context, "挑战失败-灭队")
|
||||
LF_StopGamePlayByReason(context, 8)
|
||||
else
|
||||
-- 主动中断
|
||||
LF_PrintLog(context, "挑战失败-客户端中断/其他")
|
||||
LF_StopGamePlayByReason(context, 2)
|
||||
end
|
||||
end
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
--进入玩法区域 打标记
|
||||
function action_enter_GameplayRegion(context, evt)
|
||||
--检查Region的configId是否是优化圈
|
||||
if LF_CheckIsInTable(context,evt.param1, defs.parkour_regions) then
|
||||
--流程未开始时不处理
|
||||
if ScriptLib.GetGroupTempValue(context, "is_in_region", {}) == -1 then
|
||||
LF_PrintLog(context, "is_in_region not set, group id: "..base_info.group_id)
|
||||
return 0
|
||||
end
|
||||
|
||||
ScriptLib.ChangeGroupTempValue(context, "is_in_region", 1, {})
|
||||
|
||||
if ScriptLib.GetGroupTempValue(context, "challenge_state", {}) == 1 then
|
||||
LF_PrintLog(context, "进入跑酷区域"..evt.param1)
|
||||
end
|
||||
end
|
||||
|
||||
return 0
|
||||
end
|
||||
--退出玩法区域 如果挑战已开 关gallery reason达到次数未成功
|
||||
function action_leave_GameplayRegion(context,evt)
|
||||
|
||||
--检查Region的configId是否是优化圈
|
||||
if LF_CheckIsInTable(context,evt.param1,defs.parkour_regions) then
|
||||
--流程未开始时不处理
|
||||
if ScriptLib.GetGroupTempValue(context, "is_in_region", {}) == -1 then
|
||||
LF_PrintLog(context, "is_in_region not set, group id: "..base_info.group_id)
|
||||
return 0
|
||||
end
|
||||
|
||||
ScriptLib.ChangeGroupTempValue(context, "is_in_region", -1, {})
|
||||
|
||||
--挑战未开始时不处理
|
||||
if ScriptLib.GetGroupTempValue(context, "challenge_state", {}) ~= 1 then
|
||||
LF_PrintLog(context, "challenge not start, group id: "..base_info.group_id)
|
||||
return 0
|
||||
end
|
||||
|
||||
LF_PrintLog(context, "出赛道区域"..evt.param1)
|
||||
|
||||
--如果完全出圈了,触发挑战失败
|
||||
local is_in_region = ScriptLib.GetGroupTempValue(context, "is_in_region", {})
|
||||
if is_in_region <= 0 then
|
||||
LF_StopGamePlayByReason(context, 4)
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
--group异常卸载停止挑战
|
||||
function action_group_will_unload(context,evt)
|
||||
|
||||
LF_PrintLog(context, "GROUP UNLOAD GroupID: "..base_info.group_id)
|
||||
ScriptLib.StopChallenge(context,1,0)
|
||||
|
||||
return 0
|
||||
end
|
||||
--打印停gallery原因
|
||||
function action_gallery_stop(context, evt)
|
||||
|
||||
LF_PrintLog(context, "GalleryID:"..evt.param1.."终止。原因:"..evt.param3)
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
--LF Func
|
||||
--查看是否为table元素
|
||||
function LF_CheckIsInTable(context, value, check_table)
|
||||
for i = 1,#check_table do
|
||||
if check_table[i] == value then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
--打印本活动相关Log
|
||||
function LF_PrintLog(context, content)
|
||||
local log = "## [Activity_SeaLampParkour] TD: "..content
|
||||
ScriptLib.PrintContextLog(context, log)
|
||||
end
|
||||
--玩法trigger、var初始化
|
||||
function LF_SeaLampParkour_Initialize()
|
||||
|
||||
LF_InsertTriggers(StartTriggers,1)
|
||||
LF_InsertTriggers(EndTriggers,defs.end_suite)
|
||||
|
||||
-- Vars
|
||||
table.insert(variables, { config_id = 50000001, name = "coin_counter", value = 0})
|
||||
|
||||
return 0
|
||||
end
|
||||
--插入trigger 并对table suites做越界保护
|
||||
function LF_InsertTriggers(TempTrigger,suiteIndex)
|
||||
if suiteIndex <= 0 or suiteIndex > #suites then
|
||||
return -1
|
||||
end
|
||||
|
||||
for k,v in pairs(TempTrigger) do
|
||||
table.insert(triggers,v)
|
||||
table.insert(suites[suiteIndex].triggers,v.name)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
--获取关卡配置的金币数目
|
||||
function LF_GetCoinsNum()
|
||||
local count = 0
|
||||
|
||||
for k, v in pairs(gadgets) do
|
||||
if v.gadget_id == defs.gadget_token_id then
|
||||
count = count + 1
|
||||
end
|
||||
end
|
||||
|
||||
return count
|
||||
end
|
||||
--重置关卡 变量重置、操作台重置、Group回到默认状态、关闭环境优化
|
||||
function LF_ResetLevel(context)
|
||||
|
||||
--变量重置 挑战状态以及金币计数
|
||||
ScriptLib.SetGroupVariableValue(context, "coin_counter", 0)
|
||||
ScriptLib.SetGroupTempValue(context, "challenge_state", 0, {})
|
||||
|
||||
-- 设置操作台为初始待交互状态
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, defs.starter_gadget, {175})
|
||||
ScriptLib.SetGadgetStateByConfigId(context, defs.starter_gadget, GadgetState.Default)
|
||||
|
||||
for i = 2, #suites do
|
||||
ScriptLib.RemoveExtraGroupSuite(context, base_info.group_id, i)
|
||||
end
|
||||
|
||||
LF_SetEnvOptimize(context,false)
|
||||
|
||||
ScriptLib.RefreshGroup(context, { group_id = base_info.group_id, suite = 1 })
|
||||
|
||||
end
|
||||
--设置环境优化的开启/关闭
|
||||
function LF_SetEnvOptimize(context, IsSet)
|
||||
--IsSet == true 代表对环境进行优化设置
|
||||
if IsSet == true then
|
||||
--关闭环境小动物
|
||||
ScriptLib.SwitchSceneEnvAnimal(context, 0)
|
||||
|
||||
ScriptLib.SetPlayerGroupVisionType(context, {context.uid}, {0})
|
||||
--此玩家只能看到0的Group
|
||||
|
||||
ScriptLib.ForbidPlayerRegionVision(context, context.uid)
|
||||
else
|
||||
--环境小动物恢复
|
||||
ScriptLib.SwitchSceneEnvAnimal(context, 2)
|
||||
|
||||
ScriptLib.RevertPlayerRegionVision(context, context.uid)
|
||||
|
||||
ScriptLib.SetPlayerGroupVisionType(context, {context.uid}, {1})
|
||||
end
|
||||
|
||||
return 0
|
||||
end
|
||||
--设置镜头注目
|
||||
function LF_CameraAction(context)
|
||||
|
||||
if nil ~= gadgets[defs.look_EntityCid] and nil ~= points[defs.follow_EntityCid] then
|
||||
|
||||
local pos = gadgets[defs.look_EntityCid].pos
|
||||
local camPos = points[defs.follow_EntityCid].pos
|
||||
|
||||
--触发镜头注目,强制注目形式,不广播其他玩家
|
||||
ScriptLib.BeginCameraSceneLookWithTemplate(context, 1,
|
||||
{look_configid=0, look_pos = pos,
|
||||
follow_type =2, follow_pos = camPos,is_broadcast =false, delay = 0, })
|
||||
|
||||
else
|
||||
LF_PrintLog(context, "缺少镜头参数 Group: "..base_info.group_id)
|
||||
end
|
||||
|
||||
return 0
|
||||
end
|
||||
--弹玩法教程templateReminder
|
||||
function LF_TryStartTutorial(context)
|
||||
|
||||
local ownerUid = context.owner_uid
|
||||
|
||||
if 0 ~= ScriptLib.AssignPlayerShowTemplateReminder(context,158,{param_uid_vec={},param_vec={},uid_vec={context.uid}}) then
|
||||
LF_PrintLog(context, "弹教程失败")
|
||||
else
|
||||
LF_PrintLog(context, "弹教程成功")
|
||||
end
|
||||
|
||||
return 0
|
||||
end
|
||||
--初始化玩法挑战
|
||||
function LF_InitChallenge(context)
|
||||
|
||||
--挑战状态标记
|
||||
ScriptLib.SetGroupTempValue(context, "challenge_state", 1, {})
|
||||
|
||||
-- 开父挑战再Attach保序
|
||||
ScriptLib.CreateFatherChallenge(context, 1, RefData.father_challenge_id, defs.challenge_time, {success = 10, fail = 5})
|
||||
if 0 == ScriptLib.StartFatherChallenge(context, 1) then
|
||||
LF_PrintLog(context, "开启父挑战成功")
|
||||
else
|
||||
LF_PrintLog(context, "开启父挑战失败")
|
||||
end
|
||||
-- param table:param1-event类型, param2-Tag, param3:次数, param4:达到次数是否success
|
||||
-- 限时到达
|
||||
if 0 ~= ScriptLib.AttachChildChallenge(context, 1, 101, RefData.child01_challenge_id, {4, 666, 1, 1}, {}, {success = 10, fail = 5}) then
|
||||
LF_PrintLog(context, "子挑战2010051添加失败")
|
||||
end
|
||||
-- 收集金币
|
||||
if 0 ~= ScriptLib.AttachChildChallenge(context, 1, 102, RefData.child02_challenge_id, {3, 888, LF_GetCoinsNum()}, {}, {success = 0, fail = 0}) then
|
||||
LF_PrintLog(context, "子挑战2010052添加失败")
|
||||
end
|
||||
|
||||
return 0
|
||||
end
|
||||
--停gallery 发送reason 并重置关卡
|
||||
function LF_StopGamePlayByReason(context, reason)
|
||||
|
||||
-- LF_PrintLog(context, "Gallery停止 GalleryID: "..defs.gallery_id)
|
||||
-- --停Gallery
|
||||
-- --Reason 0-NONE 1-超时 2-客户端中断 3-lua设置成功 4-lua设置失败
|
||||
-- ScriptLib.StopGalleryByReason(context, defs.gallery_id, reason)
|
||||
-- LF_PrintLog(context, "Reason: "..reason)
|
||||
|
||||
LF_ResetLevel(context)
|
||||
LF_PrintLog(context, "Level Reset")
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
--ServerLuaCall
|
||||
--金币更新计数 物件复用3.0 slc名称保持与3.0一致
|
||||
function SLC_Activity_Parkour_PickCoin(context)
|
||||
-- 触发挑战trigger
|
||||
ScriptLib.ChangeGroupVariableValue(context, "coin_counter", 1)
|
||||
|
||||
-- -- pick_up为拾取类型。0:金币
|
||||
-- if 0 ~= ScriptLib.UpdatePlayerGalleryScore(context, defs.gallery_id, {["pick_up"] = 0}) then
|
||||
-- LF_PrintLog(context, "Gallery通信失败")
|
||||
-- end
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
--End Lua
|
||||
LF_SeaLampParkour_Initialize()
|
||||
@@ -0,0 +1,821 @@
|
||||
--ServerUploadTool Save to [/root/env/data/lua/common/V3_4]
|
||||
--======================================================================================================================
|
||||
--|| Filename || Activity_SeaLamp_BoatRaceV3
|
||||
--|| Owner || zijun.ma
|
||||
--|| Description || 收纳浪船挑战船体相关
|
||||
--|| LogName || TD_BoatRaceV3
|
||||
--|| Protection ||
|
||||
--======================================================================================================================
|
||||
--=====================================
|
||||
-- 测试包
|
||||
--======================================
|
||||
--测试指令
|
||||
--[[
|
||||
group SETVAR 133212587 BoatTest 1
|
||||
--]]
|
||||
--=====================================
|
||||
-- 常量
|
||||
--======================================
|
||||
local PlayCfg= {
|
||||
ReviveCounter = 10,
|
||||
ReviveTimeAxis = {}, -- 根据ReviveCounter自动生成
|
||||
AirdropDelay = {2},
|
||||
SafePos = {x = -3840.878, y = 200.000, z = -1998.566}
|
||||
}
|
||||
|
||||
-- 空投车的行进路线
|
||||
local AirdropPointList = {
|
||||
[1] = {pointArray = 321200054, pointCid = 587006, list = {1,2,3,4}},
|
||||
[2] = {pointArray = 321200054, pointCid = 587007, list = {1,2,3,4}},
|
||||
[3] = {pointArray = 321200054, pointCid = 587008, list = {1,2,3,4}},
|
||||
[4] = {pointArray = 321200054, pointCid = 587009, list = {1,2,3,4}},
|
||||
}
|
||||
|
||||
-- 空投的清单
|
||||
local AirdropItemList = {
|
||||
[1] = {1,1,1,2},
|
||||
[2] = {2,1,1,1},
|
||||
}
|
||||
|
||||
local SGVProp = {
|
||||
HP = "SGV_BoatV3_HP",
|
||||
HPMax = "SGV_BoatV3_HPMax",
|
||||
Coin = "SGV_BoatV3_Coin",
|
||||
Ghost = "SGV_BoatV3_Ghost", -- 是否处于幽灵模式
|
||||
Progress = "SGV_BoatV3_Progress", -- 复活进度值
|
||||
SkillIdx = "SGV_BoatV3_SkillIndex", -- 对应获得技能序号。0为没有技能
|
||||
}
|
||||
|
||||
local TempProp = {
|
||||
NextPoint = "NextPoint",
|
||||
DropCoinIdx = "DropCoinIdx",
|
||||
DropBombIdx = "DropBombIdx",
|
||||
AirdropIdx = "AirdropIdx", -- 游戏中的空投船计数
|
||||
AirdropPointListDec = "AirdropPointListDec", -- 记录已经使用过的行进路线
|
||||
}
|
||||
|
||||
-- 需要同时处理多个的Index
|
||||
local TempIndexProp = {
|
||||
AirdropPointListIdx = "AirdropPointListIdx", -- 当前对应的行进路线(关联AirdropPointList)
|
||||
AirdropItemListIdx = "AirdropItemListIdx", --当前对应的空投清单(关联AirdropItemList)
|
||||
AirdropItemIdx = "AirdropItemIdx", --对应AirdropItemList,获取投放硬币还是炸弹
|
||||
}
|
||||
|
||||
local ExhibitionProp ={
|
||||
CollectCoinNum = "Activity_BoatRaceV3_CollectCoinNum",
|
||||
HighestCoinNum = "Activity_BoatRaceV3_HighestCoinNum",
|
||||
HighestLiveTime = "Activity_BoatRaceV3_HighestLiveTime",
|
||||
DeathNum = "Activity_BoatRaceV3_DeathNum",
|
||||
CollectItemNum = "Activity_BoatRaceV3_CollectItemNum",
|
||||
UseSkillTimes = "Activity_BoatRaceV3_UseSkillTimes",
|
||||
DestroyGadgetTimes = "Activity_BoatRaceV3_DestroyGadgetTimes",
|
||||
DropCoinNum = "Activity_BoatRaceV3_DropCoinNum",
|
||||
SeaLampNum = "Activity_BoatRaceV3_SeaLampNum",
|
||||
CorrectRiddleNum = "Activity_BoatRaceV3_CorrectRiddleNum",
|
||||
BigCoinNum = "Activity_BoatRaceV3_BigCoinNum",
|
||||
}
|
||||
|
||||
local PlayerData = {
|
||||
[1] = { DeathCoin = 53040101},
|
||||
[2] = { DeathCoin = 53040102},
|
||||
[3] = { DeathCoin = 53040103},
|
||||
[4] = { DeathCoin = 53040104},
|
||||
}
|
||||
|
||||
local LevelDataName = {
|
||||
DropCoin = "DropCoin",
|
||||
DropBomb = "DropBomb",
|
||||
AirDrop = "AirDrop",
|
||||
}
|
||||
|
||||
-- 关卡临时创建CidList
|
||||
local LevelData = {
|
||||
[LevelDataName.DropCoin] = {gadgetid = 70290784,startCid = 53040201, num = 40, tempProp = TempProp.DropCoinIdx, cidList = {}}, -- {53040201,53040202}
|
||||
[LevelDataName.DropBomb] = {gadgetid = 70290785,startCid = 53040301, num = 10, tempProp = TempProp.DropBombIdx, cidList = {}},
|
||||
[LevelDataName.AirDrop] = {gadgetid = 70290783,startCid = 53040401, num = 4, tempProp = TempProp.AirdropIdx, cidList = {}},
|
||||
}
|
||||
|
||||
local Tri_BoatRaceV3 = {
|
||||
{ keyWord = "BoatRevive", keyWordType = "1", event = EventType.EVENT_TIME_AXIS_PASS, source = "Revive1", trigger_count = 0},
|
||||
{ keyWord = "BoatRevive", keyWordType = "2", event = EventType.EVENT_TIME_AXIS_PASS, source = "Revive2", trigger_count = 0},
|
||||
{ keyWord = "BoatRevive", keyWordType = "3", event = EventType.EVENT_TIME_AXIS_PASS, source = "Revive3", trigger_count = 0},
|
||||
{ keyWord = "BoatRevive", keyWordType = "4", event = EventType.EVENT_TIME_AXIS_PASS, source = "Revive4", trigger_count = 0},
|
||||
{ keyWord = "BoatTest", event = EventType.EVENT_VARIABLE_CHANGE, source = "BoatTest", trigger_count = 0},
|
||||
{ keyWord = "GroupLoad", event = EventType.EVENT_GROUP_LOAD, source = "", trigger_count = 0},
|
||||
{ keyWord = "AirdropMove", event = EventType.EVENT_PLATFORM_ARRIVAL, source = "", trigger_count = 0},
|
||||
}
|
||||
|
||||
|
||||
function LF_Initialize_BoatRaceV3()
|
||||
LF_AutoGenTri()
|
||||
LF_GenTrigger(Tri_BoatRaceV3,53040001,{1})
|
||||
LF_InitReviveTimeAxis()
|
||||
-- LevelData中Gadget数据占坑
|
||||
LF_GenGadget(LevelDataName.AirDrop)
|
||||
LF_GenGadget(LevelDataName.DropCoin)
|
||||
LF_GenGadget(LevelDataName.DropBomb)
|
||||
|
||||
local var = { config_id= 53049001, name = "BoatTest", value = 0, no_refresh = false } --Boss战的步骤计数器
|
||||
variables[var.name] = var
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
function LF_GenTrigger(triTable,startCid,insertSuiteList)
|
||||
local startConfigID = startCid
|
||||
for _,v in pairs(triTable) do
|
||||
v.config_id = startConfigID
|
||||
if v.keyWordType == nil then
|
||||
v.name = "tri_" .. v.keyWord
|
||||
else
|
||||
v.name = "tri_" .. v.keyWord .. v.keyWordType
|
||||
end
|
||||
v.action = "action_" .. v.keyWord
|
||||
v.condition = ""
|
||||
startConfigID = startConfigID + 1
|
||||
table.insert(triggers, v)
|
||||
end
|
||||
LF_InsertTriggers(Tri_BoatRaceV3,insertSuiteList)
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
function LF_InitReviveTimeAxis()
|
||||
for i =1,PlayCfg.ReviveCounter do
|
||||
table.insert(PlayCfg.ReviveTimeAxis,i)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function LF_GenGadget(levelDataName)
|
||||
local levelData = LevelData[levelDataName]
|
||||
local startCid = levelData.startCid
|
||||
for i = 1,levelData.num do
|
||||
gadgets[startCid] = { config_id = startCid, gadget_id = levelData.gadgetid,
|
||||
pos = PlayCfg.SafePos,rot = { x = 0.000, y = 0.000, z = 0.000 },
|
||||
is_use_point_array = true, vision_level = VisionLevelType.VISION_LEVEL_SUPER,
|
||||
level = 1 , area_id = 13}
|
||||
table.insert(levelData.cidList,startCid)
|
||||
startCid = startCid + 1
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function LF_AutoGenTri()
|
||||
local keyWord = 0
|
||||
for i = 1,4 do
|
||||
keyWord = keyWord + 1
|
||||
local keyWordType = tostring(keyWord)
|
||||
local sourceName = "AirdropStartMove" .. keyWordType
|
||||
local trigger = {keyWord = "AirdropStartMove",keyWordType=keyWordType,event=EventType.EVENT_TIME_AXIS_PASS,source = sourceName, trigger_count = 0}
|
||||
table.insert(Tri_BoatRaceV3, trigger)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
--=====================================
|
||||
--Action
|
||||
--======================================
|
||||
-- GroupLoad测试
|
||||
function action_GroupLoad(context,evt)
|
||||
ScriptLib.PrintContextLog(context, "## TD_BoatRaceV3 GroupLoad|加载成功校验")
|
||||
ScriptLib.SetGroupTempValue(context, TempProp.DropCoinIdx, 0, {})
|
||||
ScriptLib.SetGroupTempValue(context, TempProp.DropBombIdx, 0, {})
|
||||
ScriptLib.SetGroupTempValue(context, TempProp.AirdropIdx, 0, {})
|
||||
ScriptLib.SetGroupTempValue(context, TempProp.AirdropPointListDec, 0, {})
|
||||
return 0
|
||||
end
|
||||
|
||||
-- BoatTest测试
|
||||
function action_BoatTest(context,evt)
|
||||
LF_Airdrop_Appear(context)
|
||||
return 0
|
||||
end
|
||||
|
||||
-- 时间轴控制幽灵计数器
|
||||
function action_BoatRevive(context,evt)
|
||||
local playerIndex = LF_GetIndexByKeyName(evt.source_name)
|
||||
local uid = LF_GetPlayerUidByIndex(context,playerIndex)
|
||||
|
||||
if 0 == uid then
|
||||
return 0
|
||||
end
|
||||
|
||||
local curProgress = ScriptLib.GetTeamServerGlobalValue(context, uid, SGVProp.Progress)
|
||||
curProgress = curProgress - 1
|
||||
ScriptLib.SetTeamServerGlobalValue(context, uid, SGVProp.Progress, curProgress)
|
||||
if curProgress == 0 then
|
||||
ScriptLib.SetTeamServerGlobalValue(context, uid, SGVProp.Ghost, 0)
|
||||
end
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
-- 空投船管理
|
||||
function action_AirdropMove(context,evt)
|
||||
-- 是不是空投船
|
||||
local moveCid = evt.param1
|
||||
|
||||
if gadgets[moveCid] == nil then
|
||||
return 0
|
||||
end
|
||||
|
||||
if 70290783 ~= gadgets[moveCid].gadget_id then
|
||||
return 0
|
||||
end
|
||||
|
||||
-- 空投船逻辑
|
||||
local index = LF_LevelData_GetIndexByCid(LevelDataName.AirDrop,moveCid)
|
||||
local pointListIndex = LF_GetTempIndexProp(context,TempIndexProp.AirdropPointListIdx,index)
|
||||
local pointList = AirdropPointList[pointListIndex]
|
||||
if pointList == nil then
|
||||
return 0
|
||||
end
|
||||
|
||||
local curPointList = pointList.list
|
||||
if curPointList == nil then
|
||||
return 0
|
||||
end
|
||||
-- 是否是最后一个点
|
||||
if evt.param3 == curPointList[#curPointList] then
|
||||
-- 处理消失
|
||||
LF_Airdrop_Disappear(context,index)
|
||||
else
|
||||
-- 处理掉落情报
|
||||
LF_Airdrop_Throw(context,index)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
-- 船体开始运动
|
||||
function action_AirdropStartMove(context,evt)
|
||||
local index = LF_GetIndexByString(evt.source_name,"AirdropStartMove")
|
||||
local cid = LF_LevelData_GetCidByIndex(LevelDataName.AirDrop,index)
|
||||
local pointListIdx = LF_GetTempIndexProp(context,TempIndexProp.AirdropPointListIdx,index)
|
||||
local pointList = AirdropPointList[pointListIdx]
|
||||
|
||||
local msg = "## TD_BoatRaceV3 action_AirdropStartMove"
|
||||
msg = msg .. "|index=" .. tostring(index)
|
||||
msg = msg .. "|cid=" .. tostring(cid)
|
||||
msg = msg .. "|pointListIdx=" .. tostring(pointListIdx)
|
||||
ScriptLib.PrintContextLog(context, msg)
|
||||
|
||||
if pointList == nil then
|
||||
return 0
|
||||
end
|
||||
|
||||
-- 船体开始沿固定轨迹移动
|
||||
ScriptLib.SetPlatformPointArray(context, cid, pointList.pointArray, pointList.list, { route_type = 0 })
|
||||
return 0
|
||||
end
|
||||
|
||||
--=====================================
|
||||
--LocalFunction
|
||||
--======================================
|
||||
-- 船体出现
|
||||
function LF_Airdrop_Appear(context)
|
||||
-- 走不重复随机
|
||||
local selectAirdropPointListIndex = LF_Airdrop_SelectAirdropPointList(context)
|
||||
|
||||
local selectAirdropPointList = AirdropPointList[selectAirdropPointListIndex]
|
||||
|
||||
local msg = "## TD_BoatRaceV3 LF_Airdrop_Appear"
|
||||
msg = msg .. "|selectAirdropPointListIndex=" .. tostring(selectAirdropPointListIndex)
|
||||
ScriptLib.PrintContextLog(context, msg)
|
||||
|
||||
if selectAirdropPointList == nil then
|
||||
return 0
|
||||
end
|
||||
|
||||
local selectPointCid = selectAirdropPointList.pointCid
|
||||
if selectPointCid == nil then
|
||||
return 0
|
||||
end
|
||||
|
||||
local selectPointInfo = points[selectPointCid]
|
||||
if selectPointInfo == nil then
|
||||
return 0
|
||||
end
|
||||
|
||||
local selectPointPos = selectPointInfo.pos
|
||||
-- 创建船体(会返回一个Index)
|
||||
local airdropIndex = LF_LevelData_CreateLevelDataGadget(context,LevelDataName.AirDrop,selectPointPos,{x=0,y=0,z=0})
|
||||
|
||||
if airdropIndex > 0 then
|
||||
-- 启动空投船对应的时间轴(延时开始移动)
|
||||
ScriptLib.InitTimeAxis(context, "AirdropStartMove".. tostring(airdropIndex), PlayCfg.AirdropDelay, false)
|
||||
-- 存储对应空投船的点阵Index
|
||||
LF_SetTempIndexProp(context,TempIndexProp.AirdropPointListIdx,airdropIndex,selectAirdropPointListIndex)
|
||||
-- 确认对应空投船的空投清单 AirdropItemListIndex
|
||||
local selectAirdropItemListIdx = LF_Random(context,#AirdropItemList)
|
||||
LF_SetTempIndexProp(context,TempIndexProp.AirdropItemListIdx,airdropIndex,selectAirdropItemListIdx)
|
||||
-- 初始化ItemIdx
|
||||
LF_SetTempIndexProp(context,TempIndexProp.AirdropItemIdx,airdropIndex,1)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
-- 随机选择一个未使用的空投车行进路线并标记
|
||||
function LF_Airdrop_SelectAirdropPointList(context)
|
||||
local pointListDec = ScriptLib.GetGroupTempValue(context, TempProp.AirdropPointListDec, {})
|
||||
local binArray = LF_DecToBin(pointListDec,#AirdropPointList)
|
||||
local selectIndex = LF_SelectRandomIdxFromDec(context,pointListDec,#AirdropPointList)
|
||||
|
||||
if selectIndex > 0 then
|
||||
local newPointListDec = LF_ChangeIndexValueFromDec(pointListDec,#AirdropPointList,selectIndex,1)
|
||||
|
||||
local msg = "## TD_BoatRaceV3 LF_Airdrop_SelectAirdropPointList"
|
||||
msg = msg .. "|pointListDec=" .. tostring(pointListDec)
|
||||
msg = msg .. "|newPointListDec=" .. tostring(newPointListDec)
|
||||
msg = msg .. "|binArray=" .. LF_ArrayToString(binArray)
|
||||
msg = msg .. "|selectIndex=" .. tostring(selectIndex)
|
||||
ScriptLib.PrintContextLog(context, msg)
|
||||
|
||||
ScriptLib.SetGroupTempValue(context,TempProp.AirdropPointListDec, newPointListDec, {})
|
||||
return selectIndex
|
||||
end
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
-- 船体消失
|
||||
function LF_Airdrop_Disappear(context,index)
|
||||
local cid = LF_LevelData_GetCidByIndex(LevelDataName.AirDrop,index)
|
||||
-- 设置船体消失
|
||||
ScriptLib.SetGadgetStateByConfigId(context,cid,201)
|
||||
return 0
|
||||
end
|
||||
|
||||
-- 空投抛物的LocalFunction
|
||||
function LF_Airdrop_Throw(context,index)
|
||||
-- 从船体点位创建一个投掷物
|
||||
local cid = LF_LevelData_GetCidByIndex(LevelDataName.AirDrop,index)
|
||||
local entityId = ScriptLib.GetEntityIdByConfigId(context, cid)
|
||||
local curPos = ScriptLib.GetPosByEntityId(context, entityId)
|
||||
|
||||
local curAirdropItemListIdx = LF_GetTempIndexProp(context,TempIndexProp.AirdropItemListIdx,index)
|
||||
local curAirdropItemIdx = LF_GetTempIndexProp(context,TempIndexProp.AirdropItemIdx,index)
|
||||
local curItemList = AirdropItemList[curAirdropItemListIdx]
|
||||
local curItem = curItemList[curAirdropItemIdx]
|
||||
|
||||
--日志查阅
|
||||
local msg = "## TD_BoatRaceV3 LF_Airdrop_Throw"
|
||||
msg = msg .. "|entityId=" .. entityId
|
||||
msg = msg .. "|curPos=" .. LF_ArrayToString({ curPos.x,curPos.y,curPos.z })
|
||||
msg = msg .. "|index=" .. tostring(index)
|
||||
msg = msg .. "|curAirdropItemListIdx=" .. tostring(curAirdropItemListIdx)
|
||||
msg = msg .. "|curAirdropItemIdx=" .. tostring(curAirdropItemIdx)
|
||||
msg = msg .. "|curItemList=" .. LF_ArrayToString(curItemList)
|
||||
msg = msg .. "|curItem=" .. tostring(curItem)
|
||||
ScriptLib.PrintContextLog(context, msg)
|
||||
|
||||
if curItemList == nil then
|
||||
ScriptLib.PrintContextLog(context, "## TD_BoatRaceV3 LF_Airdrop_Throw|数据不合法")
|
||||
return 0
|
||||
end
|
||||
|
||||
if 1 == curItem then
|
||||
-- 出金币
|
||||
LF_LevelData_CreateLevelDataGadget(context,LevelDataName.DropCoin,curPos,{ x=90, y=0, z=0 })
|
||||
-- 记录进度
|
||||
LF_SetTempIndexProp(context,TempIndexProp.AirdropItemIdx,index,curAirdropItemIdx+1)
|
||||
return 0
|
||||
end
|
||||
if 2 == curItem then
|
||||
-- 出炸药桶
|
||||
LF_LevelData_CreateLevelDataGadget(context,LevelDataName.DropBomb,curPos,{ x=90, y=0, z=0 })
|
||||
-- 记录进度
|
||||
LF_SetTempIndexProp(context,TempIndexProp.AirdropItemIdx,index,curAirdropItemIdx+1)
|
||||
return 0
|
||||
end
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
-- 尝试创建一个LevelData对应的物件
|
||||
function LF_LevelData_CreateLevelDataGadget(context,levelDataName,pos,rot)
|
||||
-- (例如: LevelData[LevelDataName.DropCoin]
|
||||
local levelDataProp = LevelData[levelDataName]
|
||||
-- 获取当前最大Index(例如:取DropCoinIdx)
|
||||
local index = ScriptLib.GetGroupTempValue(context, levelDataProp.tempProp, {})
|
||||
-- 最大Index + 1 (例如:取DropCoinIdx += 1)
|
||||
index = index + 1
|
||||
if index > levelDataProp.num then
|
||||
-- 如果达到上限,则不予创建
|
||||
ScriptLib.PrintContextLog(context, "## TD_BoatRaceV3 LF_LevelData_CreateLevelDataGadget|创建数量达到上限,不予创建")
|
||||
return 0
|
||||
end
|
||||
|
||||
-- 获取对应Cid
|
||||
local createCid = levelDataProp.startCid + index - 1
|
||||
-- 创建对应Gadget
|
||||
ScriptLib.CreateGadgetByConfigIdByPos(context,createCid,{x=pos.x,y=pos.y,z=pos.z},rot)
|
||||
-- 更新tempPropIndex(形如DropCoinIdx=> +=1)
|
||||
ScriptLib.SetGroupTempValue(context, levelDataProp.tempProp, index, {})
|
||||
return index
|
||||
end
|
||||
|
||||
-- 根据Index获取对应Cid
|
||||
function LF_LevelData_GetCidByIndex(levelDataName,index)
|
||||
local levelDataProp = LevelData[levelDataName]
|
||||
if levelDataProp ~= nil then
|
||||
if index <= levelDataProp.num then
|
||||
return levelDataProp.cidList[index]
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
-- 根据ConfigID获取对应Index
|
||||
function LF_LevelData_GetIndexByCid(levelDataName,cid)
|
||||
local levelDataProp = LevelData[levelDataName]
|
||||
if levelDataProp ~= nil then
|
||||
local index = cid - levelDataProp.startCid + 1
|
||||
if index <= levelDataProp.num then
|
||||
return index
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
-- 根据字符串解析Index
|
||||
function LF_GetIndexByString(str,propName)
|
||||
local indexString = string.gsub(str,propName,"")
|
||||
local index = tonumber(indexString)
|
||||
if index == nil then
|
||||
return 0
|
||||
end
|
||||
return index
|
||||
end
|
||||
|
||||
-- 获取形如"xx01"的tempValue
|
||||
function LF_GetTempIndexProp(context,propName,index)
|
||||
local propValue = ScriptLib.GetGroupTempValue(context, propName..tostring(index), {})
|
||||
return propValue
|
||||
end
|
||||
|
||||
-- 设置形如"xx01"的tempValue
|
||||
function LF_SetTempIndexProp(context,propName,index,value)
|
||||
ScriptLib.SetGroupTempValue(context, propName..tostring(index),value, {})
|
||||
return 0
|
||||
end
|
||||
--=====================================
|
||||
--SLC
|
||||
--=====================================
|
||||
-- 获取金币
|
||||
function SLC_PlayerGetCoin(context,param1)
|
||||
local uid = context.uid
|
||||
local config_id = ScriptLib.GetGadgetConfigId(context, { gadget_eid = context.target_entity_id })
|
||||
|
||||
LF_SLCDebug(context,"SLC_PlayerGetCoin")
|
||||
|
||||
if 0 == config_id then
|
||||
-- 未发现金币
|
||||
return 0
|
||||
end
|
||||
if 201 == ScriptLib.GetGadgetStateByConfigId(context, 0, config_id) then
|
||||
-- 金币状态已扭转
|
||||
return 0
|
||||
end
|
||||
|
||||
local msg = "## TD_BoatRaceV3 SLC_PlayerGetCoin"
|
||||
msg = msg .. "|config_id=" .. config_id
|
||||
msg = msg .. "|param1=" .. param1
|
||||
ScriptLib.PrintContextLog(context, msg)
|
||||
|
||||
-- 获取金币对应数量
|
||||
LF_GetCoinNumByGV(context,uid,param1,config_id)
|
||||
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
-- 击杀时触发
|
||||
function SLC_PlayerDestroyItem(context)
|
||||
LF_SLCDebug(context,"SLC_PlayerDestoryItem")
|
||||
|
||||
local uid = context.uid
|
||||
local config_id = ScriptLib.GetGadgetConfigId(context, { gadget_eid = context.target_entity_id })
|
||||
if 0 == config_id then
|
||||
return 0
|
||||
end
|
||||
|
||||
ScriptLib.AddTeamServerGlobalValue(context, uid, SGVProp.Coin, 1)
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
-- 对应玩家获取道具
|
||||
function SLC_PlayerGetItem(context)
|
||||
LF_SLCDebug(context,"SLC_PlayerGetItem")
|
||||
|
||||
local uid = context.uid
|
||||
local config_id = ScriptLib.GetGadgetConfigId(context, { gadget_eid = context.target_entity_id })
|
||||
if 0 == config_id then
|
||||
return 0
|
||||
end
|
||||
if 201 == ScriptLib.GetGadgetStateByConfigId(context, 0, config_id) then
|
||||
-- 道具状态已扭转
|
||||
return 0
|
||||
end
|
||||
|
||||
-- 改变对应道具球状态
|
||||
ScriptLib.SetGadgetStateByConfigId(context, config_id, 201)
|
||||
LF_GetItemBall(context,uid)
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
-- 对应玩家使用道具
|
||||
function SLC_PlayerUseItem(context)
|
||||
LF_SLCDebug(context,"SLC_PlayerUseItem")
|
||||
|
||||
local uid = context.uid
|
||||
ScriptLib.SetTeamServerGlobalValue(context, uid, SGVProp.SkillIdx, 0)
|
||||
return 0
|
||||
end
|
||||
|
||||
-- 对应玩家掉落金币的逻辑
|
||||
function SLC_PlayerDamage(context)
|
||||
LF_SLCDebug(context,"SLC_PlayerDropCoin")
|
||||
|
||||
local uid = context.uid
|
||||
-- 获取对应玩家的HP
|
||||
local hp = ScriptLib.GetTeamServerGlobalValue(context, uid, SGVProp.HP)
|
||||
hp = math.max(0,hp-1)
|
||||
ScriptLib.SetTeamServerGlobalValue(context, uid, SGVProp.HP, hp)
|
||||
|
||||
if hp == 0 then
|
||||
LF_EnterGhost(context,evt)
|
||||
end
|
||||
|
||||
return 0
|
||||
end
|
||||
--[[=====================================
|
||||
|| 本地函数
|
||||
--======================================]]
|
||||
-- 初始化玩家序号(作为联机时唯一标记)
|
||||
function LF_InitPlayerIndex(context)
|
||||
local uid_list = ScriptLib.GetSceneUidList(context)
|
||||
for key,uid in pairs(uid_list) do
|
||||
LF_SetPlayerProp(context,"Player",uid,key)
|
||||
ScriptLib.SetGroupTempValue(context, "UidIndex" .. key,uid, {})
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function LF_GetPlayerUidByIndex(context,Index)
|
||||
if index < 1 and index > 4 then
|
||||
return 0
|
||||
end
|
||||
local uid = ScriptLib.GetGroupTempValue(context, UidIndex..Index, {})
|
||||
return uid
|
||||
end
|
||||
|
||||
function LF_GetIndexByKeyName(keyName)
|
||||
if keyName == "Revive1" then
|
||||
return 1
|
||||
end
|
||||
if keyName == "Revive2" then
|
||||
return 2
|
||||
end
|
||||
if keyName == "Revive3" then
|
||||
return 3
|
||||
end
|
||||
if keyName == "Revive4" then
|
||||
return 4
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
-- 写入对应玩家的Prop
|
||||
function LF_SetPlayerProp(context,uidProp,uid,value)
|
||||
ScriptLib.SetGroupTempValue(context, uidProp..uid,value, {})
|
||||
return 0
|
||||
end
|
||||
|
||||
-- 读取对应玩家的Prop
|
||||
function LF_GetPlayerProp(context,uidProp,uid)
|
||||
local index = ScriptLib.GetGroupTempValue(context, uidProp..uid, {})
|
||||
return index
|
||||
end
|
||||
|
||||
-- 金币效果结算
|
||||
function LF_GetCoinNumByGV(context,uid,globalValue,cid)
|
||||
|
||||
local msg = "## TD_BoatRaceV3 LF_GetCoinNumByGV"
|
||||
msg = msg .. "|uid=" .. uid
|
||||
msg = msg .. "|globalValue=" .. globalValue
|
||||
msg = msg .. "|cid=" .. cid
|
||||
ScriptLib.PrintContextLog(context, msg)
|
||||
if globalValue == 1.0 then
|
||||
-- 普通金币
|
||||
ScriptLib.AddTeamServerGlobalValue(context, uid, SGVProp.Coin, 1)
|
||||
-- 改变对应金币状态
|
||||
ScriptLib.SetGadgetStateByConfigId(context, cid, 201)
|
||||
return 1
|
||||
end
|
||||
if globalValue == 2.0 then
|
||||
-- 大金币
|
||||
ScriptLib.AddTeamServerGlobalValue(context, uid, SGVProp.Coin, 10)
|
||||
-- 改变对应金币状态
|
||||
ScriptLib.SetGadgetStateByConfigId(context, cid, 201)
|
||||
return 10
|
||||
end
|
||||
if globalValue == 3.0 then
|
||||
-- 亡语金币
|
||||
local coinOwnerIndex = gadgets[cid].uidIndex
|
||||
local coinOwnerUid = LF_GetPlayerUidByIndex(context,coinOwnerIndex)
|
||||
local coinNum = LF_GetPlayerProp(context,"DropCoin",coinOwnerUid)
|
||||
if coinNum > 0 then
|
||||
ScriptLib.AddTeamServerGlobalValue(context, uid, SGVProp.Coin, coinNum)
|
||||
-- 改变对应金币状态
|
||||
ScriptLib.SetGadgetStateByConfigId(context, cid, 201)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
end
|
||||
|
||||
-- 道具球效果结算
|
||||
function LF_GetItemBall(context,uid)
|
||||
-- 此处疑似可能要迭代,不是纯随机
|
||||
local randomSkillIndex = LF_Random(context,3)
|
||||
ScriptLib.PrintContextLog(context, "##TD_BoatRaceV3 | LF_GetItemBall 获取技能道具,当前技能为 ".. randomSkillIndex)
|
||||
ScriptLib.SetTeamServerGlobalValue(context, uid, SGVProp.SkillIdx, randomSkillIndex)
|
||||
return 0
|
||||
end
|
||||
|
||||
-- 生命结算流程
|
||||
function LF_EnterGhost(context,uid)
|
||||
local avatarEntity=ScriptLib.GetAvatarEntityIdByUid(context,uid)
|
||||
local avatarPos = ScriptLib.GetPosByEntityId(context, avatarEntity)
|
||||
local uidIndex = LF_GetPlayerProp(context,"Player",uid)
|
||||
if nil == PlayerData[uidIndex] then
|
||||
ScriptLib.PrintContextLog(context, "##TD_BoatRaceV3 | SLC_PlayerDropCoin" .. "|uidIndex=" .. uidIndex)
|
||||
return 0
|
||||
end
|
||||
|
||||
-- 计算掉落金币数量,并在角色原位置创生金币
|
||||
local coinCid = PlayerData[uidIndex].DeathCoin
|
||||
local coinNum = ScriptLib.GetTeamAbilityFloatValue(context, uid, SGVProp.Coin)
|
||||
local dropCoinNum = math.floor(coinNum/2) -- 掉落一半金币
|
||||
if dropCoinNum > 0 then
|
||||
ScriptLib.SetTeamServerGlobalValue(context, uid, SGVProp.Coin, coinNum-dropCoinNum)
|
||||
LF_SetPlayerProp(context,SGVProp.Coin, uid, dropCoinNum)
|
||||
-- todo:此处要确保对应金币已移除
|
||||
ScriptLib.CreateGadgetByConfigIdByPos(context, coinCid,avatarPos,{ x=0, y=0, z=0 })
|
||||
end
|
||||
|
||||
-- 对应角色进入幽灵模式并开始倒计时
|
||||
ScriptLib.SetTeamServerGlobalValue(context, uid, SGVProp.Ghost, 1)
|
||||
-- 开启该角色的计时器
|
||||
ScriptLib.InitTimeAxis(context, "Revive0".. tostring(uidIndex), PlayCfg.ReviveTimeAxis, false)
|
||||
ScriptLib.SetTeamServerGlobalValue(context, uid, SGVProp.Progress, PlayCfg.ReviveCounter)
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
--[[=====================================
|
||||
|| 常用工具包
|
||||
--======================================]]
|
||||
-- 标准的InsertTriggers方法
|
||||
function LF_InsertTriggers(TempTrigger,TempRequireSuite)
|
||||
local hasRequireSuitList = not (TempRequireSuite == nil or #TempRequireSuite <=0)
|
||||
if hasRequireSuitList then
|
||||
if (init_config.io_type ~= 1) then
|
||||
--常规group注入。trigger注入白名单定义的suite list
|
||||
for i = 1, #TempRequireSuite do
|
||||
for _,v in pairs(TempTrigger) do
|
||||
if (TempRequireSuite[i]<=#suites) then
|
||||
table.insert(suites[TempRequireSuite[i]].triggers, v.name)
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
--flow group注入。trigger注入白名单定义的suite list
|
||||
for i = 1, #TempRequireSuite do
|
||||
for _,v in pairs(TempTrigger) do
|
||||
if (TempRequireSuite[i]<=#suite_disk) then
|
||||
table.insert(suite_disk[TempRequireSuite[i]].triggers, v.name)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
--不存在白名单设置,走常规的trigger注入流程
|
||||
if (init_config.io_type ~= 1) then
|
||||
for i = 1, #suites do
|
||||
for _,v in pairs(TempTrigger) do
|
||||
table.insert(suites[i].triggers, v.name)
|
||||
end
|
||||
end
|
||||
else
|
||||
for i = 1, #suite_disk do
|
||||
for _,v in pairs(TempTrigger) do
|
||||
table.insert(suite_disk[i].triggers, v.name)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
-- 简单拆分一个数组
|
||||
function LF_ArrayToString(array)
|
||||
local s = "{"
|
||||
for k,v in pairs(array) do
|
||||
if k < #array then
|
||||
s = s .. v ..","
|
||||
else
|
||||
s = s .. v
|
||||
end
|
||||
end
|
||||
s = s .."}"
|
||||
return s
|
||||
end
|
||||
|
||||
-- 该功能用于从特定二进制数据中获取Index
|
||||
function LF_SelectRandomIdxFromDec(context,decValue, len)
|
||||
local dataArray = LF_DecToBin(decValue, len)
|
||||
local selectIndexList = {}
|
||||
local canSelectNum = 0
|
||||
for i = 1,len do
|
||||
if dataArray[i] == 0 then
|
||||
table.insert(selectIndexList,i)
|
||||
canSelectNum = canSelectNum + 1
|
||||
end
|
||||
end
|
||||
|
||||
if canSelectNum == 0 then
|
||||
return 0
|
||||
end
|
||||
|
||||
math.randomseed(tostring(ScriptLib.GetServerTime(context)):reverse():sub(1, 6))
|
||||
local selectListIdx = LF_Random(context,canSelectNum)
|
||||
local selectIndex = selectIndexList[selectListIdx]
|
||||
|
||||
local msg = "## TD_BoatRaceV3 LF_SelectRandomIdxFromDec"
|
||||
msg = msg .. "|dataArray=" .. LF_ArrayToString(dataArray)
|
||||
msg = msg .. "|selectIndexList=" .. LF_ArrayToString(selectIndexList)
|
||||
msg = msg .. "|canSelectNum=" .. tostring(canSelectNum)
|
||||
msg = msg .. "|selectListIdx=" .. tostring(selectListIdx)
|
||||
msg = msg .. "|selectIndex=" .. tostring(selectIndex)
|
||||
ScriptLib.PrintContextLog(context, msg)
|
||||
|
||||
return selectIndex
|
||||
end
|
||||
|
||||
-- 对指定dec修改其特定Index的value,value必须在0,1之间
|
||||
function LF_ChangeIndexValueFromDec(decValue,len,targetIndex,value)
|
||||
local dataArray = LF_DecToBin(decValue,len)
|
||||
if value ~= 0 and value ~=1 then
|
||||
value = 0
|
||||
end
|
||||
-- 指定关卡设为完成
|
||||
dataArray[targetIndex] = value
|
||||
local changeLevelDec = LF_BinToDec(dataArray)
|
||||
|
||||
|
||||
return changeLevelDec
|
||||
end
|
||||
|
||||
-- 顺序0,1数组转十进制保存
|
||||
function LF_BinToDec(binArray)
|
||||
local decValue = 0
|
||||
local bin = table.concat(binArray)
|
||||
decValue = tonumber(bin,2)
|
||||
return decValue
|
||||
end
|
||||
|
||||
-- 十进制转成0,1数组
|
||||
function LF_DecToBin(decValue, len)
|
||||
local binArray = {}
|
||||
local value = decValue
|
||||
local bit = len -1
|
||||
for i = bit,0,-1 do
|
||||
binArray[#binArray+1] = math.floor(value/2^i)
|
||||
value = value % 2^i
|
||||
end
|
||||
return binArray
|
||||
end
|
||||
|
||||
function LF_Random(context,num)
|
||||
math.randomseed(tostring(ScriptLib.GetServerTime(context)):reverse():sub(1, 6))
|
||||
local randomIndex = math.random(1,num)
|
||||
return randomIndex
|
||||
end
|
||||
|
||||
-- SLC的通用Debug手段
|
||||
function LF_SLCDebug(context,functionName)
|
||||
local msg = "##TD_BoatRaceV3|" .. functionName
|
||||
msg = msg .. "|uid=" .. context.uid
|
||||
msg = msg .. "|source=" .. context.source_entity_id
|
||||
msg = msg .. "|sourceCid=" .. ScriptLib.GetGadgetConfigId(context, { gadget_eid = context.source_entity_id })
|
||||
msg = msg .. "|target=" .. context.target_entity_id
|
||||
msg = msg .. "|targetCid=" .. ScriptLib.GetGadgetConfigId(context, { gadget_eid = context.target_entity_id })
|
||||
ScriptLib.PrintContextLog(context, msg)
|
||||
return 0
|
||||
end
|
||||
|
||||
--[[=====================================
|
||||
|| 初始化
|
||||
--======================================]]
|
||||
LF_Initialize_BoatRaceV3()
|
||||
@@ -0,0 +1,310 @@
|
||||
--ServerUploadTool Save to [/root/env/data/lua/common/V3_4]
|
||||
--======================================================================================================================
|
||||
--|| Filename || Activity_TeamChainChallenge
|
||||
--|| RelVersion || V3_4
|
||||
--|| Owner || shuo-yu
|
||||
--|| Description ||
|
||||
--|| LogName || ##[Activity_TeamChainChallenge]
|
||||
--|| Protection ||
|
||||
--======================================================================================================================
|
||||
--Defs & Miscs || 需要LD配置的内容
|
||||
-- local defs =
|
||||
-- {
|
||||
-- starter_gadget = 0,
|
||||
-- gallery_id = 0,
|
||||
-- teleportPos_id = 0,
|
||||
-- groups_info =
|
||||
-- {
|
||||
-- [1] = {id = 1, monster_num = 10,},
|
||||
-- [2] = {id = 2, monster_num = 10,},
|
||||
-- [3] = {id = 3, monster_num = 10,},
|
||||
-- [4] = {id = 4, monster_num = 10,},
|
||||
-- },
|
||||
-- }
|
||||
|
||||
--======================================================================================================================
|
||||
--Events || Group内EVENT事件,记得初始化和return 0
|
||||
|
||||
--======================================================================================================================
|
||||
--ServerLuaCalls || 物件SLC,记得return 0
|
||||
|
||||
--======================================================================================================================
|
||||
--LevelFunctions || 自定义函数
|
||||
|
||||
local Tri = {
|
||||
|
||||
--主控group加载 初始化所有玩法group
|
||||
{ config_id = 34000010, name = "group_load", event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_group_load", trigger_count = 0 },
|
||||
--所有玩家死掉 触发关卡失败
|
||||
{ config_id = 34000020, name = "dungeon_all_avatar_die", event = EventType.EVENT_DUNGEON_ALL_AVATAR_DIE, source = "", condition = "condition_dungeon_all_avatar_die", action = "action_dungeon_all_avatar_die", trigger_count = 0 },
|
||||
--变量变化 开启或停止玩法 GALLERY_STATE: 0未开启 1开启 2子阶段成功 3子阶段失败
|
||||
{ config_id = 34000030, name = "variable_change", event = EventType.EVENT_VARIABLE_CHANGE, source = "GALLERY_STATE", condition = "", action = "action_variable_change", trigger_count = 0 },
|
||||
--任一怪物死亡 触发怪物计分变化
|
||||
{ config_id = 34000040, name = "dungeon_any_monster_die", event = EventType.EVENT_ANY_MONSTER_DIE, source = "GALLERY_STATE", condition = "", action = "action_any_monster_die", trigger_count = 0 },
|
||||
--时间轴开启时传送 结束后触发下一玩法group加载
|
||||
{ config_id = 34000050, name = "time_axis_pass", event = EventType.EVENT_TIME_AXIS_PASS, source = "", condition = "", action = "action_time_axis_pass", trigger_count = 0 },
|
||||
}
|
||||
|
||||
function TeamChain_Initialize()
|
||||
|
||||
LF_InsertTriggers(Tri,1)
|
||||
--子阶段开启结束Var 0未开启 1开启 2子阶段成功 3子阶段失败
|
||||
--table.insert(variables,{ config_id=50000001,name = "GALLERY_STATE", value = 0, no_refresh = true})
|
||||
--关卡内GroupIndex 1主控Group 2~4阶段Group
|
||||
table.insert(variables,{ config_id=50000002,name = "GROUP_INDEX", value = 1, no_refresh = true})
|
||||
end
|
||||
|
||||
------------------------------------------------------------------
|
||||
|
||||
|
||||
--主控group load后 初始化玩法
|
||||
function action_group_load(context,evt)
|
||||
LF_PrintLog(context,"action_group_load:主控group加载,初始化玩法")
|
||||
LF_InitPlay(context)
|
||||
return 0
|
||||
end
|
||||
|
||||
--判断是否所有玩家都死了
|
||||
function condition_dungeon_all_avatar_die(context,evt)
|
||||
local uid_list = ScriptLib.GetSceneUidList(context)
|
||||
|
||||
local ret = 0
|
||||
|
||||
for i,v in ipairs(uid_list) do
|
||||
local is_all_dead = ScriptLib.IsPlayerAllAvatarDie(context, v)
|
||||
if true ~= is_all_dead then
|
||||
ret = -1
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if ret ~= 0 then
|
||||
return false
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
--玩家全部死亡结束玩法并设置失败
|
||||
function action_dungeon_all_avatar_die(context,evt)
|
||||
LF_PrintLog(context,"action_dungeon_all_avatar_die: 所有玩家的所有角色都死掉")
|
||||
LF_StopPlay(context,false)
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
--有怪物死亡更新显示
|
||||
function action_any_monster_die(context,evt)
|
||||
ScriptLib.UpdatePlayerGalleryScore(context, defs.gallery_id, {["kill_monster_cnt"] = 1})
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
--GALLERY_STATE变化 0待机 1开启玩法 2结束玩法并设置成功 3结束玩法并设置失败
|
||||
function action_variable_change(context,evt)
|
||||
LF_PrintLog(context,"设置参数")
|
||||
LF_PrintLog(context,tostring(evt.param1))
|
||||
if evt.param1 == 1 then
|
||||
LF_StartPlay(context)
|
||||
elseif evt.param1 == 2 then
|
||||
LF_StopPlay(context, true)
|
||||
elseif evt.param1 == 3 then
|
||||
LF_StopPlay(context, false)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
--时间轴结束 加载下一玩法group
|
||||
function action_time_axis_pass(context,evt)
|
||||
if evt.source_name == "teleport" then
|
||||
local index = LF_GetGroupIndex(context)
|
||||
|
||||
if index == -1 then
|
||||
LF_PrintLog(context,"Axis Pass Failed: table越界")
|
||||
return 0
|
||||
end
|
||||
LF_PrintLog(context,"传送结束")
|
||||
LF_InitNextGroup(context,index)
|
||||
end
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
--ServerLuaCall
|
||||
--操作台点对应选项 开启玩法
|
||||
function SLC_Activity_TeanChainChallenge_StartPlay(context)
|
||||
-- 触发挑战trigger
|
||||
ScriptLib.SetGroupVariableValue(context,"GALLERY_STATE",1)
|
||||
LF_SetWorkTopActive(context, false)
|
||||
return 0
|
||||
end
|
||||
|
||||
--LF Func
|
||||
function LF_PrintLog(context, content)
|
||||
local log = "## [Activity_TeamChainChallenge] TD: "..content
|
||||
ScriptLib.PrintContextLog(context, log)
|
||||
end
|
||||
|
||||
--初始化玩法 加载所有玩法group
|
||||
function LF_InitPlay(context)
|
||||
|
||||
for k,v in pairs(defs.groups_info) do
|
||||
ScriptLib.RefreshGroup(context, { group_id = v.id, suite = 1 })
|
||||
LF_PrintLog(context,"加载玩法group,id: ".. v.id)
|
||||
end
|
||||
|
||||
LF_InitNextGroup(context,1)
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
--开启玩法 启动gallery 切换当前玩法group suite至2 传怪物数目
|
||||
function LF_StartPlay(context)
|
||||
--先尝试启动gallery,如果未成功,则直接返回
|
||||
if (ScriptLib.SetPlayerStartGallery(context, defs.gallery_id, ScriptLib.GetSceneUidList(context)) ~= 0) then
|
||||
return 0
|
||||
end
|
||||
|
||||
LF_PrintLog(context,"开启gallery"..defs.gallery_id)
|
||||
|
||||
local index = LF_GetGroupIndex(context)
|
||||
|
||||
if index == -1 then
|
||||
LF_PrintLog(context,"StartPlay Failed: table越界")
|
||||
return 0
|
||||
end
|
||||
|
||||
ScriptLib.AddExtraGroupSuite(context,defs.groups_info[index].id,2)
|
||||
LF_PrintLog(context,"加载下个group,id: ".. defs.groups_info[index].id)
|
||||
|
||||
ScriptLib.UpdatePlayerGalleryScore(context, defs.gallery_id, {["total_kill_cnt"] = defs.groups_info[index].monster_num})
|
||||
|
||||
return 0
|
||||
end
|
||||
--结束玩法 成功初始化下一group 失败直接cause dungeon fail
|
||||
function LF_StopPlay(context, is_success)
|
||||
local index = LF_GetGroupIndex(context)
|
||||
|
||||
if index == -1 then
|
||||
LF_PrintLog(context,"StopPlay Failed: table越界")
|
||||
return 0
|
||||
end
|
||||
|
||||
if (is_success) then
|
||||
--成功通关
|
||||
LF_PrintLog(context,"成功通关阶段"..(index))
|
||||
ScriptLib.StopGalleryByReason(context,defs.gallery_id,3)
|
||||
|
||||
local mPos = {x=LF_GetPointPos(context, defs.teleportPos_id).x,
|
||||
y=LF_GetPointPos(context, defs.teleportPos_id).y,
|
||||
z=LF_GetPointPos(context, defs.teleportPos_id).z,}
|
||||
|
||||
if index < 4 then
|
||||
ScriptLib.TransPlayerToPos(context, {uid_list =ScriptLib.GetSceneUidList(context),
|
||||
pos = mPos,
|
||||
radius = 0, rot = LF_GetPointRot(context, defs.teleportPos_id)})
|
||||
ScriptLib.InitTimeAxis(context, "teleport", {1}, false)
|
||||
|
||||
elseif index == 4 then
|
||||
LF_PrintLog(context,"成功通关大关")
|
||||
LF_ResetAllVars(context)
|
||||
ScriptLib.CauseDungeonSuccess(context)
|
||||
end
|
||||
|
||||
else
|
||||
--失败
|
||||
LF_PrintLog(context,"失败")
|
||||
ScriptLib.StopGalleryByReason(context,defs.gallery_id,4)
|
||||
ScriptLib.CauseDungeonFail(context)
|
||||
LF_ResetAllVars(context)
|
||||
end
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
--清理当前group 更改GROUP_INDEX为下阶段 GALLERY_STATE重置回待命
|
||||
function LF_InitNextGroup(context,index)
|
||||
|
||||
if index ~= 1 then
|
||||
ScriptLib.RefreshGroup(context, { group_id = defs.groups_info[index].id, suite = 1 })
|
||||
LF_PrintLog(context,"清空当前group,id: ".. defs.groups_info[index].id)
|
||||
end
|
||||
|
||||
index = index + 1
|
||||
ScriptLib.SetGroupVariableValue(context,"GROUP_INDEX",index)
|
||||
LF_PrintLog(context,"下阶段为:["..index.."]")
|
||||
|
||||
LF_SetWorkTopActive(context, true)
|
||||
ScriptLib.SetGroupVariableValue(context,"GALLERY_STATE",0)
|
||||
return 0
|
||||
|
||||
end
|
||||
|
||||
--设置操作台状态
|
||||
function LF_SetWorkTopActive(context, is_active)
|
||||
LF_PrintLog(context, "更新gadget信息")
|
||||
if (is_active) then
|
||||
ScriptLib.SetGadgetStateByConfigId(context, defs.starter_gadget, GadgetState.Default)
|
||||
else
|
||||
ScriptLib.SetGadgetStateByConfigId(context, defs.starter_gadget, GadgetState.GearStop)
|
||||
end
|
||||
LF_PrintLog(context,"设置操作台"..(is_active and "显示" or "隐藏"))
|
||||
LF_PrintLog(context, "更新gadget信息完毕")
|
||||
return 0
|
||||
end
|
||||
|
||||
--重置所有variable value
|
||||
function LF_ResetAllVars(context)
|
||||
ScriptLib.SetGroupVariableValue(context,"GROUP_INDEX",1)
|
||||
ScriptLib.SetGroupVariableValue(context,"GALLERY_STATE",0)
|
||||
end
|
||||
|
||||
--插入trigger
|
||||
function LF_InsertTriggers(TempTrigger,suiteIndex)
|
||||
if suiteIndex <= 0 or suiteIndex > #suites then
|
||||
return -1
|
||||
end
|
||||
|
||||
for k,v in pairs(TempTrigger) do
|
||||
table.insert(triggers,v)
|
||||
table.insert(suites[suiteIndex].triggers,v.name)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
--获取Point Pos Vec3
|
||||
function LF_GetPointPos(context,point_id)
|
||||
for k,v in pairs(points) do
|
||||
if v.config_id == point_id then
|
||||
return v.pos
|
||||
end
|
||||
end
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
--获取Point Rot Vec3
|
||||
function LF_GetPointRot(context,point_id)
|
||||
|
||||
for k,v in pairs(points) do
|
||||
if v.config_id == point_id then
|
||||
return v.rot
|
||||
end
|
||||
end
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
--获取当前group index 越界返回-1
|
||||
function LF_GetGroupIndex(context)
|
||||
local index = ScriptLib.GetGroupVariableValue(context, "GROUP_INDEX")
|
||||
|
||||
if index > 4 or index < 1 then
|
||||
--reset
|
||||
LF_PrintLog(context,"Groups下标越界"..index)
|
||||
return -1
|
||||
end
|
||||
return index
|
||||
end
|
||||
------------------------------------------------------------------
|
||||
TeamChain_Initialize()
|
||||
@@ -0,0 +1,137 @@
|
||||
--[[======================================
|
||||
|| filename:
|
||||
|| owner: luyao.huang
|
||||
|| description:
|
||||
|| LogName:
|
||||
|| Protection:
|
||||
=======================================]]--
|
||||
|
||||
|
||||
------
|
||||
local local_defs = {
|
||||
sandworm_control_group = 133314001,
|
||||
|
||||
--大世界业务类型为0,优先级为1
|
||||
request_priority = 1,
|
||||
business_type = 0
|
||||
}
|
||||
|
||||
|
||||
local Tri = {
|
||||
[1] = { name = "enter_region_bigworld_sandworm_region", config_id = 10010001, event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_enter_region_bigworld_sandworm_region", trigger_count = 0},
|
||||
[2] = { name = "leave_region_bigworld_sandworm_region", config_id = 10010002, event = EventType.EVENT_LEAVE_REGION, source = "", condition = "", action = "action_leave_region_bigworld_sandworm_region", trigger_count = 0},
|
||||
[3] = { name = "time_axis_pass_bigworld_sandworm_region", config_id = 10010011, event = EventType.EVENT_TIME_AXIS_PASS, source = "", condition = "", action = "action_time_axis_pass_bigworld_sandworm_region", trigger_count = 0},
|
||||
[4] = { name = "group_will_unload_bigworld_sandworm_region", config_id = 10010012, event = EventType.EVENT_GROUP_WILL_UNLOAD, source = "", condition = "", action = "action_group_will_unload_bigworld_sandworm_region", trigger_count = 0},
|
||||
}
|
||||
|
||||
function Initialize()
|
||||
for k,v in pairs(Tri) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
table.insert(variables,{ config_id = 50000001, name = "is_in_challenge_region", value = 0})
|
||||
table.insert(variables,{ config_id = 50000002, name = "current_region_id", value = 0})
|
||||
|
||||
|
||||
table.insert(variables,{ config_id = 50000100, name = "business_type", value = local_defs.business_type})
|
||||
table.insert(variables,{ config_id = 50000101, name = "sandworm_params_config_id", value = 0})
|
||||
|
||||
end
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 触发器回调 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
function action_enter_region_bigworld_sandworm_region(context,evt)
|
||||
if LF_Is_Region_Specific_Region(context,"SandwormRegion",evt.param1) then
|
||||
ScriptLib.PrintContextLog(context,"## [BigworldSandwormRegionControl]enter_region: 玩家进入大世界沙虫区域,请求创生参数")
|
||||
local request =
|
||||
{
|
||||
group_id = base_info.group_id,
|
||||
priority = local_defs.request_priority,
|
||||
}
|
||||
local region_config = LF_Get_Region_Config_By_Id(context,evt.param1)
|
||||
if region_config ~= nil then
|
||||
ScriptLib.SetGroupVariableValue(context,"sandworm_params_config_id",region_config.sandworm_params_config_id)
|
||||
ScriptLib.ExecuteGroupLua(context,local_defs.sandworm_control_group,"LF_Request_Create_Sandworm_Params",{request.group_id,request.priority})
|
||||
end
|
||||
ScriptLib.InitTimeAxis(context,"sandworm_alert_axis",{1},true)
|
||||
ScriptLib.SetGroupVariableValue(context,"current_region_id",evt.param1)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
function action_leave_region_bigworld_sandworm_region(context,evt)
|
||||
if LF_Is_Region_Specific_Region(context,"SandwormRegion",evt.param1) then
|
||||
ScriptLib.PrintContextLog(context,"## [BigworldSandwormRegionControl]leave_region: 玩家离开大世界沙虫区域,请求销毁")
|
||||
ScriptLib.SetGroupVariableValue(context,"sandworm_params_config_id",0)
|
||||
--清掉当前的沙虫
|
||||
ScriptLib.ExecuteGroupLua(context,local_defs.sandworm_control_group,"LF_Request_Remove_Sandworm",{base_info.group_id})
|
||||
--清掉当前在占用的参数
|
||||
ScriptLib.ExecuteGroupLua(context,local_defs.sandworm_control_group,"LF_Request_Remove_Sandworm_Params",{base_info.group_id})
|
||||
ScriptLib.EndTimeAxis(context,"sandworm_alert_axis")
|
||||
ScriptLib.SetGroupVariableValue(context,"current_region_id",0)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_time_axis_pass_bigworld_sandworm_region(context,evt)
|
||||
if (evt.source_name == "sandworm_alert_axis") and not LF_Is_In_Challenge_Region(context) then
|
||||
local current_region_id = ScriptLib.GetGroupVariableValue(context,"current_region_id")
|
||||
local region_config = LF_Get_Region_Config_By_Id(context,current_region_id)
|
||||
if region_config ~= nil then
|
||||
local alert = math.random(region_config.alert_by_tick[1],region_config.alert_by_tick[2])
|
||||
ScriptLib.ExecuteGroupLua(context,local_defs.sandworm_control_group,"LF_Request_Change_Alert_Value",{alert})
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_group_will_unload_bigworld_sandworm_region(context,evt)
|
||||
ScriptLib.PrintContextLog(context,"## [BigworldSandwormRegionControl]group_will_unload: group卸载,做保底恢复")
|
||||
ScriptLib.SetGroupVariableValue(context,"current_region_id",0)
|
||||
ScriptLib.SetGroupVariableValue(context,"is_in_challenge_region",0)
|
||||
ScriptLib.EndTimeAxis(context,"sandworm_alert_axis")
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 玩法流程控制 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| CRUD方法 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
function LF_Is_In_Challenge_Region(context)
|
||||
return ScriptLib.GetGroupVariableValue(context,"is_in_challenge_region") == 1
|
||||
end
|
||||
|
||||
function LF_Get_Region_Config_By_Id(context,region_id)
|
||||
local region_config = special_sandworm_region_defs[region_id]
|
||||
if region_config == nil then
|
||||
region_config = {alert_by_tick = default_sandworm_alert_by_tick,sandworm_params_config_id = default_sandworm_params_config_id}
|
||||
end
|
||||
return region_config
|
||||
end
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 杂项方法 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
|
||||
------------------------------------------------------------------
|
||||
Initialize()
|
||||
222
gdconf/game_data_config/lua/common/V3_4/BoomMonsterCamp.lua
Normal file
222
gdconf/game_data_config/lua/common/V3_4/BoomMonsterCamp.lua
Normal file
@@ -0,0 +1,222 @@
|
||||
--[[
|
||||
|
||||
-- DEFS_MISCS
|
||||
|
||||
local defs = {
|
||||
duration = 30,
|
||||
kill_sum = 1,
|
||||
GroupID = 111102025,
|
||||
gadget_controller_id = 25004,
|
||||
ChallengeID = 1,
|
||||
MonstersuitID = 2,
|
||||
}
|
||||
|
||||
|
||||
--]]
|
||||
local defs = {
|
||||
duration = 30,
|
||||
kill_sum = 1,
|
||||
GroupID = 111102025,
|
||||
gadget_controller_id = 25004,
|
||||
ChallengeID = 71,
|
||||
FireworkRegion = 25002,
|
||||
ChallengeStartRegion = 25003,
|
||||
MonsterNum = 4, --Group中所有怪物的数量,用来控制挑战计数
|
||||
FireworkID = 25005,
|
||||
}
|
||||
|
||||
local Phase ={
|
||||
[1] = {2},
|
||||
[2] = {3},
|
||||
[3] = {4},
|
||||
[4] = {5},
|
||||
}
|
||||
|
||||
---------------------
|
||||
local tempTrigger_BoomMonsterCamp = {
|
||||
|
||||
{ config_id = 2230000, name = "RISE_CHALLENGE", event = EventType.EVENT_ENTER_REGION, source = "1",
|
||||
condition = "", action = "action_RISE_CHALLENGE", trigger_count = 0},
|
||||
{ config_id = 2230001, name = "ANY_MONSTER_DIE_25015", event = EventType.EVENT_ANY_MONSTER_DIE, source = "", condition = "", action = "action_EVENT_ANY_MONSTER_DIE_25015", trigger_count = 0, tag = "25015"},
|
||||
{ config_id = 2330002, name = "ChallengeEndCheckWin", event = EventType.EVENT_CHALLENGE_SUCCESS, source = tostring(10*defs.ChallengeID), condition = "", action = "action_ChallengeWin" },
|
||||
{ config_id = 2330003, name = "ChallengeEndCheckLose", event = EventType.EVENT_CHALLENGE_FAIL, source = tostring(10*defs.ChallengeID), condition = "", action = "action_ChallengeLose" },
|
||||
{ config_id = 2230004, name = "LEAVE_REGION_Challenge", event = EventType.EVENT_LEAVE_REGION, source = "1",
|
||||
condition = "", action = "action_LEAVE_REGION_Challenge", trigger_count = 0},
|
||||
{ config_id = 2330005, name = "VARIABLE_CHANGE_BundleEnd", event = EventType.EVENT_VARIABLE_CHANGE, source = "StartNextGroup",
|
||||
condition = "", action = "action_VARIABLE_CHANGE_BundleEnd", trigger_count = 0},
|
||||
|
||||
}
|
||||
|
||||
--------初始化----------
|
||||
function LF_Initialize_BoomMonsterCamp()
|
||||
for k,v in pairs(tempTrigger_BoomMonsterCamp) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
end
|
||||
|
||||
LF_Initialize_BoomMonsterCamp()
|
||||
|
||||
--------公用函数----------
|
||||
-- Gadget发送事件后触发对应挑战
|
||||
function action_RISE_CHALLENGE(context, evt)
|
||||
|
||||
if evt.param1 ~= defs.ChallengeStartRegion or ScriptLib.GetRegionEntityCount(context, { region_eid = evt.source_eid, entity_type = EntityType.AVATAR }) < 1 then
|
||||
ScriptLib.PrintContextLog(context,evt.param1, "## TD_BoomMonsterCamp : 非对应挑战Region触发 ")
|
||||
return 0
|
||||
end
|
||||
|
||||
-- 防止连续启挑战
|
||||
if -1 == LF_CheckChallenge(context) then return 0 end
|
||||
|
||||
-- 检查Group中怪物是否已经全死
|
||||
local MDNum = ScriptLib.GetGroupVariableValue(context,"MonsterDieNum")
|
||||
if 0 ~= LF_CheckMonsterNum(context,MDNum) then
|
||||
return 0
|
||||
end
|
||||
|
||||
ScriptLib.PrintContextLog(context, "## TD_BoomMonsterCamp : 准备开启挑战")
|
||||
|
||||
--ScriptLib.PrintContextLog(context, "## MDNum" .. MDNum .. "")
|
||||
ScriptLib.StartChallenge(context, 10*defs.ChallengeID, defs.ChallengeID, {1, 25015, 4, 1, MDNum})
|
||||
|
||||
ScriptLib.PrintContextLog(context, "## TD_BoomMonsterCamp : 挑战已经开启,设置变量,防止重复进出")
|
||||
ScriptLib.SetGroupTempValue(context, "haveStartChallenge", 1, {})
|
||||
|
||||
ScriptLib.PrintContextLog(context, "## TD_BoomMonsterCamp : 开始添加怪物")
|
||||
-- yc 这里的变量是不存档的,也是不会让挑战重复开启,是满足了挑战“没有完成”,需要重复开启的情况
|
||||
LF_RefreshPhaseSuit(context)
|
||||
|
||||
ScriptLib.PrintContextLog(context, "## test : 3333")
|
||||
return 0
|
||||
end
|
||||
|
||||
--[[
|
||||
-- 触发条件
|
||||
function condition_EVENT_ANY_MONSTER_DIE_25015(context, evt)
|
||||
-- 判断指定group组剩余怪物数量是否是0
|
||||
if ScriptLib.GetGroupMonsterCountByGroupId(context, 111102025) ~= 0 then
|
||||
return false
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
--]]
|
||||
|
||||
-- 触发操作
|
||||
function action_EVENT_ANY_MONSTER_DIE_25015(context, evt)
|
||||
|
||||
ScriptLib.ChangeGroupVariableValue(context, "MonsterDieNum", 1)
|
||||
if ScriptLib.GetGroupMonsterCountByGroupId(context, 111102025) ~= 0 then
|
||||
return 0
|
||||
end
|
||||
|
||||
ScriptLib.PrintContextLog(context, "## TD_BoomMonsterCamp : 怪物死亡,stage变更")
|
||||
ScriptLib.ChangeGroupVariableValue(context, "stage", 1)
|
||||
LF_RefreshPhaseSuit(context)
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
function action_ChallengeWin(context, evt)
|
||||
ScriptLib.PrintContextLog(context, "## TD_BoomMonsterCamp : 挑战成功,关闭Region ")
|
||||
ScriptLib.SetGroupTempValue(context, "haveStartChallenge", 2, {})
|
||||
ScriptLib.AddExtraGroupSuite(context, defs.GroupID, 5)
|
||||
ScriptLib.RemoveEntityByConfigId(context, defs.GroupID, EntityType.REGION, defs.ChallengeStartRegion)
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_ChallengeLose(context, evt)
|
||||
ScriptLib.PrintContextLog(context, "## TD_BoomMonsterCamp : 挑战失败,关闭并刷新Region ")
|
||||
--ScriptLib.RemoveEntityByConfigId(context, defs.GroupID, EntityType.MONSTER, 25001)
|
||||
--失败了只刷新挑战启动区域,不刷新烟花
|
||||
ScriptLib.RefreshGroup(context, { group_id = defs.GroupID, suite = 1 })
|
||||
--杀掉进入时的烟花,这里要多加个参数,让LD来告诉烟花的configid
|
||||
ScriptLib.KillEntityByConfigId(context, {group_id=111102025, config_id=defs.FireworkID})
|
||||
ScriptLib.SetGroupTempValue(context, "haveStartChallenge", 0, {})
|
||||
return 0
|
||||
end
|
||||
|
||||
function LF_CheckChallenge(context)
|
||||
local haveStartChallenge = ScriptLib.GetGroupTempValue(context, "haveStartChallenge",{})
|
||||
if 1 == haveStartChallenge then
|
||||
ScriptLib.PrintContextLog(context, "## TD_BoomMonsterCamp : 挑战已触发,不再重复触发 ")
|
||||
return -1
|
||||
end
|
||||
if 2 == haveStartChallenge then
|
||||
ScriptLib.PrintContextLog(context, "## TD_BoomMonsterCamp : 挑战已结束,不再触发 ")
|
||||
return -1
|
||||
end
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
function LF_CheckMonsterNum(context,MDNum)
|
||||
if MDNum < defs.MonsterNum then
|
||||
return 0
|
||||
end
|
||||
|
||||
ScriptLib.PrintContextLog(context, "## TD_BoomMonsterCamp : 挑战应已完成,请检查进入原因 ")
|
||||
return -1
|
||||
end
|
||||
|
||||
|
||||
-- 离开指定区域且区域内人员为零时挑战失败
|
||||
function action_LEAVE_REGION_Challenge(context, evt)
|
||||
if evt.param1 == defs.ChallengeStartRegion and ScriptLib.GetRegionEntityCount(context, { region_eid = evt.source_eid, entity_type = EntityType.AVATAR }) < 1 then
|
||||
ScriptLib.StopChallenge(context, 10*defs.ChallengeID, 0)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
--记录当前刷新的怪物的波次,方便下次挑战
|
||||
function LF_RefreshPhaseSuit(context)
|
||||
|
||||
local stage = ScriptLib.GetGroupVariableValue(context, "stage")
|
||||
|
||||
if nil == Phase then
|
||||
ScriptLib.PrintContextLog(context, "## TD_BoomMonsterCamp : Group: " .. defs.GroupID .. "没有对应Phase")
|
||||
return 0
|
||||
end
|
||||
|
||||
if stage > #Phase then
|
||||
ScriptLib.PrintContextLog(context, "## TD_BoomMonsterCamp : stage超过Phase界限,stage = " .. stage)
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
local needRefreshSuit = Phase[stage]
|
||||
|
||||
ScriptLib.PrintContextLog(context, "## TD_BoomMonsterCamp : PhaseStage= " .. stage .. "需要刷新的suit为:" .. LF_arrayToString(needRefreshSuit))
|
||||
|
||||
for k,v in ipairs(needRefreshSuit) do
|
||||
ScriptLib.AddExtraGroupSuite(context, defs.GroupID, v)
|
||||
end
|
||||
|
||||
ScriptLib.PrintContextLog(context, "## 添加怪物成功")
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
-- 结束Bundle
|
||||
function action_VARIABLE_CHANGE_BundleEnd(context, evt)
|
||||
ScriptLib.PrintContextLog(context, "## TD_BoomMonsterCamp : 开启了宝箱,FinishGroupLink ")
|
||||
ScriptLib.RemoveEntityByConfigId(context, defs.GroupID, EntityType.REGION, defs.ChallengeStartRegion)
|
||||
ScriptLib.FinishGroupLinkBundle(context, defs.GroupID)
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
function LF_arrayToString(array)
|
||||
local s = "{"
|
||||
for k,v in pairs(array) do
|
||||
if k < #array then
|
||||
s = s .. v ..","
|
||||
else
|
||||
s = s .. v
|
||||
end
|
||||
end
|
||||
s = s .."}"
|
||||
return s
|
||||
end
|
||||
@@ -0,0 +1,154 @@
|
||||
--[[======================================
|
||||
|| filename:
|
||||
|| owner: luyao.huang
|
||||
|| description:
|
||||
|| LogName:
|
||||
|| Protection:
|
||||
=======================================]]--
|
||||
|
||||
local sandworm_params_config_id = 12
|
||||
------
|
||||
local local_defs = {
|
||||
sandworm_control_group = 133314001,
|
||||
|
||||
--挑战业务类型为0,优先级为1
|
||||
request_priority = 2,
|
||||
business_type = 1
|
||||
}
|
||||
|
||||
|
||||
local Tri = {
|
||||
[1] = { name = "enter_region_sandworm_challenge", config_id = 10010001, event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_enter_region_sandworm_challenge", trigger_count = 0},
|
||||
[2] = { name = "leave_region_sandworm_challenge", config_id = 10010002, event = EventType.EVENT_LEAVE_REGION, source = "", condition = "", action = "action_leave_region_sandworm_challenge", trigger_count = 0},
|
||||
[3] = { name = "time_axis_pass_sandworm_challenge", config_id = 10010011, event = EventType.EVENT_TIME_AXIS_PASS, source = "", condition = "", action = "action_time_axis_pass_sandworm_challenge", trigger_count = 0},
|
||||
[4] = { name = "group_will_unload_sandworm_challenge", config_id = 10010012, event = EventType.EVENT_GROUP_WILL_UNLOAD, source = "", condition = "", action = "action_group_will_unload_sandworm_challenge", trigger_count = 0},
|
||||
}
|
||||
|
||||
function Initialize()
|
||||
for k,v in pairs(Tri) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
|
||||
table.insert(variables,{ config_id = 50000100, name = "business_type", value = local_defs.business_type})
|
||||
table.insert(variables,{ config_id = 50000101, name = "sandworm_params_config_id", value = sandworm_params_config_id})
|
||||
|
||||
end
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 触发器回调 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
function action_enter_region_sandworm_challenge(context,evt)
|
||||
if evt.param1 == defs.sandworm_region then
|
||||
if ScriptLib.IsChallengeStartedByChallengeId(context, defs.challenge_id) then
|
||||
ScriptLib.PrintContextLog(context,"## [ChallengeSandwormRegionControl]enter_region: 挑战中进入大世界区域,请求创生")
|
||||
local request =
|
||||
{
|
||||
group_id = base_info.group_id,
|
||||
priority = local_defs.request_priority,
|
||||
}
|
||||
ScriptLib.ExecuteGroupLua(context,local_defs.sandworm_control_group,"LF_Request_Create_Sandworm_Params",{request.group_id,request.priority})
|
||||
ScriptLib.InitTimeAxis(context,"sandworm_alert_axis",{1},true)
|
||||
|
||||
ScriptLib.SetGroupVariableValueByGroup(context,"is_in_challenge_region", 1, local_defs.sandworm_control_group)
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
function action_leave_region_sandworm_challenge(context,evt)
|
||||
if evt.param1 == defs.sandworm_region then
|
||||
if ScriptLib.IsChallengeStartedByChallengeId(context, defs.challenge_id) then
|
||||
ScriptLib.PrintContextLog(context,"## [ChallengeSandwormRegionControl]enter_region: 挑战中离开大世界区域,请求销毁")
|
||||
--清掉当前的沙虫
|
||||
ScriptLib.ExecuteGroupLua(context,local_defs.sandworm_control_group,"LF_Request_Remove_Sandworm",{base_info.group_id})
|
||||
--清掉当前在占用的参数
|
||||
ScriptLib.ExecuteGroupLua(context,local_defs.sandworm_control_group,"LF_Request_Remove_Sandworm_Params",{base_info.group_id})
|
||||
ScriptLib.EndTimeAxis(context,"sandworm_alert_axis")
|
||||
|
||||
ScriptLib.SetGroupVariableValueByGroup(context,"is_in_challenge_region", 0, local_defs.sandworm_control_group)
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
function action_time_axis_pass_sandworm_challenge(context,evt)
|
||||
if (evt.source_name == "sandworm_alert_axis") then
|
||||
if ScriptLib.IsChallengeStartedByChallengeId(context, defs.challenge_id) then
|
||||
local alert = math.random(sandworm_alert_by_tick[1],sandworm_alert_by_tick[2])
|
||||
ScriptLib.ExecuteGroupLua(context,local_defs.sandworm_control_group,"LF_Request_Change_Alert_Value",{alert})
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_group_will_unload_sandworm_challenge(context,evt)
|
||||
ScriptLib.PrintContextLog(context,"## [ChallengeSandwormRegionControl]group_will_unload: group卸载,要保底清除占用的沙虫参数")
|
||||
--清掉当前的沙虫
|
||||
ScriptLib.ExecuteGroupLua(context,local_defs.sandworm_control_group,"LF_Request_Remove_Sandworm",{base_info.group_id})
|
||||
--清掉当前在占用的参数
|
||||
ScriptLib.ExecuteGroupLua(context,local_defs.sandworm_control_group,"LF_Request_Remove_Sandworm_Params",{base_info.group_id})
|
||||
ScriptLib.EndTimeAxis(context,"sandworm_alert_axis")
|
||||
|
||||
ScriptLib.SetGroupVariableValueByGroup(context,"is_in_challenge_region", 0, local_defs.sandworm_control_group)
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 玩法流程控制 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
function LF_Challenge_Start_Change_Sandworm_Params(context)
|
||||
ScriptLib.PrintContextLog(context,"## [ChallengeSandwormRegionControl]LF_Challenge_Request_Create_Sandworm: 挑战开始,请求创生")
|
||||
local request =
|
||||
{
|
||||
group_id = base_info.group_id,
|
||||
priority = local_defs.request_priority,
|
||||
}
|
||||
ScriptLib.ExecuteGroupLua(context,local_defs.sandworm_control_group,"LF_Request_Create_Sandworm_Params",{request.group_id,request.priority})
|
||||
local ret = ScriptLib.InitTimeAxis(context,"sandworm_alert_axis",{1},true)
|
||||
ScriptLib.PrintContextLog(context,"## [ChallengeSandwormRegionControl]LF_Challenge_Request_Create_Sandworm: 启动时间轴:"..ret)
|
||||
|
||||
|
||||
ScriptLib.SetGroupVariableValueByGroup(context,"is_in_challenge_region", 1, local_defs.sandworm_control_group)
|
||||
return 0
|
||||
end
|
||||
|
||||
function LF_Challenge_Stop_Clear_Sandworm_Params(context)
|
||||
ScriptLib.PrintContextLog(context,"## [ChallengeSandwormRegionControl]LF_Challenge_Request_Create_Sandworm: 挑战结束,请求销毁")
|
||||
--清掉当前的沙虫
|
||||
ScriptLib.ExecuteGroupLua(context,local_defs.sandworm_control_group,"LF_Request_Remove_Sandworm",{base_info.group_id})
|
||||
--清掉当前在占用的参数
|
||||
ScriptLib.ExecuteGroupLua(context,local_defs.sandworm_control_group,"LF_Request_Remove_Sandworm_Params",{base_info.group_id})
|
||||
ScriptLib.EndTimeAxis(context,"sandworm_alert_axis")
|
||||
|
||||
ScriptLib.SetGroupVariableValueByGroup(context,"is_in_challenge_region", 0, local_defs.sandworm_control_group)
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| CRUD方法 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 杂项方法 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
|
||||
------------------------------------------------------------------
|
||||
Initialize()
|
||||
@@ -0,0 +1,143 @@
|
||||
--[[======================================
|
||||
|| filename: ElectroherculesBattle
|
||||
|| owner: luyao.huang
|
||||
|| description: 3.4鬼兜虫斗虫活动
|
||||
|| LogName: ElectroherculesBattle
|
||||
|| Protection:
|
||||
=======================================]]--
|
||||
|
||||
------
|
||||
local local_defs =
|
||||
{
|
||||
gallery_id = 32001
|
||||
}
|
||||
local Tri = {
|
||||
--后续换成select_difficulty
|
||||
--[1] = { name = "select_difficulty", config_id = 8000001, event = EventType.EVENT_SELECT_DIFFICULTY, source = "", condition = "", action = "action_select_difficulty", trigger_count = 0},
|
||||
[1] = { name = "variable_change_GM", config_id = 8000001, event = EventType.EVENT_VARIABLE_CHANGE, source = "", condition = "", action = "action_variable_change_GM", trigger_count = 0},
|
||||
[2] = { name = "monster_die", config_id = 8000002, event = EventType.EVENT_MONSTER_DIE_BEFORE_LEAVE_SCENE, source = "", condition = "", action = "action_monster_die", trigger_count = 0},
|
||||
[3] = { name = "group_will_unload", config_id = 8000003, event = EventType.EVENT_GROUP_WILL_UNLOAD, source = "", condition = "", action = "action_group_will_unload", trigger_count = 0},
|
||||
--测试时间轴:每1秒显示一次血量
|
||||
[4] = { name = "time_axis_pass", config_id = 8000004, event = EventType.EVENT_TIME_AXIS_PASS, source = "", condition = "", action = "action_time_axis_pass", trigger_count = 0},
|
||||
}
|
||||
|
||||
function Initialize()
|
||||
for k,v in pairs(Tri) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
table.insert(variables,{config_id = 110000001, name = "difficulty", value = 0})
|
||||
|
||||
table.insert(variables,{config_id = 210000001, name = "GM_Select_Difficulty", value = 0})
|
||||
end
|
||||
|
||||
------------------------------------------------------------------
|
||||
--测试时间轴:每1秒打印一次血量
|
||||
function action_time_axis_pass(context,evt)
|
||||
local difficulty = ScriptLib.GetGroupVariableValue(context,"difficulty")
|
||||
|
||||
EnemyHP = ScriptLib.GetMonsterHpPercent(context, base_info.group_id, EnemyElectrohercules[difficulty])
|
||||
ScriptLib.PrintContextLog(context,"## [ElectroherculesBattle] action_time_axis_pass: 敌方生命:"..EnemyHP.."%")
|
||||
|
||||
return 0
|
||||
end
|
||||
--正式的开启流程
|
||||
function action_select_difficulty(context,evt)
|
||||
ScriptLib.PrintContextLog(context,"## [ElectroherculesBattle] action_select_difficulty: 玩家选择挑战难度,加载对应suite")
|
||||
--设置difficulty
|
||||
local difficulty = evt.param2
|
||||
ScriptLib.PrintContextLog(context,"## [ElectroherculesBattle] action_select_difficulty: 玩家选择挑战难度,难度为:"..difficulty)
|
||||
ScriptLib.SetGroupVariableValue(context,"difficulty",difficulty)
|
||||
--拉起Gallery
|
||||
local gallery_id = evt.param1
|
||||
local_defs.gallery_id = gallery_id
|
||||
LF_Start_Play(context,difficulty,gallery_id)
|
||||
ScriptLib.PrintContextLog(context,"## [ElectroherculesBattle] action_select_difficulty: 拉起Gallery,ID="..gallery_id)
|
||||
ScriptLib.SetGroupVariableValue(context,"GM_Select_Difficulty",0)
|
||||
--测试:每1秒显示一次血量
|
||||
ScriptLib.InitTimeAxis(context,"Sand_Flow",{1},true)
|
||||
ScriptLib.PrintContextLog(context,"## [ElectroherculesBattle] action_select_difficulty:开启测试时间轴")
|
||||
return 0
|
||||
end
|
||||
--白盒版本:修改GM后,开始加载
|
||||
function action_variable_change_GM(context,evt)
|
||||
ScriptLib.PrintContextLog(context,"## [ElectroherculesBattle] action_variable_change_GM: 玩家选择挑战难度,加载对应suite")
|
||||
if evt.source_name == "GM_Select_Difficulty" and evt.param1 ~= 0 then
|
||||
local difficulty = evt.param1
|
||||
--local difficulty = evt.param3
|
||||
ScriptLib.PrintContextLog(context,"## [ElectroherculesBattle] action_variable_change_GM: 玩家选择挑战难度,难度为:"..difficulty)
|
||||
ScriptLib.SetGroupVariableValue(context,"difficulty",difficulty)
|
||||
|
||||
local gallery_id = 32001
|
||||
local_defs.gallery_id = gallery_id
|
||||
LF_Start_Play(context,difficulty,gallery_id)
|
||||
ScriptLib.PrintContextLog(context,"## [ElectroherculesBattle] action_variable_change_GM: 拉起默认Gallery,ID="..gallery_id)
|
||||
ScriptLib.SetGroupVariableValue(context,"GM_Select_Difficulty",0)
|
||||
ScriptLib.InitTimeAxis(context,"Sand_Flow",{1},true)
|
||||
ScriptLib.PrintContextLog(context,"## [ElectroherculesBattle] action_variable_change_GM:开启测试时间轴")
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_group_will_unload(context,evt)
|
||||
ScriptLib.PrintContextLog(context,"## [ElectroherculesBattle] action_group_will_unload:group即将卸载,回滚所有玩法状态")
|
||||
LF_Stop_Play(context)
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_monster_die(context,evt)
|
||||
|
||||
ScriptLib.PrintContextLog(context,"## [ElectroherculesBattle] action_monster_die: 怪物死亡")
|
||||
local difficulty = ScriptLib.GetGroupVariableValue(context,"difficulty")
|
||||
if evt.param1 == PlayerElectrohercules then
|
||||
ScriptLib.PrintContextLog(context,"## [ElectroherculesBattle] action_monster_die: 角色死亡,失败")
|
||||
ScriptLib.StopGallery(context,local_defs.gallery_id,true)
|
||||
end
|
||||
|
||||
if evt.param1 == EnemyElectrohercules[difficulty] then
|
||||
ScriptLib.PrintContextLog(context,"## [ElectroherculesBattle] action_monster_die: 敌人死亡,成功")
|
||||
ScriptLib.StopGallery(context,local_defs.gallery_id,false)
|
||||
end
|
||||
--运营埋点,获得结束时敌我双方的生命值百分比
|
||||
local PlayerHP = ScriptLib.GetMonsterHpPercent(context, base_info.group_id, PlayerElectrohercules)
|
||||
local EnemyHP = ScriptLib.GetMonsterHpPercent(context, base_info.group_id, EnemyElectrohercules[difficulty])
|
||||
ScriptLib.PrintContextLog(context,"## [ElectroherculesBattle] action_monster_die: 对局结束,玩家生命:"..PlayerHP.."% 敌方生命:"..EnemyHP.."%")
|
||||
ScriptLib.MarkGroupLuaAction(context, "ElectroherculesBattleEnd", "", {["self_hp"] = PlayerHP,["enemy_hp"] = EnemyHP})
|
||||
|
||||
LF_Stop_Play(context)
|
||||
return 0
|
||||
end
|
||||
|
||||
------------------------------------------------------------------
|
||||
function LF_Start_Play(context, difficulty, gallery_id)
|
||||
--改变斗虫台stage,增加空气墙
|
||||
ScriptLib.SetGroupGadgetStateByConfigId(context, Battlefield.group_id, Battlefield.config_id, 201)
|
||||
--屏蔽天气
|
||||
ScriptLib.SetWeatherAreaState(context, weather_id, 1)
|
||||
--创建敌我Monster
|
||||
ScriptLib.CreateMonster(context, { config_id = PlayerElectrohercules, delay_time = 0 })
|
||||
local ret = ScriptLib.CreateMonster(context, { config_id = EnemyElectrohercules[difficulty], delay_time = 0 })
|
||||
ScriptLib.PrintContextLog(context,"## [ElectroherculesBattle] LF_Start_Play: 创建敌人结果为"..ret)
|
||||
--拉起Gallery
|
||||
ScriptLib.StartGallery(context,gallery_id)
|
||||
--ScriptLib.StartGallery(context,defs.gallery_id)
|
||||
ScriptLib.PrintContextLog(context,"## [ElectroherculesBattle] LF_Start_Play: 拉起Gallery,ID="..gallery_id)
|
||||
end
|
||||
|
||||
|
||||
function LF_Stop_Play(context)
|
||||
ScriptLib.PrintContextLog(context,"## [ElectroherculesBattle] LF_Stop_Play:开始重置玩法")
|
||||
ScriptLib.RemoveEntityByConfigId(context,base_info.group_id,EntityType.MONSTER, PlayerElectrohercules)
|
||||
for k,v in pairs(EnemyElectrohercules) do
|
||||
ScriptLib.RemoveEntityByConfigId(context,base_info.group_id,EntityType.MONSTER, v)
|
||||
end
|
||||
--移除空气墙
|
||||
ScriptLib.SetGroupGadgetStateByConfigId(context, Battlefield.group_id,Battlefield.config_id , 0)
|
||||
--开启天气
|
||||
ScriptLib.SetWeatherAreaState(context, weather_id, 0)
|
||||
ScriptLib.SetGroupVariableValue(context,"difficulty",0)
|
||||
--移除测试时间轴
|
||||
ScriptLib.EndTimeAxis(context,"Sand_Flow")
|
||||
end
|
||||
------------------------------------------------------------------
|
||||
Initialize()
|
||||
146
gdconf/game_data_config/lua/common/V3_4/JamshidRock.lua
Normal file
146
gdconf/game_data_config/lua/common/V3_4/JamshidRock.lua
Normal file
@@ -0,0 +1,146 @@
|
||||
--[[======================================
|
||||
|| filename: JamshidRock
|
||||
|| owner: luyao.huang
|
||||
|| description: 3.3赤王基石玩法
|
||||
|| LogName: JamshidRock
|
||||
|| Protection:
|
||||
=======================================]]--
|
||||
|
||||
------
|
||||
local local_defs = {
|
||||
changing_cd = 1
|
||||
}
|
||||
|
||||
local rock_gadget_id =
|
||||
{
|
||||
70290635,
|
||||
70290636,
|
||||
70290637
|
||||
}
|
||||
|
||||
|
||||
local state_solution_defs =
|
||||
{
|
||||
[0] = 1,
|
||||
[201] = 2,
|
||||
[202] = 3,
|
||||
[203] = 4
|
||||
}
|
||||
|
||||
local solution_state_defs =
|
||||
{
|
||||
[1] = 0,
|
||||
[2] = 201,
|
||||
[3] = 202,
|
||||
[4] = 203
|
||||
}
|
||||
|
||||
|
||||
local Tri = {
|
||||
[1] = { name = "gadget_state_change", config_id = 10000001, event = EventType.EVENT_GADGET_STATE_CHANGE, source = "", condition = "", action = "action_gadget_state_change", trigger_count = 0},
|
||||
[2] = { name = "time_axis_pass", config_id = 10000002, event = EventType.EVENT_TIME_AXIS_PASS, source = "changing_cd", condition = "", action = "action_time_axis_pass", trigger_count = 0},
|
||||
}
|
||||
|
||||
function Initialize()
|
||||
for k,v in pairs(Tri) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
|
||||
for i = 1, #JamshidRocks do
|
||||
local rock = JamshidRocks[i]
|
||||
gadgets[rock].server_global_value_config = { ["SGV_Correct_Answer"] = CorrectAnswer[i] }
|
||||
end
|
||||
|
||||
table.insert(variables,{ config_id = 100010001, name = "is_success", value = 0})
|
||||
table.insert(variables,{ config_id = 100010002, name = "is_changing", value = 0})
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 触发器回调 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
function action_gadget_state_change(context,evt)
|
||||
local flag = false
|
||||
for i = 1, #JamshidRocks do
|
||||
if evt.param2 == JamshidRocks[i] then
|
||||
flag = true
|
||||
end
|
||||
end
|
||||
if flag then
|
||||
ScriptLib.PrintContextLog(context,"## [JamshidRock] action_gadget_state_change: 赤王基石"..evt.param2.."状态变化")
|
||||
local is_success = true
|
||||
for i = 1, #JamshidRocks do
|
||||
local state = ScriptLib.GetGadgetStateByConfigId(context,base_info.group_id,JamshidRocks[i])
|
||||
if state_solution_defs[state] ~= nil then
|
||||
ScriptLib.PrintContextLog(context,"## [JamshidRock] action_gadget_state_change: 正确解为"..CorrectAnswer[i])
|
||||
ScriptLib.PrintContextLog(context,"## [JamshidRock] action_gadget_state_change: 当前解为"..state_solution_defs[state])
|
||||
if state_solution_defs[state] ~= CorrectAnswer[i] then
|
||||
is_success = false
|
||||
end
|
||||
end
|
||||
end
|
||||
if is_success then
|
||||
ScriptLib.PrintContextLog(context,"## [JamshidRock] action_gadget_state_change: 玩法成功")
|
||||
ScriptLib.SetGroupVariableValue(context,"is_success",1)
|
||||
else
|
||||
ScriptLib.SetGroupVariableValue(context,"is_success",0)
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_time_axis_pass(context,evt)
|
||||
ScriptLib.PrintContextLog(context,"## [JamshidRock] action_time_axis_pass: 基石cd时间轴tick,允许继续变化")
|
||||
ScriptLib.SetGroupVariableValue(context,"is_changing",0)
|
||||
|
||||
for i = 1, #JamshidRocks do
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context,JamshidRocks[i],"SGV_Show_Hit_Effect",0)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| server lua call ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
function SLC_Rock_Being_Hit(context)
|
||||
for i = 1, #JamshidRocks do
|
||||
if context.source_entity_id == ScriptLib.GetEntityIdByConfigId(context, JamshidRocks[i]) then
|
||||
local rock = JamshidRocks[i]
|
||||
ScriptLib.PrintContextLog(context,"## [JamshidRock] SLC_Rock_Being_Hit: 赤王基石"..JamshidRocks[i].."受击")
|
||||
local is_changeing = ScriptLib.GetGroupVariableValue(context,"is_changing")
|
||||
if is_changeing == 0 then
|
||||
ScriptLib.PrintContextLog(context,"## [JamshidRock] SLC_Rock_Being_Hit: 当前没有基石处于变化状态")
|
||||
ScriptLib.SetGroupVariableValue(context,"is_changing",1)
|
||||
ScriptLib.InitTimeAxis(context,"changing_cd",{local_defs.changing_cd},false)
|
||||
ScriptLib.PrintContextLog(context,"## [JamshidRock] SLC_Rock_Being_Hit: 开启基石cd时间轴")
|
||||
|
||||
local state = ScriptLib.GetGadgetStateByConfigId(context,base_info.group_id,rock)
|
||||
local current_answer = state_solution_defs[state]
|
||||
ScriptLib.PrintContextLog(context,"## [JamshidRock] SLC_Rock_Being_Hit: 当前答案为"..current_answer)
|
||||
local next_answer = ((current_answer)%4)+1
|
||||
ScriptLib.PrintContextLog(context,"## [JamshidRock] SLC_Rock_Being_Hit: 下一个答案为"..next_answer)
|
||||
local next_state = solution_state_defs[next_answer]
|
||||
ScriptLib.SetGadgetStateByConfigId(context,rock,next_state)
|
||||
ScriptLib.PrintContextLog(context,"## [JamshidRock] SLC_Rock_Being_Hit: 基石切状态"..next_state)
|
||||
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context,rock,"SGV_Show_Hit_Effect",1)
|
||||
|
||||
end
|
||||
return 0
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
Initialize()
|
||||
173
gdconf/game_data_config/lua/common/V3_4/MetaRegion.lua
Normal file
173
gdconf/game_data_config/lua/common/V3_4/MetaRegion.lua
Normal file
@@ -0,0 +1,173 @@
|
||||
--[[======================================
|
||||
|| filename: MetaRegion
|
||||
|| owner: luyao.huang
|
||||
|| description: 3.3MetaRegion逻辑。由多个region拼成的大型region
|
||||
|| LogName: MetaRegion
|
||||
|| Protection:
|
||||
=======================================]]--
|
||||
|
||||
|
||||
|
||||
--是否属于特定大区域
|
||||
function LF_Is_In_Meta_Region(context,uid,metaRegionName)
|
||||
|
||||
local metaRegion = MetaRegions[metaRegionName]
|
||||
if metaRegion == nil then
|
||||
ScriptLib.PrintGroupWarning(context,"## [Warning] [SandstormControl] LF_Is_In_Meta_Region:传入非法MetaRegion名"..metaRegionName)
|
||||
return nil
|
||||
end
|
||||
|
||||
for k,v in pairs(metaRegion) do
|
||||
if ScriptLib.IsInRegion(context,uid,v) == true then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
|
||||
|
||||
--获取特定玩家当前所在沙尘暴区域的名字
|
||||
function LF_Get_SandStorm_Region(context,uid)
|
||||
if LF_Is_In_Meta_Region(context,uid,"SandStorm_InnerRegion") then
|
||||
return "SandStorm_InnerRegion"
|
||||
end
|
||||
if LF_Is_In_Meta_Region(context,uid,"SandStorm_MiddleRegion") then
|
||||
return "SandStorm_MiddleRegion"
|
||||
end
|
||||
if LF_Is_In_Meta_Region(context,uid,"SandStorm_OuterRegion") then
|
||||
return "SandStorm_OuterRegion"
|
||||
end
|
||||
return "SandStorm_Outside"
|
||||
end
|
||||
|
||||
|
||||
--是否处于沙尘暴区域
|
||||
function LF_Is_In_SandStorm_Region(context,uid)
|
||||
if LF_Get_SandStorm_Region(context,uid) ~= nil and LF_Get_SandStorm_Region(context,uid) ~= "SandStorm_Outside" then
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
|
||||
--是否位于合法的沙虫区域(计算了沙虫区域的洞)
|
||||
function LF_Is_In_Legal_Sandworm_Region(context,uid)
|
||||
if LF_Is_In_Meta_Region(context,uid,"SandwormRegion") and not LF_Is_In_Meta_Region(context,uid,"SandwormHoleRegion") then
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
|
||||
--获取第一个合法的在沙尘暴区域内的玩家uid(支持联机,从主机开始往后排)
|
||||
function LF_Get_Legal_Player_Uid_In_SandStorm_Region(context)
|
||||
local uid_list = ScriptLib.GetSceneUidList(context)
|
||||
for i = 1, #uid_list do
|
||||
local uid = uid_list[i]
|
||||
if LF_Is_In_SandStorm_Region(context,uid) then
|
||||
return uid
|
||||
end
|
||||
end
|
||||
--无人在沙尘暴中
|
||||
return -1
|
||||
end
|
||||
|
||||
--获取第一个合法的在沙尘暴区域内的玩家所在的圈(支持联机,从主机开始往后排)
|
||||
function LF_Get_Legal_Player_Region_In_SandStorm_Region(context)
|
||||
|
||||
local uid = LF_Get_Legal_Player_Uid_In_SandStorm_Region(context)
|
||||
|
||||
if uid ~= -1 then
|
||||
return LF_Get_SandStorm_Region(context,uid)
|
||||
else
|
||||
return "SandStorm_Outside"
|
||||
end
|
||||
end
|
||||
|
||||
--是否至少有一个人在沙尘暴区域内
|
||||
function LF_Is_Any_Player_In_SandStorm_Region(context)
|
||||
return LF_Get_Legal_Player_Uid_In_SandStorm_Region(context) ~= -1
|
||||
end
|
||||
|
||||
|
||||
--找到所有在沙尘暴区域内的玩家,支持联机
|
||||
function LF_Get_All_Player_Uid_In_SandStorm_Region(context)
|
||||
local uid_list = ScriptLib.GetSceneUidList(context)
|
||||
local ret_uid_list = {}
|
||||
for i = 1, #uid_list do
|
||||
local uid = uid_list[i]
|
||||
if LF_Is_In_SandStorm_Region(context,uid) then
|
||||
table.insert(ret_uid_list,uid)
|
||||
end
|
||||
end
|
||||
return ret_uid_list
|
||||
end
|
||||
|
||||
function LF_Get_All_Legal_Player_Uid_In_Legal_Sandworm_Region(context)
|
||||
local player_in_sandstorm_list = LF_Get_All_Player_Uid_In_SandStorm_Region(context)
|
||||
local ret_uid_list = {}
|
||||
for i = 1, #player_in_sandstorm_list do
|
||||
local uid = player_in_sandstorm_list[i]
|
||||
if LF_Is_In_Legal_Sandworm_Region(context,uid) then
|
||||
table.insert(ret_uid_list,uid)
|
||||
end
|
||||
end
|
||||
return ret_uid_list
|
||||
end
|
||||
|
||||
|
||||
--获取第一个合法的在沙虫区域内的玩家uid(支持联机,随机抽取一个)
|
||||
function LF_Get_Legal_Player_Uid_In_Legal_Sandworm_Region(context)
|
||||
local player_in_sandstorm_list = LF_Get_All_Player_Uid_In_SandStorm_Region(context)
|
||||
local ret_uid_list = {}
|
||||
for i = 1, #player_in_sandstorm_list do
|
||||
local uid = player_in_sandstorm_list[i]
|
||||
if LF_Is_In_Legal_Sandworm_Region(context,uid) then
|
||||
table.insert(ret_uid_list,uid)
|
||||
end
|
||||
end
|
||||
if #ret_uid_list ~= 0 then
|
||||
return LF_Get_Random_Value_In_Table(ret_uid_list)
|
||||
else
|
||||
return -1
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--判断是否有玩家位于合法沙虫区域内
|
||||
function LF_Is_Any_Player_In_Legal_Sandworm_Region(context)
|
||||
return LF_Get_Legal_Player_Uid_In_Legal_Sandworm_Region(context) ~= -1
|
||||
end
|
||||
|
||||
|
||||
--判断一个config_id的region是否是特定的区域region
|
||||
function LF_Is_Region_Specific_Region(context,region_name,region_id)
|
||||
|
||||
return LF_Is_In_Table(MetaRegions[region_name], region_id)
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
--判断元素是否属于表
|
||||
function LF_Is_In_Table(t,key)
|
||||
for i = 1,#t do
|
||||
if (t[i] == key) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
--从table中随机抽取一个元素,均匀分布
|
||||
function LF_Get_Random_Value_In_Table(t)
|
||||
local r = math.random(#t)
|
||||
return t[r]
|
||||
end
|
||||
481
gdconf/game_data_config/lua/common/V3_4/OasisTimebackControl.lua
Normal file
481
gdconf/game_data_config/lua/common/V3_4/OasisTimebackControl.lua
Normal file
@@ -0,0 +1,481 @@
|
||||
--[[======================================
|
||||
|| filename: OasisTimebackControl
|
||||
|| owner: luyao.huang
|
||||
|| description: 绿洲时间倒流控制
|
||||
|| LogName: OasisTimebackControl
|
||||
|| Protection:
|
||||
=======================================]]--
|
||||
|
||||
|
||||
|
||||
------
|
||||
local local_defs = {
|
||||
timeback_tag_sgv_name = "SGV_Broadcast_GV_Tag",
|
||||
timeback_is_revert = "SGV_Is_Revert",
|
||||
timeback_init_sgv_name = "SGV_Init_Timeback_Value",
|
||||
--控制器分段的均分数
|
||||
timeback_division_sgv_name = "SGV_Timeback_Keypoint_Division",
|
||||
|
||||
timeback_value_min_suffix = "timeback_value_min",
|
||||
timeback_value_max_suffix = "timeback_value_max",
|
||||
|
||||
timeback_UI_option = 5002,
|
||||
rune_start_option = 5000
|
||||
}
|
||||
|
||||
local local_timeback_gadget_config =
|
||||
{
|
||||
--树干
|
||||
[70290603] =
|
||||
{
|
||||
timeback_type =
|
||||
{
|
||||
animator = true,
|
||||
effect = true
|
||||
},
|
||||
eff_range = {1,1.1},
|
||||
},
|
||||
|
||||
--石头
|
||||
[70290604] =
|
||||
{
|
||||
timeback_type =
|
||||
{
|
||||
animator = true,
|
||||
effect = true
|
||||
},
|
||||
eff_range = {0,1.2},
|
||||
},
|
||||
|
||||
--瀑布
|
||||
[70290605] =
|
||||
{
|
||||
timeback_type =
|
||||
{
|
||||
shader = true,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
local rune_states =
|
||||
{
|
||||
moving = 0,
|
||||
unmovable = 201,
|
||||
movable = 202
|
||||
}
|
||||
|
||||
local worktop_states =
|
||||
{
|
||||
rune_out = 0,
|
||||
rune_in = 201
|
||||
}
|
||||
|
||||
local Tri = {
|
||||
[1] = { name = "group_load", config_id = 11000001, event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_group_load", trigger_count = 0},
|
||||
[2] = { name = "platform_arrival", config_id = 11000002, event = EventType.EVENT_PLATFORM_ARRIVAL, source = tostring(timeback_rune), condition = "", action = "action_platform_arrival", trigger_count = 0},
|
||||
[3] = { name = "select_option", config_id = 11000003, event = EventType.EVENT_SELECT_OPTION, source = "", condition = "", action = "action_select_option", trigger_count = 0},
|
||||
[4] = { name = "gadget_state_change", config_id = 11000004, event = EventType.EVENT_GADGET_STATE_CHANGE, source = "", condition = "", action = "action_gadget_state_change", trigger_count = 0},
|
||||
[5] = { name = "variable_change", config_id = 11000005, event = EventType.EVENT_VARIABLE_CHANGE, source = "is_success", condition = "", action = "action_variable_change", trigger_count = 0},
|
||||
[6] = { name = "gather", config_id = 11000006, event = EventType.EVENT_GATHER, source = tostring(defs.wordle_id), condition = "", action = "action_gather", trigger_count = 0},
|
||||
|
||||
|
||||
[7] = { name = "variable_change_GM", config_id = 21000001, event = EventType.EVENT_VARIABLE_CHANGE, source = "", condition = "", action = "action_variable_change_GM", trigger_count = 0},
|
||||
|
||||
}
|
||||
|
||||
function Initialize()
|
||||
for k,v in pairs(Tri) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
|
||||
--当前符文所在节点的id
|
||||
table.insert(variables,{ config_id = 30000001, name = "current_checkpoint", value = 0})
|
||||
--玩法最后一环是否成功
|
||||
table.insert(variables,{ config_id = 30000002, name = "is_success", value = 0})
|
||||
--当前节点是否在正确解的范围内
|
||||
table.insert(variables,{ config_id = 30000003, name = "is_currect_checkpoint_success", value = 0})
|
||||
--玩法是否完成
|
||||
table.insert(variables,{ config_id = 30000004, name = "is_finished", value = 0})
|
||||
|
||||
|
||||
|
||||
--GM:移除全部玩法物件
|
||||
table.insert(variables,{ config_id = 40000001, name = "GM_Remove_Current_Group", value = 0})
|
||||
end
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 触发器回调 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
--玩法加载初始化
|
||||
function action_group_load(context,evt)
|
||||
|
||||
ScriptLib.PrintContextLog(context,"## [OasisTimebackControl]action_group_load:group加载,给玩法物件上SGV标识")
|
||||
--LF_Init_Timeback_Gadget_Config(context)
|
||||
LF_Init_Rune_State(context)
|
||||
ScriptLib.SetGadgetEnableInteract(context,base_info.group_id,defs.wordle_id,false)
|
||||
|
||||
if ScriptLib.GetGroupVariableValue(context,"is_finished") == 1 then
|
||||
ScriptLib.PrintContextLog(context,"## [OasisTimebackControl]action_variable_change:玩法成功,创建宝箱")
|
||||
ScriptLib.CreateGadget(context, { config_id = defs.chest_id })
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
function action_platform_arrival(context,evt)
|
||||
if LF_Is_Checkpoint(context,evt.param3) then
|
||||
ScriptLib.PrintContextLog(context,"## [OasisTimebackControl]action_platform_arrival:符文抵达底座位置")
|
||||
|
||||
LF_Stop_Platform(context)
|
||||
local current_point = LF_Get_Checkpoint_By_Route_Point(context,evt.param3)
|
||||
ScriptLib.SetGroupVariableValue(context,"current_checkpoint", current_point)
|
||||
LF_On_Rune_Enter_Worktop(context)
|
||||
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_select_option(context,evt)
|
||||
if evt.param2 == local_defs.rune_start_option then
|
||||
ScriptLib.PrintContextLog(context,"## [OasisTimebackControl]action_select_option:按下选项,符文开始移动")
|
||||
LF_Start_Platform(context)
|
||||
--允许符文开始的时候不在底座上,所以要判一下是否有操作台
|
||||
LF_On_Rune_Leave_Worktop(context)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_gadget_state_change(context,evt)
|
||||
if evt.param2 == timeback_rune then
|
||||
if evt.param1 == rune_states.movable then
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, timeback_rune, {local_defs.rune_start_option})
|
||||
else
|
||||
ScriptLib.DelWorktopOptionByGroupId(context,base_info.group_id, timeback_rune, local_defs.rune_start_option)
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
function action_variable_change(context,evt)
|
||||
if evt.param1 == 1 then
|
||||
ScriptLib.PrintContextLog(context,"## [OasisTimebackControl]action_variable_change:玩法成功,打开赤王文字交互")
|
||||
ScriptLib.SetGadgetEnableInteract(context,base_info.group_id,defs.wordle_id,true)
|
||||
end
|
||||
if evt.param1 == 0 then
|
||||
ScriptLib.PrintContextLog(context,"## [OasisTimebackControl]action_variable_change:玩法失败,关闭赤王文字交互")
|
||||
ScriptLib.SetGadgetEnableInteract(context,base_info.group_id,defs.wordle_id,false)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
function action_gather(context,evt)
|
||||
ScriptLib.PrintContextLog(context,"## [OasisTimebackControl]action_gather:赤王文字被取走,加载宝箱")
|
||||
ScriptLib.SetGroupVariableValue(context,"is_finished",1)
|
||||
ScriptLib.CreateGadget(context,{config_id = defs.chest_id})
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
|
||||
function action_variable_change_GM(context,evt)
|
||||
if evt.source_name == "GM_Remove_Current_Group" then
|
||||
for k,v in pairs(gadgets) do
|
||||
ScriptLib.RemoveEntityByConfigId(context, base_info.group_id, EntityType.GADGET, v.config_id)
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 玩法流程控制 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
function LF_Init_Timeback_Gadget_Config(context)
|
||||
ScriptLib.PrintContextLog(context,"## [OasisTimebackControl]LF_Init_Timeback_Gadget_Config:初始化倒流物件配置")
|
||||
|
||||
|
||||
for k,v in pairs(timeback_gadget_config) do
|
||||
|
||||
ScriptLib.PrintContextLog(context,"## [OasisTimebackControl]LF_Init_Timeback_Gadget_Config:倒流物件为"..k)
|
||||
local range = v.range
|
||||
if range ~= nil then
|
||||
ScriptLib.PrintContextLog(context,"## [OasisTimebackControl]LF_Init_Timeback_Gadget_Config:动画时间范围为"..range[1].."~"..range[2])
|
||||
end
|
||||
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, k , local_defs.timeback_tag_sgv_name, timeback_play_tag)
|
||||
if v.is_revert then
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, k , local_defs.timeback_is_revert, 1)
|
||||
end
|
||||
|
||||
--animator和shader倒流描述的是entity本身的倒流方式
|
||||
if LF_Has_Ani_Timeback(context,k) then
|
||||
ScriptLib.PrintContextLog(context,"## [OasisTimebackControl]LF_Init_Timeback_Gadget_Config:上动画范围的SGV"..range[1].."~"..range[2])
|
||||
local ret = ScriptLib.SetEntityServerGlobalValueByConfigId(context,k,"SGV_ani_"..local_defs.timeback_value_min_suffix, range[1])
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context,k,"SGV_ani_"..local_defs.timeback_value_max_suffix, range[2])
|
||||
end
|
||||
|
||||
if LF_Has_Shader_Timeback(context,k) then
|
||||
ScriptLib.PrintContextLog(context,"## [OasisTimebackControl]LF_Init_Timeback_Gadget_Config:上shader范围的SGV"..range[1].."~"..range[2])
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context,k,"SGV_shader_"..local_defs.timeback_value_min_suffix, range[1])
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context,k,"SGV_shader_"..local_defs.timeback_value_max_suffix, range[2])
|
||||
end
|
||||
|
||||
--effect描述的是外加的资源的倒流方式
|
||||
if LF_Has_Eff_Timeback(context,k) then
|
||||
local eff_range = LF_Get_Effect_Timeback_Value_Config(context,k)
|
||||
ScriptLib.PrintContextLog(context,"## [OasisTimebackControl]LF_Init_Timeback_Gadget_Config:特效时间范围为"..eff_range[1].."~"..eff_range[2])
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context,k,"SGV_eff_"..local_defs.timeback_value_min_suffix, eff_range[1])
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context,k,"SGV_eff_"..local_defs.timeback_value_max_suffix, eff_range[2])
|
||||
end
|
||||
end
|
||||
|
||||
--给控制器上玩法tag和初始化值
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, timeback_controller , local_defs.timeback_tag_sgv_name, timeback_play_tag)
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, timeback_controller , local_defs.timeback_init_sgv_name, init_timeback_value)
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, timeback_controller , local_defs.timeback_division_sgv_name, 4)
|
||||
|
||||
--给操作台上玩法tag
|
||||
for i = 1, #timeback_worktops do
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, timeback_worktops[i] , local_defs.timeback_tag_sgv_name, timeback_play_tag)
|
||||
end
|
||||
end
|
||||
|
||||
function LF_Init_Rune_State(context)
|
||||
--重置一次符文所在位置
|
||||
ScriptLib.SetGroupVariableValue(context,"current_checkpoint",0)
|
||||
|
||||
if LF_Can_Move_To_Next_Point(context) then
|
||||
LF_Set_Rune_State(context,rune_states.movable)
|
||||
else
|
||||
LF_Set_Rune_State(context,rune_states.unmovable)
|
||||
end
|
||||
end
|
||||
|
||||
--当符文离开底座时调用
|
||||
function LF_On_Rune_Leave_Worktop(context)
|
||||
local worktop = LF_Get_Current_Worktop(context)
|
||||
ScriptLib.PrintContextLog(context,"## [OasisTimebackControl]LF_On_Rune_Leave_Worktop:符文离开底座"..worktop)
|
||||
LF_Set_Rune_State(context,rune_states.moving)
|
||||
|
||||
local current_point = LF_Get_Current_Point(context)
|
||||
--允许开始的出发点符文不在底座上,因此不需要触发底座的状态变化
|
||||
if LF_Current_Point_Has_Worktop(context,current_point) then
|
||||
LF_Set_Worktop_State(context,worktop_states.rune_out)
|
||||
end
|
||||
end
|
||||
|
||||
--当符文进入底座时调用
|
||||
function LF_On_Rune_Enter_Worktop(context)
|
||||
|
||||
local worktop = LF_Get_Current_Worktop(context)
|
||||
ScriptLib.PrintContextLog(context,"## [OasisTimebackControl]LF_On_Rune_Enter_Worktop:符文进入底座"..worktop)
|
||||
--只要符文进入底座,就要给底座上显示时间控制UI的选项
|
||||
LF_Set_Worktop_State(context,worktop_states.rune_in)
|
||||
--进入底座时,先默认不能移动。由客户端自己判断当前的值是否处于合法范围
|
||||
LF_Set_Rune_State(context,rune_states.unmovable)
|
||||
|
||||
if LF_Can_Move_To_Next_Point(context) then
|
||||
LF_Set_Rune_State(context,rune_states.movable)
|
||||
else
|
||||
LF_Set_Rune_State(context,rune_states.unmovable)
|
||||
end
|
||||
end
|
||||
|
||||
--检查下一个目标点,如果目标点有正解范围,那么给操作台上正解范围,等客户端调整到正解
|
||||
--如果没有正解范围,则直接上一个可移动的选项
|
||||
function LF_Can_Move_To_Next_Point(context)
|
||||
ScriptLib.PrintContextLog(context,"## [OasisTimebackControl]LF_Can_Move_To_Next_Point:检查是否可以移动到下一个点")
|
||||
local current_point = LF_Get_Current_Point(context)
|
||||
if not LF_Current_Point_Has_Worktop(context,current_point) then
|
||||
return true
|
||||
else
|
||||
return ScriptLib.GetGroupVariableValue(context,"is_currect_checkpoint_success") == 1
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| CRUD方法 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
function LF_Has_Ani_Timeback(context, config_id)
|
||||
local gadget_id = LF_Get_Gadget_Id_By_Config_Id(context, config_id)
|
||||
|
||||
return local_timeback_gadget_config[gadget_id].timeback_type.animator
|
||||
end
|
||||
|
||||
function LF_Has_Eff_Timeback(context, config_id)
|
||||
local gadget_id = LF_Get_Gadget_Id_By_Config_Id(context, config_id)
|
||||
return local_timeback_gadget_config[gadget_id].timeback_type.effect
|
||||
end
|
||||
|
||||
function LF_Has_Shader_Timeback(context, config_id)
|
||||
local gadget_id = LF_Get_Gadget_Id_By_Config_Id(context, config_id)
|
||||
return local_timeback_gadget_config[gadget_id].timeback_type.shader
|
||||
end
|
||||
|
||||
|
||||
function LF_Get_Current_Point(context)
|
||||
return ScriptLib.GetGroupVariableValue(context,"current_checkpoint")
|
||||
end
|
||||
|
||||
function LF_Set_Current_Point(context,point_id)
|
||||
ScriptLib.SetGroupVariableValue(context,"current_checkpoint", point_id)
|
||||
end
|
||||
|
||||
|
||||
--根据gadget的config_id查询gadget_id
|
||||
function LF_Get_Gadget_Id_By_Config_Id(context, config_id)
|
||||
for i = 1,#gadgets do
|
||||
if (gadgets[i].config_id == config_id) then
|
||||
return gadgets[i].gadget_id
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function LF_Get_Effect_Timeback_Value_Config(context,config_id)
|
||||
local gadget_id = LF_Get_Gadget_Id_By_Config_Id(context, config_id)
|
||||
local eff_range = local_timeback_gadget_config[gadget_id].eff_range
|
||||
local ani_range = timeback_gadget_config[config_id].range
|
||||
local is_revert = timeback_gadget_config[config_id].is_revert
|
||||
|
||||
if is_revert then
|
||||
eff_range[1] = 1 - eff_range[2]
|
||||
eff_range[2] = 1 - eff_range[1]
|
||||
end
|
||||
local actual_max = ani_range[1] + (ani_range[2] - ani_range[1]) * eff_range[2]
|
||||
local actual_min = ani_range[1] + (ani_range[2] - ani_range[1]) * eff_range[1]
|
||||
|
||||
return {actual_min,actual_max}
|
||||
end
|
||||
|
||||
function LF_Is_Checkpoint(context,point_id)
|
||||
for i = 1, #checkpoints_to_route_points do
|
||||
if checkpoints_to_route_points[i] == point_id then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function LF_Get_Checkpoint_By_Route_Point(context,route_point)
|
||||
for k,v in pairs(checkpoints_to_route_points) do
|
||||
if v == route_point then
|
||||
return k
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function LF_Current_Point_Has_Worktop(context,point_id)
|
||||
return checkpoint_to_worktops[point_id] ~= nil
|
||||
end
|
||||
|
||||
function LF_Get_Current_Worktop(context)
|
||||
local current_point = LF_Get_Current_Point(context)
|
||||
if LF_Current_Point_Has_Worktop(context,current_point) then
|
||||
return checkpoint_to_worktops[current_point]
|
||||
else
|
||||
return 0
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 杂项方法 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
function LF_Is_In_Table(context,t,value)
|
||||
for k,v in pairs(t) do
|
||||
if v == value then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
|
||||
function LF_Start_Platform(context)
|
||||
local current_checkpoint = ScriptLib.GetGroupVariableValue(context,"current_checkpoint")
|
||||
if current_checkpoint >= #checkpoints_to_route_points then
|
||||
return
|
||||
end
|
||||
local target_point = current_checkpoint + 1
|
||||
|
||||
local start_array_point = 0
|
||||
if current_checkpoint > 0 then
|
||||
start_array_point = checkpoints_to_route_points[current_checkpoint]
|
||||
end
|
||||
local target_array_point = checkpoints_to_route_points[target_point]
|
||||
|
||||
ScriptLib.PrintContextLog(context,"## [OasisTimebackControl]LF_Start_Platform:当前所在点为"..start_array_point)
|
||||
ScriptLib.PrintContextLog(context,"## [OasisTimebackControl]LF_Start_Platform:目标点为"..target_array_point)
|
||||
local route = {}
|
||||
for i = start_array_point+1, target_array_point do
|
||||
table.insert(route,i)
|
||||
end
|
||||
|
||||
ScriptLib.SetPlatformPointArray(context,timeback_rune, defs.pointarray_route, route, { route_type = 0,turn_mode=false})
|
||||
end
|
||||
|
||||
function LF_Stop_Platform(context)
|
||||
ScriptLib.StopPlatform(context,timeback_rune)
|
||||
end
|
||||
|
||||
function LF_Set_Worktop_State(context,state)
|
||||
local current_point = ScriptLib.GetGroupVariableValue(context,"current_checkpoint")
|
||||
local current_worktop = checkpoint_to_worktops[current_point]
|
||||
ScriptLib.PrintContextLog(context,"## [OasisTimebackControl]LF_Set_Worktop_State:操作台"..current_worktop.."设置为状态"..state)
|
||||
ScriptLib.SetGadgetStateByConfigId(context,current_worktop,state)
|
||||
end
|
||||
|
||||
function LF_Set_Rune_State(context,state)
|
||||
ScriptLib.PrintContextLog(context,"## [OasisTimebackControl]LF_Set_Rune_State:符文石设置为状态"..state)
|
||||
ScriptLib.SetGadgetStateByConfigId(context,timeback_rune,state)
|
||||
end
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| server lua call ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
|
||||
|
||||
function SLC_Set_Current_Checkpoint_Correctness(context,is_correct)
|
||||
ScriptLib.PrintContextLog(context,"## [OasisTimebackControl]SLC_Set_Current_Checkpoint_Correctness:上报当前节点是否正确"..is_correct)
|
||||
ScriptLib.SetGroupVariableValue(context,"is_currect_checkpoint_success",is_correct)
|
||||
|
||||
|
||||
local current_checkpoint = ScriptLib.GetGroupVariableValue(context,"current_checkpoint")
|
||||
if current_checkpoint >= #checkpoints_to_route_points then
|
||||
ScriptLib.PrintContextLog(context,"## [OasisTimebackControl]SLC_Set_Current_Checkpoint_Correctness:已经移动到终点,玩法完成")
|
||||
ScriptLib.SetGroupVariableValue(context,"is_success",is_correct)
|
||||
end
|
||||
|
||||
if LF_Can_Move_To_Next_Point(context) then
|
||||
LF_Set_Rune_State(context,rune_states.movable)
|
||||
else
|
||||
LF_Set_Rune_State(context,rune_states.unmovable)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
------------------------------------------------------------------
|
||||
Initialize()
|
||||
515
gdconf/game_data_config/lua/common/V3_4/SandPipe.lua
Normal file
515
gdconf/game_data_config/lua/common/V3_4/SandPipe.lua
Normal file
@@ -0,0 +1,515 @@
|
||||
--[[======================================
|
||||
|| filename: SandPipe
|
||||
|| owner: luyao.huang
|
||||
|| description: 3.3流沙管道
|
||||
|| LogName: SandPipe
|
||||
|| Protection:
|
||||
=======================================]]--
|
||||
|
||||
------
|
||||
local local_defs = {
|
||||
base_interval = 1,
|
||||
option_active = 5000,
|
||||
option_deactive = 5001,
|
||||
option_redirection = 5002,
|
||||
}
|
||||
|
||||
|
||||
local worktop_state_def =
|
||||
{
|
||||
deactive = 0,
|
||||
active = 201,
|
||||
locked = 202
|
||||
}
|
||||
|
||||
local I_connector_state_def =
|
||||
{
|
||||
deactive = 0,
|
||||
active = 201
|
||||
}
|
||||
|
||||
local L_connector_state_def =
|
||||
{
|
||||
deactive = 0,
|
||||
active_1 = 201,
|
||||
active_2 = 202
|
||||
}
|
||||
|
||||
local container_state_def =
|
||||
{
|
||||
deactive = 0,
|
||||
active = 201
|
||||
}
|
||||
|
||||
local light_state_def =
|
||||
{
|
||||
deactive = 0,
|
||||
active = 201
|
||||
}
|
||||
|
||||
|
||||
local Tri = {
|
||||
[1] = { name = "group_load", config_id = 10000001, event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_group_load", trigger_count = 0},
|
||||
[2] = { name = "gadget_state_change", config_id = 10000002, event = EventType.EVENT_GADGET_STATE_CHANGE, source = "", condition = "", action = "action_gadget_state_change", trigger_count = 0},
|
||||
[3] = { name = "select_option", config_id = 10000003, event = EventType.EVENT_SELECT_OPTION, source = "", condition = "", action = "action_select_option", trigger_count = 0},
|
||||
[4] = { name = "time_axis_pass", config_id = 10000004, event = EventType.EVENT_TIME_AXIS_PASS, source = "", condition = "", action = "action_time_axis_pass", trigger_count = 0},
|
||||
}
|
||||
|
||||
function Initialize()
|
||||
for k,v in pairs(Tri) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 触发器回调 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
function action_group_load(context,evt)
|
||||
ScriptLib.PrintContextLog(context,"## [SandPipe] action_group_load:流沙管道group加载")
|
||||
LF_Start_Sand_Flow(context,0)
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
function action_gadget_state_change(context,evt)
|
||||
|
||||
if LF_Is_Connector(context,evt.param2) then
|
||||
ScriptLib.PrintContextLog(context,"## [SandPipe] action_gadget_state_change:连接器"..evt.param2.."状态变化")
|
||||
LF_Start_Sand_Flow(context,evt.param2)
|
||||
end
|
||||
|
||||
if LF_Is_Worktop(context,evt.param2) and evt.param3 == worktop_state_def.locked and evt.param1 == worktop_state_def.deactive then
|
||||
ScriptLib.PrintContextLog(context,"## [SandPipe] action_gadget_state_change:操作台解锁")
|
||||
if not LF_Is_In_Sandflow(context) then
|
||||
--当操作台的状态从202转到0状态时,说明操作台被解锁,如果当前不在流沙状态,就上选项,否则等流沙结束统一上选项
|
||||
local worktop = evt.param2
|
||||
LF_Set_Worktop_Option_State(context,worktop,true)
|
||||
end
|
||||
end
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_select_option(context,evt)
|
||||
local worktop = evt.param1
|
||||
if evt.param2 == local_defs.option_active then
|
||||
local connector = LF_Get_Connector_By_Worktop(context,evt.param1)
|
||||
ScriptLib.SetGadgetStateByConfigId(context,connector,I_connector_state_def.active)
|
||||
ScriptLib.SetGadgetStateByConfigId(context,worktop,worktop_state_def.active)
|
||||
end
|
||||
if evt.param2 == local_defs.option_deactive then
|
||||
local connector = LF_Get_Connector_By_Worktop(context,evt.param1)
|
||||
ScriptLib.SetGadgetStateByConfigId(context,connector,I_connector_state_def.deactive)
|
||||
ScriptLib.SetGadgetStateByConfigId(context,worktop,worktop_state_def.deactive)
|
||||
end
|
||||
if evt.param2 == local_defs.option_redirection then
|
||||
local connector = LF_Get_Connector_By_Worktop(context,evt.param1)
|
||||
local state = ScriptLib.GetGadgetStateByConfigId(context,base_info.group_id,connector)
|
||||
ScriptLib.SetGadgetStateByConfigId(context,worktop,worktop_state_def.active)
|
||||
if state == L_connector_state_def.active_1 then
|
||||
ScriptLib.SetGadgetStateByConfigId(context,connector,L_connector_state_def.active_2)
|
||||
elseif state == L_connector_state_def.active_2 then
|
||||
ScriptLib.SetGadgetStateByConfigId(context,connector,L_connector_state_def.active_1)
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
function action_time_axis_pass(context,evt)
|
||||
ScriptLib.PrintContextLog(context,"## [SandPipe] action_time_axis_pass:时间轴tick,名字为"..evt.source_name)
|
||||
if string.sub(evt.source_name,0,10) == "container_" then
|
||||
ScriptLib.PrintContextLog(context,"## [SandPipe] action_time_axis_pass:链路时间轴tick,当前为链路上第"..evt.param1.."个物件")
|
||||
local container_id = tonumber(string.sub(evt.source_name,11,-1))
|
||||
local between_stream = LF_Get_Stream_From_First_Inactive_Light(context,container_id)
|
||||
--时间轴tick次数,即亮到了stream上的第几个灯
|
||||
local k = evt.param1
|
||||
if LF_Is_Light(context,between_stream[1]) then
|
||||
ScriptLib.SetGadgetStateByConfigId(context,between_stream[1],light_state_def.active)
|
||||
end
|
||||
if LF_Is_Container(context,between_stream[1]) then
|
||||
ScriptLib.PrintContextLog(context,"## [SandPipe] action_time_axis_pass:链路时间轴结束,链路上所有物件状态转换完毕")
|
||||
ScriptLib.SetGadgetStateByConfigId(context,between_stream[1],container_state_def.active)
|
||||
local axis_num = ScriptLib.GetGroupTempValue(context,"active_axis_num",{})
|
||||
axis_num = axis_num - 1
|
||||
ScriptLib.ChangeGroupTempValue(context,"active_axis_num",-1,{})
|
||||
if axis_num <= 0 then
|
||||
ScriptLib.PrintContextLog(context,"## [SandPipe] action_time_axis_pass:所有时间轴结束,本次流沙结束")
|
||||
LF_Stop_Sand_Flow(context)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 玩法流程控制 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
|
||||
function LF_Start_Sand_Flow(context,connector_id)
|
||||
ScriptLib.PrintContextLog(context,"## [SandPipe] LF_Start_Sand_Flow:开始本次流沙,本次流沙来源于连接器"..connector_id)
|
||||
LF_Hide_Option(context)
|
||||
--检查所有通路,找到因这次转换连接器而发生联通变化的通路
|
||||
local flag = true
|
||||
ScriptLib.SetGroupTempValue(context,"active_axis_num",0,{})
|
||||
for k,v in pairs(streams) do
|
||||
ScriptLib.PrintContextLog(context,"## [SandPipe] LF_Start_Sand_Flow:检查容器"..k.."对应的链路")
|
||||
local container_state = ScriptLib.GetGadgetStateByConfigId(context,base_info.group_id,k)
|
||||
local is_connected = LF_Is_Container_Connected(context,k)
|
||||
--如果这次改动连接上了容器,且容器之前状态为0
|
||||
--将改动的连接器到容器间的所有灯顺次点亮
|
||||
if is_connected and container_state == container_state_def.deactive then
|
||||
ScriptLib.PrintContextLog(context,"## [SandPipe] LF_Start_Sand_Flow:容器"..k.."为空,且链路联通了")
|
||||
flag = false
|
||||
local stream = LF_Get_Stream_From_First_Inactive_Light(context,k)
|
||||
local axis = LF_Create_Stream_Axis(context,stream)
|
||||
ScriptLib.InitTimeAxis(context,"container_"..k,axis,false)
|
||||
ScriptLib.ChangeGroupTempValue(context,"active_axis_num",1,{})
|
||||
end
|
||||
--如果这次改动断开了容器,且容器之前状态为201
|
||||
--将改动的连接器到容器间的所有灯立刻熄灭
|
||||
if not is_connected and container_state == container_state_def.active then
|
||||
ScriptLib.PrintContextLog(context,"## [SandPipe] LF_Start_Sand_Flow:容器"..k.."为满,且链路断开了")
|
||||
local stream = LF_Get_Stream_From_Origin(context,k)
|
||||
for i = 1, #stream do
|
||||
--检查当前灯是否在当前任何已联通的链路中,如果是,则无事发生
|
||||
if not LF_Is_In_Connected_Stream(context,stream[i]) then
|
||||
ScriptLib.SetGadgetStateByConfigId(context,stream[i],light_state_def.deactive)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if flag then
|
||||
LF_Stop_Sand_Flow(context)
|
||||
end
|
||||
end
|
||||
|
||||
function LF_Stop_Sand_Flow(context)
|
||||
ScriptLib.PrintContextLog(context,"## [SandPipe] LF_Stop_Sand_Flow:结束本次流沙")
|
||||
LF_Show_Option(context)
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
function LF_Show_Option(context)
|
||||
|
||||
ScriptLib.PrintContextLog(context,"## [SandPipe] LF_Show_Option:显示选项")
|
||||
local connectors = LF_Get_All_Connectors(context)
|
||||
for k,v in pairs(connectors) do
|
||||
local worktop = connector_to_worktop[v]
|
||||
--允许有的connector没有对应的worktop,用其他方式解锁。如果没找到对应worktop就跳过去
|
||||
if worktop ~= nil then
|
||||
LF_Set_Worktop_Option_State(context,worktop,true)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function LF_Hide_Option(context)
|
||||
ScriptLib.PrintContextLog(context,"## [SandPipe] LF_Hide_Option:隐藏选项")
|
||||
local connectors = LF_Get_All_Connectors(context)
|
||||
for k,v in pairs(connectors) do
|
||||
local worktop = connector_to_worktop[v]
|
||||
--允许有的connector没有对应的worktop,用其他方式解锁。如果没找到对应worktop就跳过去
|
||||
if worktop ~= nil then
|
||||
ScriptLib.PrintContextLog(context,"## [SandPipe] LF_Set_Worktop_Option_State:从连接器"..v.."对应的操作台清除选项")
|
||||
LF_Set_Worktop_Option_State(context,worktop,false)
|
||||
else
|
||||
ScriptLib.PrintContextLog(context,"## [SandPipe] LF_Set_Worktop_Option_State:没有找到连接器"..v.."对应的操作台,直接返回")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
function LF_Set_Worktop_Option_State(context,worktop,enable)
|
||||
local connector = LF_Get_Connector_By_Worktop(context,worktop)
|
||||
--允许有的connector没有对应的worktop,用其他方式解锁。如果没找到对应worktop就跳过去
|
||||
if connector == nil then
|
||||
ScriptLib.PrintContextLog(context,"## [SandPipe] LF_Set_Worktop_Option_State:没有找到操作台"..worktop.."对应的连接器,直接返回")
|
||||
return
|
||||
end
|
||||
local state = ScriptLib.GetGadgetStateByConfigId(context,base_info.group_id,connector)
|
||||
local worktop_state = ScriptLib.GetGadgetStateByConfigId(context,base_info.group_id,worktop)
|
||||
if enable then
|
||||
--如果操作台状态是202,那么说明操作台未解锁,不能上选项
|
||||
if worktop_state ~= worktop_state_def.locked then
|
||||
if LF_Get_Connector_Type(context,connector) == "I" then
|
||||
if state == I_connector_state_def.deactive then
|
||||
ScriptLib.PrintContextLog(context,"## [SandPipe] LF_Set_Worktop_Option_State:在I型连接器"..worktop.."添加激活选项")
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context,base_info.group_id,worktop,{local_defs.option_active})
|
||||
end
|
||||
--if state == I_connector_state_def.active then
|
||||
-- ScriptLib.SetWorktopOptionsByGroupId(context,base_info.group_id,worktop,{local_defs.option_deactive})
|
||||
--end
|
||||
else
|
||||
if state == L_connector_state_def.deactive then
|
||||
ScriptLib.PrintContextLog(context,"## [SandPipe] LF_Set_Worktop_Option_State:在L型连接器"..worktop.."添加激活选项")
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context,base_info.group_id,worktop,{local_defs.option_active})
|
||||
end
|
||||
if state == L_connector_state_def.active_1 or state == L_connector_state_def.active_2 then
|
||||
ScriptLib.PrintContextLog(context,"## [SandPipe] LF_Set_Worktop_Option_State:在L型连接器"..worktop.."添加转向选项")
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context,base_info.group_id,worktop,{local_defs.option_redirection})
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
if LF_Get_Connector_Type(context,connector) == "I" then
|
||||
if state == I_connector_state_def.deactive then
|
||||
ScriptLib.PrintContextLog(context,"## [SandPipe] LF_Set_Worktop_Option_State:从I型连接器"..worktop.."删除激活选项")
|
||||
ScriptLib.DelWorktopOptionByGroupId(context,base_info.group_id,worktop,local_defs.option_active)
|
||||
ScriptLib.DelWorktopOptionByGroupId(context,base_info.group_id,worktop,local_defs.option_deactive)
|
||||
end
|
||||
if state == I_connector_state_def.active then
|
||||
ScriptLib.PrintContextLog(context,"## [SandPipe] LF_Set_Worktop_Option_State:从I型连接器"..worktop.."删除关闭选项")
|
||||
ScriptLib.DelWorktopOptionByGroupId(context,base_info.group_id,worktop,local_defs.option_active)
|
||||
ScriptLib.DelWorktopOptionByGroupId(context,base_info.group_id,worktop,local_defs.option_deactive)
|
||||
end
|
||||
else
|
||||
if state == L_connector_state_def.deactive then
|
||||
ScriptLib.PrintContextLog(context,"## [SandPipe] LF_Set_Worktop_Option_State:从L型连接器"..worktop.."删除激活选项")
|
||||
ScriptLib.DelWorktopOptionByGroupId(context,base_info.group_id,worktop,local_defs.option_redirection)
|
||||
ScriptLib.DelWorktopOptionByGroupId(context,base_info.group_id,worktop,local_defs.option_active)
|
||||
end
|
||||
if state == L_connector_state_def.active_1 or state == L_connector_state_def.active_2 then
|
||||
ScriptLib.PrintContextLog(context,"## [SandPipe] LF_Set_Worktop_Option_State:从L型连接器"..worktop.."删除转向选项")
|
||||
ScriptLib.DelWorktopOptionByGroupId(context,base_info.group_id,worktop,local_defs.option_redirection)
|
||||
ScriptLib.DelWorktopOptionByGroupId(context,base_info.group_id,worktop,local_defs.option_active)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 核心方法 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
--从源头出发,找到指定container_id对应的链路上,第一个未激活的物件开始,向下游找到所有物件
|
||||
function LF_Get_Stream_From_First_Inactive_Light(context,container_id)
|
||||
ScriptLib.PrintContextLog(context,"## [SandPipe] LF_Get_Stream_From_Origin: 获取源头到容器"..container_id.."之间的第一个非激活物件开始后的所有物件")
|
||||
local whole_stream = streams[container_id]
|
||||
local stream = {}
|
||||
for i = 1, #whole_stream do
|
||||
if not LF_Is_Connector(context, whole_stream[i]) then
|
||||
local state = ScriptLib.GetGadgetStateByConfigId(context,base_info.group_id,whole_stream[i])
|
||||
if state == light_state_def.deactive then
|
||||
table.insert(stream,whole_stream[i])
|
||||
end
|
||||
end
|
||||
end
|
||||
table.insert(stream,container_id)
|
||||
return stream
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
--找到连接器和容器之间所有非连接器物件,包括容器本身
|
||||
function LF_Get_Stream_From_Origin(context,container_id)
|
||||
|
||||
ScriptLib.PrintContextLog(context,"## [SandPipe] LF_Get_Stream_From_Origin: 获取源头和容器"..container_id.."之间的所有非连接器物件")
|
||||
local whole_stream = streams[container_id]
|
||||
local stream = {}
|
||||
for i = 1, #whole_stream do
|
||||
if not LF_Is_Connector(context, whole_stream[i]) then
|
||||
ScriptLib.PrintContextLog(context,"## [SandPipe] LF_Get_Stream_Between_Connector_And_Container:物件:"..whole_stream[i])
|
||||
table.insert(stream,whole_stream[i])
|
||||
end
|
||||
end
|
||||
table.insert(stream,container_id)
|
||||
return stream
|
||||
end
|
||||
|
||||
--给定一个容器,判断容器是否与源头相连
|
||||
function LF_Is_Container_Connected(context,container_id)
|
||||
ScriptLib.PrintContextLog(context,"## [SandPipe] LF_Is_Container_Connected:检查"..container_id.."与源头是否联通")
|
||||
local stream = streams[container_id]
|
||||
local flag = true
|
||||
for i = 1, #stream do
|
||||
local state = ScriptLib.GetGadgetStateByConfigId(context,base_info.group_id,stream[i])
|
||||
ScriptLib.PrintContextLog(context,"## [SandPipe] LF_Is_Container_Connected:检查"..stream[i].."的状态为"..state)
|
||||
if LF_Is_Connector(context,stream[i]) then
|
||||
local connector_type = LF_Get_Connector_Type(context,stream[i])
|
||||
ScriptLib.PrintContextLog(context,"## [SandPipe] LF_Is_Container_Connected:是connector,类型为"..connector_type)
|
||||
if connector_type == "I" then
|
||||
if state ~= I_connector_state_def.active then
|
||||
ScriptLib.PrintContextLog(context,"## [SandPipe] LF_Is_Container_Connected:I型连接器"..stream[i].."是断开的")
|
||||
flag = false
|
||||
return false
|
||||
end
|
||||
elseif connector_type == "L" then
|
||||
if state ~= L_connector_state_def.active_1 and state ~= L_connector_state_def.active_2 then
|
||||
ScriptLib.PrintContextLog(context,"## [SandPipe] LF_Is_Container_Connected:L型连接器"..stream[i].."是断开的")
|
||||
flag = false
|
||||
return false
|
||||
end
|
||||
if i < #stream then
|
||||
if L_connections[stream[i]][state] ~= stream[i+1] then
|
||||
ScriptLib.PrintContextLog(context,"## [SandPipe] LF_Is_Container_Connected:L型连接器"..stream[i].."方向不对,是断开的")
|
||||
flag = false
|
||||
return false
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if flag == true then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
--返回一个物件是否处于一个联通的链路中
|
||||
function LF_Is_In_Connected_Stream(context,config_id)
|
||||
for k,v in pairs(streams) do
|
||||
for i = 1, #v do
|
||||
if config_id == v[i] then
|
||||
if LF_Is_Container_Connected(context,k) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| CRUD方法 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
--返回一个configid是否是容器
|
||||
function LF_Is_Container(context,config_id)
|
||||
return LF_Is_In_Table(context,containers,config_id)
|
||||
end
|
||||
|
||||
--返回一个configid是否是连接器
|
||||
function LF_Is_Connector(context,config_id)
|
||||
return LF_Is_In_Table(context,I_connectors,config_id) or LF_Is_In_Table(context,L_connectors,config_id)
|
||||
end
|
||||
|
||||
--返回一个configid是否是指示灯
|
||||
function LF_Is_Light(context,config_id)
|
||||
return LF_Is_In_Table(context,lights,config_id)
|
||||
end
|
||||
|
||||
--返回一个configid是否是操作台
|
||||
function LF_Is_Worktop(context,config_id)
|
||||
return LF_Is_In_Table(context,worktops,config_id)
|
||||
end
|
||||
|
||||
|
||||
--是否处于流沙状态中
|
||||
function LF_Is_In_Sandflow(context)
|
||||
ScriptLib.PrintContextLog(context,"## [SandPipe] LF_Is_In_Sandflow:当前激活的链路条数为"..ScriptLib.GetGroupTempValue(context, "active_axis_num", {base_info.group_id}))
|
||||
return ScriptLib.GetGroupTempValue(context, "active_axis_num", {base_info.group_id}) > 0
|
||||
end
|
||||
|
||||
|
||||
--获取一个连接器的类型(I或L)
|
||||
function LF_Get_Connector_Type(context,config_id)
|
||||
if not LF_Is_Connector(context,config_id) then
|
||||
return nil
|
||||
end
|
||||
if LF_Is_In_Table(context,I_connectors,config_id) then
|
||||
return "I"
|
||||
end
|
||||
if LF_Is_In_Table(context,L_connectors,config_id) then
|
||||
return "L"
|
||||
end
|
||||
end
|
||||
|
||||
--获取所有Connector的config_id表
|
||||
function LF_Get_All_Connectors(context)
|
||||
local connectors = {}
|
||||
for k, v in pairs(I_connectors) do
|
||||
ScriptLib.PrintContextLog(context,"## [SandPipe] LF_Get_All_Connectors:将I型连接器"..v.."加入allconnectors")
|
||||
table.insert(connectors,v)
|
||||
end
|
||||
for k, v in pairs(L_connectors) do
|
||||
ScriptLib.PrintContextLog(context,"## [SandPipe] LF_Get_All_Connectors:将L型连接器"..v.."加入allconnectors")
|
||||
table.insert(connectors,v)
|
||||
end
|
||||
return connectors
|
||||
end
|
||||
|
||||
|
||||
function LF_Get_Connector_By_Worktop(context,worktop)
|
||||
for k,v in pairs(connector_to_worktop) do
|
||||
if v == worktop then
|
||||
return k
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
--输入一个stream,根据这个stream生成一个逐渐启动的时间轴
|
||||
function LF_Create_Stream_Axis(context,stream)
|
||||
local axis = {}
|
||||
local axis_time = 0
|
||||
for i = 1, #stream do
|
||||
local flag = false
|
||||
if special_interval ~= nil then
|
||||
for k,v in pairs(special_interval) do
|
||||
if v.upstream == stream[i] and v.downstream == stream[i+1] then
|
||||
axis_time = axis_time + v.interval
|
||||
flag = true
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
if not flag then
|
||||
axis_time = axis_time + base_interval
|
||||
end
|
||||
table.insert(axis,axis_time)
|
||||
end
|
||||
return axis
|
||||
end
|
||||
|
||||
|
||||
function LF_Get_Gadget_Id_By_Config_Id(context,config_id)
|
||||
for k,v in pairs(gadgets) do
|
||||
if v.config_id == config_id then
|
||||
return v.gadget_id
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
function LF_Is_In_Table(context,t,value)
|
||||
if t == nil then
|
||||
return false
|
||||
end
|
||||
for k,v in pairs(t) do
|
||||
if v == value then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function LF_Print_Table(context,t)
|
||||
for k,v in pairs(t) do
|
||||
ScriptLib.PrintContextLog(context,"## [SandPipe] LF_Print_Table"..k.." : "..v)
|
||||
end
|
||||
end
|
||||
------------------------------------------------------------------
|
||||
|
||||
Initialize()
|
||||
305
gdconf/game_data_config/lua/common/V3_4/SandStair.lua
Normal file
305
gdconf/game_data_config/lua/common/V3_4/SandStair.lua
Normal file
@@ -0,0 +1,305 @@
|
||||
--[[======================================
|
||||
|| filename: SandStair
|
||||
|| owner: luyao.huang
|
||||
|| description: 3.3流沙阶梯玩法
|
||||
|| LogName: SandStair
|
||||
|| Protection:
|
||||
=======================================]]--
|
||||
|
||||
|
||||
|
||||
------
|
||||
local local_defs = {
|
||||
option_active = 5000,
|
||||
option_deactive = 5001,
|
||||
}
|
||||
|
||||
local Tri = {
|
||||
[1] = { name = "group_load", config_id = 10000001, event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_group_load", trigger_count = 0},
|
||||
[2] = { name = "select_option", config_id = 10000002, event = EventType.EVENT_SELECT_OPTION, source = "", condition = "", action = "action_select_option", trigger_count = 0},
|
||||
[3] = { name = "time_axis_pass", config_id = 10000003, event = EventType.EVENT_TIME_AXIS_PASS, source = "", condition = "", action = "action_time_axis_pass", trigger_count = 0},
|
||||
[4] = { name = "gadget_state_change", config_id = 10000004, event = EventType.EVENT_GADGET_STATE_CHANGE, source = "", condition = "", action = "action_gadget_state_change", trigger_count = 0},
|
||||
[5] = { name = "group_will_unload", config_id = 10000005, event = EventType.EVENT_GROUP_WILL_UNLOAD, source = "", condition = "", action = "action_group_will_unload", trigger_count = 0},
|
||||
}
|
||||
|
||||
function Initialize()
|
||||
for k,v in pairs(Tri) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
for i = 1, #pools do
|
||||
table.insert(variables,{config_id = 500001000+i, name = "sand_amount_"..pools[i], value = 0, no_refresh = true})
|
||||
end
|
||||
table.insert(variables,{config_id = 500000001, name = "origin_time", value = 0, no_refresh = true})
|
||||
table.insert(variables,{config_id = 500000002, name = "is_in_axis", value = 0, no_refresh = true})
|
||||
end
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 触发器回调 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
--玩法加载初始化
|
||||
function action_group_load(context,evt)
|
||||
ScriptLib.PrintContextLog(context,"## [SandStair] action_group_load:group加载")
|
||||
LF_Show_Option(context)
|
||||
--断线重连或group加载时,要尝试根据存档变量恢复一次玩法状态
|
||||
LF_Set_All_SGV_To_Pools(context)
|
||||
LF_Start_Axis(context)
|
||||
return 0
|
||||
end
|
||||
|
||||
--卸载时,要保底清除状态变量
|
||||
function action_group_will_unload(context,evt)
|
||||
ScriptLib.SetGroupVariableValue(context,"is_in_axis",0)
|
||||
ScriptLib.SetGroupVariableValue(context,"origin_time",0)
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
function action_select_option(context,evt)
|
||||
local nozzole = evt.param1
|
||||
if evt.param2 == local_defs.option_active then
|
||||
ScriptLib.SetGadgetStateByConfigId(context,nozzole,201)
|
||||
if evt.param1 == origin_defs.origin_nozzole then
|
||||
LF_Set_Nozzole_Flow(context,evt.param1)
|
||||
end
|
||||
LF_Start_Axis(context)
|
||||
end
|
||||
if evt.param2 == local_defs.option_deactive then
|
||||
ScriptLib.SetGadgetStateByConfigId(context,nozzole,0)
|
||||
if evt.param1 == origin_defs.origin_nozzole then
|
||||
LF_Set_Nozzole_Freeze(context,evt.param1)
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
function action_time_axis_pass(context,evt)
|
||||
if evt.source_name == "Sand_Flow" then
|
||||
LF_Run_Sand_Flow(context)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_gadget_state_change(context,evt)
|
||||
if LF_Is_Nozzole(context,evt.param2) then
|
||||
LF_Set_Option(context,evt.param2)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 玩法流程控制 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
|
||||
function LF_Start_Axis(context)
|
||||
--将任何一个开关转到打开,都可能会导致开始流沙,因此要开时间轴算一遍
|
||||
if ScriptLib.GetGroupVariableValue(context,"is_in_axis") == 0 then
|
||||
ScriptLib.InitTimeAxis(context,"Sand_Flow",{1},true)
|
||||
ScriptLib.SetGroupVariableValue(context,"is_in_axis",1)
|
||||
ScriptLib.SetGroupVariableValue(context,"origin_time",0)
|
||||
end
|
||||
end
|
||||
|
||||
function LF_Run_Sand_Flow(context)
|
||||
|
||||
local state = ScriptLib.GetGadgetStateByConfigId(context,base_info.group_id,origin_defs.origin_nozzole)
|
||||
local flag = true
|
||||
if state == 201 then
|
||||
flag = false
|
||||
ScriptLib.ChangeGroupVariableValue(context,"origin_time",1)
|
||||
LF_Change_Sand_Amount(context,origin_defs.origin_pool,origin_defs.origin_speed)
|
||||
if ScriptLib.GetGroupVariableValue(context,"origin_time") > origin_defs.origin_time then
|
||||
ScriptLib.SetGadgetStateByConfigId(context,origin_defs.origin_nozzole,0)
|
||||
LF_Set_Nozzole_Freeze(context,origin_defs.origin_nozzole)
|
||||
ScriptLib.SetGroupVariableValue(context,"origin_time",0)
|
||||
end
|
||||
end
|
||||
|
||||
for i = 1, #pools do
|
||||
ScriptLib.PrintContextLog(context,"## [SandStair] LF_Run_Sand_Flow:=================================================")
|
||||
ScriptLib.PrintContextLog(context,"## [SandStair] LF_Run_Sand_Flow:计算池子"..pools[i].."本次tick的沙量")
|
||||
local pool = pools[i]
|
||||
local flow_speed = 0
|
||||
local up_nozzole = nozzoles[pool].up_nozzole
|
||||
local down_nozzole = nozzoles[pool].down_nozzole
|
||||
local up_nozzole_pool = pool_connections[pool].up_nozzole
|
||||
local down_nozzole_pool = pool_connections[pool].down_nozzole
|
||||
--如果池子不为空,才会向下方流沙
|
||||
if not LF_Is_Pool_Empty(context,pool) then
|
||||
local flag_up = true
|
||||
local flag_down = true
|
||||
ScriptLib.PrintContextLog(context,"## [SandStair] LF_Run_Sand_Flow:池子不为空")
|
||||
--如果上喷口已激活
|
||||
if LF_Is_Nozzole_Active(context,up_nozzole) then
|
||||
ScriptLib.PrintContextLog(context,"## [SandStair] LF_Run_Sand_Flow:上喷口处于激活状态")
|
||||
--且沙量大于一定值,允许上喷口流沙
|
||||
if LF_Is_Up_Nozzole_Can_Flow(context,pool) then
|
||||
ScriptLib.PrintContextLog(context,"## [SandStair] LF_Run_Sand_Flow:上喷口流沙")
|
||||
flag = false
|
||||
flag_up = false
|
||||
flow_speed = flow_speed + defs.up_flow_speed
|
||||
LF_Set_Nozzole_Flow(context,up_nozzole)
|
||||
--如果上喷口下方有沙池,则修改下方沙池沙量
|
||||
if up_nozzole_pool ~= 0 then
|
||||
LF_Change_Sand_Amount(context,up_nozzole_pool,defs.up_flow_speed)
|
||||
end
|
||||
end
|
||||
end
|
||||
if flag_up then
|
||||
LF_Set_Nozzole_Freeze(context,up_nozzole)
|
||||
end
|
||||
--如果下喷口已激活
|
||||
if LF_Is_Nozzole_Active(context,down_nozzole) then
|
||||
flag = false
|
||||
flag_down = false
|
||||
ScriptLib.PrintContextLog(context,"## [SandStair] LF_Run_Sand_Flow:下喷口处于激活状态")
|
||||
flow_speed = flow_speed + defs.down_flow_speed
|
||||
LF_Set_Nozzole_Flow(context,down_nozzole)
|
||||
--如果下喷口下方有沙池,则修改下方沙池沙量
|
||||
if down_nozzole_pool ~= 0 then
|
||||
LF_Change_Sand_Amount(context,down_nozzole_pool,defs.down_flow_speed)
|
||||
end
|
||||
end
|
||||
if flag_down then
|
||||
LF_Set_Nozzole_Freeze(context,down_nozzole)
|
||||
end
|
||||
--如果池子已溢出,还要计算溢出的沙量
|
||||
if LF_Is_Pool_Full(context,pool) then
|
||||
flag = false
|
||||
ScriptLib.PrintContextLog(context,"## [SandStair] LF_Run_Sand_Flow:池子已溢出")
|
||||
flow_speed = flow_speed + defs.overflow_speed
|
||||
end
|
||||
ScriptLib.PrintContextLog(context,"## [SandStair] LF_Run_Sand_Flow:本次流沙总量为"..flow_speed)
|
||||
LF_Change_Sand_Amount(context,pool,-flow_speed)
|
||||
else
|
||||
LF_Set_Nozzole_Freeze(context,up_nozzole)
|
||||
LF_Set_Nozzole_Freeze(context,down_nozzole)
|
||||
end
|
||||
ScriptLib.PrintContextLog(context,"## [SandStair] LF_Run_Sand_Flow:=================================================")
|
||||
end
|
||||
|
||||
--期间没有任何容器再有变化了,本轮沙子流动结束,关掉时间轴
|
||||
if flag then
|
||||
ScriptLib.EndTimeAxis(context, "Sand_Flow")
|
||||
ScriptLib.SetGroupVariableValue(context,"is_in_axis",0)
|
||||
ScriptLib.PrintContextLog(context,"## [SandStair] LF_Run_Sand_Flow:本轮沙子流动结束!!")
|
||||
end
|
||||
end
|
||||
|
||||
function LF_Set_All_SGV_To_Pools(context)
|
||||
for k,v in pairs(pools) do
|
||||
LF_Set_SGV_To_Pool(context,v)
|
||||
end
|
||||
end
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| CRUD方法 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
function LF_Get_Sand_Amount(context,pool)
|
||||
return ScriptLib.GetGroupVariableValue(context,"sand_amount_"..pool)
|
||||
end
|
||||
|
||||
function LF_Change_Sand_Amount(context,pool,delta)
|
||||
local sand_amount = LF_Get_Sand_Amount(context,pool)
|
||||
sand_amount = sand_amount + delta
|
||||
if sand_amount > pool_defs.overflow_max then
|
||||
sand_amount = pool_defs.overflow_max
|
||||
end
|
||||
if sand_amount < 0 then
|
||||
sand_amount = 0
|
||||
end
|
||||
ScriptLib.SetGroupVariableValue(context,"sand_amount_"..pool,sand_amount)
|
||||
|
||||
LF_Set_SGV_To_Pool(context,pool)
|
||||
end
|
||||
|
||||
|
||||
|
||||
function LF_Is_Pool_Empty(context,pool)
|
||||
return LF_Get_Sand_Amount(context,pool) <= 0
|
||||
end
|
||||
|
||||
function LF_Is_Pool_Full(context,pool)
|
||||
return LF_Get_Sand_Amount(context,pool) > pool_defs.max
|
||||
end
|
||||
|
||||
function LF_Is_Nozzole_Active(context,nozzole)
|
||||
if nozzole == -1 then
|
||||
return false
|
||||
end
|
||||
local state = ScriptLib.GetGadgetStateByConfigId(context,base_info.group_id,nozzole)
|
||||
return state == 201
|
||||
end
|
||||
|
||||
function LF_Set_Nozzole_Flow(context,nozzole)
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, nozzole, "SGV_Is_Flow", 1)
|
||||
end
|
||||
|
||||
function LF_Set_Nozzole_Freeze(context,nozzole)
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, nozzole, "SGV_Is_Flow", 0)
|
||||
end
|
||||
|
||||
function LF_Is_Up_Nozzole_Can_Flow(context,pool)
|
||||
return LF_Get_Sand_Amount(context,pool) > pool_defs.up_nozzole_threshold
|
||||
end
|
||||
|
||||
function LF_Is_Nozzole(context, config_id)
|
||||
if config_id == origin_defs.origin_nozzole then
|
||||
return true
|
||||
end
|
||||
for k,v in pairs(nozzoles) do
|
||||
if v.up_nozzole == config_id or v.down_nozzole == config_id then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
|
||||
--给池子上面写SGV
|
||||
function LF_Set_SGV_To_Pool(context,pool)
|
||||
local sand_amount = LF_Get_Sand_Amount(context,pool)
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, pool, "SGV_Sand_Amount", sand_amount)
|
||||
end
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 杂项方法 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
function LF_Set_Option(context,config_id)
|
||||
ScriptLib.PrintContextLog(context,"## [SandStair] LF_Set_Option:给"..config_id.."上选项")
|
||||
local state = ScriptLib.GetGadgetStateByConfigId(context,base_info.group_id,config_id)
|
||||
if state == 0 then
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context,base_info.group_id,config_id,{local_defs.option_active})
|
||||
end
|
||||
if state == 201 then
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context,base_info.group_id,config_id,{local_defs.option_deactive})
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function LF_Show_Option(context)
|
||||
|
||||
ScriptLib.PrintContextLog(context,"## [SandStair] LF_Show_Option:显示选项")
|
||||
for k,v in pairs(nozzoles) do
|
||||
if v.up_nozzole ~= -1 and v.up_nozzole ~= 0 then
|
||||
LF_Set_Option(context,v.up_nozzole)
|
||||
end
|
||||
if v.down_nozzole ~= -1 and v.down_nozzole ~= 0 then
|
||||
LF_Set_Option(context,v.down_nozzole)
|
||||
end
|
||||
end
|
||||
LF_Set_Option(context,origin_defs.origin_nozzole)
|
||||
end
|
||||
|
||||
------------------------------------------------------------------
|
||||
Initialize()
|
||||
611
gdconf/game_data_config/lua/common/V3_4/SandstormControl.lua
Normal file
611
gdconf/game_data_config/lua/common/V3_4/SandstormControl.lua
Normal file
@@ -0,0 +1,611 @@
|
||||
--[[======================================
|
||||
|| filename: SandstormControl
|
||||
|| owner: luyao.huang
|
||||
|| description: 3.3沙尘爆发控制group(白盒)
|
||||
|| LogName: SandstormControl
|
||||
|| Protection:
|
||||
=======================================]]--
|
||||
|
||||
|
||||
|
||||
------
|
||||
local local_defs = {
|
||||
forecast_time = 10
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
local sandstorm_Tri = {
|
||||
[1] = { name = "group_load", config_id = 10000001, event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_group_load", trigger_count = 0},
|
||||
[2] = { name = "time_axis_pass", config_id = 10000002, event = EventType.EVENT_TIME_AXIS_PASS, source = "", condition = "", action = "action_time_axis_pass", trigger_count = 0},
|
||||
[3] = { name = "group_will_unload", config_id = 10000003, event = EventType.EVENT_GROUP_WILL_UNLOAD, source = "", condition = "", action = "action_group_will_unload", trigger_count = 0},
|
||||
[4] = { name = "enter_region", config_id = 10000004, event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_enter_region", trigger_count = 0, forbid_guest = false},
|
||||
|
||||
|
||||
|
||||
|
||||
[101] = { name = "GM_variable_change", config_id = 11000001, event = EventType.EVENT_VARIABLE_CHANGE, source = "", condition = "", action = "action_GM_variable_change", trigger_count = 0},
|
||||
}
|
||||
|
||||
function sandstorm_Initialize()
|
||||
for k,v in pairs(sandstorm_Tri) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
|
||||
--1为沙尘暴中,2为沙尘暴cd中
|
||||
table.insert(variables,{ config_id = 20000001, name = "sandstorm_state", value = 2})
|
||||
|
||||
|
||||
--记录上次时间轴(CD或沙尘暴)开启的时间
|
||||
table.insert(variables,{ config_id = 20000011, name = "sandstorm_last_axis_start_time", value = 0})
|
||||
--记录上次时间轴(CD或沙尘暴)持续的时间
|
||||
table.insert(variables,{ config_id = 20000012, name = "sandstorm_last_axis_last_time", value = 0})
|
||||
--记录上次时间轴(CD或沙尘暴)剩余时间,这条仅会在group卸载时记录,并在group load时恢复
|
||||
table.insert(variables,{ config_id = 20000013, name = "sandstorm_last_axis_remain_time", value = -1})
|
||||
--存档时间轴状态。1-之前时间轴未结束,正常恢复;2-之前时间轴已结束,下次应开启下一段时间轴
|
||||
table.insert(variables,{ config_id = 20000014, name = "axis_saves_state", value = -1})
|
||||
|
||||
|
||||
|
||||
--改为1后,会每3秒打印一次玩家所在region信息
|
||||
table.insert(variables,{ config_id = 30000001, name = "GM_Show_Player_Region", value = 0})
|
||||
--按照这个倍率缩小持续时间和CD时间,方便调试
|
||||
table.insert(variables,{ config_id = 30000002, name = "GM_Time_Scale_Down", value = 1})
|
||||
--按照这个倍率放大持续时间和CD时间,方便调试
|
||||
table.insert(variables,{ config_id = 30000003, name = "GM_Time_Scale_Up", value = 1})
|
||||
--改为1后,立刻跳过当前的天气阶段,进入下一个天气阶段
|
||||
table.insert(variables,{ config_id = 30000004, name = "GM_Skip_Current_Weather", value = 0})
|
||||
--改为1后,无视当前天气阶段,强制开启一次沙尘暴
|
||||
table.insert(variables,{ config_id = 30000005, name = "GM_Force_Start_Sandstorm", value = 0})
|
||||
--改为1后,无视当前天气阶段,强制开启一次沙尘暴CD时间
|
||||
table.insert(variables,{ config_id = 30000006, name = "GM_Force_Start_Sandstorm_CD", value = 0})
|
||||
end
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 触发器回调 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
|
||||
|
||||
function action_time_axis_pass(context,evt)
|
||||
|
||||
if (evt.source_name == "SANDSTORM_CD_AXIS") then
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl] action_time_axis_pass:冷却时间tick,尝试开启沙尘暴")
|
||||
if LF_Is_Any_Player_In_SandStorm_Region(context) then
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl] action_time_axis_pass:圈内有玩家,开启沙尘暴")
|
||||
--开启沙尘暴
|
||||
LF_On_Sandstorm_Start(context)
|
||||
LF_Set_Time_Axis(context,"SANDSTORM_TIME_AXIS",{save_prefix = "sandstorm"})
|
||||
else
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl] action_time_axis_pass:时间轴结束时,圈内没有人,那么保存一次时间轴状态,等下次进入再开启")
|
||||
--如果时间轴结束时,圈内没人,那么说明所有玩家都出圈了。存档这个时间轴状态
|
||||
LF_Save_Time_Axis(context)
|
||||
end
|
||||
end
|
||||
if (evt.source_name == "SANDSTORM_TIME_AXIS") then
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl] action_time_axis_pass:沙尘暴时间轴tick,结束沙尘暴,开启冷却时间")
|
||||
if LF_Is_Any_Player_In_SandStorm_Region(context) then
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl] action_time_axis_pass:圈内有玩家,进入冷却时间阶段")
|
||||
--停止沙尘暴
|
||||
LF_On_Sandstorm_Stop(context)
|
||||
LF_Set_Time_Axis(context,"SANDSTORM_CD_AXIS",{save_prefix = "sandstorm"})
|
||||
|
||||
LF_Set_Time_Axis(context,"SANDSTORM_FORECAST_AXIS")
|
||||
else
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl] action_time_axis_pass:时间轴结束时,圈内没有人,那么保存一次时间轴状态,等下次进入再开启")
|
||||
--如果时间轴结束时,圈内没人,那么说明所有玩家都出圈了。存档这个时间轴状态
|
||||
LF_Save_Time_Axis(context)
|
||||
end
|
||||
end
|
||||
|
||||
if (evt.source_name == "SANDSTORM_FORECAST_TIME_AXIS") then
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl] action_time_axis_pass:沙尘暴预告时间轴tick,向team写SGV")
|
||||
local host = ScriptLib.GetSceneOwnerUid(context)
|
||||
LF_Change_Team_SGV(context,host,"SGV_Is_Sandstorm_Coming",1)
|
||||
end
|
||||
|
||||
--GM模式,每3秒打印一次自己所在圈的信息
|
||||
if (evt.source_name == "GM_SHOW_REGION_AXIS") and ScriptLib.GetGroupVariableValue(context,"GM_Show_Player_Region") == 1 then
|
||||
|
||||
local legal_uid = LF_Get_Legal_Player_Uid_In_SandStorm_Region(context)
|
||||
if legal_uid ~= -1 then
|
||||
local current_region = LF_Get_Legal_Player_Region_In_SandStorm_Region(context)
|
||||
local is_in_sandworm_region = LF_Is_In_Legal_Sandworm_Region(context,legal_uid)
|
||||
ScriptLib.PrintContextLog(context,"## [GM] =========================================")
|
||||
ScriptLib.PrintContextLog(context,"## [GM] action_time_axis_pass:当前圈内第一名合法玩家为"..legal_uid)
|
||||
ScriptLib.PrintContextLog(context,"## [GM] action_time_axis_pass:所在沙尘暴圈为"..current_region)
|
||||
if is_in_sandworm_region then
|
||||
ScriptLib.PrintContextLog(context,"## [GM] action_time_axis_pass:在 沙虫区域中")
|
||||
else
|
||||
ScriptLib.PrintContextLog(context,"## [GM] action_time_axis_pass:不在 沙虫区域中")
|
||||
end
|
||||
ScriptLib.PrintContextLog(context,"## [GM] =========================================")
|
||||
else
|
||||
ScriptLib.PrintContextLog(context,"## [GM] =========================================")
|
||||
ScriptLib.PrintContextLog(context,"## [GM] action_time_axis_pass:当前圈内没有合法玩家")
|
||||
ScriptLib.PrintContextLog(context,"## [GM] =========================================")
|
||||
end
|
||||
end
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
function action_group_load(context,evt)
|
||||
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl] action_group_load:group加载,开启时间轴")
|
||||
LF_Load_Time_Axis(context)
|
||||
|
||||
ScriptLib.InitTimeAxis(context,"GM_SHOW_REGION_AXIS",{3},true)
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_group_will_unload(context,evt)
|
||||
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl] action_group_will_unload:group卸载,存档时间轴")
|
||||
LF_Save_Time_Axis(context)
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
function action_enter_region(context,evt)
|
||||
|
||||
if LF_Is_In_Table(MetaRegions["SandStorm_OuterRegion"], evt.param1 ) then
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl] action_enter_region:有人进入外圈,尝试恢复时间轴")
|
||||
LF_Load_Time_Axis(context)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 玩法流程控制 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
function LF_On_Sandstorm_Start(context)
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl] ===========================================")
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl] LF_On_Sandstorm_Start:沙尘暴启动")
|
||||
--设置沙尘暴状态
|
||||
LF_Set_Sandstorm_State_By_Name(context,"IN_STORM")
|
||||
--开启沙尘暴天气
|
||||
LF_Set_Sandstorm_Weather(context,true)
|
||||
--启动沙虫阶段
|
||||
--LF_Start_Sandworm_Phase(context)
|
||||
|
||||
end
|
||||
|
||||
function LF_On_Sandstorm_Stop(context)
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl] LF_On_Sandstorm_Stop:沙尘暴结束")
|
||||
--设置沙尘暴CD中状态
|
||||
LF_Set_Sandstorm_State_By_Name(context,"IN_CD")
|
||||
--关闭沙尘暴天气
|
||||
LF_Set_Sandstorm_Weather(context,false)
|
||||
--停止沙虫阶段
|
||||
--LF_Stop_Sandworm_Phase(context)
|
||||
|
||||
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl] ===========================================")
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 读档存档 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
|
||||
--记录剩余时间轴(CD或沙尘暴)的时间
|
||||
function LF_Save_Time_Axis(context)
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl] LF_Save_Time_Axis:开始存储当前时间轴状态")
|
||||
local current_time = ScriptLib.GetServerTime(context)
|
||||
local last_start_time = ScriptLib.GetGroupVariableValue(context,"sandstorm_last_axis_start_time")
|
||||
local last_last_time = ScriptLib.GetGroupVariableValue(context,"sandstorm_last_axis_last_time")
|
||||
local remain_time = last_last_time - (current_time - last_start_time)
|
||||
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl] LF_Save_Time_Axis:剩余时间为"..remain_time)
|
||||
if remain_time > 0.5 then
|
||||
ScriptLib.SetGroupVariableValue(context,"sandstorm_last_axis_remain_time",remain_time)
|
||||
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl] LF_Save_Time_Axis:下次应恢复时间轴")
|
||||
--记录存在时间轴存档状态为状态1(下次应恢复时间轴)
|
||||
ScriptLib.SetGroupVariableValue(context,"axis_saves_state",1)
|
||||
else
|
||||
|
||||
ScriptLib.SetGroupVariableValue(context,"sandstorm_last_axis_remain_time",0)
|
||||
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl] LF_Save_Time_Axis:下次应开启下一段时间轴")
|
||||
--记录存在时间轴存档状态为状态2(下次进入下一段时间轴)
|
||||
ScriptLib.SetGroupVariableValue(context,"axis_saves_state",2)
|
||||
end
|
||||
end
|
||||
|
||||
--恢复剩余时间轴(CD或沙尘暴)的时间
|
||||
function LF_Load_Time_Axis(context)
|
||||
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl] LF_Load_Time_Axis:开始恢复当前时间轴状态")
|
||||
local axis_saves_state = ScriptLib.GetGroupVariableValue(context,"axis_saves_state")
|
||||
|
||||
--保底,防止多触发产生问题,直接返回
|
||||
if axis_saves_state == 0 then
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl] LF_Load_Time_Axis:已完成恢复 或 没有存档,无事发生")
|
||||
return
|
||||
end
|
||||
|
||||
--玩家生涯首次触发,先默认开一段CD
|
||||
if axis_saves_state == -1 then
|
||||
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl] LF_Load_Time_Axis:这是玩家生涯首次进入沙尘暴区域")
|
||||
if LF_Is_Any_Player_In_SandStorm_Region(context) then
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl] LF_Load_Time_Axis:圈内有人,允许开启")
|
||||
|
||||
--生涯首次触发,默认先开一段CD
|
||||
LF_Set_Time_Axis(context,"SANDSTORM_CD_AXIS",{save_prefix = "sandstorm"})
|
||||
|
||||
--开一个沙尘暴预告的时间轴
|
||||
LF_Set_Time_Axis(context,"SANDSTORM_FORECAST_AXIS")
|
||||
|
||||
--重置一下记录的时间轴状态
|
||||
ScriptLib.SetGroupVariableValue(context,"axis_saves_state",0)
|
||||
else
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl] LF_Load_Time_Axis:圈内没有人,无事发生,延后到有人enter region后再开启")
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
if axis_saves_state == 1 then
|
||||
|
||||
local remain_time = ScriptLib.GetGroupVariableValue(context,"sandstorm_last_axis_remain_time")
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl] LF_Load_Time_Axis:状态1:恢复之前的时间轴,剩余时间为"..remain_time)
|
||||
|
||||
local time_axis_name
|
||||
|
||||
if LF_Is_In_Sandstorm_State(context) then
|
||||
time_axis_name = "SANDSTORM_TIME_AXIS"
|
||||
else
|
||||
time_axis_name = "SANDSTORM_CD_AXIS"
|
||||
end
|
||||
LF_Set_Time_Axis(context,time_axis_name,{save_prefix = "sandstorm", target_time = remain_time})
|
||||
|
||||
--开一个沙尘暴预告的时间轴
|
||||
LF_Set_Time_Axis(context,"SANDSTORM_FORECAST_AXIS",{target_time = remain_time})
|
||||
|
||||
--重置一下记录的时间轴状态
|
||||
ScriptLib.SetGroupVariableValue(context,"axis_saves_state",0)
|
||||
return
|
||||
end
|
||||
|
||||
if axis_saves_state == 2 then
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl] LF_Load_Time_Axis:状态1:准备开启下一段时间轴")
|
||||
if LF_Is_Any_Player_In_SandStorm_Region(context) then
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl] LF_Load_Time_Axis:圈内有人,允许开启")
|
||||
--如果之前是沙尘暴状态,则转到CD状态
|
||||
if LF_Is_In_Sandstorm_State(context) then
|
||||
LF_Set_Time_Axis(context,"SANDSTORM_CD_AXIS",{save_prefix = "sandstorm"})
|
||||
LF_On_Sandstorm_Stop(context)
|
||||
|
||||
--开一个沙尘暴预告的时间轴
|
||||
LF_Set_Time_Axis(context,"SANDSTORM_FORECAST_AXIS")
|
||||
else
|
||||
--如果之前是CD状态,则转到沙尘暴状态
|
||||
LF_Set_Time_Axis(context,"SANDSTORM_TIME_AXIS",{save_prefix = "sandstorm"})
|
||||
LF_On_Sandstorm_Start(context)
|
||||
end
|
||||
|
||||
--重置一下记录的时间轴状态
|
||||
ScriptLib.SetGroupVariableValue(context,"axis_saves_state",0)
|
||||
else
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl] LF_Load_Time_Axis:圈内没有人,无事发生,延后到有人enter region后再开启")
|
||||
end
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 杂项方法 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
function LF_Set_Sandstorm_Weather(context,is_on)
|
||||
|
||||
if is_on then
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl] LF_Set_Sandstorm_Weather:设置沙尘暴天气为:开启")
|
||||
ScriptLib.SetWeatherAreaState(context, weather_region_config["SandStorm_InnerRegion"].weather, 1)
|
||||
ScriptLib.SetWeatherAreaState(context, weather_region_config["SandStorm_MiddleRegion"].weather, 1)
|
||||
ScriptLib.SetWeatherAreaState(context, weather_region_config["SandStorm_OuterRegion"].weather, 1)
|
||||
else
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl] LF_Set_Sandstorm_Weather:设置沙尘暴天气为:关闭")
|
||||
ScriptLib.SetWeatherAreaState(context, weather_region_config["SandStorm_InnerRegion"].weather, 0)
|
||||
ScriptLib.SetWeatherAreaState(context, weather_region_config["SandStorm_MiddleRegion"].weather, 0)
|
||||
ScriptLib.SetWeatherAreaState(context, weather_region_config["SandStorm_OuterRegion"].weather, 0)
|
||||
end
|
||||
end
|
||||
|
||||
function LF_Skip_Current_Sandstorm(context)
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl]LF_Skip_Current_Sandstorm:强制跳过当前的沙尘暴阶段")
|
||||
if LF_Is_In_Sandstorm_State(context) then
|
||||
--如果现在是沙尘暴阶段,则直接强制跳过
|
||||
if LF_Is_Any_Player_In_SandStorm_Region(context) then
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl]LF_Skip_Current_Sandstorm:有玩家在沙尘暴区域,做一次强制跳过")
|
||||
ScriptLib.EndTimeAxis(context, "STORM_TIME_AXIS")
|
||||
LF_On_Sandstorm_Stop(context)
|
||||
LF_Set_Time_Axis(context,"SANDSTORM_CD_AXIS",{save_prefix = "sandstorm"})
|
||||
--开一个沙尘暴预告的时间轴
|
||||
LF_Set_Time_Axis(context,"SANDSTORM_FORECAST_AXIS")
|
||||
else
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl]LF_Skip_Current_Sandstorm:没有玩家在沙尘暴区域,直接结束当前沙尘暴,并存档")
|
||||
ScriptLib.EndTimeAxis(context, "STORM_TIME_AXIS")
|
||||
LF_On_Sandstorm_Stop(context)
|
||||
|
||||
--手动修改一次之前存的当前时间轴时间,确保下次进入区域时可以加载一个正确的时间轴
|
||||
local current_time = ScriptLib.GetServerTime(context)
|
||||
local last_start_time = ScriptLib.GetGroupVariableValue(context,"sandstorm_last_axis_start_time")
|
||||
ScriptLib.SetGroupVariableValue(context,"sandstorm_last_axis_last_time", current_time - last_start_time)
|
||||
|
||||
LF_Save_Time_Axis(context)
|
||||
end
|
||||
else
|
||||
--当前就是CD阶段,无事发生
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl]LF_Skip_Current_Sandstorm:当前就是CD阶段,无事发生")
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function LF_Start_Sanstorm(context)
|
||||
if not LF_Is_In_Sandstorm_State(context) then
|
||||
--如果现在不是沙尘暴阶段,则直接强制开启
|
||||
if LF_Is_Any_Player_In_SandStorm_Region(context) then
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl]LF_Skip_Current_Sandstorm:有玩家在沙尘暴区域,强制开启沙尘暴")
|
||||
ScriptLib.EndTimeAxis(context, "SANDSTORM_CD_AXIS")
|
||||
LF_On_Sandstorm_Start(context)
|
||||
LF_Set_Time_Axis(context,"SANDSTORM_TIME_AXIS",{save_prefix = "sandstorm"})
|
||||
else
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl]LF_Skip_Current_Sandstorm:没有玩家在沙尘暴区域,无视发生")
|
||||
end
|
||||
else
|
||||
--当前就是CD阶段,无事发生
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl]LF_Skip_Current_Sandstorm:当前就是CD阶段,无事发生")
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
function LF_Change_Team_SGV(context,uid,key,delta)
|
||||
local v = ScriptLib.GetTeamServerGlobalValue(context,uid,key)
|
||||
ScriptLib.SetTeamServerGlobalValue(context,uid,key,v+delta)
|
||||
end
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| CRUD方法 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
|
||||
-----------------------------------------------------------------------
|
||||
--沙尘暴状态相关
|
||||
|
||||
--直接设置沙尘暴状态
|
||||
function LF_Set_Sandstorm_State_By_Id(context,state)
|
||||
ScriptLib.SetGroupVariableValue(context,"sandstorm_state",state)
|
||||
end
|
||||
|
||||
--设置沙尘暴状态
|
||||
function LF_Set_Sandstorm_State_By_Name(context,state_name)
|
||||
if state_name == "IN_STORM" then
|
||||
ScriptLib.SetGroupVariableValue(context,"sandstorm_state",1)
|
||||
return
|
||||
end
|
||||
if state_name == "IN_CD" then
|
||||
ScriptLib.SetGroupVariableValue(context,"sandstorm_state",2)
|
||||
return
|
||||
end
|
||||
|
||||
ScriptLib.PrintGroupWarning(context,"## [Warning] [SandstormControl] LF_Set_Sandstorm_State_By_Id:传入非法沙尘暴状态名"..state_name)
|
||||
end
|
||||
|
||||
|
||||
--返回当前是否处于沙尘暴状态中
|
||||
function LF_Is_In_Sandstorm_State(context)
|
||||
return ScriptLib.GetGroupVariableValue(context,"sandstorm_state") == 1
|
||||
end
|
||||
|
||||
|
||||
|
||||
-----------------------------------------------------------------------
|
||||
--时间轴相关
|
||||
|
||||
--根据时间轴配置,生成一个随机时间进行返回
|
||||
function LF_Get_Axis_Config_By_Time_Config(context,name,type)
|
||||
local GM_time_scale_down = ScriptLib.GetGroupVariableValue(context,"GM_Time_Scale_Down")
|
||||
local GM_time_scale_up = ScriptLib.GetGroupVariableValue(context,"GM_Time_Scale_Up")
|
||||
|
||||
local min = time_configs[type][name].min
|
||||
local max = time_configs[type][name].max
|
||||
local rtime = math.ceil(math.random(min,max) / GM_time_scale_down * GM_time_scale_up)
|
||||
if rtime <= 0 then
|
||||
rtime = 1
|
||||
end
|
||||
--rtime至少为1,且不能是float,否则dev服务器会直接core掉
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl] LF_Get_Axis_Config_By_Time_Config:本次生成时间名为"..type..",时间为"..rtime)
|
||||
return {rtime}
|
||||
end
|
||||
|
||||
|
||||
--根据time_config设置一个时间轴,支持多种模式
|
||||
--axis_name:时间轴名,与time_config中的列名保持一致
|
||||
--save_prefix:如果填了,会在开启时间轴时记录一个当前时间轴的开始时间和预计持续时间,方便存档这个时间轴
|
||||
--target_time:如果填了,会根据传入的target_time来决定时间轴的长度而不是随机一个时间轴
|
||||
function LF_Set_Time_Axis(context,axis_name,params)
|
||||
local axis = {}
|
||||
local target_time
|
||||
local save_prefix
|
||||
if params ~= nil then
|
||||
target_time = params.target_time
|
||||
save_prefix = params.save_prefix
|
||||
end
|
||||
|
||||
if axis_name == "SANDSTORM_FORECAST_AXIS" then
|
||||
local remain_time = 0
|
||||
if target_time == nil then
|
||||
remain_time = ScriptLib.GetGroupVariableValue(context,"sandstorm_last_axis_last_time")
|
||||
else
|
||||
remain_time = target_time
|
||||
end
|
||||
if remain_time - local_defs.forecast_time > 0 then
|
||||
--开一个沙尘暴预告的时间轴
|
||||
ScriptLib.InitTimeAxis(context,"SANDSTORM_FORECAST_TIME_AXIS",{remain_time-local_defs.forecast_time},false)
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
if target_time == nil then
|
||||
local current_region = LF_Get_Legal_Player_Region_In_SandStorm_Region(context)
|
||||
if current_region ~= "SandStorm_Outside" then
|
||||
axis = LF_Get_Axis_Config_By_Time_Config(context,current_region,axis_name)
|
||||
else
|
||||
ScriptLib.PrintGroupWarning(context,"## [Warning] [SandstormControl] LF_Set_Time_Axis:玩家不在沙尘暴区域内,无法获得合法的时间轴数据")
|
||||
return
|
||||
end
|
||||
else
|
||||
axis = {target_time}
|
||||
end
|
||||
ScriptLib.InitTimeAxis(context,axis_name,axis,false)
|
||||
if save_prefix ~= "" and save_prefix ~= nil then
|
||||
--记录一下时间轴开启的时间
|
||||
ScriptLib.SetGroupVariableValue(context,save_prefix.."_last_axis_start_time",ScriptLib.GetServerTime(context))
|
||||
--记录一下本次时间轴持续的时间
|
||||
ScriptLib.SetGroupVariableValue(context,save_prefix.."_last_axis_last_time",axis[1])
|
||||
end
|
||||
return axis[1]
|
||||
end
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| server lua call ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
function SLC_Reset_Weather_Wizard_Forecast_State(context)
|
||||
|
||||
local host = ScriptLib.GetSceneOwnerUid(context)
|
||||
ScriptLib.SetTeamServerGlobalValue(context, host, "SGV_Is_Sandstorm_Coming", 0)
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| GM指令功能 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
function action_GM_variable_change(context,evt)
|
||||
--立刻跳过当前的天气阶段。简单起见,只考虑玩家在圈内的情况
|
||||
if evt.source_name == "GM_Skip_Current_Weather" and evt.param1 == 1 then
|
||||
ScriptLib.PrintContextLog(context,"## [GM]action_GM_variable_change:GM-跳过当前天气阶段")
|
||||
if LF_Is_In_Sandstorm_State(context) then
|
||||
--跳过沙尘暴阶段,开启CD阶段
|
||||
if LF_Is_Any_Player_In_SandStorm_Region(context) then
|
||||
ScriptLib.EndTimeAxis(context, "SANDSTORM_TIME_AXIS")
|
||||
LF_On_Sandstorm_Stop(context)
|
||||
LF_Set_Time_Axis(context,"SANDSTORM_CD_AXIS",{save_prefix = "sandstorm"})
|
||||
--开一个沙尘暴预告的时间轴
|
||||
LF_Set_Time_Axis(context,"SANDSTORM_FORECAST_AXIS")
|
||||
else
|
||||
ScriptLib.PrintContextLog(context,"## [GM]action_GM_variable_change:GM-注意!!这个GM只适用于圈内有玩家的情况。")
|
||||
end
|
||||
else
|
||||
--跳过CD阶段,开启沙尘暴阶段
|
||||
if LF_Is_Any_Player_In_SandStorm_Region(context) then
|
||||
ScriptLib.EndTimeAxis(context, "SANDSTORM_CD_AXIS")
|
||||
LF_On_Sandstorm_Start(context)
|
||||
LF_Set_Time_Axis(context,"SANDSTORM_TIME_AXIS",{save_prefix = "sandstorm"})
|
||||
else
|
||||
ScriptLib.PrintContextLog(context,"## [GM]action_GM_variable_change:GM-注意!!这个GM只适用于圈内有玩家的情况。")
|
||||
end
|
||||
end
|
||||
ScriptLib.SetGroupVariableValue(context,"GM_Skip_Current_Weather",0)
|
||||
end
|
||||
|
||||
--强制开启一个全新的沙尘暴阶段。简单起见,只考虑玩家在圈内的情况
|
||||
if evt.source_name == "GM_Force_Start_Sandstorm" and evt.param1 == 1 then
|
||||
ScriptLib.PrintContextLog(context,"## [GM]action_GM_variable_change:GM-强制开启一段新的沙尘暴天气")
|
||||
if LF_Is_In_Sandstorm_State(context) then
|
||||
--如果现在是沙尘暴阶段,先强制结束一次,然后再开启一次新的沙尘暴
|
||||
if LF_Is_Any_Player_In_SandStorm_Region(context) then
|
||||
ScriptLib.EndTimeAxis(context, "SANDSTORM_TIME_AXIS")
|
||||
LF_On_Sandstorm_Stop(context)
|
||||
LF_On_Sandstorm_Start(context)
|
||||
LF_Set_Time_Axis(context,"SANDSTORM_TIME_AXIS",{save_prefix = "sandstorm"})
|
||||
else
|
||||
ScriptLib.PrintContextLog(context,"## [GM]action_GM_variable_change:GM-注意!!这个GM只适用于圈内有玩家的情况。")
|
||||
end
|
||||
else
|
||||
--跳过CD阶段,开启沙尘暴阶段
|
||||
if LF_Is_Any_Player_In_SandStorm_Region(context) then
|
||||
ScriptLib.EndTimeAxis(context, "SANDSTORM_CD_AXIS")
|
||||
LF_On_Sandstorm_Start(context)
|
||||
LF_Set_Time_Axis(context,"SANDSTORM_TIME_AXIS",{save_prefix = "sandstorm"})
|
||||
else
|
||||
ScriptLib.PrintContextLog(context,"## [GM]action_GM_variable_change:GM-注意!!这个GM只适用于圈内有玩家的情况。")
|
||||
end
|
||||
end
|
||||
ScriptLib.SetGroupVariableValue(context,"GM_Force_Start_Sandstorm",0)
|
||||
end
|
||||
|
||||
--强制开启一个全新的沙尘暴CD阶段。简单起见,只考虑玩家在圈内的情况
|
||||
if evt.source_name == "GM_Force_Start_Sandstorm_CD" and evt.param1 == 1 then
|
||||
ScriptLib.PrintContextLog(context,"## [GM]action_GM_variable_change:GM-强制开启一段新的沙尘暴CD时间段")
|
||||
if LF_Is_In_Sandstorm_State(context) then
|
||||
--如果现在是沙尘暴阶段,先强制结束一次,然后再开启一次新的沙尘暴
|
||||
if LF_Is_Any_Player_In_SandStorm_Region(context) then
|
||||
ScriptLib.EndTimeAxis(context, "STORM_TIME_AXIS")
|
||||
LF_On_Sandstorm_Stop(context)
|
||||
LF_Set_Time_Axis(context,"SANDSTORM_CD_AXIS",{save_prefix = "sandstorm"})
|
||||
--开一个沙尘暴预告的时间轴
|
||||
LF_Set_Time_Axis(context,"SANDSTORM_FORECAST_AXIS")
|
||||
else
|
||||
ScriptLib.PrintContextLog(context,"## [GM]action_GM_variable_change:GM-注意!!这个GM只适用于圈内有玩家的情况。")
|
||||
end
|
||||
else
|
||||
--跳过CD阶段,开启沙尘暴阶段
|
||||
if LF_Is_Any_Player_In_SandStorm_Region(context) then
|
||||
ScriptLib.EndTimeAxis(context, "SANDSTORM_CD_AXIS")
|
||||
LF_On_Sandstorm_Start(context)
|
||||
LF_On_Sandstorm_Stop(context)
|
||||
LF_Set_Time_Axis(context,"SANDSTORM_CD_AXIS",{save_prefix = "sandstorm"})
|
||||
--开一个沙尘暴预告的时间轴
|
||||
LF_Set_Time_Axis(context,"SANDSTORM_FORECAST_AXIS")
|
||||
else
|
||||
ScriptLib.PrintContextLog(context,"## [GM]action_GM_variable_change:GM-注意!!这个GM只适用于圈内有玩家的情况。")
|
||||
end
|
||||
end
|
||||
ScriptLib.SetGroupVariableValue(context,"GM_Force_Start_Sandstorm_CD",0)
|
||||
end
|
||||
|
||||
return 0
|
||||
end
|
||||
------------------------------------------------------------------
|
||||
|
||||
sandstorm_Initialize()
|
||||
286
gdconf/game_data_config/lua/common/V3_4/SandwormAlertControl.lua
Normal file
286
gdconf/game_data_config/lua/common/V3_4/SandwormAlertControl.lua
Normal file
@@ -0,0 +1,286 @@
|
||||
--[[======================================
|
||||
|| filename:
|
||||
|| owner: luyao.huang
|
||||
|| description:
|
||||
|| LogName:
|
||||
|| Protection:
|
||||
=======================================]]--
|
||||
|
||||
|
||||
local defs =
|
||||
{
|
||||
sandworm_id = 1030,
|
||||
direct_sandworm_id = 1031,
|
||||
alert_max_value = 1000
|
||||
}
|
||||
|
||||
----
|
||||
|
||||
--
|
||||
local local_defs = {
|
||||
request_list_capacity = 3,
|
||||
--占据90010000后的若干字段,不要占用这些字段的var
|
||||
array_base_offset = 90010000,
|
||||
}
|
||||
|
||||
local sandworm_state =
|
||||
{
|
||||
waiting = 0,
|
||||
attacking = 1
|
||||
}
|
||||
|
||||
local business_type_defs =
|
||||
{
|
||||
--大世界
|
||||
--目标玩家为沙虫区域内的一个随机合法玩家
|
||||
bigworld = 0,
|
||||
--挑战
|
||||
--目标玩家为主机
|
||||
challenge = 1,
|
||||
--指定地点直接召唤
|
||||
--没有目标玩家,但要找一组指定地点
|
||||
direct = 2,
|
||||
}
|
||||
|
||||
local sandworm_default_params =
|
||||
{
|
||||
business_type = business_type_defs.bigworld,
|
||||
sandworm_params_config_id = 0,
|
||||
target_pos_x = 0,
|
||||
target_pos_y = 0,
|
||||
target_pos_z = 0
|
||||
}
|
||||
|
||||
|
||||
|
||||
local Tri = {
|
||||
[1] = { name = "variable_change_alert", config_id = 10020001, event = EventType.EVENT_VARIABLE_CHANGE, source = "alert_value", condition = "", action = "action_variable_change_alert", trigger_count = 0},
|
||||
[2] = { name = "group_will_unload_alert", config_id = 10020002, event = EventType.EVENT_GROUP_WILL_UNLOAD, source = "", condition = "", action = "action_group_will_unload_alert", trigger_count = 0},
|
||||
}
|
||||
|
||||
function Initialize()
|
||||
for k,v in pairs(Tri) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
--警戒值
|
||||
table.insert(variables,{ config_id = 90000001, name = "alert_value", value = 0})
|
||||
--沙虫状态
|
||||
table.insert(variables,{ config_id = 90000002, name = "sandworm_state", value = 0})
|
||||
|
||||
table.insert(variables,{ config_id = 90000110, name = "start_sandworm_attack_count", value = 0})
|
||||
table.insert(variables,{ config_id = 90000111, name = "sandworm_attack_count_target_group", value = 0})
|
||||
end
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 触发器回调 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
--沙虫警戒值变化
|
||||
function action_variable_change_alert(context,evt)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormAlertControl] variable_change: 当前沙虫警戒值为"..evt.param1)
|
||||
if evt.param1 >= defs.alert_max_value then
|
||||
if not LF_Sandworm_Is_Attacking(context) then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormAlertControl] variable_change: 沙虫警戒度超过最大值,召唤沙虫")
|
||||
local current_request = LF_Get_Max_Priority_Request(context)
|
||||
local origin_group_id = current_request.group_id
|
||||
LF_Create_Sandworm(context,origin_group_id)
|
||||
LF_Set_Sandworm_State(context,sandworm_state.attacking)
|
||||
end
|
||||
end
|
||||
if evt.param1 <= 0 then
|
||||
LF_Remove_Sandworm(context)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_group_will_unload_alert(context,evt)
|
||||
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormAlertControl] group即将卸载,重置警戒值以及其他参数")
|
||||
ScriptLib.SetGroupVariableValue(context,"sandworm_state",sandworm_state.waiting)
|
||||
ScriptLib.SetGroupVariableValue(context,"alert_value",0)
|
||||
ScriptLib.RemoveEntityByConfigId(context, base_info.group_id, EntityType.GADGET, defs.sandworm_id)
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 沙虫管理 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
--在指定玩家身边生成一只沙虫
|
||||
--需要传入参数请求依赖的groupid
|
||||
function LF_Create_Sandworm(context,origin_group_id)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormAlertControl] LF_Create_Sandworm: 创生沙虫")
|
||||
--先确保取参数的目标group活着,否则参数是
|
||||
--if ScriptLib.IsGroupRegisteredInCurScene(context,origin_group_id) then
|
||||
local business_type = ScriptLib.GetGroupVariableValueByGroup(context,"business_type",origin_group_id)
|
||||
if business_type == business_type_defs.direct then
|
||||
local pos_x = ScriptLib.GetGroupVariableValueByGroup(context,"target_pos_x",origin_group_id)
|
||||
local pos_y = ScriptLib.GetGroupVariableValueByGroup(context,"target_pos_y",origin_group_id)
|
||||
local pos_z = ScriptLib.GetGroupVariableValueByGroup(context,"target_pos_z",origin_group_id)
|
||||
ScriptLib.CreateGadgetByParamTable(context,{config_id = defs.direct_sandworm_id,pos = {x=pos_x,y=pos_y+1.5,z=pos_z}, rot = {x=0,y=0,z=0}})
|
||||
--这种调用都是一次性的,召出沙虫后立刻清理掉这次参数,防止被其他地方反复召唤
|
||||
local index = LF_Get_Request_Index_From_List_By_Request_Id(context,origin_group_id)
|
||||
if index == -1 then
|
||||
return -1
|
||||
end
|
||||
LF_Remove_Request_From_List_By_Index(context,index)
|
||||
else
|
||||
local sandworm_params_config_id = ScriptLib.GetGroupVariableValueByGroup(context,"sandworm_params_config_id",origin_group_id)
|
||||
local sandworm_params = sandworm_dynamic_params[sandworm_params_config_id]
|
||||
local range = sandworm_static_params.range
|
||||
local ambush_times = sandworm_params.ambush_times
|
||||
local attack_times = sandworm_params.attack_times
|
||||
local target_uid = 0
|
||||
if business_type == business_type_defs.bigworld then
|
||||
target_uid = LF_Get_Legal_Player_Uid_In_Legal_Sandworm_Region(context)
|
||||
elseif business_type == business_type_defs.challenge then
|
||||
target_uid = ScriptLib.GetSceneOwnerUid(context)
|
||||
end
|
||||
local owner_eid = ScriptLib.GetAvatarEntityIdByUid(context,target_uid)
|
||||
local pos = ScriptLib.GetPosByEntityId(context,owner_eid)
|
||||
local rpos = LF_Get_Random_Neighbour(context,pos,range[1],range[2])
|
||||
ScriptLib.CreateGadgetByParamTable(context,{config_id = defs.sandworm_id,pos = {x=rpos.x,y=rpos.y+1.5,z=rpos.z}, rot = {x=0,y=0,z=0},
|
||||
sgv_key = {"SGV_Ambush_Times","SGV_Attack_Times"}, sgv_value = {ambush_times,attack_times}})
|
||||
end
|
||||
--end
|
||||
end
|
||||
|
||||
--客户端通知沙虫攻击完成
|
||||
--服务端流程强依赖客户端沙虫攻击完成的SLC,否则直接卡死,需要考虑保底
|
||||
function SLC_Sandworm_Attack_Finish(context)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormAlertControl] SLC_Sandworm_Attack_Finish: 客户端通知,沙虫攻击完成")
|
||||
LF_Set_Sandworm_State(context,sandworm_state.waiting)
|
||||
LF_Set_Alert_Value(context,0)
|
||||
return 0
|
||||
end
|
||||
|
||||
--清除沙虫gadget,但不影响沙虫警戒值
|
||||
function LF_Remove_Sandworm(context)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormAlertControl] LF_Remove_Sandworm: 移除沙虫并恢复沙虫等待状态")
|
||||
ScriptLib.RemoveEntityByConfigId(context, base_info.group_id, EntityType.GADGET, defs.sandworm_id)
|
||||
LF_Set_Sandworm_State(context,sandworm_state.waiting)
|
||||
end
|
||||
|
||||
|
||||
--由别的group请求清除主动沙虫,通常是由于出界引起的
|
||||
--需要校验请求的id与当前堆顶的参数请求来源id是否一致,如果不一致直接无视
|
||||
function LF_Request_Remove_Sandworm(context,prev_context,origin_group_id)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormAlertControl] LF_Request_Remove_Sandworm: 请求移除沙虫,请求id为"..origin_group_id)
|
||||
local current_request = LF_Get_Max_Priority_Request(context)
|
||||
if current_request.group_id == origin_group_id then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormAlertControl] LF_Request_Remove_Sandworm: 与当前堆顶id一致,移除沙虫")
|
||||
LF_Remove_Sandworm(context)
|
||||
return 0
|
||||
else
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormAlertControl] LF_Request_Remove_Sandworm: 与当前堆顶id不一致,移除失败")
|
||||
return -1
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function LF_Set_Sandworm_State(context,state)
|
||||
ScriptLib.SetGroupVariableValue(context,"sandworm_state",state)
|
||||
end
|
||||
|
||||
function LF_Get_Sandworm_State(context)
|
||||
return ScriptLib.GetGroupVariableValue(context,"sandworm_state")
|
||||
end
|
||||
|
||||
function LF_Sandworm_Is_Attacking(context)
|
||||
return LF_Get_Sandworm_State(context) == sandworm_state.attacking
|
||||
end
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 警戒值控制 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
--外部请求修改警戒值
|
||||
function LF_Request_Change_Alert_Value(context,prev_context,delta)
|
||||
return LF_Change_Alert_Value(context,delta)
|
||||
end
|
||||
|
||||
--外部请求修改警戒值
|
||||
function LF_Request_Set_Alert_Value(context,prev_context,target_value)
|
||||
return LF_Set_Alert_Value(context,target_value)
|
||||
end
|
||||
|
||||
function LF_Change_Alert_Value(context,delta)
|
||||
--沙虫攻击时,锁警戒值变动
|
||||
if not LF_Sandworm_Is_Attacking(context) then
|
||||
ScriptLib.ChangeGroupVariableValue(context,"alert_value",delta)
|
||||
return 0
|
||||
end
|
||||
return -1
|
||||
end
|
||||
|
||||
function LF_Set_Alert_Value(context,target_value)
|
||||
--沙虫攻击时,锁警戒值变动
|
||||
if not LF_Sandworm_Is_Attacking(context) then
|
||||
ScriptLib.SetGroupVariableValue(context,"alert_value",target_value)
|
||||
return 0
|
||||
end
|
||||
return -1
|
||||
end
|
||||
|
||||
function LF_Get_Alert_Value(context)
|
||||
return ScriptLib.GetGroupVariableValue(context,"alert_value")
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 杂项方法 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
|
||||
--获取指定位置的随机近邻位置。分布在min_r~max_r为半径的环上
|
||||
function LF_Get_Random_Neighbour(context,pos,min_r,max_r)
|
||||
local random_r = math.random(min_r,max_r)
|
||||
local random_a = math.random()*math.pi*2
|
||||
local rpos_x = pos.x + random_r * math.cos(random_a)
|
||||
local rpos_z = pos.z + random_r * math.sin(random_a)
|
||||
local rpos = {x = rpos_x,y = pos.y,z = rpos_z}
|
||||
return rpos
|
||||
end
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| server lua call ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
function SLC_Request_Remove_Current_Sandworm(context)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormAlertControl] SLC_Request_Remove_Current_Sandworm: 物件层请求移除沙虫")
|
||||
local index = ScriptLib.GetGroupVariableValue(context,"max_priority_request_index")
|
||||
LF_Remove_Request_From_List_By_Index(context,index)
|
||||
LF_Remove_Sandworm(context)
|
||||
return 0
|
||||
end
|
||||
|
||||
--沙虫攻击计数。
|
||||
--注意这套计数的开关没有互斥和队列的逻辑,只要有人要求就会开,有人要求就会关。因此调用的时候确保环境干净
|
||||
function SLC_Sandworm_Attack_Success_Count(context)
|
||||
local is_started = ScriptLib.GetGroupVariableValue(context,"start_sandworm_attack_count") == 1
|
||||
if is_started then
|
||||
local target_group = ScriptLib.GetGroupVariableValue(context,"sandworm_attack_count_target_group")
|
||||
ScriptLib.ChangeGroupVariableValueByGroup(context,"sandworm_attack_count",1,target_group)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
------------------------------------------------------------------
|
||||
Initialize()
|
||||
@@ -0,0 +1,275 @@
|
||||
|
||||
--[[======================================
|
||||
|| filename: SandwormBigworldControl
|
||||
|| owner: luyao.huang
|
||||
|| description:
|
||||
|| LogName: SandwormBigworldControl
|
||||
|| Protection:
|
||||
=======================================]]--
|
||||
|
||||
|
||||
|
||||
local business_type = "bigworld"
|
||||
local priority = 1
|
||||
|
||||
local local_defs =
|
||||
{
|
||||
sandworm_manager_group = 133314001,
|
||||
alert_max_value = 1000,
|
||||
|
||||
outof_attack_region_delay = 3
|
||||
}
|
||||
|
||||
|
||||
|
||||
local bigworld_Tri = {
|
||||
[1] = { name = "variable_change_bigworld_sandworm", config_id = 100010001, event = EventType.EVENT_VARIABLE_CHANGE, source = "alert_value", condition = "", action = "action_variable_change_bigworld_sandworm", trigger_count = 0},
|
||||
[2] = { name = "group_will_unload_bigworld_sandworm", config_id = 100010002, event = EventType.EVENT_GROUP_WILL_UNLOAD, source = "", condition = "", action = "action_group_will_unload_bigworld_sandworm", trigger_count = 0},
|
||||
[3] = { name = "enter_region_bigworld_sandworm", config_id = 100010003, event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_enter_region_bigworld_sandworm", trigger_count = 0},
|
||||
[4] = { name = "leave_region_bigworld_sandworm", config_id = 100010004, event = EventType.EVENT_LEAVE_REGION, source = "", condition = "", action = "action_leave_region_bigworld_sandworm", trigger_count = 0},
|
||||
[5] = { name = "time_axis_pass_bigworld_sandworm", config_id = 100010005, event = EventType.EVENT_TIME_AXIS_PASS, source = "", condition = "", action = "action_time_axis_pass_bigworld_sandworm", trigger_count = 0},
|
||||
}
|
||||
|
||||
function bigworld_Initialize()
|
||||
for k,v in pairs(bigworld_Tri) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
|
||||
--警戒值
|
||||
table.insert(variables,{ config_id = 100010001, name = "alert_value", value = 0})
|
||||
--沙虫攻击状态时,要锁警戒值变动
|
||||
table.insert(variables,{ config_id = 100010002, name = "is_alert_locked", value = 0})
|
||||
end
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 触发器回调 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
--沙虫警戒值变化
|
||||
function action_variable_change_bigworld_sandworm(context,evt)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormBigworldControl] variable_change: 当前沙虫警戒值为"..evt.param1)
|
||||
if evt.param1 >= local_defs.alert_max_value then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormAleSandwormBigworldControlrtControl] variable_change: 沙虫警戒度超过最大值,召唤沙虫")
|
||||
local target_uid = LF_Get_Target_Uid(context)
|
||||
--在攻击圈外移动圈内,召唤巡游沙虫
|
||||
if ScriptLib.IsInRegion(context,target_uid,defs.move_region) and not ScriptLib.IsInRegion(context,target_uid,defs.attack_region) then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormBigworldControl] variable_change: 位于攻击圈外演出圈内,召唤巡游沙虫")
|
||||
LF_Summon_Move_Sandworm(context,defs.attack_times)
|
||||
ScriptLib.InitTimeAxis(context,"move_sandworm_life_axis",{defs.move_sandworm_lifetime},false)
|
||||
end
|
||||
--在攻击圈内,命令沙虫进行一次进攻
|
||||
if ScriptLib.IsInRegion(context,target_uid,defs.attack_region) then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormBigworldControl] variable_change: 位于攻击圈内,命令沙虫开始攻击")
|
||||
LF_Command_Move_Sandworm_Attack(context,defs.attack_times)
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
function action_group_will_unload_bigworld_sandworm(context,evt)
|
||||
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormBigworldControl] group即将卸载,重置警戒值以及其他参数")
|
||||
LF_Remove_All_Sandworm(context)
|
||||
LF_Set_Alert_Lock(context,false)
|
||||
LF_Set_Alert_Value(context,0)
|
||||
ScriptLib.EndTimeAxis(context,"sandworm_alert_axis")
|
||||
ScriptLib.EndTimeAxis(context,"move_sandworm_life_axis")
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
function action_enter_region_bigworld_sandworm(context,evt)
|
||||
|
||||
--从外侧进入演出圈
|
||||
--开一个时间轴
|
||||
if evt.param1 == defs.move_region then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormBigworldControl] action_enter_region_bigworld_sandworm:从外侧进入演出圈")
|
||||
ScriptLib.InitTimeAxis(context,"sandworm_alert_axis",{1},true)
|
||||
end
|
||||
|
||||
--从演出圈进入攻击圈
|
||||
--命令沙虫进行一次进攻
|
||||
if evt.param1 == defs.attack_region then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormBigworldControl] action_enter_region_bigworld_sandworm:从演出圈进入攻击圈")
|
||||
local alert_value = ScriptLib.GetGroupVariableValue(context,"alert_value")
|
||||
if alert_value >= local_defs.alert_max_value then
|
||||
--清理一下移动沙虫的生命时间轴
|
||||
ScriptLib.EndTimeAxis(context,"move_sandworm_life_axis")
|
||||
LF_Command_Move_Sandworm_Attack(context,defs.attack_times)
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
function action_leave_region_bigworld_sandworm(context,evt)
|
||||
|
||||
--离开演出圈到外侧
|
||||
--关掉时间轴,并清理掉所有沙虫
|
||||
if evt.param1 == defs.move_region then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormBigworldControl] action_leave_region_bigworld_sandworm:从演出圈离开到外侧")
|
||||
ScriptLib.EndTimeAxis(context,"sandworm_alert_axis")
|
||||
ScriptLib.EndTimeAxis(context,"move_sandworm_life_axis")
|
||||
LF_Remove_All_Sandworm(context)
|
||||
end
|
||||
|
||||
--离开攻击圈,进入演出圈
|
||||
--清理掉攻击沙虫
|
||||
if evt.param1 == defs.attack_region and ScriptLib.IsInRegion(context,evt.uid,defs.move_region) then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormBigworldControl] action_leave_region_bigworld_sandworm:从攻击圈离开到演出圈")
|
||||
LF_Remove_All_Sandworm(context)
|
||||
LF_Set_Alert_Lock(context,false)
|
||||
|
||||
|
||||
--这里其实是在做一个延时X秒的操作,但为了防止时间轴导致的时序问题,全部转化成警戒值的操作
|
||||
local sandstorm_state = ScriptLib.GetGroupVariableValueByGroup(context,"sandstorm_state",local_defs.sandworm_manager_group)
|
||||
local alert_by_tick = 0
|
||||
if sandstorm_state == 1 then
|
||||
alert_by_tick = math.floor((region_config.alert_by_tick_normal[1] + region_config.alert_by_tick_normal[2])/2)
|
||||
else
|
||||
alert_by_tick = math.floor((region_config.alert_by_tick_sandstorm[1] + region_config.alert_by_tick_sandstorm[2])/2)
|
||||
end
|
||||
local target_alert_value = math.ceil(local_defs.alert_max_value - alert_by_tick * local_defs.outof_attack_region_delay)
|
||||
if target_alert_value <= 0 then
|
||||
target_alert_value = 0
|
||||
end
|
||||
LF_Set_Alert_Value(context, target_alert_value)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_time_axis_pass_bigworld_sandworm(context,evt)
|
||||
if (evt.source_name == "sandworm_alert_axis") then
|
||||
local region_config = LF_Get_Current_Region_Config(context)
|
||||
if region_config ~= nil then
|
||||
local alert_by_tick = {}
|
||||
local sandstorm_state = ScriptLib.GetGroupVariableValueByGroup(context,"sandstorm_state",local_defs.sandworm_manager_group)
|
||||
if sandstorm_state == 1 then
|
||||
alert_by_tick = region_config.alert_by_tick_normal
|
||||
else
|
||||
alert_by_tick = region_config.alert_by_tick_sandstorm
|
||||
end
|
||||
local delta = math.random(alert_by_tick[1],alert_by_tick[2])
|
||||
LF_Change_Alert_Value(context,delta)
|
||||
end
|
||||
end
|
||||
|
||||
if (evt.source_name == "move_sandworm_life_axis") then
|
||||
LF_Remove_All_Sandworm(context)
|
||||
LF_On_Attack_Finish(context)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 沙虫控制回调 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
--沙虫控制回调:创建沙虫成功
|
||||
function LF_On_Create_Sandworm_Success(context)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormBigworldControl]LF_On_Create_Sandworm_Success: 沙虫控制回调:创建沙虫成功")
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormBigworldControl]LF_On_Create_Sandworm_Success: 锁定警戒值变化")
|
||||
LF_Set_Alert_Lock(context,true)
|
||||
end
|
||||
|
||||
--沙虫控制回调:创建沙虫失败
|
||||
function LF_On_Create_Sandworm_Fail(context)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormBigworldControl]LF_On_Create_Sandworm_Success: 沙虫控制回调:创建沙虫失败")
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormBigworldControl]LF_On_Create_Sandworm_Success: 解锁警戒值变化")
|
||||
LF_Set_Alert_Value(context,0)
|
||||
LF_Set_Alert_Lock(context,false)
|
||||
end
|
||||
|
||||
--沙虫控制回调:移除沙虫
|
||||
function LF_On_Remove_Sandworm(context)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormBigworldControl]LF_On_Create_Sandworm_Success: 沙虫控制回调:清除沙虫")
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormBigworldControl]LF_On_Create_Sandworm_Success: 解锁警戒值变化")
|
||||
LF_Set_Alert_Lock(context,false)
|
||||
end
|
||||
|
||||
--沙虫控制回调:沙虫攻击完成
|
||||
function LF_On_Attack_Finish(context)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormBigworldControl]LF_On_Attack_Finish: 沙虫控制回调:攻击完成,警戒值清零")
|
||||
LF_Set_Alert_Value(context,0)
|
||||
end
|
||||
|
||||
--沙虫控制回调:击中玩家
|
||||
function LF_On_Attack_Hit_Avatar(context)
|
||||
end
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 警戒值控制 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
function LF_Change_Alert_Value(context,delta)
|
||||
if not LF_Is_Alert_Locked(context) then
|
||||
ScriptLib.ChangeGroupVariableValue(context,"alert_value",delta)
|
||||
end
|
||||
end
|
||||
|
||||
function LF_Set_Alert_Value(context,target_value)
|
||||
if not LF_Is_Alert_Locked(context) then
|
||||
ScriptLib.SetGroupVariableValue(context,"alert_value",target_value)
|
||||
end
|
||||
end
|
||||
|
||||
function LF_Get_Alert_Value(context)
|
||||
return ScriptLib.GetGroupVariableValue(context,"alert_value")
|
||||
end
|
||||
|
||||
|
||||
|
||||
function LF_Set_Alert_Lock(context,is_locked)
|
||||
if is_locked then
|
||||
ScriptLib.SetGroupVariableValue(context,"is_alert_locked",1)
|
||||
else
|
||||
ScriptLib.SetGroupVariableValue(context,"is_alert_locked",0)
|
||||
end
|
||||
end
|
||||
|
||||
function LF_Is_Alert_Locked(context)
|
||||
return ScriptLib.GetGroupVariableValue(context,"is_alert_locked") == 1
|
||||
end
|
||||
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 杂项方法 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
function LF_Get_Target_Uid(context)
|
||||
return ScriptLib.GetSceneOwnerUid(context)
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
function LF_Get_Current_Region_Config(context)
|
||||
|
||||
return region_config
|
||||
end
|
||||
|
||||
|
||||
|
||||
--获取指定位置的随机近邻位置。分布在min_r~max_r为半径的环上
|
||||
function LF_Get_Random_Neighbour(context,pos,min_r,max_r)
|
||||
local random_r = math.random(min_r,max_r)
|
||||
local random_a = math.random()*math.pi*2
|
||||
local rpos_x = pos.x + random_r * math.cos(random_a)
|
||||
local rpos_z = pos.z + random_r * math.sin(random_a)
|
||||
local rpos = {x = rpos_x,y = pos.y,z = rpos_z}
|
||||
return rpos
|
||||
end
|
||||
|
||||
|
||||
------------------------------------------------------------------
|
||||
bigworld_Initialize()
|
||||
@@ -0,0 +1,215 @@
|
||||
|
||||
--[[======================================
|
||||
|| filename: SandwormchallengeControl
|
||||
|| owner: luyao.huang
|
||||
|| description:
|
||||
|| LogName: SandwormchallengeControl
|
||||
|| Protection:
|
||||
=======================================]]--
|
||||
|
||||
|
||||
|
||||
local business_type = "challenge"
|
||||
local priority = 2
|
||||
|
||||
local local_defs =
|
||||
{
|
||||
sandworm_manager_group = 133314001,
|
||||
|
||||
challenge_option = 177,
|
||||
time_axis_name = "challenge_sandworm_tick_axis"
|
||||
}
|
||||
|
||||
|
||||
|
||||
local challenge_Tri = {
|
||||
[1] = { name = "select_option_challenge_sandworm", config_id = 100010001, event = EventType.EVENT_SELECT_OPTION, source = "", condition = "", action = "action_select_option_challenge_sandworm", trigger_count = 0},
|
||||
[2] = { name = "challenge_success_challenge_sandworm", config_id = 100010002, event = EventType.EVENT_CHALLENGE_SUCCESS, source = "", condition = "", action = "action_challenge_success_challenge_sandworm", trigger_count = 0},
|
||||
[3] = { name = "challenge_fail_challenge_sandworm", config_id = 100010003, event = EventType.EVENT_CHALLENGE_FAIL, source = "", condition = "", action = "action_challenge_fail_challenge_sandworm", trigger_count = 0},
|
||||
|
||||
|
||||
[10] = { name = "enter_region_challenge_sandworm", config_id = 100010011, event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_enter_region_challenge_sandworm", trigger_count = 0},
|
||||
[11] = { name = "leave_region_challenge_sandworm", config_id = 100010012, event = EventType.EVENT_LEAVE_REGION, source = "", condition = "", action = "action_leave_region_challenge_sandworm", trigger_count = 0},
|
||||
[12] = { name = "time_axis_pass_challenge_sandworm", config_id = 100010013, event = EventType.EVENT_TIME_AXIS_PASS, source = "", condition = "", action = "action_time_axis_pass_challenge_sandworm", trigger_count = 0},
|
||||
[13] = { name = "group_will_unload_challenge_sandworm", config_id = 100010014, event = EventType.EVENT_GROUP_WILL_UNLOAD, source = "", condition = "", action = "action_group_will_unload_challenge_sandworm", trigger_count = 0},
|
||||
|
||||
[20] = { name = "variable_change_challenge_sandworm", config_id = 100010021, event = EventType.EVENT_VARIABLE_CHANGE, source = "attack_count", condition = "condition_variable_change_challenge_sandworm", action = "action_variable_change_challenge_sandworm", trigger_count = 0,tag = "1"},
|
||||
|
||||
}
|
||||
|
||||
function challenge_Initialize()
|
||||
for k,v in pairs(challenge_Tri) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
--沙虫攻击次数计数开关,打开后才会开始计数
|
||||
table.insert(variables,{ config_id = 100010001, name = "is_attack_count", value = 0})
|
||||
--沙虫攻击次数计数
|
||||
table.insert(variables,{ config_id = 100010002, name = "attack_count", value = 0})
|
||||
end
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 触发器回调 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
function action_select_option_challenge_sandworm(context,evt)
|
||||
if evt.param2 == local_defs.challenge_option then
|
||||
LF_On_Challenge_Start(context)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_challenge_success_challenge_sandworm(context,evt)
|
||||
if evt.param1 == defs.challenge_id then
|
||||
LF_On_Challenge_Finish(context,true)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_challenge_fail_challenge_sandworm(context,evt)
|
||||
if evt.param1 == defs.challenge_id then
|
||||
LF_On_Challenge_Finish(context,false)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
function action_group_will_unload_challenge_sandworm(context,evt)
|
||||
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormchallengeControl] group即将卸载")
|
||||
LF_Remove_All_Sandworm(context)
|
||||
ScriptLib.EndTimeAxis(context,local_defs.time_axis_name)
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
function action_enter_region_challenge_sandworm(context,evt)
|
||||
if ScriptLib.IsChallengeStartedByChallengeId(context, defs.challenge_id) then
|
||||
if evt.param1 == defs.sandworm_region then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormchallengeControl]enter_region: 玩家进入挑战沙虫区域")
|
||||
ScriptLib.ContinueTimeAxis(context,local_defs.time_axis_name)
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
function action_leave_region_challenge_sandworm(context,evt)
|
||||
if ScriptLib.IsChallengeStartedByChallengeId(context, defs.challenge_id) then
|
||||
if evt.param1 == defs.sandworm_region then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormchallengeControl]leave_region: 玩家离开挑战沙虫区域,清除沙虫")
|
||||
LF_Remove_All_Sandworm(context)
|
||||
ScriptLib.PauseTimeAxis(context,local_defs.time_axis_name)
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_time_axis_pass_challenge_sandworm(context,evt)
|
||||
if ScriptLib.IsChallengeStartedByChallengeId(context, defs.challenge_id) then
|
||||
if (evt.source_name == local_defs.time_axis_name) then
|
||||
local uid = ScriptLib.GetSceneOwnerUid(context)
|
||||
LF_Summon_Direct_Sandworm_By_Avatar(context,uid,defs.attack_times)
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function condition_variable_change_challenge_sandworm(context,evt)
|
||||
--过滤掉清零的导致的触发
|
||||
if evt.param1 ~= 0 then
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
|
||||
function action_variable_change_challenge_sandworm(context,evt)
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 挑战控制回调 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
function LF_On_Challenge_Start(context)
|
||||
LF_Reset_Attack_Count(context)
|
||||
ScriptLib.InitTimeAxis(context,local_defs.time_axis_name,{defs.attack_interval},true)
|
||||
end
|
||||
|
||||
function LF_On_Challenge_Finish(context,is_success)
|
||||
LF_Remove_All_Sandworm(context)
|
||||
ScriptLib.EndTimeAxis(context,local_defs.time_axis_name)
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 沙虫控制回调 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
--沙虫控制回调:创建沙虫成功
|
||||
function LF_On_Create_Sandworm_Success(context)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormchallengeControl]LF_On_Create_Sandworm_Success: 沙虫控制回调:创建沙虫成功")
|
||||
end
|
||||
|
||||
--沙虫控制回调:创建沙虫失败
|
||||
function LF_On_Create_Sandworm_Fail(context)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormchallengeControl]LF_On_Create_Sandworm_Success: 沙虫控制回调:创建沙虫失败")
|
||||
end
|
||||
|
||||
--沙虫控制回调:移除沙虫
|
||||
function LF_On_Remove_Sandworm(context)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormchallengeControl]LF_On_Create_Sandworm_Success: 沙虫控制回调:清除沙虫")
|
||||
end
|
||||
|
||||
--沙虫控制回调:沙虫攻击完成
|
||||
function LF_On_Attack_Finish(context)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormchallengeControl]LF_On_Attack_Finish: 沙虫控制回调:攻击完成")
|
||||
end
|
||||
|
||||
--沙虫控制回调:沙虫攻击命中玩家
|
||||
function LF_On_Attack_Hit_Avatar(context)
|
||||
if LF_Is_Attack_Count(context) then
|
||||
ScriptLib.ChangeGroupVariableValue(context,"attack_count",1)
|
||||
end
|
||||
end
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 沙虫攻击计数 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
function LF_Reset_Attack_Count(context)
|
||||
ScriptLib.SetGroupVariableValue(context,"attack_count",0)
|
||||
end
|
||||
|
||||
function LF_Start_Attack_Count(context)
|
||||
ScriptLib.SetGroupVariableValue(context,"is_attack_count",1)
|
||||
end
|
||||
|
||||
function LF_Stop_Attack_Count(context)
|
||||
ScriptLib.SetGroupVariableValue(context,"is_attack_count",0)
|
||||
end
|
||||
|
||||
function LF_Is_Attack_Count(context)
|
||||
return ScriptLib.GetGroupVariableValue(context,"is_attack_count")
|
||||
end
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 杂项方法 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
------------------------------------------------------------------
|
||||
challenge_Initialize()
|
||||
@@ -0,0 +1,193 @@
|
||||
|
||||
--[[======================================
|
||||
|| filename: SandwormChallenge_DodgeChallenge
|
||||
|| owner: luyao.huang
|
||||
|| description: 主要是用于管理沙虫躲避挑战里面的父子挑战结构,和沙虫没有太多联系
|
||||
|| LogName: SandwormChallenge_DodgeChallenge
|
||||
|| Protection:
|
||||
=======================================]]--
|
||||
|
||||
|
||||
|
||||
local local_defs =
|
||||
{
|
||||
challenge_index = 666,
|
||||
challenge_id = 2012004,
|
||||
live_challenge_index = 667,
|
||||
live_challenge_id = 2012003,
|
||||
dodge_challenge_index = 668,
|
||||
dodge_challenge_id = 2012002,
|
||||
challenge_option = 177,
|
||||
}
|
||||
|
||||
|
||||
|
||||
local challenge_Tri = {
|
||||
[1] = { name = "select_option_dodge_challenge", config_id = 200010001, event = EventType.EVENT_SELECT_OPTION, source = "", condition = "", action = "action_select_option_dodge_challenge", trigger_count = 0},
|
||||
[2] = { name = "group_load_dodge_challenge", config_id = 200010002, event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_group_load_dodge_challenge", trigger_count = 0},
|
||||
[3] = { name = "challenge_fail_dodge_challenge", config_id = 200010003, event = EventType.EVENT_CHALLENGE_FAIL, source = "", condition = "", action = "action_challenge_fail_dodge_challenge", trigger_count = 0},
|
||||
[4] = { name = "challenge_success_dodge_challenge", config_id = 200010004, event = EventType.EVENT_CHALLENGE_SUCCESS, source = "", condition = "", action = "action_challenge_success_dodge_challenge", trigger_count = 0},
|
||||
[6] = { name = "gadget_state_change_dodge_challenge", config_id = 200010006, event = EventType.EVENT_GADGET_STATE_CHANGE, source = "", condition = "", action = "action_gadget_state_change_dodge_challenge", trigger_count = 0},
|
||||
}
|
||||
|
||||
function dodge_challenge_Initialize()
|
||||
for k,v in pairs(challenge_Tri) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
table.insert(variables,{ config_id = 200010001, name = "is_success", value = 0})
|
||||
end
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 触发器回调 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
function action_gadget_state_change_dodge_challenge(context,evt)
|
||||
if evt.param2 == defs.worktop_id then
|
||||
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormChallenge_DodgeChallenge] gadget_state_change:操作台状态变化")
|
||||
if evt.param1 == 0 then
|
||||
--恢复选项
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormChallenge_DodgeChallenge] gadget_state_change:操作台到0状态,恢复选项")
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, defs.worktop_id, {local_defs.challenge_option})
|
||||
end
|
||||
if evt.param1 == 201 or evt.param1 == 202 then
|
||||
--清选项
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormChallenge_DodgeChallenge] gadget_state_change:操作台到非0状态,清理选项")
|
||||
ScriptLib.DelWorktopOptionByGroupId(context, base_info.group_id, defs.worktop_id, local_defs.challenge_option)
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
function action_select_option_dodge_challenge(context,evt)
|
||||
if evt.param2 == local_defs.challenge_option then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormChallenge_DodgeChallenge] select_option:选择选项,开启挑战")
|
||||
--开挑战
|
||||
--ScriptLib.ActiveChallenge(context, local_defs.challenge_index, local_defs.challenge_id, defs.challenge_time, defs.max_hit_times, 0, 0)
|
||||
|
||||
local uid = ScriptLib.GetSceneOwnerUid(context)
|
||||
ScriptLib.CreateFatherChallenge(context, local_defs.challenge_index, local_defs.challenge_id, defs.challenge_time, {success = 10, fail = 5, fail_on_wipe = true})
|
||||
ScriptLib.StartFatherChallenge(context, local_defs.challenge_index)
|
||||
ScriptLib.AttachChildChallenge(context, local_defs.challenge_index, local_defs.dodge_challenge_index, local_defs.dodge_challenge_id,
|
||||
{3,1,defs.max_hit_times,0,0},{},{success=10, fail=5})
|
||||
ScriptLib.AttachChildChallenge(context, local_defs.challenge_index, local_defs.live_challenge_index, local_defs.live_challenge_id,
|
||||
{defs.challenge_time},{},{success=10, fail=5})
|
||||
|
||||
--转操作台状态
|
||||
ScriptLib.SetGadgetStateByConfigId(context, defs.worktop_id, GadgetState.GearStart)
|
||||
|
||||
|
||||
--开启挑战时立刻召一次沙虫
|
||||
local uid = ScriptLib.GetSceneOwnerUid(context)
|
||||
LF_Summon_Direct_Sandworm_By_Avatar(context,uid,defs.attack_times)
|
||||
|
||||
--开启玩法杂项
|
||||
LF_Start_Play(context)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_challenge_success_dodge_challenge(context,evt)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormChallenge_DodgeChallenge] challenge_success:挑战成功,挑战id为"..evt.param1)
|
||||
if evt.param1 == local_defs.live_challenge_id then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormChallenge_DodgeChallenge] challenge_success:挑战成功")
|
||||
|
||||
ScriptLib.StopChallenge(context,local_defs.challenge_index,1)
|
||||
|
||||
--记一个变量,方便下次恢复
|
||||
ScriptLib.SetGroupVariableValue(context, "is_success", 1)
|
||||
|
||||
--创建宝箱
|
||||
ScriptLib.CreateGadget(context, { config_id = defs.chest_id })
|
||||
|
||||
--转操作台状态到完成
|
||||
ScriptLib.SetGadgetStateByConfigId(context, defs.worktop_id, GadgetState.GearStop)
|
||||
|
||||
--清理玩法杂项
|
||||
LF_Clear_Play(context)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_challenge_fail_dodge_challenge(context,evt)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormChallenge_DodgeChallenge] challenge_success:挑战失败,挑战id为"..evt.param1)
|
||||
if evt.param1 == local_defs.live_challenge_id then
|
||||
ScriptLib.StopChallenge(context,local_defs.challenge_index,1)
|
||||
|
||||
|
||||
--记一个变量,方便下次恢复
|
||||
ScriptLib.SetGroupVariableValue(context, "is_success", 1)
|
||||
|
||||
--创建宝箱
|
||||
ScriptLib.CreateGadget(context, { config_id = defs.chest_id })
|
||||
|
||||
--转操作台状态到完成
|
||||
ScriptLib.SetGadgetStateByConfigId(context, defs.worktop_id, GadgetState.GearStop)
|
||||
|
||||
--清理玩法杂项
|
||||
LF_Clear_Play(context)
|
||||
end
|
||||
|
||||
|
||||
if evt.param1 == local_defs.dodge_challenge_id then
|
||||
|
||||
ScriptLib.StopChallenge(context,local_defs.challenge_index,0)
|
||||
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormChallenge_DodgeChallenge] challenge_fail:挑战失败")
|
||||
--转操作台状态到初始
|
||||
ScriptLib.SetGadgetStateByConfigId(context, defs.worktop_id, GadgetState.Default)
|
||||
|
||||
--清理玩法杂项
|
||||
LF_Clear_Play(context)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
function action_group_load_dodge_challenge(context,evt)
|
||||
|
||||
local is_success = ScriptLib.GetGroupVariableValue(context,"is_success") == 1
|
||||
if is_success then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormChallenge_DodgeChallenge] group_load:group加载,之前已成功")
|
||||
--如果之前已成功,将操作台直接转到完成状态
|
||||
ScriptLib.SetGadgetStateByConfigId(context, defs.worktop_id, GadgetState.GearStop)
|
||||
else
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormChallenge_DodgeChallenge] group_load:group加载,之前未成功")
|
||||
--如果之前未成功,则正常给操作台上选项
|
||||
ScriptLib.SetGadgetStateByConfigId(context, defs.worktop_id, GadgetState.Default)
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, defs.worktop_id, {local_defs.challenge_option})
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 杂项方法 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
function LF_Start_Play(context)
|
||||
|
||||
--开空气墙
|
||||
ScriptLib.CreateGadget(context, { config_id = defs.airwall_id })
|
||||
--打开沙虫计数开关
|
||||
ScriptLib.SetGroupVariableValue(context, "is_attack_count", 1)
|
||||
end
|
||||
|
||||
|
||||
function LF_Clear_Play(context)
|
||||
--清掉空气墙
|
||||
ScriptLib.KillEntityByConfigId(context, { config_id = defs.airwall_id })
|
||||
|
||||
--关掉计数
|
||||
ScriptLib.SetGroupVariableValue(context, "is_attack_count", 0)
|
||||
end
|
||||
|
||||
|
||||
|
||||
------------------------------------------------------------------
|
||||
dodge_challenge_Initialize()
|
||||
351
gdconf/game_data_config/lua/common/V3_4/SandwormControl.lua
Normal file
351
gdconf/game_data_config/lua/common/V3_4/SandwormControl.lua
Normal file
@@ -0,0 +1,351 @@
|
||||
--[[======================================
|
||||
|| filename: SandwormControl
|
||||
|| owner: luyao.huang
|
||||
|| description: 3.3沙尘爆发沙虫控制(白盒)
|
||||
|| LogName: SandwormControl
|
||||
|| Protection:
|
||||
=======================================]]--
|
||||
|
||||
|
||||
local sandworm_config =
|
||||
{
|
||||
sandworm_id = 1030,
|
||||
min_raidus = 10,
|
||||
max_radius = 20,
|
||||
}
|
||||
|
||||
|
||||
------
|
||||
local local_defs = {
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
local Tri = {
|
||||
[1] = { name = "time_axis_pass_sandworm", config_id = 10001001, event = EventType.EVENT_TIME_AXIS_PASS, source = "", condition = "", action = "action_time_axis_pass_sandworm", trigger_count = 0},
|
||||
[2] = { name = "variable_change_sandworm", config_id = 10001002, event = EventType.EVENT_VARIABLE_CHANGE, source = "sandworm_state", condition = "", action = "action_variable_change_sandworm", trigger_count = 0},
|
||||
[3] = { name = "enter_region_sandworm", config_id = 10001003, event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_enter_region_sandworm", trigger_count = 0},
|
||||
[4] = { name = "leave_region_sandworm", config_id = 10001004, event = EventType.EVENT_LEAVE_REGION, source = "", condition = "", action = "action_leave_region_sandworm", trigger_count = 0},
|
||||
|
||||
}
|
||||
|
||||
function Initialize()
|
||||
for k,v in pairs(Tri) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
|
||||
--沙虫状态
|
||||
-- 0:未开启
|
||||
-- 1:初始CD中
|
||||
-- 2:CD中
|
||||
-- 3:攻击中
|
||||
|
||||
table.insert(variables,{ config_id = 20001001, name = "sandworm_state", value = -1})
|
||||
|
||||
|
||||
--目标玩家
|
||||
--每次有玩家进圈和出圈,只要沙虫不处于攻击状态,就会重新调整一次目标玩家
|
||||
--沙虫创生后,会通过SLC通知一次lua调整ability层自己选择的目标玩家
|
||||
|
||||
table.insert(variables,{ config_id = 20001002, name = "target_uid", value = -1})
|
||||
|
||||
|
||||
--是否有沙虫时间轴存档
|
||||
table.insert(variables,{ config_id = 20001003, name = "has_sandworm_axis_saves", value = -1})
|
||||
--存档的沙虫时间轴剩余时间
|
||||
table.insert(variables,{ config_id = 20001004, name = "sandworm_last_axis_remain_time", value = -1})
|
||||
--存档的沙虫时间轴剩余时间
|
||||
table.insert(variables,{ config_id = 20001005, name = "sandworm_last_axis_start_time", value = -1})
|
||||
--存档的沙虫时间轴剩余时间
|
||||
table.insert(variables,{ config_id = 20001006, name = "sandworm_last_axis_last_time", value = -1})
|
||||
end
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 触发器回调 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
|
||||
|
||||
function action_time_axis_pass_sandworm(context,evt)
|
||||
|
||||
if (evt.source_name == "SANDWORM_START_CD_AXIS") then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControl] action_time_axis_pass:第一次沙虫攻击CD时间结束,开始沙虫攻击")
|
||||
if LF_Is_In_Legal_Sandworm_Region(context,LF_Get_Target_Uid(context)) then
|
||||
LF_Start_Sandworm_Attack(context)
|
||||
else
|
||||
ScriptLib.PrintGroupWarning(context,"## [Warning] [SandstormControl] action_time_axis_pass_sandworm:目标玩家不在沙虫区域内且没有切换到合法的目标,异常情况")
|
||||
end
|
||||
end
|
||||
if (evt.source_name == "SANDWORM_CD_AXIS") then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControl] action_time_axis_pass:沙虫攻击CD结束,开始沙虫攻击")
|
||||
if LF_Is_In_Legal_Sandworm_Region(context,LF_Get_Target_Uid(context)) then
|
||||
LF_Start_Sandworm_Attack(context)
|
||||
else
|
||||
ScriptLib.PrintGroupWarning(context,"## [Warning] [SandstormControl] action_time_axis_pass_sandworm:目标玩家不在沙虫区域内且没有切换到合法的目标,异常情况")
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_variable_change_sandworm(context,evt)
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
function action_enter_region_sandworm(context,evt)
|
||||
if LF_Is_Region_Specific_Region(context,"SandwormRegion",evt.param1) then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControl] action_enter_region_sandworm:玩家进入沙虫区域")
|
||||
if LF_Is_In_Sandstorm_State(context) then
|
||||
local players_in_region = LF_Get_All_Legal_Player_Uid_In_Legal_Sandworm_Region(context)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControl] action_enter_region_sandworm:当前沙虫区域内玩家数为"..#players_in_region)
|
||||
if #players_in_region <= 1 then
|
||||
--如果当前玩家是第一个进入沙虫区域的玩家,将沙虫的目标锁定为该玩家
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControl] action_enter_region_sandworm:玩家"..players_in_region[1].."为当前沙尘暴中第一个进入沙虫区域的,将其设为目标")
|
||||
LF_Set_Target_Uid(context,players_in_region[1])
|
||||
end
|
||||
--如果没有存档,说明是当前沙尘暴第一次进入沙虫区域,开启第一个CD阶段
|
||||
if not LF_Has_Sandworm_Axis_Saves(context) then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControl] action_enter_region_sandworm:没有存档,开始初始化第一次沙虫攻击CD阶段")
|
||||
LF_Set_Time_Axis(context,"SANDWORM_START_CD_AXIS",{save_prefix = "sandworm"})
|
||||
LF_Set_Sandworm_State(context,1)
|
||||
else
|
||||
--如果有存档,直接加载存档
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControl] action_enter_region_sandworm:有存档,开始加载存档时间轴")
|
||||
LF_Load_Sandworm_Saves(context)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_leave_region_sandworm(context,evt)
|
||||
if LF_Is_Region_Specific_Region(context,"SandwormRegion",evt.param1) then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControl] action_leave_region_sandworm:玩家离开沙虫区域")
|
||||
if LF_Is_In_Sandstorm_State(context) then
|
||||
--先停止当前的沙虫攻击
|
||||
if LF_Get_Sandworm_State(context) == 3 then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControl] action_leave_region_sandworm:停止当前沙虫攻击")
|
||||
LF_Stop_Sandworm_Attack(context)
|
||||
end
|
||||
local players_in_region = LF_Get_All_Legal_Player_Uid_In_Legal_Sandworm_Region(context)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControl] action_leave_region_sandworm:当前沙虫区域内玩家数为"..#players_in_region)
|
||||
if #players_in_region >= 1 and evt.uid == LF_Get_Target_Uid(context) then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControl] action_leave_region_sandworm:有玩家离开区域,重新设置沙虫目标为"..players_in_region[1])
|
||||
LF_Set_Target_Uid(context,players_in_region[1])
|
||||
elseif #players_in_region <= 0 then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControl] action_leave_region_sandworm:所有玩家全部离开沙虫区域,存档时间轴")
|
||||
|
||||
local sandworm_state = ScriptLib.GetGroupVariableValue(context,"sandworm_state")
|
||||
if sandworm_state == 1 then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControl] action_leave_region_sandworm:当前为初始CD状态,存档时间轴")
|
||||
ScriptLib.EndTimeAxis(context,"SANDWORM_START_CD_AXIS")
|
||||
LF_Save_Sandworm_Saves(context)
|
||||
elseif sandworm_state == 2 then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControl] action_leave_region_sandworm:当前为常规CD状态,存档时间轴")
|
||||
ScriptLib.EndTimeAxis(context,"SANDWORM_CD_AXIS")
|
||||
LF_Save_Sandworm_Saves(context)
|
||||
elseif sandworm_state == 3 then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControl] action_leave_region_sandworm:当前为沙虫攻击状态,什么都不需要存。下次加载时直接开始CD即可")
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 沙虫存档 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
function LF_Save_Sandworm_Saves(context)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControl]LF_Save_Sandworm_State:开始存储当前时间轴状态")
|
||||
local current_time = ScriptLib.GetServerTime(context)
|
||||
local last_start_time = ScriptLib.GetGroupVariableValue(context,"sandworm_last_axis_start_time")
|
||||
local last_last_time = ScriptLib.GetGroupVariableValue(context,"sandworm_last_axis_last_time")
|
||||
local remain_time = last_last_time - (current_time - last_start_time)
|
||||
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControl] LF_Save_Sandworm_State:剩余时间为"..remain_time)
|
||||
ScriptLib.SetGroupVariableValue(context,"sandworm_last_axis_remain_time",remain_time)
|
||||
|
||||
ScriptLib.SetGroupVariableValue(context,"has_sandworm_axis_saves", 1)
|
||||
end
|
||||
|
||||
|
||||
function LF_Load_Sandworm_Saves(context)
|
||||
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControl]LF_Load_Sandworm_State:开始恢复时间轴状态")
|
||||
local remain_time = ScriptLib.GetGroupVariableValue(context,"sandworm_last_axis_remain_time")
|
||||
local sandworm_state = ScriptLib.GetGroupVariableValue(context,"sandworm_state")
|
||||
|
||||
if sandworm_state == 1 then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControl]LF_Load_Sandworm_State:之前处于起始CD状态,恢复起始CD剩余时间"..remain_time.."秒")
|
||||
LF_Set_Time_Axis(context,"SANDWORM_START_CD_AXIS",{save_prefix = "sandworm", target_time = remain_time})
|
||||
elseif sandworm_state == 2 then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControl]LF_Load_Sandworm_State:之前处于CD状态,恢复CD剩余时间"..remain_time.."秒")
|
||||
LF_Set_Time_Axis(context,"SANDWORM_CD_AXIS",{save_prefix = "sandworm", target_time = remain_time})
|
||||
elseif sandworm_state == 3 then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControl]LF_Load_Sandworm_State:之前处于沙虫攻击状态,加载时直接进入CD阶段")
|
||||
LF_Set_Time_Axis(context,"SANDWORM_CD_AXIS",{save_prefix = "sandworm"})
|
||||
LF_Set_Sandworm_State(context,2)
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
||||
|
||||
function LF_Has_Sandworm_Axis_Saves(context)
|
||||
return ScriptLib.GetGroupVariableValue(context,"has_sandworm_axis_saves") == 1
|
||||
end
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 沙虫流程 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
|
||||
function LF_Start_Sandworm_Phase(context)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControl]LF_Start_Sandworm_Phase:=====================================================")
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControl]LF_Start_Sandworm_Phase:沙尘暴开始,开始准备沙虫攻击相关逻辑")
|
||||
local players_in_region = LF_Get_All_Legal_Player_Uid_In_Legal_Sandworm_Region(context)
|
||||
if #players_in_region <= 0 then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControl]LF_Start_Sandworm_Phase:沙虫区域没有玩家,等玩家enter region时再开始沙虫攻击")
|
||||
else
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControl]LF_Start_Sandworm_Phase:沙虫区域内有玩家"..players_in_region[1]..",初始化第一次沙虫攻击CD")
|
||||
LF_Set_Target_Uid(context,players_in_region[1])
|
||||
LF_Set_Time_Axis(context,"SANDWORM_START_CD_AXIS",{save_prefix = "sandworm"})
|
||||
LF_Set_Sandworm_State(context,1)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function LF_Stop_Sandworm_Phase(context)
|
||||
LF_Stop_Sandworm_Attack(context)
|
||||
ScriptLib.SetGroupVariableValue(context,"has_sandworm_axis_saves",0)
|
||||
ScriptLib.EndTimeAxis(context,"SANDWORM_START_CD_AXIS")
|
||||
ScriptLib.EndTimeAxis(context,"SANDWORM_CD_AXIS")
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControl]LF_Start_Sandworm_Phase:沙尘暴结束,清理沙虫攻击相关逻辑")
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControl]LF_Start_Sandworm_Phase:=====================================================")
|
||||
end
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 沙虫控制 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
|
||||
--开启一次沙虫攻击
|
||||
function LF_Start_Sandworm_Attack(context)
|
||||
local target_uid = LF_Get_Target_Uid(context)
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl] LF_Start_Sandworm_Attack:在玩家"..target_uid.."附近开启一次沙虫袭击")
|
||||
LF_Create_Sandworm(context,target_uid)
|
||||
LF_Set_Sandworm_State(context,3)
|
||||
end
|
||||
|
||||
--关闭当前的沙虫攻击
|
||||
function LF_Stop_Sandworm_Attack(context)
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl] LF_Start_Sandworm_Attack:沙虫袭击结束")
|
||||
LF_Remove_Sandworm(context)
|
||||
end
|
||||
|
||||
|
||||
|
||||
--在指定玩家身边生成一只沙虫
|
||||
function LF_Create_Sandworm(context,target_uid)
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl] LF_Create_Sandworm:在玩家"..target_uid.."附近创建沙虫")
|
||||
local owner_eid = ScriptLib.GetAvatarEntityIdByUid(context,target_uid)
|
||||
local pos = ScriptLib.GetPosByEntityId(context,owner_eid)
|
||||
local rpos = LF_Get_Random_Neighbour(context,pos,sandworm_config.min_raidus,sandworm_config.max_radius)
|
||||
ScriptLib.CreateGadgetByConfigIdByPos(context,sandworm_config.sandworm_id,{x=rpos.x,y=rpos.y+1.5,z=rpos.z}, {x=0,y=0,z=0})
|
||||
end
|
||||
|
||||
--清理当前生成的沙虫(有且只有一只)
|
||||
function LF_Remove_Sandworm(context)
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl] LF_Remove_Sandworm:移除当前沙虫")
|
||||
ScriptLib.RemoveEntityByConfigId(context, base_info.group_id, EntityType.GADGET, sandworm_config.sandworm_id)
|
||||
end
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 杂项方法 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
--获取指定位置的随机近邻位置。分布在min_r~max_r为半径的环上
|
||||
function LF_Get_Random_Neighbour(context,pos,min_r,max_r)
|
||||
local random_r = math.random(min_r,max_r)
|
||||
local random_a = math.random()*math.pi*2
|
||||
local rpos_x = pos.x + random_r * math.cos(random_a)
|
||||
local rpos_z = pos.z + random_r * math.sin(random_a)
|
||||
local rpos = {x = rpos_x,y = pos.y,z = rpos_z}
|
||||
return rpos
|
||||
end
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| CRUD方法 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
|
||||
--设置沙虫状态
|
||||
function LF_Set_Sandworm_State(context,state)
|
||||
ScriptLib.SetGroupVariableValue(context,"sandworm_state",state)
|
||||
end
|
||||
|
||||
--获取沙虫状态
|
||||
function LF_Get_Sandworm_State(context)
|
||||
return ScriptLib.GetGroupVariableValue(context,"sandworm_state")
|
||||
end
|
||||
|
||||
--设置目标玩家uid
|
||||
function LF_Set_Target_Uid(context,uid)
|
||||
ScriptLib.SetGroupVariableValue(context,"target_uid",uid)
|
||||
end
|
||||
|
||||
--获取目标玩家uid
|
||||
function LF_Get_Target_Uid(context)
|
||||
return ScriptLib.GetGroupVariableValue(context,"target_uid")
|
||||
end
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| server lua call ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
--客户端通知沙虫攻击完成
|
||||
function SLC_Sandworm_Attack_Finish(context)
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl] SLC_Sandworm_Attack_Finish:沙虫攻击完成SLC")
|
||||
LF_Stop_Sandworm_Attack(context)
|
||||
if LF_Is_In_Sandstorm_State(context) then
|
||||
LF_Set_Time_Axis(context,"SANDWORM_CD_AXIS",{save_prefix = "sandworm"})
|
||||
LF_Set_Sandworm_State(context,2)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
--沙虫上给player的modifier。它会通过SLC来同步服务端自己所选择的目标玩家uid
|
||||
function SLC_Sandworm_Set_Target_Player(context)
|
||||
ScriptLib.PrintContextLog(context,"## [SandstormControl] SLC_Sandworm_Set_Target_Player:沙虫设置自己的目标player")
|
||||
LF_Set_Target_Uid(context,context.uid)
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
|
||||
------------------------------------------------------------------
|
||||
|
||||
Initialize()
|
||||
@@ -0,0 +1,182 @@
|
||||
|
||||
--[[======================================
|
||||
|| filename: SandwormControlToolkit
|
||||
|| owner: luyao.huang
|
||||
|| description: 整合了各类沙虫控制方法,可以直接调用或通过tpl调用
|
||||
|| LogName: SandwormControlToolkit
|
||||
|| Protection:
|
||||
=======================================]]--
|
||||
|
||||
local business_type = 3
|
||||
local sandworm_params_config_id = 0
|
||||
|
||||
|
||||
local business_type_defs =
|
||||
{
|
||||
--大世界
|
||||
--目标玩家为沙虫区域内的一个随机合法玩家
|
||||
bigworld = 0,
|
||||
--挑战
|
||||
--目标玩家为主机
|
||||
challenge = 1,
|
||||
--指定地点直接召唤
|
||||
--没有目标玩家,但要找一组指定地点
|
||||
direct = 2,
|
||||
}
|
||||
|
||||
--玩法业务类型到优先级
|
||||
--不一定非要用这个
|
||||
local business_type_to_priority =
|
||||
{
|
||||
[business_type_defs.bigworld] = 1,
|
||||
[business_type_defs.challenge] = 2,
|
||||
[business_type_defs.direct] = 3
|
||||
}
|
||||
|
||||
|
||||
local_defs =
|
||||
{
|
||||
sandworm_control_group = 133314001,
|
||||
alert_max_value = 1000,
|
||||
direct_sandworm_config_id = 100
|
||||
}
|
||||
|
||||
function Initialize()
|
||||
|
||||
table.insert(variables,{ config_id = 50000100, name = "business_type", value = business_type})
|
||||
table.insert(variables,{ config_id = 50000101, name = "sandworm_params_config_id", value = sandworm_params_config_id})
|
||||
table.insert(variables,{ config_id = 50000102, name = "target_pos_x", value = 0})
|
||||
table.insert(variables,{ config_id = 50000103, name = "target_pos_y", value = 0})
|
||||
table.insert(variables,{ config_id = 50000104, name = "target_pos_z", value = 0})
|
||||
end
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 修改警戒值 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
--设置全局的沙虫警戒值
|
||||
function LF_Set_Sandworm_Alert_Value(context,target_value)
|
||||
ScriptLib.ExecuteGroupLua(context,local_defs.sandworm_control_group,"LF_Request_Set_Alert_Value",{target_value})
|
||||
end
|
||||
|
||||
|
||||
--修改全局的沙虫警戒值
|
||||
function LF_Set_Sandworm_Alert_Value(context,delta)
|
||||
ScriptLib.ExecuteGroupLua(context,local_defs.sandworm_control_group,"LF_Request_Change_Alert_Value",{delta})
|
||||
end
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 创生沙虫 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
--请求新增一组沙虫参数(注意这个方法与是否召唤沙虫无关,沙虫仍然跟随警戒值逻辑进行计算)
|
||||
function LF_Create_Sandworm_Params(context,priority)
|
||||
local group_id = base_info.group_id
|
||||
ScriptLib.ExecuteGroupLua(context,local_defs.sandworm_control_group,"LF_Request_Create_Sandworm_Params",{group_id,priority})
|
||||
end
|
||||
|
||||
|
||||
|
||||
--立刻在玩家身边召唤一只沙虫,如果希望召出来的是指定的参数,则需要填入一个极高的优先级
|
||||
--本质是直接填满沙虫警戒值
|
||||
function LF_Create_Normal_Sandworm_Immediately(context,priority)
|
||||
local group_id = base_info.group_id
|
||||
ScriptLib.ExecuteGroupLua(context,local_defs.sandworm_control_group,"LF_Request_Create_Sandworm_Params",{group_id,priority})
|
||||
ScriptLib.ExecuteGroupLua(context,local_defs.sandworm_control_group,"LF_Request_Set_Alert_Value",{local_defs.alert_max_value+1})
|
||||
end
|
||||
|
||||
--根据玩法的业务类型创生一只沙虫,遵循玩法业务类型的优先级
|
||||
function LF_Create_Normal_Sandworm_By_Play_Business(context)
|
||||
local priority = business_type_to_priority[business_type]
|
||||
LF_Create_Normal_Sandworm_Immediately(context,priority)
|
||||
end
|
||||
|
||||
--强制在玩家身边召唤一只沙虫,这个操作带有极高的优先级,注意尽量保证使用的时候环境是干净的
|
||||
function LF_Force_Create_Normal_Sandworm_Immediately(context)
|
||||
local priority = 99999
|
||||
LF_Create_Normal_Sandworm_Immediately(context,priority)
|
||||
end
|
||||
|
||||
|
||||
--立刻在指定位置召唤一只沙虫,如果希望召出来的是指定的参数,则需要填入一个极高的优先级
|
||||
--本质是直接填满沙虫警戒值
|
||||
function LF_Create_Direct_Sandworm_Immediately(context,priority,pos_x,pos_y,pos_z)
|
||||
local group_id = base_info.group_id
|
||||
ScriptLib.SetGroupVariableValue(context,"target_pos_x",pos_x)
|
||||
ScriptLib.SetGroupVariableValue(context,"target_pos_y",pos_y)
|
||||
ScriptLib.SetGroupVariableValue(context,"target_pos_z",pos_z)
|
||||
--申请一个直接攻击沙虫的参数
|
||||
ScriptLib.ExecuteGroupLua(context,local_defs.sandworm_control_group,"LF_Request_Create_Sandworm_Params",{group_id,priority})
|
||||
ScriptLib.ExecuteGroupLua(context,local_defs.sandworm_control_group,"LF_Request_Set_Alert_Value",{local_defs.alert_max_value+1})
|
||||
end
|
||||
|
||||
--根据玩法的业务类型在指定位置直接召唤一只沙虫,遵循玩法业务类型的优先级
|
||||
function LF_Create_Normal_Sandworm_By_Play_Business(context,pos_x,pos_y,pos_z)
|
||||
local priority = business_type_to_priority[business_type]
|
||||
LF_Create_Direct_Sandworm_Immediately(context,priority,pos_x,pos_y,pos_z)
|
||||
end
|
||||
|
||||
--强制在指定位置召唤一只沙虫,这个操作带有极高的优先级,会占用当前其他区域/挑战召出来的沙虫参数
|
||||
--这个行为是一次性的,召唤完成后会清理掉当前的沙虫参数
|
||||
function LF_Force_Direct_Sandworm_Immediately(context,pos_x,pos_y,pos_z)
|
||||
local priority = 99999
|
||||
LF_Create_Direct_Sandworm_Immediately(context,priority,pos_x,pos_y,pos_z)
|
||||
end
|
||||
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 清除沙虫 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
--移除当前group正在使用的沙虫参数
|
||||
--通常用于玩法结束、出界等情况
|
||||
function LF_Remove_Sandworm_Params(context)
|
||||
ScriptLib.ExecuteGroupLua(context,local_defs.sandworm_control_group,"LF_Request_Remove_Sandworm_Params",{base_info.group_id})
|
||||
end
|
||||
|
||||
--清掉当前的沙虫,以及当前group申请的沙虫参数
|
||||
--通常可以干净的清理掉一个group申请的沙虫以及相关参数
|
||||
function LF_Remove_Sandworm(context)
|
||||
--清掉当前的沙虫
|
||||
ScriptLib.ExecuteGroupLua(context,local_defs.sandworm_control_group,"LF_Request_Remove_Sandworm",{base_info.group_id})
|
||||
--清掉当前在占用的参数
|
||||
ScriptLib.ExecuteGroupLua(context,local_defs.sandworm_control_group,"LF_Request_Remove_Sandworm_Params",{base_info.group_id})
|
||||
end
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 沙虫攻击计数相关 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
--开启沙虫成功攻击计数的开关
|
||||
--会将自己的group设置为target_group,当沙虫攻击成功时,会发送给target_group
|
||||
function LF_Start_Sandworm_Attack_Count(context)
|
||||
ScriptLib.SetGroupVariableValueByGroup(context,"start_sandworm_attack_count",1,local_defs.sandworm_control_group)
|
||||
ScriptLib.SetGroupVariableValueByGroup(context,"sandworm_attack_count_target_group",base_info.group_id,local_defs.sandworm_control_group)
|
||||
end
|
||||
|
||||
--关闭沙虫成功攻击计数的开关,同时清掉当前的沙虫攻击计数,因此关掉之前务必先把值取出来
|
||||
function LF_Stop_Sandworm_Attack_Count(context)
|
||||
ScriptLib.SetGroupVariableValueByGroup(context,"start_sandworm_attack_count",0,local_defs.sandworm_control_group)
|
||||
ScriptLib.SetGroupVariableValueByGroup(context,"sandworm_attack_count_target_group",0,local_defs.sandworm_control_group)
|
||||
ScriptLib.SetGroupVariableValue(context,"sandworm_attack_count",0)
|
||||
end
|
||||
|
||||
--查询当前记录的沙虫攻击成功的次数
|
||||
function LF_Get_Sandworm_Attack_Count(context)
|
||||
return ScriptLib.GetGroupVariableValue(context,"sandworm_attack_count",0)
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
Initialize()
|
||||
275
gdconf/game_data_config/lua/common/V3_4/SandwormControlV2.lua
Normal file
275
gdconf/game_data_config/lua/common/V3_4/SandwormControlV2.lua
Normal file
@@ -0,0 +1,275 @@
|
||||
--[[======================================
|
||||
|| filename:
|
||||
|| owner: luyao.huang
|
||||
|| description:
|
||||
|| LogName:
|
||||
|| Protection:
|
||||
=======================================]]--
|
||||
|
||||
|
||||
------
|
||||
local local_defs = {
|
||||
request_list_capacity = 3,
|
||||
--占据90010000后的若干字段,不要占用这些字段的var
|
||||
array_base_offset = 90010000
|
||||
}
|
||||
|
||||
local request_struct =
|
||||
{
|
||||
group_id = "group_id",
|
||||
priority = "priority",
|
||||
}
|
||||
|
||||
--所有数组定义
|
||||
--结构为:[数组名] = 最大容量
|
||||
local arrays =
|
||||
{
|
||||
[request_struct.group_id] = {capacity = local_defs.request_list_capacity},
|
||||
[request_struct.priority] = {capacity = local_defs.request_list_capacity},
|
||||
}
|
||||
|
||||
|
||||
|
||||
local Tri = {
|
||||
[1] = { name = "group_will_unload_sandworm_control_V2", config_id = 10030001, event = EventType.EVENT_GROUP_WILL_UNLOAD, source = "", condition = "", action = "action_group_will_unload_sandworm_control_V2", trigger_count = 0},
|
||||
|
||||
}
|
||||
|
||||
function Initialize()
|
||||
for k,v in pairs(Tri) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
|
||||
local current_offset = local_defs.array_base_offset
|
||||
for k,v in pairs(arrays) do
|
||||
local array_name = k
|
||||
local array_capacity = v.capacity
|
||||
for i = 1, array_capacity do
|
||||
local var_id = current_offset + i
|
||||
table.insert(variables,{ config_id = var_id, name = array_name.."_"..tostring(i), value = -1})
|
||||
end
|
||||
current_offset = current_offset + array_capacity
|
||||
end
|
||||
|
||||
table.insert(variables,{ config_id = 80010001, name = "max_priority_request_index", value = -1})
|
||||
|
||||
|
||||
end
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 触发器回调 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
function action_group_will_unload_sandworm_control_V2(context,evt)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControlV2] Group_will_unload: group即将卸载,清空指令列表")
|
||||
for i = 1, local_defs.request_list_capacity do
|
||||
LF_Remove_Request_From_List_By_Index(context,i)
|
||||
end
|
||||
ScriptLib.SetGroupVariableValue(context,"max_priority_request_index",-1)
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 玩法流程控制 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
--请求新增沙虫参数
|
||||
function LF_Request_Create_Sandworm_Params(context,prev_context,group_id,priority)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControlV2] LF_Request_Create_Sandworm_Timeaxis: 外部请求:请求新增沙虫参数")
|
||||
local create_request =
|
||||
{
|
||||
group_id = group_id,
|
||||
priority = priority,
|
||||
}
|
||||
local ret = LF_Insert_Request_To_List(context,create_request)
|
||||
return ret
|
||||
end
|
||||
|
||||
--请求清除沙虫参数
|
||||
function LF_Request_Remove_Sandworm_Params(context,prev_context,destroy_request_id)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControlV2] LF_Request_Create_Sandworm_Timeaxis: 外部请求:请求清除沙虫参数")
|
||||
local index = LF_Get_Request_Index_From_List_By_Request_Id(context,destroy_request_id)
|
||||
if index == -1 then
|
||||
return -1
|
||||
end
|
||||
LF_Remove_Request_From_List_By_Index(context,index)
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
|
||||
--将一个请求置入请求列表
|
||||
function LF_Insert_Request_To_List(context,request)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControlV2] LF_Insert_Request_To_List: 将请求置入请求列表")
|
||||
local i = LF_Array_Get_First_Empty_I(context,request_struct.group_id)
|
||||
if i == -1 then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControlV2] LF_Insert_Request_To_List: 请求列表没有空位了!!")
|
||||
return -1
|
||||
end
|
||||
local group_id = request.group_id
|
||||
local priority = request.priority
|
||||
|
||||
LF_Array_Set_I(context,request_struct.group_id,i,group_id)
|
||||
LF_Array_Set_I(context,request_struct.priority,i,priority)
|
||||
|
||||
--如果当前请求优先级大于当前列表内的最大请求优先级,更新最大优先级
|
||||
if priority > LF_Get_Max_Priority_Request(context).priority then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControlV2] LF_Insert_Request_To_List: 输入请求高于当前最大优先级,进行更新")
|
||||
LF_Update_Max_Priority_Index(context,i)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
--根据index清除一个列表中的请求
|
||||
function LF_Remove_Request_From_List_By_Index(context,i)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControlV2] LF_Insert_Request_To_List: 将请求从请求列表移除")
|
||||
|
||||
LF_Array_Set_I(context,request_struct.group_id,i,-1)
|
||||
LF_Array_Set_I(context,request_struct.priority,i,-1)
|
||||
|
||||
if i == ScriptLib.GetGroupVariableValue(context,"max_priority_request_index") then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControlV2] LF_Remove_Request_From_List_By_Index: 更新当前最大优先级请求")
|
||||
LF_Calc_Max_Priority_Request_Index(context)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
--更新当前最大优先级
|
||||
function LF_Update_Max_Priority_Index(context,index)
|
||||
ScriptLib.SetGroupVariableValue(context,"max_priority_request_index",index)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControlV2] LF_Update_Max_Priority_Index: 更新最大优先级请求id,id为"..index)
|
||||
end
|
||||
|
||||
|
||||
--计算当前列表中最大优先级的请求的index
|
||||
function LF_Calc_Max_Priority_Request_Index(context)
|
||||
local max_priority = -999
|
||||
local max_priority_index = -1
|
||||
for i = 1, arrays[request_struct.priority].capacity do
|
||||
local priority = LF_Array_Get_I(context,request_struct.priority,i)
|
||||
if priority > max_priority then
|
||||
max_priority = priority
|
||||
max_priority_index = i
|
||||
end
|
||||
end
|
||||
ScriptLib.SetGroupVariableValue(context,"max_priority_request_index",max_priority_index)
|
||||
end
|
||||
|
||||
|
||||
--从请求列表中获取一个请求的index(requestid查询,只查到第一个)
|
||||
function LF_Get_Request_Index_From_List_By_Request_Id(context,request_id)
|
||||
for i = 1, arrays[request_struct.group_id].capacity do
|
||||
if LF_Array_Get_I(context,request_struct.group_id,i) == request_id then
|
||||
return i
|
||||
end
|
||||
end
|
||||
return -1
|
||||
end
|
||||
|
||||
--从请求列表中获取一个请求(id查询)
|
||||
function LF_Get_Request_From_List_By_Index(context,i)
|
||||
local ret_request =
|
||||
{
|
||||
group_id = LF_Array_Get_I(context,request_struct.group_id,i),
|
||||
priority = LF_Array_Get_I(context,request_struct.priority,i),
|
||||
sandworm_params_config_id = LF_Array_Get_I(context,request_struct.sandworm_params_config_id,i)
|
||||
}
|
||||
return ret_request
|
||||
end
|
||||
|
||||
|
||||
|
||||
--获取最大优先级的请求(也是现在沙虫使用的参数)
|
||||
function LF_Get_Max_Priority_Request(context)
|
||||
local index = ScriptLib.GetGroupVariableValue(context,"max_priority_request_index")
|
||||
return LF_Get_Request_From_List_By_Index(context,index)
|
||||
end
|
||||
|
||||
|
||||
--获取请求列表当前非空元素的个数
|
||||
function LF_Get_Request_List_Count(context)
|
||||
local count = 0
|
||||
for i = 1, arrays[request_struct.group_id].capacity do
|
||||
local group_id = LF_Array_Get_I(context,request_struct.group_id,i)
|
||||
if group_id > 0 then
|
||||
count = count + 1
|
||||
end
|
||||
end
|
||||
return count
|
||||
end
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 数组方法 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
function LF_Array_Get_I(context,array_name,i)
|
||||
return ScriptLib.GetGroupVariableValue(context,array_name.."_"..tostring(i))
|
||||
end
|
||||
|
||||
function LF_Array_Set_I(context,array_name,i,v)
|
||||
ScriptLib.SetGroupVariableValue(context,array_name.."_"..tostring(i),v)
|
||||
end
|
||||
|
||||
--返回数组中第一个非空值
|
||||
function LF_Array_Get_First_Empty_I(context,array_name)
|
||||
for i = 1, arrays[array_name].capacity do
|
||||
if LF_Array_Get_I(context,array_name,i) == -1 then
|
||||
return i
|
||||
end
|
||||
end
|
||||
return -1
|
||||
end
|
||||
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| CRUD方法 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 杂项方法 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
|
||||
function LF_Print_Table(context,print_table)
|
||||
for k,v in pairs(print_table) do
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControlV2] "..k.." : "..v)
|
||||
end
|
||||
end
|
||||
|
||||
function LF_Print_Current_Request_List(context)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControlV2] ==================")
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControlV2] 开始打印当前请求列表")
|
||||
for i = 1, local_defs.request_list_capacity do
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControlV2] group_id: ")
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControlV2] group_id: "..i)
|
||||
for k,v in pairs(arrays) do
|
||||
local value = LF_Array_Get_I(context,k,i)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControlV2] "..k.." : "..value)
|
||||
end
|
||||
end
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControlV2] 打印结束")
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormControlV2] ==================")
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
------------------------------------------------------------------
|
||||
Initialize()
|
||||
106
gdconf/game_data_config/lua/common/V3_4/SandwormManager.lua
Normal file
106
gdconf/game_data_config/lua/common/V3_4/SandwormManager.lua
Normal file
@@ -0,0 +1,106 @@
|
||||
--[[======================================
|
||||
|| filename: SandwormManager
|
||||
|| owner: luyao.huang
|
||||
|| description:
|
||||
|| LogName: SandwormManager
|
||||
|| Protection:
|
||||
=======================================]]--
|
||||
|
||||
|
||||
------
|
||||
|
||||
|
||||
|
||||
local manager_Tri = {
|
||||
[1] = { name = "group_will_unload_sandworm_manager", config_id = 100000001, event = EventType.EVENT_GROUP_WILL_UNLOAD, source = "", condition = "", action = "action_group_will_unload_sandworm_manager", trigger_count = 0},
|
||||
|
||||
}
|
||||
|
||||
function manager_Initialize()
|
||||
for k,v in pairs(manager_Tri) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
|
||||
|
||||
table.insert(variables,{ config_id = 100000001, name = "current_sandworm_origin_group", value = -1})
|
||||
table.insert(variables,{ config_id = 100000002, name = "current_sandworm_priority", value = -1})
|
||||
|
||||
|
||||
end
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 触发器回调 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
function action_group_will_unload_sandworm_manager(context,evt)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormManager] Group_will_unload: group即将卸载,清空当前沙虫占用信息")
|
||||
ScriptLib.SetGroupVariableValue(context,"current_sandworm_origin_group",-1)
|
||||
ScriptLib.SetGroupVariableValue(context,"current_sandworm_priority",-1)
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 玩法流程控制 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
function LF_Request_Create_Sandworm(context,prev_context,origin_group,priority)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormManager] LF_Request_Create_Sandworm: 请求创建沙虫,来源group为"..origin_group..",优先级为"..priority)
|
||||
local current_sandworm_priority = ScriptLib.GetGroupVariableValue(context,"current_sandworm_priority")
|
||||
local current_sandworm_origin_group = ScriptLib.GetGroupVariableValue(context,"current_sandworm_origin_group")
|
||||
if current_sandworm_origin_group == -1 and current_sandworm_priority == -1 then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormManager] LF_Request_Create_Sandworm: 当前占用列表为空,允许创建")
|
||||
ScriptLib.SetGroupVariableValue(context,"current_sandworm_origin_group",origin_group)
|
||||
ScriptLib.SetGroupVariableValue(context,"current_sandworm_priority",priority)
|
||||
return 0
|
||||
end
|
||||
if priority <= current_sandworm_priority then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormManager] LF_Request_Create_Sandworm: 低于当前占用的优先级,不允许创建")
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormManager] LF_Request_Create_Sandworm: 当前的占用来源group为"..current_sandworm_origin_group..",优先级为"..current_sandworm_priority)
|
||||
return -1
|
||||
else
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormManager] LF_Request_Create_Sandworm: 高于当前占用的优先级,允许创建")
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormManager] LF_Request_Create_Sandworm: 当前的占用来源group为"..current_sandworm_origin_group..",优先级为"..current_sandworm_priority)
|
||||
ScriptLib.ExecuteGroupLua(context,current_sandworm_origin_group,"LF_Request_Remove_Sandworm_From_Manager",{})
|
||||
ScriptLib.SetGroupVariableValue(context,"current_sandworm_origin_group",origin_group)
|
||||
ScriptLib.SetGroupVariableValue(context,"current_sandworm_priority",priority)
|
||||
return 0
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function LF_Request_Clear_Occupation(context,prev_context,origin_group)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormManager] LF_Request_Clear_Occupation: 请求清除沙虫占用,来源group为"..origin_group)
|
||||
local current_sandworm_origin_group = ScriptLib.GetGroupVariableValue(context,"current_sandworm_origin_group")
|
||||
if current_sandworm_origin_group == origin_group then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormManager] LF_Request_Clear_Occupation: 与当前的占用group匹配")
|
||||
ScriptLib.SetGroupVariableValue(context,"current_sandworm_origin_group",-1)
|
||||
ScriptLib.SetGroupVariableValue(context,"current_sandworm_priority",-1)
|
||||
return 0
|
||||
end
|
||||
return -1
|
||||
end
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| CRUD方法 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 杂项方法 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
|
||||
|
||||
------------------------------------------------------------------
|
||||
manager_Initialize()
|
||||
103
gdconf/game_data_config/lua/common/V3_4/SandwormPlayControl.lua
Normal file
103
gdconf/game_data_config/lua/common/V3_4/SandwormPlayControl.lua
Normal file
@@ -0,0 +1,103 @@
|
||||
|
||||
--[[======================================
|
||||
|| filename: SandwormPlayControl
|
||||
|| owner: luyao.huang
|
||||
|| description:
|
||||
|| LogName: SandwormPlayControl
|
||||
|| Protection:
|
||||
=======================================]]--
|
||||
|
||||
|
||||
|
||||
local business_type = "direct"
|
||||
local priority = 3
|
||||
|
||||
local local_defs =
|
||||
{
|
||||
sandworm_manager_group = 133314001,
|
||||
}
|
||||
|
||||
|
||||
|
||||
local challenge_Tri = {
|
||||
}
|
||||
|
||||
function challenge_Initialize()
|
||||
for k,v in pairs(challenge_Tri) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
--沙虫攻击次数计数开关,打开后才会开始计数
|
||||
table.insert(variables,{ config_id = 100010001, name = "is_attack_count", value = 0})
|
||||
--沙虫攻击次数计数
|
||||
table.insert(variables,{ config_id = 100010002, name = "attack_count", value = 0})
|
||||
end
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 触发器回调 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 沙虫控制回调 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
--沙虫控制回调:创建沙虫成功
|
||||
function LF_On_Create_Sandworm_Success(context)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormchallengeControl]LF_On_Create_Sandworm_Success: 沙虫控制回调:创建沙虫成功")
|
||||
end
|
||||
|
||||
--沙虫控制回调:创建沙虫失败
|
||||
function LF_On_Create_Sandworm_Fail(context)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormchallengeControl]LF_On_Create_Sandworm_Success: 沙虫控制回调:创建沙虫失败")
|
||||
end
|
||||
|
||||
--沙虫控制回调:移除沙虫
|
||||
function LF_On_Remove_Sandworm(context)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormchallengeControl]LF_On_Create_Sandworm_Success: 沙虫控制回调:清除沙虫")
|
||||
end
|
||||
|
||||
--沙虫控制回调:沙虫攻击完成
|
||||
function LF_On_Attack_Finish(context)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormchallengeControl]LF_On_Attack_Finish: 沙虫控制回调:攻击完成")
|
||||
if LF_Is_Attack_Count(context) then
|
||||
ScriptLib.ChangeGroupVariableValue(context,"attack_count",1)
|
||||
end
|
||||
end
|
||||
|
||||
--沙虫控制回调:沙虫攻击命中玩家
|
||||
function LF_On_Attack_Hit_Avatar(context)
|
||||
if LF_Is_Attack_Count(context) then
|
||||
ScriptLib.ChangeGroupVariableValue(context,"attack_count",1)
|
||||
end
|
||||
end
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 沙虫攻击计数 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
function LF_Start_Attack_Count(context)
|
||||
ScriptLib.SetGroupVariableValue(context,"is_attack_count",1)
|
||||
end
|
||||
|
||||
function LF_Stop_Attack_Count(context)
|
||||
ScriptLib.SetGroupVariableValue(context,"is_attack_count",0)
|
||||
end
|
||||
|
||||
function LF_Is_Attack_Count(context)
|
||||
return ScriptLib.GetGroupVariableValue(context,"is_attack_count")
|
||||
end
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 杂项方法 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
------------------------------------------------------------------
|
||||
challenge_Initialize()
|
||||
371
gdconf/game_data_config/lua/common/V3_4/SandwormToolkit.lua
Normal file
371
gdconf/game_data_config/lua/common/V3_4/SandwormToolkit.lua
Normal file
@@ -0,0 +1,371 @@
|
||||
|
||||
--[[======================================
|
||||
|| filename: SandwormToolkit
|
||||
|| owner: luyao.huang
|
||||
|| description: 整合了各类沙虫控制方法,可以直接调用或通过tpl调用
|
||||
|| LogName: SandwormToolkit
|
||||
|| Protection:
|
||||
=======================================]]--
|
||||
|
||||
|
||||
--local defs = {
|
||||
-- alert_max_value = 1000,
|
||||
-- normal_sandworm_id = 1030,
|
||||
-- direct_sandworm_id = 1035,
|
||||
-- business_type = "bigworld"
|
||||
--}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
local local_defs =
|
||||
{
|
||||
sandworm_manager_group = 133314001,
|
||||
}
|
||||
|
||||
|
||||
|
||||
local toolkit_Tri = {
|
||||
[1] = { name = "platform_arrival_toolkit", config_id = 900010001, event = EventType.EVENT_PLATFORM_ARRIVAL, source = "", condition = "", action = "action_platform_arrival_toolkit", trigger_count = 0},
|
||||
}
|
||||
|
||||
function toolkit_Initialize()
|
||||
for k,v in pairs(toolkit_Tri) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
|
||||
table.insert(variables,{ config_id = 900020001, name = "is_sandworm_alive", value = 0})
|
||||
end
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 创生沙虫 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
--能否创建沙虫?
|
||||
--比较当前优先级和当前占用沙虫的group的优先级。如果优先级较高则允许这里创建,并让另外一边的沙虫销毁,否则无视这条请求,不允许创建
|
||||
function LF_Try_Create_Sandworm(context)
|
||||
return ScriptLib.ExecuteGroupLua(context,local_defs.sandworm_manager_group,"LF_Request_Create_Sandworm",{base_info.group_id,priority}) == 0
|
||||
end
|
||||
|
||||
--召唤沙虫的对外接口
|
||||
--召唤一只移动表演用沙虫
|
||||
function LF_Summon_Move_Sandworm(context,attack_times)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormToolkit] LF_Summon_Move_Sandworm: 请求创生一个移动表演沙虫")
|
||||
if defs.move_sandworm_id == nil then
|
||||
ScriptLib.PrintGroupWarning(context,"## [SandwormToolkit] LF_Summon_Move_Sandworm: 请求失败,没有填写一个直接攻击沙虫!!")
|
||||
return -1
|
||||
end
|
||||
if LF_Try_Create_Sandworm(context) then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormToolkit] LF_Summon_Move_Sandworm: 当前沙虫未被占用,开始创建")
|
||||
LF_Create_Move_Sandworm(context,attack_times)
|
||||
ScriptLib.SetGroupVariableValue(context,"is_sandworm_alive",1)
|
||||
LF_On_Create_Sandworm_Success(context)
|
||||
return 0
|
||||
else
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormToolkit] LF_Summon_Move_Sandworm: 当前沙虫被占用,创建失败")
|
||||
LF_On_Create_Sandworm_Fail(context)
|
||||
return -1
|
||||
end
|
||||
end
|
||||
|
||||
--命令巡游沙虫进行攻击
|
||||
--如果巡游沙虫在场,则直接命令这个gadget发动一次攻击
|
||||
--如果不在场,则直接在随机位置生成沙虫后向玩家攻击
|
||||
function LF_Command_Move_Sandworm_Attack(context,attack_times)
|
||||
local is_sandworm_alive = ScriptLib.GetGroupVariableValue(context,"is_sandworm_alive") == 1
|
||||
if is_sandworm_alive then
|
||||
--如果当前沙虫在场,直接命令沙虫向玩家发动一次攻击
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, defs.move_sandworm_id, "SGV_Shoot_Sandworm", 1)
|
||||
else
|
||||
--如果当前沙虫不在场,召出沙虫以后再命令其向玩家发动一次攻击
|
||||
if LF_Try_Create_Sandworm(context) then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormToolkit] LF_Command_Move_Sandworm_Attack: 当前沙虫未被占用,开始创建")
|
||||
local point_list = {}
|
||||
for i = 1, sandworm_point_array.max_point do
|
||||
table.insert(point_list,i)
|
||||
end
|
||||
|
||||
local point_info_list = LF_Get_Point_Info_List(context,sandworm_point_array.point_array,point_list)
|
||||
local born_point = LF_Get_Random_Point(context,point_info_list,{})
|
||||
local born_pos = born_point.pos
|
||||
ScriptLib.CreateGadgetByParamTable(context,{config_id = defs.move_sandworm_id,pos = {x=born_pos.x,y=born_pos.y,z=born_pos.z}, rot = {x=0,y=0,z=0},
|
||||
sgv_key = {"SGV_Attack_Times","SGV_Shoot_Sandworm"}, sgv_value = {attack_times,0}})
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, defs.move_sandworm_id, "SGV_Shoot_Sandworm", 1)
|
||||
LF_On_Create_Sandworm_Success(context)
|
||||
else
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormToolkit] LF_Command_Move_Sandworm_Attack: 当前沙虫被占用,创建失败")
|
||||
LF_On_Create_Sandworm_Fail(context)
|
||||
return -1
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
--在指定位置召唤一只直接攻击沙虫
|
||||
function LF_Summon_Direct_Sandworm(context,pos,attack_times)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormToolkit] LF_Summon_Direct_Sandworm: 请求创生一只直接攻击沙虫")
|
||||
if defs.direct_sandworm_id == nil then
|
||||
ScriptLib.PrintGroupWarning(context,"## [SandwormToolkit] LF_Summon_Direct_Sandworm: 请求失败,没有填写一个直接攻击沙虫!!")
|
||||
return -1
|
||||
end
|
||||
if LF_Try_Create_Sandworm(context) then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormToolkit] LF_Summon_Direct_Sandworm: 当前沙虫未被占用,开始创建")
|
||||
LF_Create_Direct_Sandworm(context,pos,attack_times,1)
|
||||
ScriptLib.SetGroupVariableValue(context,"is_sandworm_alive",2)
|
||||
LF_On_Create_Sandworm_Success(context)
|
||||
return 0
|
||||
else
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormToolkit] LF_Summon_Direct_Sandworm: 当前沙虫被占用,创建失败")
|
||||
LF_On_Create_Sandworm_Fail(context)
|
||||
return -1
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--在玩家脚下召唤一只直接攻击沙虫
|
||||
function LF_Summon_Direct_Sandworm_By_Avatar(context,uid,attack_times)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormToolkit] LF_Summon_Direct_Sandworm_By_Avatar: 在玩家脚下创生一只直接攻击沙虫")
|
||||
local owner_eid = ScriptLib.GetAvatarEntityIdByUid(context,uid)
|
||||
local pos = ScriptLib.GetPosByEntityId(context,owner_eid)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormToolkit] LF_Summon_Direct_Sandworm_By_Avatar: 请求创生在玩家脚下创生直接攻击沙虫")
|
||||
if defs.direct_sandworm_id == nil then
|
||||
ScriptLib.PrintGroupWarning(context,"## [SandwormToolkit] LF_Summon_Direct_Sandworm_By_Avatar: 请求失败,没有填写一个直接攻击沙虫!!")
|
||||
return -1
|
||||
end
|
||||
if LF_Try_Create_Sandworm(context) then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormToolkit] LF_Summon_Direct_Sandworm_By_Avatar: 当前沙虫未被占用,开始创建")
|
||||
LF_Create_Direct_Sandworm(context,pos,attack_times,1)
|
||||
ScriptLib.SetGroupVariableValue(context,"is_sandworm_alive",1)
|
||||
LF_On_Create_Sandworm_Success(context)
|
||||
return 0
|
||||
else
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormToolkit] LF_Summon_Direct_Sandworm_By_Avatar: 当前沙虫被占用,创建失败")
|
||||
LF_On_Create_Sandworm_Fail(context)
|
||||
return -1
|
||||
end
|
||||
end
|
||||
--------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
--召唤沙虫的实现接口
|
||||
--创建一只移动沙虫
|
||||
function LF_Create_Move_Sandworm(context,attack_times)
|
||||
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormToolkit] LF_Create_Move_Sandworm: 创建一只移动表演用沙虫")
|
||||
|
||||
|
||||
local point_list = {}
|
||||
for i = 1, sandworm_point_array.max_point do
|
||||
table.insert(point_list,i)
|
||||
end
|
||||
|
||||
local point_info_list = LF_Get_Point_Info_List(context,sandworm_point_array.point_array,point_list)
|
||||
local born_point = LF_Get_Random_Point(context,point_info_list,{})
|
||||
local born_pos = born_point.pos
|
||||
ScriptLib.CreateGadgetByParamTable(context,{config_id = defs.move_sandworm_id,pos = {x=born_pos.x,y=born_pos.y,z=born_pos.z}, rot = {x=0,y=0,z=0},
|
||||
sgv_key = {"SGV_Attack_Times"}, sgv_value = {attack_times}})
|
||||
local black_list = {born_point.point_id}
|
||||
local target_point = LF_Get_Random_Point(context,point_info_list,black_list)
|
||||
ScriptLib.SetPlatformPointArray(context,defs.move_sandworm_id, sandworm_point_array.point_array, {target_point.point_id}, { route_type = 0,turn_mode=false, record_mode = 2 })
|
||||
end
|
||||
|
||||
|
||||
function action_platform_arrival_toolkit(context,evt)
|
||||
|
||||
if evt.param1 == defs.move_sandworm_id then
|
||||
|
||||
local point_list = {}
|
||||
for i = 1, sandworm_point_array.max_point do
|
||||
table.insert(point_list,i)
|
||||
end
|
||||
|
||||
local point_info_list = LF_Get_Point_Info_List(context,sandworm_point_array.point_array,point_list)
|
||||
local target_point = LF_Get_Random_Point(context,point_info_list,{})
|
||||
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormToolkit] action_platform_arrival_sandworm:移动沙虫目标点为:"..target_point.point_id)
|
||||
|
||||
ScriptLib.SetPlatformPointArray(context,defs.move_sandworm_id, sandworm_point_array.point_array, {target_point.point_id}, { route_type = 0,turn_mode=false, record_mode = 2 })
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
|
||||
--在指定地点创建一只直接攻击沙虫
|
||||
function LF_Create_Direct_Sandworm(context,pos,attack_times,target_stragety)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormToolkit] LF_Create_Direct_Sandworm: 创建一只直接攻击用沙虫")
|
||||
--ScriptLib.PrintContextLog(context,"## [SandwormToolkit] LF_Create_Direct_Sandworm: direct_sandworm_id参数为"..defs.direct_sandworm_id)
|
||||
--ScriptLib.PrintContextLog(context,"## [SandwormToolkit] LF_Create_Direct_Sandworm: pos参数为"..pos.x..","..pos.y..","..pos.z)
|
||||
--ScriptLib.PrintContextLog(context,"## [SandwormToolkit] LF_Create_Direct_Sandworm: attack_times参数为"..attack_times)
|
||||
--ScriptLib.PrintContextLog(context,"## [SandwormToolkit] LF_Create_Direct_Sandworm: target_stragety参数为"..target_stragety)
|
||||
local ret = ScriptLib.CreateGadgetByParamTable(context,{config_id = defs.direct_sandworm_id,pos = {x=pos.x,y=pos.y,z=pos.z}, rot = {x=0,y=0,z=0},
|
||||
sgv_key = {"SGV_Attack_Times","SGV_Target_Stragety"}, sgv_value = {attack_times,target_stragety}})
|
||||
--ScriptLib.PrintContextLog(context,"## [SandwormToolkit] LF_Create_Direct_Sandworm: 创建结果为"..ret)
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
--清理移动沙虫
|
||||
function LF_Remove_Move_Sandworm(context)
|
||||
if defs.move_sandworm_id ~= nil then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormToolkit] LF_Remove_Move_Sandworm: 清除移动沙虫")
|
||||
ScriptLib.RemoveEntityByConfigId(context, base_info.group_id, EntityType.GADGET, defs.move_sandworm_id)
|
||||
--清除掉沙虫的占用
|
||||
ScriptLib.ExecuteGroupLua(context,local_defs.sandworm_manager_group,"LF_Request_Clear_Occupation",{base_info.group_id})
|
||||
ScriptLib.SetGroupVariableValue(context,"is_sandworm_alive",0)
|
||||
LF_On_Remove_Sandworm(context)
|
||||
end
|
||||
end
|
||||
|
||||
--清理直接攻击沙虫
|
||||
function LF_Remove_Direct_Sandworm(context)
|
||||
if defs.direct_sandworm_id ~= nil then
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormToolkit] LF_Remove_Direct_Sandworm: 清除直接攻击沙虫")
|
||||
ScriptLib.RemoveEntityByConfigId(context, base_info.group_id, EntityType.GADGET, defs.direct_sandworm_id)
|
||||
--清除掉沙虫的占用
|
||||
ScriptLib.ExecuteGroupLua(context,local_defs.sandworm_manager_group,"LF_Request_Clear_Occupation",{base_info.group_id})
|
||||
ScriptLib.SetGroupVariableValue(context,"is_sandworm_alive",0)
|
||||
LF_On_Remove_Sandworm(context)
|
||||
end
|
||||
end
|
||||
|
||||
--清除所有沙虫,不管类型
|
||||
function LF_Remove_All_Sandworm(context)
|
||||
LF_Remove_Move_Sandworm(context)
|
||||
LF_Remove_Direct_Sandworm(context)
|
||||
end
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 外部调用 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
--外部调用,请求清除当前group正在使用的沙虫
|
||||
function LF_Request_Remove_Sandworm_From_Manager(context,prev_context)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormToolkit] LF_Request_Remove_Sandworm:控制group请求,移除当前沙虫")
|
||||
LF_Remove_All_Sandworm(context)
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
|
||||
--外部调用,SLC返回沙虫攻击完毕
|
||||
function SLC_Sandworm_Attack_Finish(context)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormToolkit] SLC_Sandworm_Attack_Finish:SLC:沙虫攻击完毕")
|
||||
LF_Remove_All_Sandworm(context)
|
||||
LF_On_Attack_Finish(context)
|
||||
return 0
|
||||
end
|
||||
|
||||
--外部调用,SLC返回沙虫命中角色
|
||||
function SLC_Sandworm_Attack_Hit_Avatar(context)
|
||||
ScriptLib.PrintContextLog(context,"## [SandwormToolkit] SLC_Sandworm_Attack_Hit_Avatar:沙虫攻击击中玩家")
|
||||
LF_On_Attack_Hit_Avatar(context)
|
||||
return 0
|
||||
end
|
||||
|
||||
function SLC_Clear_Move_Sandworm_Command(context)
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, defs.move_sandworm_id, "SGV_Shoot_Sandworm", 0)
|
||||
return 0
|
||||
end
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 沙虫选点 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
--获取特定点阵的所有点信息
|
||||
function LF_Get_Point_Info_List(context,point_array,point_list)
|
||||
local point_info_list = {}
|
||||
for i = 1, #point_list do
|
||||
local ret,pos,rot=ScriptLib.GetPlatformArrayInfoByPointId(context,point_array, point_list[i])
|
||||
local point_info = {point_id = point_list[i], pos = pos, rot = rot}
|
||||
table.insert(point_info_list,point_info)
|
||||
end
|
||||
return point_info_list
|
||||
end
|
||||
|
||||
|
||||
|
||||
--找到玩家附近最近的一个点,可以剔除一些点
|
||||
function LF_Get_Nearest_Point_By_Avatar(context,point_info_list,black_list)
|
||||
local nearest_point = -1
|
||||
local nearest_distance = 10000000
|
||||
for k,v in pairs(point_info_list) do
|
||||
if not LF_Is_In_Table(context,v.point_id,black_list) then
|
||||
local uid = ScriptLib.GetSceneOwnerUid(context)
|
||||
local distance = LF_Get_Point_Avatar_Distance(context,uid,v.pos)
|
||||
if distance < nearest_distance then
|
||||
nearest_distance = distance
|
||||
nearest_point = v
|
||||
end
|
||||
end
|
||||
end
|
||||
return nearest_point
|
||||
end
|
||||
|
||||
|
||||
function LF_Get_Random_Point(context,point_info_list,black_list)
|
||||
local target_point_info_list = {}
|
||||
for k,v in pairs(point_info_list) do
|
||||
if not LF_Is_In_Table(context,v.point_id,black_list) then
|
||||
table.insert(target_point_info_list,v)
|
||||
end
|
||||
end
|
||||
local r = math.random(#target_point_info_list)
|
||||
return target_point_info_list[r]
|
||||
end
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 杂项方法 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
function LF_Get_Point_Avatar_Distance(context,uid,point_pos)
|
||||
local owner_eid = ScriptLib.GetAvatarEntityIdByUid(context,uid)
|
||||
local pos = ScriptLib.GetPosByEntityId(context,owner_eid)
|
||||
return LF_Get_2D_Distance(context,pos,point_pos)
|
||||
end
|
||||
|
||||
function LF_Get_2D_Distance(context,p1,p2)
|
||||
return math.sqrt((p1.x-p2.x)*(p1.x-p2.x)+ (p1.z-p2.z)*(p1.z-p2.z))
|
||||
end
|
||||
|
||||
|
||||
|
||||
--获取指定位置的随机近邻位置。分布在min_r~max_r为半径的环上
|
||||
function LF_Get_Random_Neighbour(context,pos,min_r,max_r)
|
||||
local random_r = math.random(min_r,max_r)
|
||||
local random_a = math.random()*math.pi*2
|
||||
local rpos_x = pos.x + random_r * math.cos(random_a)
|
||||
local rpos_z = pos.z + random_r * math.sin(random_a)
|
||||
local rpos = {x = rpos_x,y = pos.y,z = rpos_z}
|
||||
return rpos
|
||||
end
|
||||
|
||||
|
||||
function LF_Is_In_Table(context,v,t)
|
||||
for i = 1, #t do
|
||||
if t[i] == v then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
------------------------------------------------------------------
|
||||
toolkit_Initialize()
|
||||
290
gdconf/game_data_config/lua/common/V3_4/ScarletKingFan.lua
Normal file
290
gdconf/game_data_config/lua/common/V3_4/ScarletKingFan.lua
Normal file
@@ -0,0 +1,290 @@
|
||||
--[[======================================
|
||||
|| filename: ScarletKingFan
|
||||
|| owner: luyao.huang
|
||||
|| description: 赤王风扇玩法
|
||||
|| LogName: ScarletKingFan
|
||||
|| Protection:
|
||||
=======================================]]--
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
------
|
||||
local local_defs =
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
local options =
|
||||
{
|
||||
switch_open = 5000,
|
||||
switch_close = 5001,
|
||||
move_fan = 436,
|
||||
}
|
||||
|
||||
|
||||
local fan_state =
|
||||
{
|
||||
lock = 0,
|
||||
move = 101,
|
||||
dir1 = 201,
|
||||
dir2 = 202,
|
||||
dir3 = 203,
|
||||
dir4 = 204
|
||||
}
|
||||
|
||||
local shutter_state =
|
||||
{
|
||||
close = 0,
|
||||
open = 201,
|
||||
}
|
||||
|
||||
local shutter_switch_state =
|
||||
{
|
||||
close = 0,
|
||||
open = 201,
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
local Tri = {
|
||||
[1] = { name = "group_load", config_id = 8000001, event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_group_load", trigger_count = 0},
|
||||
[2] = { name = "gadget_state_change", config_id = 8000002, event = EventType.EVENT_GADGET_STATE_CHANGE, source = "", condition = "", action = "action_gadget_state_change", trigger_count = 0},
|
||||
[3] = { name = "select_option", config_id = 8000003, event = EventType.EVENT_SELECT_OPTION, source = "", condition = "", action = "action_select_option", trigger_count = 0},
|
||||
[4] = { name = "platform_arrival", config_id = 8000004, event = EventType.EVENT_PLATFORM_ARRIVAL, source = "", condition = "", action = "action_platform_arrival", trigger_count = 0},
|
||||
|
||||
}
|
||||
|
||||
function Initialize()
|
||||
for k,v in pairs(Tri) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
|
||||
--记录风扇的位置
|
||||
for i = 1, #fans do
|
||||
table.insert(variables,{config_id = 110000000+i, name = "fan_pos_"..fans[i], value = 1})
|
||||
--用来暂存风扇移动前的状态,移动后恢复到这个状态
|
||||
table.insert(variables,{config_id = 120000000+i, name = "fan_pre_move_state_"..fans[i], value = 201})
|
||||
end
|
||||
end
|
||||
|
||||
------------------------------------------------------------------
|
||||
|
||||
function action_group_load(context,evt)
|
||||
ScriptLib.PrintContextLog(context,"## [ScarletKingFan]action_group_load:group加载")
|
||||
for i = 1, #fans do
|
||||
if FanToPointArray[fans[i]] ~= nil then
|
||||
ScriptLib.PrintContextLog(context,"## [ScarletKingFan]action_group_load:给风扇上选项")
|
||||
LF_Set_Fan_Option(context,fans[i],true)
|
||||
ScriptLib.SetGroupVariableValue(context,"fan_pos_"..fans[i],1)
|
||||
ScriptLib.SetGroupVariableValue(context,"fan_pre_move_state_"..fans[i],201)
|
||||
end
|
||||
end
|
||||
for i = 1, #shutter_switches do
|
||||
LF_Set_Shutter_Switch_Option(context,shutter_switches[i])
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
|
||||
--风扇转向、百叶墙壁开关开关、百叶墙壁开关
|
||||
function action_gadget_state_change(context,evt)
|
||||
if LF_Is_In_Table(context,evt.param2,fans) then
|
||||
ScriptLib.PrintContextLog(context,"## [ScarletKingFan]action_gadget_state_change:风扇状态变化")
|
||||
local state = evt.param1
|
||||
local fan = evt.param2
|
||||
if evt.param3 == fan_state.lock then
|
||||
LF_Set_Fan_Option(context,fan,true)
|
||||
end
|
||||
if state == fan_state.dir1 or state == fan_state.dir2 or state == fan_state.dir3 or state == fan_state.dir4 then
|
||||
ScriptLib.PrintContextLog(context,"## [ScarletKingFan]action_gadget_state_change:风扇转向,更新沙堆状态")
|
||||
LF_Update_Sandpile_State(context, fan)
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
if LF_Is_In_Table(context,evt.param2,shutter_switches) then
|
||||
ScriptLib.PrintContextLog(context,"## [ScarletKingFan]action_gadget_state_change:百叶窗开关状态变化")
|
||||
LF_Set_Shutter_Switch_Option(context,evt.param2)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
function action_select_option(context,evt)
|
||||
if LF_Is_In_Table(context,evt.param1,shutter_switches) then
|
||||
if evt.param2 == options.switch_close then
|
||||
ScriptLib.PrintContextLog(context,"## [ScarletKingFan]action_select_option:按下百叶窗"..evt.param1.."的关闭开关")
|
||||
--按下开关,改开关的状态
|
||||
ScriptLib.SetGadgetStateByConfigId(context,evt.param1, shutter_switch_state.close)
|
||||
--按下开关,改开关连接的百叶墙壁的状态
|
||||
ScriptLib.SetGadgetStateByConfigId(context,SwitchToShutter[evt.param1],shutter_state.close)
|
||||
end
|
||||
if evt.param2 == options.switch_open then
|
||||
ScriptLib.PrintContextLog(context,"## [ScarletKingFan]action_select_option:按下百叶窗"..evt.param1.."的打开开关")
|
||||
--按下开关,改开关的状态
|
||||
ScriptLib.SetGadgetStateByConfigId(context,evt.param1, shutter_switch_state.open)
|
||||
--按下开关,改开关连接的百叶墙壁的状态
|
||||
ScriptLib.SetGadgetStateByConfigId(context,SwitchToShutter[evt.param1],shutter_state.open)
|
||||
end
|
||||
end
|
||||
|
||||
if LF_Is_In_Table(context,evt.param1,fans) then
|
||||
if evt.param2 == options.move_fan then
|
||||
local fan = evt.param1
|
||||
local current_pos = ScriptLib.GetGroupVariableValue(context,"fan_pos_"..fan)
|
||||
local pos = 3 - current_pos
|
||||
|
||||
local pre_move_state = ScriptLib.GetGadgetStateByConfigId(context,base_info.group_id,fan)
|
||||
ScriptLib.SetGroupVariableValue(context,"fan_pre_move_state_"..fan,pre_move_state)
|
||||
|
||||
ScriptLib.SetGadgetStateByConfigId(context,fan, fan_state.move)
|
||||
ScriptLib.PrintContextLog(context,"## [ScarletKingFan]action_select_option:移动风扇"..fan.."到点位"..pos)
|
||||
if current_pos == 1 then
|
||||
ScriptLib.SetPlatformPointArray(context,fan,FanToPointArray[fan], {1,2}, { route_type = 0,turn_mode=false, record_mode = 1 })
|
||||
else
|
||||
ScriptLib.SetPlatformPointArray(context,fan,FanToPointArray[fan], {2,1}, { route_type = 0,turn_mode=false, record_mode = 1 })
|
||||
end
|
||||
ScriptLib.StartPlatform(context,fan)
|
||||
|
||||
--移动时,关闭选项
|
||||
LF_Set_Fan_Option(context,fan,false)
|
||||
end
|
||||
end
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
|
||||
function action_platform_arrival(context,evt)
|
||||
ScriptLib.PrintContextLog(context,"## [ScarletKingFan]action_platform_arrival:风扇到达路点")
|
||||
local fan = evt.param1
|
||||
local point_id = evt.param3
|
||||
|
||||
local pos = ScriptLib.GetGroupVariableValue(context,"fan_pos_"..fan)
|
||||
--和LD约定所有风扇只有两个端点,因此pos只会为1或者2
|
||||
local target_pos = 3 - pos
|
||||
if point_id == target_pos then
|
||||
|
||||
--运动到端点时,根据运动前的状态恢复gadgetState
|
||||
local pre_move_state = ScriptLib.GetGroupVariableValue(context,"fan_pre_move_state_"..fan)
|
||||
if pre_move_state ~= fan_state.dir1 and pre_move_state ~= fan_state.dir2 and pre_move_state ~= fan_state.dir3 and pre_move_state ~= fan_state.dir4 then
|
||||
pre_move_state = fan_state.dir1
|
||||
end
|
||||
ScriptLib.SetGadgetStateByConfigId(context,fan, pre_move_state)
|
||||
|
||||
--ScriptLib.StopPlatform(context,fan)
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context,base_info.group_id,fan,{options.move_fan})
|
||||
ScriptLib.SetGroupVariableValue(context,"fan_pos_"..fan,target_pos)
|
||||
LF_Update_Sandpile_State(context, fan)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 玩法流程 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
function LF_Update_Sandpile_State(context, fan)
|
||||
ScriptLib.PrintContextLog(context,"## [ScarletKingFan]LF_Update_Sandpile_State:更新"..fan.."相关的沙堆状态")
|
||||
for k,v in pairs(FanToSandpile) do
|
||||
if v.fan == fan then
|
||||
local pos = ScriptLib.GetGroupVariableValue(context,"fan_pos_"..fan)
|
||||
ScriptLib.PrintContextLog(context,"## [ScarletKingFan]LF_Update_Sandpile_State:当前风扇位置为"..pos)
|
||||
local dir_state = ScriptLib.GetGadgetStateByConfigId(context,base_info.group_id,fan)
|
||||
ScriptLib.PrintContextLog(context,"## [ScarletKingFan]LF_Update_Sandpile_State:当前风扇方向状态为"..dir_state)
|
||||
local fan_shutter_state
|
||||
if v.shutter ~= nil then
|
||||
fan_shutter_state = ScriptLib.GetGadgetStateByConfigId(context,base_info.group_id,v.shutter)
|
||||
ScriptLib.PrintContextLog(context,"## [ScarletKingFan]LF_Update_Sandpile_State:当前风扇路径上的百叶窗状态为"..fan_shutter_state)
|
||||
else
|
||||
fan_shutter_state = shutter_state.open
|
||||
end
|
||||
if pos == v.pos and dir_state == v.dir_state and fan_shutter_state == shutter_state.open then
|
||||
ScriptLib.PrintContextLog(context,"## [ScarletKingFan]LF_Update_Sandpile_State:沙堆"..k.."目前符合吹风机的状态,销毁沙堆")
|
||||
ScriptLib.SetGadgetStateByConfigId(context,k, 201)
|
||||
--ScriptLib.KillEntityByConfigId(context, {config_id = k})
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function LF_Set_Fan_Option(context,fan,enable)
|
||||
|
||||
local flag = false
|
||||
if FanToPointArray ~= nil then
|
||||
for k,v in pairs(FanToPointArray) do
|
||||
if k == fan then
|
||||
flag = true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if flag then
|
||||
local state = ScriptLib.GetGadgetStateByConfigId(context,base_info.group_id,fan)
|
||||
if state == 0 or state == 101 then
|
||||
ScriptLib.DelWorktopOptionByGroupId(context,base_info.group_id,fan,options.move_fan)
|
||||
else
|
||||
if enable then
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context,base_info.group_id,fan,{options.move_fan})
|
||||
else
|
||||
ScriptLib.DelWorktopOptionByGroupId(context,base_info.group_id,fan,options.move_fan)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function LF_Set_Shutter_Switch_Option(context,switch)
|
||||
local state = ScriptLib.GetGadgetStateByConfigId(context,base_info.group_id,switch)
|
||||
if state == 0 then
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context,base_info.group_id,switch,{options.switch_open})
|
||||
ScriptLib.DelWorktopOptionByGroupId(context,base_info.group_id,switch,options.switch_close)
|
||||
elseif state == 201 then
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context,base_info.group_id,switch,{options.switch_close})
|
||||
ScriptLib.DelWorktopOptionByGroupId(context,base_info.group_id,switch,options.switch_open)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| CRUD方法 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
function LF_Is_In_Table(context,v,t)
|
||||
for i = 1, #t do
|
||||
if t[i] == v then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function LF_Get_Index_In_Table(context,v,t)
|
||||
for i = 1, #t do
|
||||
if t[i] == v then
|
||||
return i
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
|
||||
------------------------------------------------------------------
|
||||
Initialize()
|
||||
@@ -0,0 +1,202 @@
|
||||
--[[======================================
|
||||
|| filename: ShelterWorktopControl
|
||||
|| owner: luyao.huang
|
||||
|| description: 避难所精灵台座控制
|
||||
|| LogName: ShelterWorktopControl
|
||||
|| Protection:
|
||||
=======================================]]--
|
||||
|
||||
--local defs =
|
||||
--{
|
||||
-- gadget_worktop_id = 100001,
|
||||
--}
|
||||
|
||||
|
||||
------
|
||||
local local_defs = {
|
||||
max_level = 6,
|
||||
chain_id = 100005,
|
||||
energy_level_1 = 2,
|
||||
energy_amount_1 = 1,
|
||||
energy_level_2 = 5,
|
||||
energy_amount_2 = 3,
|
||||
unlock_worktop_level = 4,
|
||||
|
||||
skip_sandstorm_option = 5100,
|
||||
start_sandstorm_option = 5101,
|
||||
|
||||
sandstorm_state_leveltag = 21,
|
||||
sandstorm_on = 59,
|
||||
sandstorm_off = 60,
|
||||
|
||||
sandstorm_control_group = 133314001,
|
||||
|
||||
skip_teyvat_time = 8 * 60,
|
||||
skip_time = 8
|
||||
}
|
||||
|
||||
local Tri = {
|
||||
[1] = { name = "group_load_shelter", config_id = 11000001, event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_group_load_shelter", trigger_count = 0},
|
||||
[2] = { name = "select_option_shelter", config_id = 11000002, event = EventType.EVENT_SELECT_OPTION, source = "", condition = "", action = "action_select_option_shelter", trigger_count = 0},
|
||||
[3] = { name = "time_axis_pass_shelter", config_id = 11000003, event = EventType.EVENT_TIME_AXIS_PASS, source = "", condition = "", action = "action_time_axis_pass_shelter", trigger_count = 0},
|
||||
}
|
||||
|
||||
function Initialize()
|
||||
for k,v in pairs(Tri) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
|
||||
table.insert(variables,{config_id = 110000001, name = "is_skipping_time", value = 0})
|
||||
|
||||
|
||||
table.insert(variables,{config_id = 150000001, name = "GM_Upgrade_Chain_Level", value = 0})
|
||||
table.insert(variables,{config_id = 150000002, name = "GM_Recover_Energy", value = 0})
|
||||
table.insert(variables,{config_id = 150000003, name = "GM_Set_Chain_Level", value = 0})
|
||||
end
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 触发器回调 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
--玩法加载初始化
|
||||
function action_group_load_shelter(context,evt)
|
||||
|
||||
ScriptLib.PrintContextLog(context,"## [ShelterWorktopControl]action_group_load_shelter:group加载,给精灵台座上选项")
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_select_option_shelter(context,evt)
|
||||
|
||||
if evt.param2 == local_defs.skip_sandstorm_option then
|
||||
|
||||
ScriptLib.PrintContextLog(context,"## [ShelterWorktopControl]action_select_option_shelter:玩家选择选项,跳过沙尘暴")
|
||||
|
||||
ScriptLib.SkipTeyvatTime(context,local_defs.skip_teyvat_time,1)
|
||||
|
||||
ScriptLib.InitTimeAxis(context,"SKIP_TYVAT_TIME_AXIS", {local_defs.skip_time}, false)
|
||||
ScriptLib.DelWorktopOptionByGroupId(context,base_info.group_id, defs.gadget_worktop_id, local_defs.skip_sandstorm_option)
|
||||
ScriptLib.DelWorktopOptionByGroupId(context,base_info.group_id, defs.gadget_worktop_id, local_defs.start_sandstorm_option)
|
||||
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, defs.gadget_worktop_id, "SGV_Gear_Option", 1)
|
||||
ScriptLib.SetGroupVariableValue(context,"is_skipping_time",1)
|
||||
|
||||
--调用沙尘暴控制group跳过当前沙尘暴
|
||||
local sandstorm_state = ScriptLib.GetGroupVariableValueByGroup(context,"sandstorm_state",local_defs.sandstorm_control_group)
|
||||
ScriptLib.PrintContextLog(context,"## [ShelterWorktopControl]action_select_option_shelter:当前沙尘暴状态为"..sandstorm_state)
|
||||
if sandstorm_state == 1 then
|
||||
local ret = ScriptLib.ExecuteGroupLua(context, local_defs.sandstorm_control_group, "LF_Skip_Current_Sandstorm", {})
|
||||
if ret == -1 then
|
||||
ScriptLib.PrintGroupWarning(context,"## [Warning] [ShelterWorktopControl] action_select_option_shelter:调用控制group的跳过沙尘暴天气功能失败")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if evt.param2 == local_defs.start_sandstorm_option then
|
||||
ScriptLib.PrintContextLog(context,"## [ShelterWorktopControl]action_select_option_shelter:玩家选择选项,开启沙尘暴")
|
||||
|
||||
ScriptLib.SkipTeyvatTime(context,local_defs.skip_teyvat_time,1)
|
||||
|
||||
ScriptLib.InitTimeAxis(context,"SKIP_TYVAT_TIME_AXIS", {local_defs.skip_time}, false)
|
||||
ScriptLib.DelWorktopOptionByGroupId(context,base_info.group_id, defs.gadget_worktop_id, local_defs.skip_sandstorm_option)
|
||||
ScriptLib.DelWorktopOptionByGroupId(context,base_info.group_id, defs.gadget_worktop_id, local_defs.start_sandstorm_option)
|
||||
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, defs.gadget_worktop_id, "SGV_Gear_Option", 2)
|
||||
ScriptLib.SetGroupVariableValue(context,"is_skipping_time",1)
|
||||
|
||||
--调用沙尘暴控制group跳过当前沙尘暴
|
||||
local sandstorm_state = ScriptLib.GetGroupVariableValueByGroup(context,"sandstorm_state",local_defs.sandstorm_control_group)
|
||||
ScriptLib.PrintContextLog(context,"## [ShelterWorktopControl]action_select_option_shelter:当前沙尘暴状态为"..sandstorm_state)
|
||||
if sandstorm_state == 2 then
|
||||
local ret = ScriptLib.ExecuteGroupLua(context, local_defs.sandstorm_control_group, "LF_Start_Sanstorm", {})
|
||||
if ret == -1 then
|
||||
ScriptLib.PrintGroupWarning(context,"## [Warning] [ShelterWorktopControl] action_select_option_shelter:调用控制group的开启沙尘暴天气功能失败")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_time_axis_pass_shelter(context,evt)
|
||||
ScriptLib.PrintContextLog(context,"## [ShelterWorktopControl]action_time_axis_pass_shelter:时间轴tick,给精灵台座恢复选项")
|
||||
local chain_level = ScriptLib.GetChainLevel(context, ScriptLib.GetSceneOwnerUid(context), local_defs.chain_id)
|
||||
if chain_level >= local_defs.unlock_worktop_level then
|
||||
LF_Set_Worktop_Option(context)
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, defs.gadget_worktop_id, "SGV_Gear_Option", 0)
|
||||
ScriptLib.SetGroupVariableValue(context,"is_skipping_time",0)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 玩法流程控制 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| CRUD方法 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 杂项方法 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
function LF_Set_Worktop_Option(context)
|
||||
local chain_level = ScriptLib.GetChainLevel(context, ScriptLib.GetSceneOwnerUid(context), local_defs.chain_id)
|
||||
if chain_level >= local_defs.unlock_worktop_level then
|
||||
local sandstorm_state = ScriptLib.GetGroupVariableValueByGroup(context,"sandstorm_state",local_defs.sandstorm_control_group)
|
||||
--在沙尘暴中
|
||||
if sandstorm_state == 1 then
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, defs.gadget_worktop_id, {local_defs.skip_sandstorm_option})
|
||||
ScriptLib.DelWorktopOptionByGroupId(context,base_info.group_id, defs.gadget_worktop_id, local_defs.start_sandstorm_option)
|
||||
end
|
||||
if sandstorm_state == 2 then
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, defs.gadget_worktop_id, {local_defs.start_sandstorm_option})
|
||||
ScriptLib.DelWorktopOptionByGroupId(context,base_info.group_id, defs.gadget_worktop_id, local_defs.skip_sandstorm_option)
|
||||
end
|
||||
else
|
||||
ScriptLib.DelWorktopOptionByGroupId(context,base_info.group_id, defs.gadget_worktop_id, local_defs.skip_sandstorm_option)
|
||||
ScriptLib.DelWorktopOptionByGroupId(context,base_info.group_id, defs.gadget_worktop_id, local_defs.start_sandstorm_option)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| server lua call ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
function SLC_Try_Set_Option(context)
|
||||
ScriptLib.PrintContextLog(context,"## [ShelterWorktopControl]SLC_Try_Set_Option:玩家进入台座范围,上选项")
|
||||
if ScriptLib.GetGroupVariableValue(context,"is_skipping_time") ~= 1 then
|
||||
LF_Set_Worktop_Option(context)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function SLC_Try_Remove_Option(context)
|
||||
ScriptLib.PrintContextLog(context,"## [ShelterWorktopControl]SLC_Try_Set_Option:玩家进入台座范围,没带天气精灵,下选项选项")
|
||||
ScriptLib.DelWorktopOptionByGroupId(context,base_info.group_id, defs.gadget_worktop_id, local_defs.skip_sandstorm_option)
|
||||
ScriptLib.DelWorktopOptionByGroupId(context,base_info.group_id, defs.gadget_worktop_id, local_defs.start_sandstorm_option)
|
||||
return 0
|
||||
end
|
||||
|
||||
------------------------------------------------------------------
|
||||
Initialize()
|
||||
137
gdconf/game_data_config/lua/common/V3_4/WeatherWizardControl.lua
Normal file
137
gdconf/game_data_config/lua/common/V3_4/WeatherWizardControl.lua
Normal file
@@ -0,0 +1,137 @@
|
||||
--[[======================================
|
||||
|| filename: WeatherWizardControl
|
||||
|| owner: luyao.huang
|
||||
|| description: 天气精灵控制,后续会放到ability层处理
|
||||
|| LogName: WeatherWizardControl
|
||||
|| Protection:
|
||||
=======================================]]--
|
||||
|
||||
--local defs =
|
||||
--{
|
||||
-- energy_worktop_id = 100001,
|
||||
--}
|
||||
|
||||
|
||||
------
|
||||
local local_defs = {
|
||||
max_level = 6,
|
||||
chain_id = 100005,
|
||||
energy_level_1 = 2,
|
||||
energy_amount_1 = 1,
|
||||
energy_level_2 = 5,
|
||||
energy_amount_2 = 3,
|
||||
unlock_worktop_level = 6,
|
||||
worktop_option = 5000,
|
||||
|
||||
sandstorm_state_leveltag = 21,
|
||||
sandstorm_on = 59,
|
||||
sandstorm_off = 60,
|
||||
|
||||
sandstorm_control_group = 133314001,
|
||||
|
||||
|
||||
skip_time = 8
|
||||
}
|
||||
|
||||
local wizard_Tri = {
|
||||
[10] = { name = "GM_variable_change_wizard", config_id = 35000001, event = EventType.EVENT_VARIABLE_CHANGE, source = "", condition = "", action = "action_GM_variable_change_wizard", trigger_count = 0},
|
||||
}
|
||||
|
||||
function wizard_Initialize()
|
||||
for k,v in pairs(wizard_Tri) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
|
||||
table.insert(variables,{config_id = 110000001, name = "energy_level", value = 0})
|
||||
|
||||
|
||||
table.insert(variables,{config_id = 150000001, name = "GM_Upgrade_Chain_Level", value = 0})
|
||||
table.insert(variables,{config_id = 150000002, name = "GM_Recover_Energy", value = 0})
|
||||
table.insert(variables,{config_id = 150000003, name = "GM_Set_Chain_Level", value = 0})
|
||||
end
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 触发器回调 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
function action_GM_variable_change_wizard(context,evt)
|
||||
if evt.source_name == "GM_Upgrade_Chain_Level" then
|
||||
ScriptLib.PrintContextLog(context,"## [ShelterWorktopControl]action_variable_change_shelter:升级天气精灵的等级")
|
||||
local chain_level = ScriptLib.GetChainLevel(context, ScriptLib.GetSceneOwnerUid(context), local_defs.chain_id)
|
||||
ScriptLib.PrintContextLog(context,"## [ShelterWorktopControl]action_variable_change_shelter:当前的等级为"..chain_level)
|
||||
if chain_level < local_defs.max_level then
|
||||
chain_level = chain_level + 1
|
||||
end
|
||||
|
||||
ScriptLib.PrintContextLog(context,"## [ShelterWorktopControl]action_variable_change_shelter:升级后为"..chain_level)
|
||||
ScriptLib.SetChainLevel(context, local_defs.chain_id, chain_level, true)
|
||||
ScriptLib.SetTeamServerGlobalValue(context,ScriptLib.GetSceneOwnerUid(context),"SGV_Weather_Wizard_Chain_Level",chain_level)
|
||||
|
||||
ScriptLib.SetGroupVariableValue(context,"GM_Upgrade_Chain_Level",0)
|
||||
end
|
||||
|
||||
if evt.source_name == "GM_Set_Chain_Level" then
|
||||
ScriptLib.PrintContextLog(context,"## [ShelterWorktopControl]action_variable_change_shelter:修改天气精灵的等级")
|
||||
local target_level = evt.param1
|
||||
if evt.param1 > local_defs.max_level then
|
||||
target_level = local_defs.max_level
|
||||
end
|
||||
if evt.param1 < 1 then
|
||||
target_level = 1
|
||||
end
|
||||
ScriptLib.SetChainLevel(context, local_defs.chain_id, target_level, true)
|
||||
ScriptLib.SetTeamServerGlobalValue(context,ScriptLib.GetSceneOwnerUid(context),"SGV_Weather_Wizard_Chain_Level",target_level)
|
||||
end
|
||||
|
||||
if evt.source_name == "GM_Recover_Energy" then
|
||||
ScriptLib.PrintContextLog(context,"## [ShelterWorktopControl]action_variable_change_shelter:恢复天气精灵的能量")
|
||||
SLC_Recover_Weather_Wizard_Energy(context)
|
||||
|
||||
ScriptLib.SetGroupVariableValue(context,"GM_Recover_Energy",0)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 玩法流程控制 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| CRUD方法 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 杂项方法 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| server lua call ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
|
||||
|
||||
function SLC_Update_Chain_Level(context)
|
||||
local chain_level = ScriptLib.GetChainLevel(context, ScriptLib.GetSceneOwnerUid(context), local_defs.chain_id)
|
||||
ScriptLib.SetTeamServerGlobalValue(context,ScriptLib.GetSceneOwnerUid(context),"SGV_Weather_Wizard_Chain_Level",chain_level)
|
||||
return 0
|
||||
end
|
||||
|
||||
------------------------------------------------------------------
|
||||
wizard_Initialize()
|
||||
292
gdconf/game_data_config/lua/common/V3_4/WindBall.lua
Normal file
292
gdconf/game_data_config/lua/common/V3_4/WindBall.lua
Normal file
@@ -0,0 +1,292 @@
|
||||
--[[======================================
|
||||
|| filename: WindBall
|
||||
|| owner: luyao.huang
|
||||
|| description: 风球传递玩法
|
||||
|| LogName: WindBall
|
||||
|| Protection:
|
||||
=======================================]]--
|
||||
|
||||
--local defs =
|
||||
--{
|
||||
-- gadget_worktop_id = 100001,
|
||||
--}
|
||||
|
||||
|
||||
------
|
||||
|
||||
local local_defs = {
|
||||
get_windball_option = 7,
|
||||
}
|
||||
|
||||
local state_defs =
|
||||
{
|
||||
lock = 0,
|
||||
on_worktop = 201,
|
||||
taken = 202,
|
||||
ready_enshrine = 203,
|
||||
unavailable = 204,
|
||||
finish = 901,
|
||||
}
|
||||
|
||||
local windball_state_defs =
|
||||
{
|
||||
on_worktop = 0,
|
||||
on_team = 1,
|
||||
}
|
||||
|
||||
local phase_defs =
|
||||
{
|
||||
lock = 0,
|
||||
playing = 1,
|
||||
finish = 2,
|
||||
}
|
||||
|
||||
local Tri = {
|
||||
[1] = { name = "select_option_windball", config_id = 11000001, event = EventType.EVENT_SELECT_OPTION, source = "", condition = "", action = "action_select_option_windball", trigger_count = 0},
|
||||
[2] = { name = "group_load_windball", config_id = 11000002, event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_group_load_windball", trigger_count = 0},
|
||||
[3] = { name = "gadget_state_change_windball", config_id = 11000003, event = EventType.EVENT_GADGET_STATE_CHANGE, source = "", condition = "", action = "action_gadget_state_change_windball", trigger_count = 0},
|
||||
[4] = { name = "enter_region_windball", config_id = 11000004, event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_enter_region_windball", trigger_count = 0},
|
||||
[5] = { name = "leave_region_windball", config_id = 11000005, event = EventType.EVENT_LEAVE_REGION, source = "", condition = "", action = "action_leave_region_windball", trigger_count = 0},
|
||||
}
|
||||
|
||||
function Initialize()
|
||||
for k,v in pairs(Tri) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
|
||||
table.insert(variables,{config_id = 110000001, name = "play_phase", value = 0})
|
||||
table.insert(variables,{config_id = 110000002, name = "current_worktop", value = 1})
|
||||
table.insert(variables,{config_id = 110000003, name = "windball_state", value = 0})
|
||||
end
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 触发器回调 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
function action_group_load_windball(context,evt)
|
||||
ScriptLib.PrintContextLog(context,"## [WindBall]action_group_load_windball:group加载")
|
||||
|
||||
local play_phase = ScriptLib.GetGroupVariableValue(context,"play_phase")
|
||||
|
||||
if play_phase == phase_defs.lock then
|
||||
LF_Lock_Play(context)
|
||||
end
|
||||
if play_phase == phase_defs.playing then
|
||||
LF_Unlock_Play(context)
|
||||
end
|
||||
if play_phase == phase_defs.finish then
|
||||
LF_Finish_Play(context)
|
||||
end
|
||||
LF_Unlock_Play(context)
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
function action_gadget_state_change_windball(context,evt)
|
||||
|
||||
local new_state = evt.param1
|
||||
local old_state = evt.param3
|
||||
|
||||
if new_state == state_defs.on_worktop then
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, evt.param2, {local_defs.get_windball_option})
|
||||
else
|
||||
ScriptLib.DelWorktopOptionByGroupId(context,base_info.group_id, evt.param2, local_defs.get_windball_option)
|
||||
end
|
||||
|
||||
--说明是风球被放到台座上了
|
||||
if old_state == state_defs.ready_enshrine and new_state == state_defs.on_worktop then
|
||||
ScriptLib.PrintContextLog(context,"## [WindBall]action_gadget_state_change_windball:风球放置在台座:"..evt.param2)
|
||||
LF_Current_Worktop_Increase(context)
|
||||
LF_Set_All_Worktops_State(context)
|
||||
|
||||
--如果是最后一环的风球
|
||||
if evt.param2 == windball_worktops[#windball_worktops] then
|
||||
LF_Finish_Play(context)
|
||||
end
|
||||
end
|
||||
|
||||
--说明是风球被取走
|
||||
if old_state == state_defs.ready_enshrine and new_state == state_defs.taken then
|
||||
ScriptLib.PrintContextLog(context,"## [WindBall]action_gadget_state_change_windball:风球从台座:"..evt.param2.."被取走")
|
||||
|
||||
local current_index = LF_Get_Index_From_List(context,windball_worktops,evt.param2)
|
||||
if current_index < #windball_worktops then
|
||||
ScriptLib.PrintContextLog(context,"## [WindBall]action_gadget_state_change_windball:第"..current_index.."个操作台")
|
||||
local next_worktop = windball_worktops[current_index + 1]
|
||||
local dir_index = LF_Get_Dir_Index(context,evt.param2,next_worktop)
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context,evt.param2,"SGV_Dir_Light_On",dir_index)
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--说明是出界或者到时间,风球被还回去
|
||||
if old_state == state_defs.taken and new_state == state_defs.on_worktop then
|
||||
ScriptLib.PrintContextLog(context,"## [WindBall]action_gadget_state_change_windball:风球被还回台座:"..evt.param2)
|
||||
LF_Set_All_Worktops_State(context)
|
||||
end
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
function action_select_option_windball(context,evt)
|
||||
|
||||
if evt.param2 == local_defs.get_windball_option then
|
||||
ScriptLib.PrintContextLog(context,"## [WindBall]action_select_option_windball:玩家选择选项,获取风球")
|
||||
local target_worktop = evt.param1
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context,target_worktop,"SGV_Message_Release_WindBall",1)
|
||||
|
||||
local current_index = LF_Get_Index_From_List(context,windball_worktops,target_worktop)
|
||||
local worktop_eid = ScriptLib.GetEntityIdByConfigId(context, windball_worktops[current_index+1])
|
||||
local pos = ScriptLib.GetPosByEntityId(context, worktop_eid)
|
||||
ScriptLib.CreateGadgetByConfigIdByPos(context,defs.hint_gadget_id, {x=pos.x,y=pos.y,z=pos.z}, {x=0,y=0,z=0})
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_enter_region_windball(context,evt)
|
||||
if evt.param1 == defs.region_id then
|
||||
end
|
||||
return 0
|
||||
end
|
||||
function action_leave_region_windball(context,evt)
|
||||
if evt.param1 == defs.region_id then
|
||||
LF_Change_Team_SGV(context,evt.uid,"SGV_Message_Remove_Windball",1)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 玩法流程控制 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
function LF_Unlock_Play(context)
|
||||
ScriptLib.PrintContextLog(context,"## [WindBall]LF_Unlock_Play:设置玩法阶段:进行中")
|
||||
ScriptLib.SetGroupVariableValue(context,"play_phase",phase_defs.playing)
|
||||
LF_Set_All_Worktops_State(context)
|
||||
end
|
||||
|
||||
function LF_Lock_Play(context)
|
||||
ScriptLib.PrintContextLog(context,"## [WindBall]LF_Unlock_Play:设置玩法阶段:锁定")
|
||||
ScriptLib.SetGroupVariableValue(context,"play_phase",phase_defs.lock)
|
||||
for i = 1, #windball_worktops do
|
||||
ScriptLib.SetGadgetStateByConfigId(context,windball_worktops[i],state_defs.lock)
|
||||
end
|
||||
end
|
||||
|
||||
function LF_Finish_Play(context)
|
||||
ScriptLib.PrintContextLog(context,"## [WindBall]LF_Unlock_Play:设置玩法阶段:完成")
|
||||
ScriptLib.SetGroupVariableValue(context,"play_phase",phase_defs.finish)
|
||||
for i = 1, #windball_worktops do
|
||||
ScriptLib.SetGadgetStateByConfigId(context,windball_worktops[i],state_defs.finish)
|
||||
end
|
||||
local uid = ScriptLib.GetSceneOwnerUid(context)
|
||||
LF_Change_Team_SGV(context,uid,"SGV_Message_Remove_Windball",1)
|
||||
ScriptLib.CreateGadget(context,{config_id = defs.chest_id})
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
function LF_Set_All_Worktops_State(context)
|
||||
local current_worktop = ScriptLib.GetGroupVariableValue(context,"current_worktop")
|
||||
|
||||
|
||||
ScriptLib.RemoveEntityByConfigId(context, base_info.group_id, EntityType.GADGET, defs.hint_gadget_id)
|
||||
for i = 1, #windball_worktops do
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context,windball_worktops[i],"SGV_Dir_Light_On",0)
|
||||
if (i < current_worktop) or (i > current_worktop + 1) then
|
||||
ScriptLib.SetGadgetStateByConfigId(context,windball_worktops[i],state_defs.unavailable)
|
||||
end
|
||||
if i == current_worktop then
|
||||
ScriptLib.SetGadgetStateByConfigId(context,windball_worktops[i],state_defs.on_worktop)
|
||||
end
|
||||
if i == current_worktop + 1 then
|
||||
ScriptLib.SetGadgetStateByConfigId(context,windball_worktops[i],state_defs.ready_enshrine)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function LF_Set_Current_Worktop(context,i)
|
||||
ScriptLib.SetGroupVariableValue(context,"current_worktop",i)
|
||||
end
|
||||
|
||||
function LF_Current_Worktop_Increase(context)
|
||||
ScriptLib.ChangeGroupVariableValue(context,"current_worktop",1)
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| CRUD方法 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
function LF_Get_Index_From_List(context,list,element)
|
||||
for i = 1, #list do
|
||||
if list[i] == element then
|
||||
return i
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| 杂项方法 ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
--返回以gadget_1位基准,对准gadget_2时应亮起的角标id
|
||||
function LF_Get_Dir_Index(context,gadget_1,gadget_2)
|
||||
|
||||
local eid_1 = ScriptLib.GetEntityIdByConfigId(context, gadget_1)
|
||||
local pos_1 = ScriptLib.GetPosByEntityId(context, eid_1)
|
||||
local rot_1 = ScriptLib.GetRotationByEntityId(context, eid_1)
|
||||
local eid_2 = ScriptLib.GetEntityIdByConfigId(context, gadget_2)
|
||||
local pos_2 = ScriptLib.GetPosByEntityId(context, eid_2)
|
||||
|
||||
local world_angle = math.atan(pos_2.z-pos_1.z, pos_2.x-pos_1.x)
|
||||
local local_angle = world_angle - rot_1.y
|
||||
|
||||
local index = math.ceil((local_angle + 45) / 90)
|
||||
return index
|
||||
|
||||
end
|
||||
|
||||
function LF_Change_Team_SGV(context,uid,key,delta)
|
||||
local v = ScriptLib.GetTeamServerGlobalValue(context,uid,key)
|
||||
ScriptLib.SetTeamServerGlobalValue(context,uid,key,v+delta)
|
||||
end
|
||||
|
||||
--[[-----------------------------------------------------------------
|
||||
|| ||
|
||||
|| server lua call ||
|
||||
|| ||
|
||||
-----------------------------------------------------------------]]--
|
||||
|
||||
function SLC_Remove_Team_Windball(context)
|
||||
local uid = ScriptLib.GetSceneOwnerUid(context)
|
||||
LF_Change_Team_SGV(context,uid,"SGV_Message_Remove_Windball",1)
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
|
||||
------------------------------------------------------------------
|
||||
Initialize()
|
||||
62
gdconf/game_data_config/lua/common/V3_5/Activity_Fungi.lua
Normal file
62
gdconf/game_data_config/lua/common/V3_5/Activity_Fungi.lua
Normal file
@@ -0,0 +1,62 @@
|
||||
--[[======================================
|
||||
|| filename: Activity_Fungi
|
||||
|| owner: zhangchi.chen
|
||||
|| description: 蕈兽战斗白盒
|
||||
|| LogName: TD
|
||||
|| Protection: [Protection]
|
||||
=======================================]]
|
||||
|
||||
|
||||
local extraTriggers =
|
||||
{
|
||||
--{ config_id = 40000001, name = "group_load", event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_EVENT_GROUP_LOAD", trigger_count = 0 },
|
||||
--{ config_id = 40000002, name = "select_option", event = EventType.EVENT_SELECT_OPTION, source = "", condition = "", action = "action_EVENT_SELECT_OPTION", trigger_count = 0 },
|
||||
--{ config_id = 40000003, name = "monster_die", event = EventType.EVENT_ANY_MONSTER_DIE, source = "", condition = "", action = "action_EVENT_ANY_MONSTER_DIE", trigger_count = 0 },
|
||||
}
|
||||
|
||||
------ Local Functions -----------
|
||||
function LF_Initialize_Level()
|
||||
--- TRIGGER
|
||||
for _, _trigger in pairs(extraTriggers) do
|
||||
table.insert(triggers, _trigger)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
--蕈兽放技能
|
||||
function SLC_MushroomMonsterAlertDoSkill(context)
|
||||
PrintLog(context,"蕈兽开始释放技能")
|
||||
local beast = ScriptLib.GetMonsterConfigId(context, { monster_eid = context.source_entity_id })
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, beast, "SGV_Fungus_StartBurst_Immediately",1)
|
||||
return 0
|
||||
end
|
||||
|
||||
------ conditions & actions ------
|
||||
--group加载
|
||||
|
||||
function SLC_Fungus1_Move(context)
|
||||
|
||||
ScriptLib.KillEntityByConfigId(context, { ScriptLib.GetGroupVariableValue(context, "fungi1"), entity_type=EntityType.MONSTER})
|
||||
ScriptLib.CreateMonsterByConfigIdByPos(context, ScriptLib.GetGroupVariableValue(context, "fungi1"), point[LF_GetCloestPoint(context)].pos, {0,0,0})
|
||||
return 0
|
||||
end
|
||||
|
||||
function LF_GetCloestPoint(context)
|
||||
local targetpos={0,0,0}
|
||||
local uid=ScriptLib.GetSceneUidList(context)[1]
|
||||
local avatarid=GetAvatarEntityIdByUid(context, uid)
|
||||
local avatarpos=ScriptLib.GetPosByEntityId(context,avatarid)
|
||||
local shortest_key=0
|
||||
local shortest_path_square=10000000
|
||||
for k,v in pairs(points) do
|
||||
local pathlength_square=(v.pos.x-avatarpos.x)*(v.pos.x-avatarpos.x)+(v.pos.y-avatarpos.y)*(v.pos.y-avatarpos.y)+(v.pos.z-avatarpos.z)*(v.pos.z-avatarpos.z)
|
||||
if pathlength_square<shortest_path_square then
|
||||
shortest_key=k
|
||||
end
|
||||
end
|
||||
|
||||
return shortest_key
|
||||
end
|
||||
|
||||
LF_Initialize_Level()
|
||||
155
gdconf/game_data_config/lua/common/V3_5/Activity_PacMan.lua
Normal file
155
gdconf/game_data_config/lua/common/V3_5/Activity_PacMan.lua
Normal file
@@ -0,0 +1,155 @@
|
||||
---
|
||||
--- Generated by EmmyLua(https://github.com/EmmyLua)
|
||||
--- Created by binghong.shen.
|
||||
--- DateTime: 2022/9/21 16:33
|
||||
---
|
||||
--[[======================================
|
||||
|| filename: Activity_PacMan
|
||||
|| owner: binghong.shen
|
||||
|| description: 3.5吃豆人活动
|
||||
|| LogName: PacMan
|
||||
|| Protection: [Protection]
|
||||
=======================================]]
|
||||
|
||||
--[[
|
||||
测试gm
|
||||
dungeon 91
|
||||
run_lua 251015001 function func(context) \n ScriptLib.StartGallery(context, 34001) \n end
|
||||
]]
|
||||
|
||||
|
||||
--miscs配置内容
|
||||
--[[
|
||||
defs.moveback_pointarray_id = 1
|
||||
]]
|
||||
defs.teleportPointRangeMap ={
|
||||
[1]={3,20}
|
||||
}
|
||||
|
||||
|
||||
local local_defs = {
|
||||
worktop_option = 30110,
|
||||
progress_key = 1,
|
||||
team_global_value = "FEVER_LEVEL",
|
||||
team_noswitch_pubishment = "NOSWITCH_PUNISHMENT",
|
||||
team_has_switch = "HAS_SWITCHED_TEAM",
|
||||
burn_effect_level = 2,
|
||||
environment_change_level = 1,
|
||||
base_upgrade_reminder = 358010102,
|
||||
team_noswitch_pubishment_reminder = 144,
|
||||
punish_inAdvance_reminder = 201
|
||||
}
|
||||
|
||||
|
||||
local Tri = {
|
||||
[1] = { name = "group_load", config_id = 8000001, event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_group_load", trigger_count = 0},
|
||||
[2] = { name = "gadget_talk_done", config_id = 8000002, event = EventType.EVENT_GADGETTALK_DONE, source = "", condition = "", action = "action_gadget_talk_done", trigger_count = 0},
|
||||
[3] = { name = "gallery_pre_start", config_id = 8000003, event = EventType.EVENT_GALLERY_PRE_START, source = "", condition = "", action = "action_gallery_pre_start", trigger_count = 0},
|
||||
[4] = { name = "dungeon_settle", config_id = 8000004, event = EventType.EVENT_DUNGEON_SETTLE, source = "", condition = "", action = "action_dungeon_settle", trigger_count = 0},
|
||||
[5] = { name = "gallery_stop", config_id = 8000005, event = EventType.EVENT_GALLERY_STOP, source = "", condition = "", action = "action_gallery_stop", trigger_count = 0},
|
||||
}
|
||||
|
||||
function Initialize()
|
||||
for k,v in pairs(Tri) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
|
||||
--table.insert(variables,{ config_id=50000003,name = "fever_ratio", value = 1})
|
||||
end
|
||||
|
||||
------------------------------------------------------------------
|
||||
|
||||
function action_group_load(context,evt)
|
||||
ScriptLib.PrintContextLog(context,"PacMan groupLoad")
|
||||
|
||||
return 0
|
||||
end
|
||||
function action_gadget_talk_done(context,evt)
|
||||
ScriptLib.PrintContextLog(context,"PacMan action_gadget_talk_done")
|
||||
--
|
||||
--local talkName = evt.source_name
|
||||
--local talkID = evt.param2
|
||||
--if talkID == 6800419 or talkName == 6800419 then
|
||||
-- ScriptLib.CreateGadget(context, { config_id = defs.gadget_teleport })
|
||||
--end
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_gallery_pre_start(context,evt)
|
||||
ScriptLib.PrintContextLog(context,"PacMan action_gallery_pre_start")
|
||||
|
||||
--local curGallery = evt.param1
|
||||
--ScriptLib.SetGroupTempValue(context, "curGallery", curGallery, {})
|
||||
--
|
||||
--if defs then
|
||||
-- if defs.gadget_bricks then
|
||||
-- ScriptLib.CreateGadget(context, { config_id = defs.gadget_bricks })
|
||||
-- end
|
||||
-- if defs.gadget_airWall then
|
||||
-- ScriptLib.CreateGadget(context, { config_id = defs.gadget_airWall })
|
||||
-- end
|
||||
--end
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_dungeon_settle(context,evt)
|
||||
ScriptLib.PrintContextLog(context,"PacMan action_dungeon_settle")
|
||||
--
|
||||
--local curGallery = ScriptLib.GetGroupTempValue(context, "curGallery", {})
|
||||
--ScriptLib.StopGallery(context, curGallery, true)
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_gallery_stop(context,evt)
|
||||
ScriptLib.PrintContextLog(context,"PacMan action_gallery_stop")
|
||||
--ScriptLib.RemoveEntityByConfigId(context, 0, EntityType.GADGET, defs.gadget_bricks)
|
||||
--ScriptLib.RemoveEntityByConfigId(context, 0, EntityType.GADGET, defs.gadget_airWall)
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
function SLC_TeleportBack(context)
|
||||
ScriptLib.PrintContextLog(context,"PacMan SLC_TeleportBack "..tostring(context.uid).." "..tostring(defs.moveback_pointarray_id))
|
||||
local selectedPoint = LF_GetNearPoint(context)
|
||||
if(selectedPoint~=-1)then
|
||||
ScriptLib.PrintContextLog(context,"PacMan Move Back Point "..tostring(selectedPoint))
|
||||
ScriptLib.MoveAvatarByPointArray(context, context.uid, defs.moveback_pointarray_id or 1, {selectedPoint,2,1}, {speed=10}, "{\"MarkType\":1,\"IgnoreCollisionWhenEnter\":true}")
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function LF_GetNearPoint(context)
|
||||
ScriptLib.PrintContextLog(context,"PacMan LF_GetNearPoint In")
|
||||
local selectedPoint = -1
|
||||
local avatarUid = context.uid
|
||||
local avatarEntity = ScriptLib.GetAvatarEntityIdByUid(context, avatarUid)
|
||||
if avatarEntity==0 then
|
||||
return selectedPoint
|
||||
end
|
||||
local avatarPoint = ScriptLib.GetPosByEntityId(context, avatarEntity)
|
||||
local pointRangeMin = defs.teleportPointRangeMap[defs.moveback_pointarray_id][1]
|
||||
local pointRangeMax = defs.teleportPointRangeMap[defs.moveback_pointarray_id][2]
|
||||
local curPointDistance = 100000
|
||||
for i = pointRangeMin, pointRangeMax do
|
||||
local arrayPointRet,arrayPointPos,arrayPointRot=ScriptLib.GetPlatformArrayInfoByPointId(context, defs.moveback_pointarray_id, i)
|
||||
if(arrayPointRet~=-1)then
|
||||
local deltaX = arrayPointPos.x - avatarPoint.x
|
||||
local deltaY = arrayPointPos.y - avatarPoint.y
|
||||
local deltaZ = arrayPointPos.z - avatarPoint.z
|
||||
local distance = deltaX*deltaX + deltaY*deltaY + deltaZ*deltaZ
|
||||
if(distance<curPointDistance)then
|
||||
selectedPoint = i
|
||||
curPointDistance = distance
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return selectedPoint
|
||||
end
|
||||
|
||||
|
||||
------------------------------------------------------------------
|
||||
Initialize()
|
||||
|
||||
99
gdconf/game_data_config/lua/common/V3_6/CodedLock.lua
Normal file
99
gdconf/game_data_config/lua/common/V3_6/CodedLock.lua
Normal file
@@ -0,0 +1,99 @@
|
||||
--ServerUploadTool Save to [/root/env/data/lua/common/V3_4]
|
||||
--======================================================================================================================
|
||||
--|| Filename || CodedLock
|
||||
--|| RelVersion || V3_4
|
||||
--|| Owner || chao-jin
|
||||
--|| Description ||
|
||||
--|| LogName || ##[CodedLock]
|
||||
--|| Protection || 3.6版本的能量开关
|
||||
--======================================================================================================================
|
||||
--Defs & Miscs
|
||||
--[[
|
||||
local defs = {
|
||||
opt_id = 91004,
|
||||
rotor_top = 91003,
|
||||
rotor_mid = 91002,
|
||||
rotor_bot = 91001,
|
||||
reminder_success = 400112,
|
||||
}
|
||||
local rotor_map = {
|
||||
[91001] = {init_state = 1, end_state = 3},
|
||||
[91002] = {init_state = 3, end_state = 2},
|
||||
[91003] = {init_state = 4, end_state = 4},
|
||||
}
|
||||
]]
|
||||
local CodedLock_Triggers = {
|
||||
[1] = { name = "group_load", config_id = 8001001, event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_group_load", trigger_count = 0},
|
||||
[2] = { name = "select_option", config_id = 8001002, event = EventType.EVENT_SELECT_OPTION, source = "", condition = "", action = "action_select_option", trigger_count = 0},
|
||||
[3] = { name = "gadget_state_change", config_id = 8001003, event = EventType.EVENT_GADGET_STATE_CHANGE, source = "", condition = "", action = "action_gadget_state_change", trigger_count = 0},
|
||||
|
||||
}
|
||||
|
||||
function CodedLock_Initialize()
|
||||
for k,v in pairs(CodedLock_Triggers) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
table.insert(variables,{ config_id = 50000001,name = "Finished", value = 0, no_refresh = true})
|
||||
end
|
||||
--======================================================================================================================
|
||||
--Events
|
||||
function action_group_load(context, evt)
|
||||
if 0 ~= ScriptLib.GetGroupVariableValue(context, "Finished") then
|
||||
return 0
|
||||
end
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, defs.opt_id, {811,812,813})
|
||||
for rotor_id,infos in pairs(rotor_map) do
|
||||
ScriptLib.SetGadgetStateByConfigId(context, rotor_id, (infos.init_state-1))
|
||||
for i=1,4 do
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, rotor_id, "SGV_Surface0"..i, 0)
|
||||
end
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, rotor_id, "SGV_Surface0"..infos.init_state, 1)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_select_option(context, evt)
|
||||
if evt.param2 == 811 then
|
||||
LF_RotateRotor(context, defs.rotor_top)
|
||||
end
|
||||
if evt.param2 == 812 then
|
||||
LF_RotateRotor(context, defs.rotor_mid)
|
||||
end
|
||||
if evt.param2 == 813 then
|
||||
LF_RotateRotor(context, defs.rotor_bot)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_gadget_state_change(context, evt)
|
||||
if rotor_map[defs.rotor_top].end_state-1 == ScriptLib.GetGadgetStateByConfigId(context, base_info.group_id, defs.rotor_top) and
|
||||
rotor_map[defs.rotor_mid].end_state-1 == ScriptLib.GetGadgetStateByConfigId(context, base_info.group_id, defs.rotor_mid) and
|
||||
rotor_map[defs.rotor_bot].end_state-1 == ScriptLib.GetGadgetStateByConfigId(context, base_info.group_id, defs.rotor_bot) then
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, defs.opt_id, {})
|
||||
ScriptLib.ShowReminder(context, defs.reminder_success)
|
||||
ScriptLib.SetGroupVariableValue(context, "Finished", 1)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
|
||||
--======================================================================================================================
|
||||
--LevelFunctions
|
||||
--旋转转子
|
||||
function LF_RotateRotor(context, rotor_id)
|
||||
for i=1,4 do
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, rotor_id, "SGV_Surface0"..i, 0)
|
||||
end
|
||||
local rotor_state = ScriptLib.GetGadgetStateByConfigId(context, base_info.group_id, rotor_id)
|
||||
if rotor_state < 3 then
|
||||
ScriptLib.SetGadgetStateByConfigId(context, rotor_id, rotor_state+1)
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, rotor_id, "SGV_Surface0"..(rotor_state+2), 1)
|
||||
else
|
||||
ScriptLib.SetGadgetStateByConfigId(context, rotor_id, 0)
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, rotor_id, "SGV_Surface01", 1)
|
||||
end
|
||||
end
|
||||
|
||||
CodedLock_Initialize()
|
||||
134
gdconf/game_data_config/lua/common/V3_6/DrumRegexp.lua
Normal file
134
gdconf/game_data_config/lua/common/V3_6/DrumRegexp.lua
Normal file
@@ -0,0 +1,134 @@
|
||||
--ServerUploadTool Save to [/root/env/data/lua/common/V3_4]
|
||||
--======================================================================================================================
|
||||
--|| Filename || DrumRegexp
|
||||
--|| RelVersion || V3_4
|
||||
--|| Owner || chao-jin
|
||||
--|| Description ||
|
||||
--|| LogName || ##[DrumRegexp]
|
||||
--|| Protection ||
|
||||
--======================================================================================================================
|
||||
--Defs & Miscs
|
||||
local defs = {
|
||||
drum = 800001,
|
||||
reminder_success = 400112,
|
||||
reminder_fail = 400113,
|
||||
}
|
||||
|
||||
--local music_list = {"100110100101","110101011101","101010011101"}
|
||||
local music_list = {"11001","11101"}
|
||||
local music_len = 5
|
||||
|
||||
--======================================================================================================================
|
||||
--Events
|
||||
local DrumRegexp_Triggers = {
|
||||
[1] = { name = "group_load", config_id = 8002001, event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_group_load", trigger_count = 0},
|
||||
}
|
||||
|
||||
function DrumRegexp_Initialize()
|
||||
for k,v in pairs(DrumRegexp_Triggers) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
end
|
||||
|
||||
DrumRegexp_Initialize()
|
||||
|
||||
--加载Group时的操作
|
||||
function action_group_load(context, evt)
|
||||
ScriptLib.PrintContextLog(context, "##[DrumRegexp]:加载敲鼓玩法Group")
|
||||
LF_ResetBeatMark(context)
|
||||
return 0
|
||||
end
|
||||
|
||||
--======================================================================================================================
|
||||
--LevelFunctions
|
||||
--玩家攻击敲鼓的SLC
|
||||
function SLC_DrumPercussReg(context, beat_time)
|
||||
--[[
|
||||
if 0 ~= ScriptLib.GetGadgetStateByConfigId(context, base_info.group_id, defs.drum) then
|
||||
ScriptLib.PrintContextLog(context, "##[DrumRegexp]: 已经完成了")
|
||||
return 0
|
||||
end
|
||||
]]
|
||||
if beat_time > 1 then
|
||||
ScriptLib.PrintContextLog(context, "##[DrumRegexp]:在一个区间内敲击了多次,直接失败")
|
||||
LF_RegexpPlayFail(context)
|
||||
return 0
|
||||
end
|
||||
ScriptLib.PrintContextLog(context, "##[DrumRegexp]:敲鼓SLC,敲鼓次数"..beat_time)
|
||||
local reg_dec = ScriptLib.GetGroupTempValue(context, "RegDec", {})
|
||||
local reg_bin = LF_DecToBinStr(reg_dec)
|
||||
reg_bin = reg_bin..(math.ceil(beat_time))
|
||||
ScriptLib.PrintContextLog(context, "##[DrumRegexp]:当前谱"..reg_bin)
|
||||
if string.len(reg_bin) == 5 then
|
||||
for i=1,2 do
|
||||
if music_list[i] == reg_bin then
|
||||
LF_RegexpPlaySuccess(context)
|
||||
return 0
|
||||
end
|
||||
end
|
||||
LF_RegexpPlayFail(context)
|
||||
return 0
|
||||
end
|
||||
ScriptLib.SetGroupTempValue(context, "RegDec", LF_BinStrToDec(reg_bin), {})
|
||||
return 0
|
||||
end
|
||||
|
||||
--玩家长时间未敲鼓的SLC
|
||||
function SLC_DrumPercussRegEnd(context)
|
||||
--[[
|
||||
if 0 ~= ScriptLib.GetGadgetStateByConfigId(context, base_info.group_id, defs.drum) then
|
||||
ScriptLib.PrintContextLog(context, "##[DrumRegexp]: 已经完成了")
|
||||
return 0
|
||||
end
|
||||
]]
|
||||
ScriptLib.PrintContextLog(context, "##[DrumRegexp]:超时未敲鼓,失败")
|
||||
LF_RegexpPlayFail(context)
|
||||
return 0
|
||||
end
|
||||
|
||||
--初始化鼓的敲击标记
|
||||
function LF_ResetBeatMark(context)
|
||||
ScriptLib.PrintContextLog(context, "##[DrumRegexp]:初始化节拍监听变量")
|
||||
ScriptLib.SetGroupTempValue(context, "RegDec", 1, {}) --记录当前匹配到的列表
|
||||
end
|
||||
|
||||
--演奏成功
|
||||
function LF_RegexpPlaySuccess(context)
|
||||
ScriptLib.PrintContextLog(context, "##[DrumRegexp]:演奏成功")
|
||||
LF_ResetBeatMark(context)
|
||||
ScriptLib.SetGadgetStateByConfigId(context, defs.drum, 201)
|
||||
ScriptLib.ShowReminder(context, defs.reminder_success)
|
||||
end
|
||||
|
||||
--演奏失败
|
||||
function LF_RegexpPlayFail(context)
|
||||
ScriptLib.PrintContextLog(context, "##[DrumRegexp]:演奏失败")
|
||||
LF_ResetBeatMark(context)
|
||||
ScriptLib.ShowReminder(context, defs.reminder_fail)
|
||||
end
|
||||
|
||||
--把信息从十进制转成二进制的字符串
|
||||
function LF_DecToBinStr(dec_num)
|
||||
--转进制,字符的长度做一定的限制
|
||||
local bin_str = ""
|
||||
dec_num = math.ceil(dec_num)
|
||||
for i=1,16 do
|
||||
if dec_num ~= 0 then
|
||||
bin_str = bin_str..(dec_num%2)
|
||||
dec_num = math.floor(dec_num/2)
|
||||
else
|
||||
return string.reverse(bin_str)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--把二进制字符串变成十进制
|
||||
function LF_BinStrToDec(bin_str)
|
||||
local len = string.len(bin_str)
|
||||
local dec_num = 0
|
||||
for i=1,len do
|
||||
dec_num = dec_num + (2^(len-i))*tonumber(string.sub(bin_str,i,i))
|
||||
end
|
||||
return dec_num
|
||||
end
|
||||
197
gdconf/game_data_config/lua/common/V3_6/DrumSingle.lua
Normal file
197
gdconf/game_data_config/lua/common/V3_6/DrumSingle.lua
Normal file
@@ -0,0 +1,197 @@
|
||||
--ServerUploadTool Save to [/root/env/data/lua/common/V3_4]
|
||||
--======================================================================================================================
|
||||
--|| Filename || DrumSingle
|
||||
--|| RelVersion || V3_4
|
||||
--|| Owner || chao-jin
|
||||
--|| Description || 对应Gadget 70900431
|
||||
--|| LogName || ##[DrumSingle]
|
||||
--|| Protection ||
|
||||
--======================================================================================================================
|
||||
--[[Defs & Miscs
|
||||
local defs = {
|
||||
drum = 77001, --鼓的ConfigID
|
||||
interval = 2, --敲鼓的节奏间隔
|
||||
reminder_success = 400112,
|
||||
reminder_fail = 400113,
|
||||
}
|
||||
--敲鼓的节奏, 0空 1普攻 2下落 70900431鼓ID
|
||||
local music_staff = {0,1,0,1, 1,0,1,0, 0,1,0,1}
|
||||
]]
|
||||
local OPTION = {
|
||||
SINGLE = 809,
|
||||
REGEXP = 810,
|
||||
}
|
||||
|
||||
--======================================================================================================================
|
||||
--Events
|
||||
local DrumSingle_Triggers = {
|
||||
[1] = { name = "group_load", config_id = 8001001, event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_single_group_load", trigger_count = 0},
|
||||
[2] = { name = "select_option", config_id = 8001002, event = EventType.EVENT_SELECT_OPTION, source = "", condition = "", action = "action_single_select_option", trigger_count = 0},
|
||||
[3] = { name = "time_axis_pass", config_id = 8001003, event = EventType.EVENT_TIME_AXIS_PASS, source = "", condition = "", action = "action_single_time_axis_pass", trigger_count = 0},
|
||||
[4] = { name = "enter_region", config_id = 8001004, event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_enter_region", trigger_count = 0},
|
||||
[5] = { name = "leave_region", config_id = 8001005, event = EventType.EVENT_LEAVE_REGION, source = "", condition = "", action = "action_leave_region", trigger_count = 0},
|
||||
|
||||
}
|
||||
|
||||
function DrumSingle_Initialize()
|
||||
for k,v in pairs(DrumSingle_Triggers) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
table.insert(variables,{ config_id = 50000001,name = "Finished", value = 0, no_refresh = true})
|
||||
end
|
||||
|
||||
DrumSingle_Initialize()
|
||||
|
||||
--加载Group时的操作
|
||||
function action_single_group_load(context, evt)
|
||||
ScriptLib.PrintContextLog(context, "##[DrumSingle]:加载敲鼓玩法Group")
|
||||
LF_ResetBeatMark(context)
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, defs.drum, {OPTION.SINGLE})
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_enter_region(context,evt)
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_leave_region(context,evt)
|
||||
ScriptLib.SetTeamServerGlobalValue(context, context.uid, "SGV_Drum_Play_Start", 0)
|
||||
return 0
|
||||
end
|
||||
--玩家交互开始敲鼓玩法
|
||||
function action_single_select_option(context, evt)
|
||||
--单曲模式
|
||||
if evt.param2 == OPTION.SINGLE then
|
||||
ScriptLib.PrintContextLog(context, "##[DrumSingle]:敲鼓玩法,单曲演奏模式")
|
||||
ScriptLib.SetTeamServerGlobalValue(context, context.uid, "SGV_Drum_Play_Start", 1)
|
||||
ScriptLib.SetGroupTempValue(context, "PlayMode", OPTION.SINGLE, {})
|
||||
if music_staff[1] ~= nil then
|
||||
--同步每个区间是否可以敲击
|
||||
ScriptLib.PrintContextLog(context, "##[DrumSingle]:更新鼓状态,可以敲击")
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, defs.drum, "SGV_DrumAxis", 1)
|
||||
end
|
||||
ScriptLib.InitTimeAxis(context, "MusicPlay", {defs.interval}, true)
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, defs.drum, {})
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
--检测敲击的时间轴
|
||||
function action_single_time_axis_pass(context, evt)
|
||||
if evt.source_name == "MusicPlay" then
|
||||
--处理单曲模式
|
||||
-- if OPTION.SINGLE == ScriptLib.GetGroupTempValue(context, "PlayMode", {}) then
|
||||
local pre_beat_index = ScriptLib.GetGroupTempValue(context, "BeatIndex", {})
|
||||
ScriptLib.PrintContextLog(context, "##[DrumSingle]:上一个节拍"..pre_beat_index)
|
||||
--处理上一个节拍是否错过,如果错过了就直接处理失败
|
||||
if music_staff[pre_beat_index] ~= nil then
|
||||
if music_staff[pre_beat_index] ~= ScriptLib.GetGroupTempValue(context, "LastBeatType", {}) then
|
||||
ScriptLib.PrintContextLog(context, "##[DrumSingle]: 上一个节拍 MISS")
|
||||
LF_SinglePlayFail(context)
|
||||
return 0
|
||||
end
|
||||
end
|
||||
|
||||
--初始化下一个时间段内的记录变量,更新鼓的状态
|
||||
ScriptLib.SetGroupTempValue(context, "BeatPercussed", 0, {})
|
||||
ScriptLib.SetGroupTempValue(context, "LastBeatType", 0, {})
|
||||
if music_staff[pre_beat_index+1] ~= nil then
|
||||
--同步下一个区间可以敲击
|
||||
ScriptLib.PrintContextLog(context, "##[DrumSingle]:更新鼓状态,可以敲击")
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, defs.drum, "SGV_DrumAxis", pre_beat_index+1)
|
||||
else
|
||||
ScriptLib.PrintContextLog(context, "##[DrumSingle]:没有下一个节拍了,成功")
|
||||
LF_SinglePlaySuccess(context)
|
||||
end
|
||||
|
||||
-- end
|
||||
ScriptLib.PrintContextLog(context, "##[DrumSingle]:节拍+1")
|
||||
ScriptLib.ChangeGroupTempValue(context, "BeatIndex", 1, {})
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
--======================================================================================================================
|
||||
--LevelFunctions
|
||||
--玩家攻击敲鼓的SLC
|
||||
function SLC_DrumPercussSingle(context, beat_timing, beat_type)
|
||||
local play_mode = ScriptLib.GetGroupTempValue(context, "PlayMode", {})
|
||||
if play_mode == 0 then
|
||||
ScriptLib.PrintContextLog(context, "##[DrumSingle]:演奏未开始,不处理敲击事件")
|
||||
return 0
|
||||
end
|
||||
ScriptLib.PrintContextLog(context, "##[DrumSingle]:[SLC]敲鼓")
|
||||
|
||||
--获取是否进行过敲击
|
||||
local has_percussed = ScriptLib.GetGroupTempValue(context, "BeatPercussed", {})
|
||||
if 0 ~= ScriptLib.GetGroupTempValue(context, "BeatPercussed", {}) then
|
||||
ScriptLib.PrintContextLog(context, "##[DrumSingle]:当前节拍重复敲击,失败")
|
||||
LF_SinglePlayFail(context)
|
||||
return 0
|
||||
end
|
||||
ScriptLib.SetGroupTempValue(context, "LastBeatType", beat_type, {})
|
||||
--获取当前的敲击序列
|
||||
local staff_index = ScriptLib.GetGroupTempValue(context, "BeatIndex", {})
|
||||
--单曲模式校验
|
||||
if play_mode == OPTION.SINGLE then
|
||||
if music_staff[staff_index] ~= 0 then
|
||||
if beat_timing == 0 then
|
||||
ScriptLib.PrintContextLog(context, "##[DrumSingle]:未在敲击区间内敲击,失败")
|
||||
LF_SinglePlayFail(context)
|
||||
return 0
|
||||
else
|
||||
if music_staff[staff_index] ~= beat_type then
|
||||
ScriptLib.PrintContextLog(context, "##[DrumSingle]:敲击方式错误,失败"..beat_type)
|
||||
LF_SinglePlayFail(context)
|
||||
return 0
|
||||
end
|
||||
--最后一个节拍敲完
|
||||
if staff_index >= #music_staff then
|
||||
ScriptLib.PrintContextLog(context, "##[DrumSingle]:全部节拍完成")
|
||||
LF_SinglePlaySuccess(context)
|
||||
return 0
|
||||
end
|
||||
end
|
||||
else
|
||||
ScriptLib.PrintContextLog(context, "##[DrumSingle]:在非敲击节拍上进行敲击,失败处理")
|
||||
LF_SinglePlayFail(context)
|
||||
return 0
|
||||
end
|
||||
end
|
||||
--标记进行过敲击
|
||||
ScriptLib.SetGroupTempValue(context, "BeatPercussed", 1, {})
|
||||
return 0
|
||||
end
|
||||
|
||||
--初始化鼓的敲击标记
|
||||
function LF_ResetBeatMark(context)
|
||||
ScriptLib.PrintContextLog(context, "##[DrumSingle]:初始化节拍监听变量")
|
||||
ScriptLib.SetGroupTempValue(context, "BeatIndex", 1, {}) --记录当前需要查询的节拍
|
||||
ScriptLib.SetGroupTempValue(context, "BeatPercussed", 0, {}) --当前节拍是否敲击过(同一个节拍只能敲击一次)
|
||||
ScriptLib.SetGroupTempValue(context, "PlayMode", 0, {}) --当前的敲击模式是哪一种
|
||||
ScriptLib.SetGroupTempValue(context, "LastBeatType", 0, {})
|
||||
--设置鼓的SGV
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, defs.drum, "SGV_DrumAxis", 0)
|
||||
end
|
||||
|
||||
--演奏成功
|
||||
function LF_SinglePlaySuccess(context)
|
||||
ScriptLib.PrintContextLog(context, "##[DrumSingle]:演奏成功")
|
||||
ScriptLib.EndTimeAxis(context, "MusicPlay")
|
||||
LF_ResetBeatMark(context)
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, defs.drum, {OPTION.SINGLE})
|
||||
ScriptLib.ShowReminder(context, defs.reminder_success)
|
||||
ScriptLib.SetGroupVariableValue(context, "Finished", 1)
|
||||
end
|
||||
|
||||
--演奏失败
|
||||
function LF_SinglePlayFail(context)
|
||||
ScriptLib.PrintContextLog(context, "##[DrumSingle]:演奏失败")
|
||||
ScriptLib.EndTimeAxis(context, "MusicPlay")
|
||||
ScriptLib.SetTeamServerGlobalValue(context, context.uid, "SGV_Drum_Play_Start", 0)
|
||||
LF_ResetBeatMark(context)
|
||||
--失败则初始化操作台
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, defs.drum, {OPTION.SINGLE})
|
||||
ScriptLib.ShowReminder(context, defs.reminder_fail)
|
||||
end
|
||||
205
gdconf/game_data_config/lua/common/V3_6/EnergyPillar.lua
Normal file
205
gdconf/game_data_config/lua/common/V3_6/EnergyPillar.lua
Normal file
@@ -0,0 +1,205 @@
|
||||
--ServerUploadTool Save to [/root/env/data/lua/common/V3_4]
|
||||
--======================================================================================================================
|
||||
--|| Filename || EnergyPillar
|
||||
--|| RelVersion || V3_4
|
||||
--|| Owner || chao-jin
|
||||
--|| Description ||
|
||||
--|| LogName || ##[EnergyPillar]
|
||||
--|| Protection ||
|
||||
--======================================================================================================================
|
||||
--Defs & Miscs
|
||||
local defs = {
|
||||
pillar_top = 90003,
|
||||
pillar_mid = 90002,
|
||||
pillar_bot = 90001,
|
||||
operator_1 = 90004,
|
||||
operator_2 = 90005,
|
||||
operator_3 = 90006,
|
||||
}
|
||||
|
||||
local pillar_decals = {
|
||||
[90001] = {"E","F","F"},
|
||||
[90002] = {"C","D","C"},
|
||||
[90003] = {"A","B","A"},
|
||||
}
|
||||
|
||||
local pillar_answers = {
|
||||
[1] = "FCA",
|
||||
[2] = "ECB",
|
||||
[3] = "FDA",
|
||||
}
|
||||
|
||||
local pillar_state_map = {
|
||||
[90004] ={ {state = 0, sgv = "SGV_Surface01"}, {state = 1, sgv = "SGV_Surface02"},{state = 2, sgv = "SGV_Surface03"}},
|
||||
[90005] ={ {state = 0, sgv = "SGV_Surface02"}, {state = 1, sgv = "SGV_Surface03"},{state = 2, sgv = "SGV_Surface01"}},
|
||||
[90006] ={ {state = 0, sgv = "SGV_Surface03"}, {state = 1, sgv = "SGV_Surface01"},{state = 2, sgv = "SGV_Surface02"}},
|
||||
}
|
||||
|
||||
local OPTION = {
|
||||
TOP = 811,
|
||||
MID = 812,
|
||||
BOT = 813,
|
||||
}
|
||||
--======================================================================================================================
|
||||
local EP_Triggers = {
|
||||
{ name = "group_load", config_id = 8000101, event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_group_load", trigger_count = 0 },
|
||||
{ name = "select_option", config_id = 8000102, event = EventType.EVENT_SELECT_OPTION, source = "", condition = "", action = "action_select_option", trigger_count = 0 },
|
||||
}
|
||||
--Events
|
||||
function action_group_load(context, evt)
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, defs.operator_1, {811,812,813})
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, defs.operator_2, {811,812,813})
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, defs.operator_3, {811,812,813})
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
function action_select_option(context, evt)
|
||||
--处理电源的开关
|
||||
if evt.param2 == OPTION.TOP then
|
||||
LF_TurnPillar(context, defs.pillar_top)
|
||||
LF_CheckCombine(context)
|
||||
end
|
||||
if evt.param2 == OPTION.MID then
|
||||
LF_TurnPillar(context, defs.pillar_mid)
|
||||
LF_CheckCombine(context)
|
||||
end
|
||||
if evt.param2 == OPTION.BOT then
|
||||
LF_TurnPillar(context, defs.pillar_bot)
|
||||
LF_CheckCombine(context)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_gadget_state_change(context, evt)
|
||||
return 0
|
||||
end
|
||||
|
||||
--======================================================================================================================
|
||||
--LevelFunctions
|
||||
function LF_TurnPillar(context, pillar_id)
|
||||
local gadget_state = ScriptLib.GetGadgetStateByConfigId(context, base_info.group_id, pillar_id)
|
||||
if gadget_state == 0 then
|
||||
ScriptLib.SetGadgetStateByConfigId(context, pillar_id, 1)
|
||||
return 0
|
||||
end
|
||||
if gadget_state == 1 then
|
||||
ScriptLib.SetGadgetStateByConfigId(context, pillar_id, 2)
|
||||
return 0
|
||||
end
|
||||
if gadget_state == 2 then
|
||||
ScriptLib.SetGadgetStateByConfigId(context, pillar_id, 0)
|
||||
return 0
|
||||
end
|
||||
end
|
||||
|
||||
--通过gadgetstate来拿一个转子的排列顺序,以State0的初始方向为基准
|
||||
function LF_GetPillarDecalSeq(context, pillar_id)
|
||||
local state_pillar = ScriptLib.GetGadgetStateByConfigId(context, base_info.group_id, pillar_id)
|
||||
if state_pillar == 0 then
|
||||
return {
|
||||
{decal = pillar_decals[pillar_id][1], sgv_key = "SGV_Surface01", p_id = pillar_id},
|
||||
{decal = pillar_decals[pillar_id][2], sgv_key = "SGV_Surface02", p_id = pillar_id},
|
||||
{decal = pillar_decals[pillar_id][3], sgv_key = "SGV_Surface03", p_id = pillar_id},
|
||||
}
|
||||
end
|
||||
if state_pillar == 1 then
|
||||
return {
|
||||
{decal = pillar_decals[pillar_id][2], sgv_key = "SGV_Surface02", p_id = pillar_id},
|
||||
{decal = pillar_decals[pillar_id][3], sgv_key = "SGV_Surface03", p_id = pillar_id},
|
||||
{decal = pillar_decals[pillar_id][1], sgv_key = "SGV_Surface01", p_id = pillar_id},
|
||||
}
|
||||
end
|
||||
if state_pillar == 2 then
|
||||
return {
|
||||
{decal = pillar_decals[pillar_id][3], sgv_key = "SGV_Surface03", p_id = pillar_id},
|
||||
{decal = pillar_decals[pillar_id][1], sgv_key = "SGV_Surface01", p_id = pillar_id},
|
||||
{decal = pillar_decals[pillar_id][2], sgv_key = "SGV_Surface02", p_id = pillar_id},
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
function LF_CheckCombine(context)
|
||||
--先把所有的面全部重置为0
|
||||
for pillar_id,v in pairs(pillar_decals) do
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, pillar_id, "SGV_Surface01", 0)
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, pillar_id, "SGV_Surface02", 0)
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, pillar_id, "SGV_Surface03", 0)
|
||||
end
|
||||
--拿到每个转子的状态
|
||||
local pillar_map = {}
|
||||
|
||||
for pillar_id, decal_str in pairs(pillar_decals) do
|
||||
table.insert( pillar_map, LF_GetPillarDecalSeq(context, pillar_id))
|
||||
end
|
||||
--[[
|
||||
local pillar_map = {
|
||||
[1] = { --转子1
|
||||
{decal = a, sgv_key = 1, p_id = 1},
|
||||
{decal = b, sgv_key = 2, p_id = 1},
|
||||
{decal = a, sgv_key = 3, p_id = 1},
|
||||
},
|
||||
[2] = { --转子2
|
||||
{decal = c, sgv_key = 1, p_id = 2},
|
||||
{decal = d, sgv_key = 2, p_id = 2},
|
||||
{decal = c, sgv_key = 3, p_id = 2},
|
||||
},
|
||||
[3] = { --转子3
|
||||
{decal = e, sgv_key = 1, p_id = 3},
|
||||
{decal = f, sgv_key = 2, p_id = 3},
|
||||
{decal = f, sgv_key = 3, p_id = 3},
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
]]
|
||||
--把三个转子的纵向面连接起来,做一个StringList
|
||||
local pillar_combines = {}
|
||||
for i=1,3 do
|
||||
pillar_combines[i] = pillar_map[1][i].decal..pillar_map[2][i].decal..pillar_map[3][i].decal
|
||||
end
|
||||
local right_indexs = {}
|
||||
|
||||
--每个StringList去和解做比较,符合解就把这组压到答案组里
|
||||
for i=1,3 do
|
||||
for j=1,3 do
|
||||
if pillar_combines[i] == pillar_answers[j] then
|
||||
table.insert(right_indexs, i)
|
||||
end
|
||||
end
|
||||
end
|
||||
--没有匹配的返回
|
||||
if #right_indexs == 0 then
|
||||
return 0
|
||||
else
|
||||
--有匹配的就会去找对应的面
|
||||
if #right_indexs < 3 then
|
||||
for i=1,#right_indexs do
|
||||
local idx = right_indexs[i]
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, pillar_map[1][idx].p_id, pillar_map[1][idx].sgv_key, 1)
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, pillar_map[2][idx].p_id, pillar_map[2][idx].sgv_key, 1)
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, pillar_map[3][idx].p_id, pillar_map[3][idx].sgv_key, 1)
|
||||
end
|
||||
end
|
||||
if #right_indexs == 3 then
|
||||
for pillar_id,v in pairs(pillar_decals) do
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, pillar_id, "SGV_Surface01", 1)
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, pillar_id, "SGV_Surface02", 1)
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, pillar_id, "SGV_Surface03", 1)
|
||||
end
|
||||
ScriptLib.SetGroupVariableValue(context, "Finished", 1)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--初始化
|
||||
function EP_Initialize()
|
||||
for k,v in pairs(EP_Triggers) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
table.insert(variables,{ config_id = 50000001,name = "Finished", value = 0, no_refresh = true})
|
||||
end
|
||||
|
||||
EP_Initialize()
|
||||
825
gdconf/game_data_config/lua/common/V3_6/EnergyTransform.lua
Normal file
825
gdconf/game_data_config/lua/common/V3_6/EnergyTransform.lua
Normal file
@@ -0,0 +1,825 @@
|
||||
--ServerUploadTool Save to [/root/env/data/lua/common/V3_4]
|
||||
--======================================================================================================================
|
||||
--|| Filename || EnergyTransform
|
||||
--|| RelVersion || V3_4
|
||||
--|| Owner || chao-jin
|
||||
--|| Description || 重构的能量传递Require
|
||||
--|| LogName || ##[EnergyTrans]
|
||||
--|| Protection ||
|
||||
--======================================================================================================================
|
||||
--Defs & Miscs
|
||||
--[[
|
||||
local DIR = {Up = 0,Right = 1,Down = 2,Left = 3,None = 4,}
|
||||
--转换器的列表,1表示可移动
|
||||
local defs = {
|
||||
pointarray_id = 110200028, --点阵ID
|
||||
graph_num = 1,
|
||||
len_x = 7, --长度
|
||||
len_z = 9, --高度
|
||||
rot_y = 0, --偏转角
|
||||
reminder_push_warning = 400095, --无法推动的reminder
|
||||
}
|
||||
local converter_infos = {[71017] = 2,[71022] = 1,[71039] = 1,[71040] = 1}
|
||||
--0->断路 |-1 电源| 1-> 可停留节点| 1.5 -> 可能存在结晶的节点| 2 -> 电线 | 2.5-> 结晶块 |
|
||||
--3-> 接收器 | 4 -> 中继器 | 4.5 -> 对位中继器输入
|
||||
|
||||
local connected_graph = {
|
||||
[9] = { 1, 2, 2, 2, 1, 2, 1},
|
||||
[8] = { 0, 0, 0, 0, 0, 0, 2},
|
||||
[7] = { 1, 2, 3, 0, -1, 0, 1},
|
||||
[6] = { 2, 0, 0, 0, 2, 0, 2},
|
||||
[5] = { 1, 2, 1, 2, 1, 2, 1},
|
||||
[4] = { 0, 0, 2, 0, 0, 0, 2},
|
||||
[3] = { 1, 2, 1, 2,2.5, 2, 1},
|
||||
[2] = { 2, 0, 0, 0, 0, 0, 2},
|
||||
[1] = { 3, 0, 0, 0, 0, 0,-1},
|
||||
}
|
||||
|
||||
--与节点图一一对应,点阵中 点的位置
|
||||
local waypoint_graph = {
|
||||
[9] = {10, 0, 0, 0, 6, 0, 5},
|
||||
[8] = { 0, 0, 0, 0, 0, 0, 0},
|
||||
[7] = {11, 0, 0, 0, 0, 0, 4},
|
||||
[6] = { 0, 0, 0, 0, 0, 0, 0},
|
||||
[5] = {12, 0, 9, 0, 7, 0, 3},
|
||||
[4] = { 0, 0, 0, 0, 0, 0, 0},
|
||||
[3] = {13, 0, 8, 0, 5, 0, 2},
|
||||
[2] = { 0, 0, 0, 0, 0, 0, 0},
|
||||
[1] = { 0, 0, 0, 0, 0, 0, 1},
|
||||
}
|
||||
|
||||
local gadget_graph ={
|
||||
[9] = { 71035, 71024, 71024, 71024, 71028, 71006, 71027},
|
||||
[8] = { 0, 0, 0, 0, 0, 0, 71005},
|
||||
[7] = { 71029, 71013, 71019, 0, 71021, 0, 71036},
|
||||
[6] = { 71014, 0, 0, 0, 71020, 0, 71004},
|
||||
[5] = { 71030, 71012, 71031, 71011, 71034, 71010, 71026},
|
||||
[4] = { 0, 0, 71023, 0, 0, 0, 71003},
|
||||
[3] = { 71033, 71015, 71032, 71008, 71009, 71007, 71025},
|
||||
[2] = { 71016, 0, 0, 0, 0, 0, 71002},
|
||||
[1] = { 71018, 0, 0, 0, 0, 0, 71001},
|
||||
}
|
||||
|
||||
--点阵和每个点的POS,用来在恢复的时候创建Gadget
|
||||
local waypoint_pos = {
|
||||
[1] = {x=1996.51245, y=197.46463, z=-1265.03467},
|
||||
[2] = {x=2000.27747, y=197.637466, z=-1269.03479},
|
||||
[3] = {x=2004.44043, y=197.682251, z=-1273.08423},
|
||||
[4] = {x=2008.35669, y=198.132111, z=-1276.61426},
|
||||
[5] = {x=2011.79822, y=198.469543, z=-1280.75232},
|
||||
[6] = {x=2016.40918, y=198.902481, z=-1275.91077},
|
||||
[7] = {x=2008.25366, y=198.260834, z=-1268.04431},
|
||||
[8] = {x=2008.5968, y=198.515762, z=-1260.09985},
|
||||
[9] = {x=2012.65173, y=198.5158, z=-1264.41284},
|
||||
[10] = {x=2025.0188, y=199.691757, z=-1267.24316},
|
||||
[11] = {x=2020.85693, y=198.902466, z=-1263.183},
|
||||
[12] = {x=2017.17883, y=198.681519, z=-1260.414},
|
||||
[13] = {x=2013.269, y=198.889435, z=-1255.92017},
|
||||
}
|
||||
|
||||
--定义左下角原点、X轴、Z轴正方向的点,通过向量计算位置关系
|
||||
local axis_O = {x = 2009, z = -1252}
|
||||
local axis_Z = {x = 2013, z = -1256}
|
||||
local axis_X = {x = 2003, z = -1258}
|
||||
|
||||
|
||||
--发射器的位置以及朝向,发射器的状态
|
||||
local emitter_infos = {
|
||||
[71001] = {z = 1, x = 7, dir = DIR.Up},
|
||||
[71021] = {z = 7, x = 5, dir = DIR.Down},
|
||||
}
|
||||
|
||||
local receiver_infos = {
|
||||
[71018] = {r_type = "Rec", connect_gadget = {71037} },
|
||||
[71019] = {r_type = "Rec", connect_gadget = {71038} },
|
||||
}
|
||||
]]
|
||||
--======================================================================================================================
|
||||
--全局变量,不需要LD处理,仅在Require内部使用
|
||||
local _G_pipe_route = {} --电路的流向合集
|
||||
local _G_pipe_state= {}
|
||||
local _G_ec_dir = 0 --电流的方向,每次递归计算的时候会用
|
||||
local _G_recur_counter = 0 --递归计数器
|
||||
local _G_cvt_graph = {} --在递归时建立的临时表,减少遍历次数
|
||||
local OPTION = {ROTATE = 31,START = 7,STOP = 72,PUSH = 193,}
|
||||
--0->断路 |-1 电源| 1-> 可停留节点| 1.5 -> 可能存在结晶的节点| 2 -> 电线 | 2.5-> 结晶块 |
|
||||
--3-> 接收器 | 4 -> 中继器 | 4.5 -> 对位中继器输入
|
||||
local NODE = {Off = 0,Power = -1,N_Node = 1,C_Node = 1.5, N_Pipe = 2, Crystal = 2.5, N_Rec = 3,C_Rec = 3.5,Sy_P_Node = 4,Sy_R_Node = 4.5}
|
||||
--======================================================================================================================
|
||||
--Events
|
||||
local ET_Triggers = {
|
||||
{ name = "group_load", config_id = 8000101, event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_group_load", trigger_count = 0 },
|
||||
{ name = "select_option", config_id = 8000102, event = EventType.EVENT_SELECT_OPTION, source = "", condition = "", action = "action_select_option", trigger_count = 0 },
|
||||
{ name = "time_axis_pass", config_id = 8000103, event = EventType.EVENT_TIME_AXIS_PASS, source = "", condition = "", action = "action_time_axis_pass", trigger_count = 0 },
|
||||
{ name = "platform_reach",config_id = 8000104, event = EventType.EVENT_PLATFORM_ARRIVAL, source = "", condition = "", action = "action_platform_arrival", trigger_count = 0 },
|
||||
}
|
||||
|
||||
--初始化
|
||||
function ET_Initialize()
|
||||
for k,v in pairs(ET_Triggers) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
end
|
||||
--Events
|
||||
function action_group_load(context, evt)
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:Group 加载完毕")
|
||||
--确认每个电源的状态,修改按键信息,1代表物件结晶化,物件需要在加载完成的时候同步一次状态
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:打开电源操作台操作")
|
||||
for emitter_id,infos in pairs(emitter_infos) do
|
||||
--物件没有结晶化,给选项
|
||||
if 0 == ScriptLib.GetGadgetAbilityFloatValue(context, base_info.group_id, emitter_id, "GV_TMHY_CRYSTAL") then
|
||||
if 0 == ScriptLib.GetGadgetStateByConfigId(context, base_info.group_id, emitter_id) then
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, emitter_id, {OPTION.STOP})
|
||||
ScriptLib.SetGroupTempValue(context, "GenState"..emitter_id, 1, {base_info.group_id})
|
||||
end
|
||||
if 201 == ScriptLib.GetGadgetStateByConfigId(context, base_info.group_id, emitter_id) then
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, emitter_id, {OPTION.START})
|
||||
ScriptLib.SetGroupTempValue(context, "GenState"..emitter_id, 0, {base_info.group_id})
|
||||
end
|
||||
else
|
||||
--物件结晶化了,选项关掉
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, emitter_id, {})
|
||||
ScriptLib.SetGroupTempValue(context, "GenState"..emitter_id, 0, {base_info.group_id})
|
||||
end
|
||||
end
|
||||
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:开始创建转换器")
|
||||
local _cvt_graph = LF_RefreshGlobalConverterList(context)
|
||||
for cvt_id,cvt_info in pairs(_cvt_graph) do
|
||||
local waypoint = waypoint_graph[cvt_info.z][cvt_info.x]
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:转换器"..cvt_id.."对应路点"..waypoint)
|
||||
--创建转换器,设置方向
|
||||
ScriptLib.CreateGadgetByConfigIdByPos(context, cvt_id, waypoint_pos[waypoint], {x = 0, y = defs.rot_y, z = 0})
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:创建转换器"..cvt_id)
|
||||
ScriptLib.SetGadgetStateByConfigId(context, cvt_id, cvt_info.dir)
|
||||
--可移动的转换器
|
||||
if cvt_info.cvt_type == 1 then
|
||||
if 0 == ScriptLib.GetGadgetAbilityFloatValue(context, base_info.group_id, cvt_id, "GV_TMHY_CRYSTAL") then
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, cvt_id, {OPTION.ROTATE, OPTION.PUSH})
|
||||
end
|
||||
end
|
||||
--不可移动的转换器
|
||||
if cvt_info.cvt_type == 2 then
|
||||
if 0 == ScriptLib.GetGadgetAbilityFloatValue(context, base_info.group_id, cvt_id, "GV_TMHY_CRYSTAL") then
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, cvt_id, {OPTION.ROTATE})
|
||||
end
|
||||
end
|
||||
end
|
||||
LF_CheckConnection(context)
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_select_option(context, evt)
|
||||
--处理电源的开关
|
||||
if emitter_infos[evt.param1] ~= nil and evt.param2 == OPTION.START then
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:打开电源")
|
||||
-- ScriptLib.SetEntityServerGlobalValueByConfigId(context, evt.param1, "SGV_PowerOn", 1)
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, evt.param1, {OPTION.STOP})
|
||||
ScriptLib.SetGadgetStateByConfigId(context, evt.param1, 201)
|
||||
ScriptLib.SetGroupTempValue(context, "GenState"..evt.param1, 1, {base_info.group_id})
|
||||
LF_CheckConnection(context)
|
||||
end
|
||||
if emitter_infos[evt.param1] ~= nil and evt.param2 == OPTION.STOP then
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:关闭电源")
|
||||
-- ScriptLib.SetEntityServerGlobalValueByConfigId(context, evt.param1, "SGV_PowerOn", 0)
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, evt.param1, {OPTION.START})
|
||||
ScriptLib.SetGadgetStateByConfigId(context, evt.param1, 0)
|
||||
ScriptLib.SetGroupTempValue(context, "GenState"..evt.param1, 0, {base_info.group_id})
|
||||
LF_CheckConnection(context)
|
||||
end
|
||||
|
||||
--处理中继器的旋转
|
||||
if converter_infos[evt.param1] ~= nil and evt.param2 == OPTION.ROTATE then
|
||||
--判断结晶化
|
||||
if 1 == ScriptLib.GetGadgetAbilityFloatValue(context, base_info.group_id, evt.param1, "GV_TMHY_CRYSTAL") then
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:电桩结晶化了,不能旋转")
|
||||
ScriptLib.ShowReminder(context, defs.reminder_push_warning)
|
||||
end
|
||||
local rotate_state = ScriptLib.GetGadgetStateByConfigId(context, base_info.group_id, evt.param1)
|
||||
-- ScriptLib.PrintContextLog(context, "##[EnergyTrans]:旋转中继器,旋转前方向"..rotate_state)
|
||||
if rotate_state == 3 then
|
||||
rotate_state = 0
|
||||
else
|
||||
rotate_state = rotate_state + 1
|
||||
end
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:旋转中继器,更新方向"..rotate_state)
|
||||
--更新当前电桩的朝向
|
||||
LF_LockConverterOperations(context, true)
|
||||
ScriptLib.SetGadgetStateByConfigId(context, evt.param1, rotate_state)
|
||||
LF_SetConverterData(context, evt.param1, "Gadget_State", rotate_state)
|
||||
ScriptLib.InitTimeAxis(context, tostring(evt.param1), {1}, false)
|
||||
end
|
||||
|
||||
--处理推动电桩,只有类型1的电桩才会推动
|
||||
if converter_infos[evt.param1] ~= nil and converter_infos[evt.param1] == 1 and evt.param2 == OPTION.PUSH then
|
||||
if 1 == ScriptLib.GetGadgetAbilityFloatValue(context, base_info.group_id, evt.param1, "GV_TMHY_CRYSTAL") then
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:电桩结晶化了,不能移动")
|
||||
ScriptLib.ShowReminder(context, defs.reminder_push_warning)
|
||||
end
|
||||
--按照玩家和电桩的相对位置推动电桩
|
||||
local push_dir = LF_CalcDirection(context, context.uid, evt.param1)
|
||||
local path = LF_GetMovePath(context, evt.param1, push_dir)
|
||||
if path ~= 0 then
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:推动中继器"..path[1].."to"..path[2])
|
||||
ScriptLib.SetPlatformPointArray(context, evt.param1, defs.pointarray_id, path, { route_type = 0})
|
||||
else
|
||||
ScriptLib.ShowReminder(context, defs.reminder_push_warning)
|
||||
end
|
||||
LF_LockConverterOperations(context, true)
|
||||
ScriptLib.InitTimeAxis(context, tostring(evt.param1), {1}, false)
|
||||
end
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
--电桩旋转过程完成,检测电路连通和恢复电桩操作
|
||||
function action_time_axis_pass(context, evt)
|
||||
LF_CheckConnection(context)
|
||||
LF_LockConverterOperations(context, false)
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:操作时点完成,TimeAxis结束")
|
||||
return 0
|
||||
end
|
||||
|
||||
--电桩到达目标位置
|
||||
function action_platform_arrival( context, evt)
|
||||
--到达的柱子是这组Group里的
|
||||
if nil == converter_infos[evt.param1] then
|
||||
return -1
|
||||
end
|
||||
--到的不是目标点
|
||||
if evt.param3 ~= ScriptLib.GetGroupTempValue(context, "Move_Target_Point", {}) then
|
||||
return -1
|
||||
end
|
||||
local pos = LF_GetWaypointPos(evt.param3)
|
||||
--更新当前电桩的信息
|
||||
LF_SetConverterData( context, evt.param1, "Gadget_Pos", {pos_z = pos[1] ,pos_x = pos[2]})
|
||||
LF_CheckConnection(context)
|
||||
return 0
|
||||
end
|
||||
--======================================================================================================================
|
||||
--ServerLuaCalls
|
||||
--电桩从结晶化恢复时,通知Group恢复操作
|
||||
function SLC_CVTCrystallizeOff(context)
|
||||
local cvt_cfg_id = ScriptLib.GetGadgetConfigId(context, {gadget_eid = context.source_entity_id})
|
||||
if converter_infos[cvt_cfg_id] == 1 then
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, cvt_cfg_id, {OPTION.PUSH, OPTION.ROTATE})
|
||||
end
|
||||
if converter_infos[cvt_cfg_id] == 2 then
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, cvt_cfg_id, {OPTION.ROTATE})
|
||||
end
|
||||
LF_CheckConnection(context)
|
||||
return 0
|
||||
end
|
||||
|
||||
--电桩结晶化,通知Group关闭操作
|
||||
function SLC_CVTCrystallizeOn(context)
|
||||
local cvt_cfg_id = ScriptLib.GetGadgetConfigId(context, {gadget_eid = context.source_entity_id})
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, cvt_cfg_id, {})
|
||||
LF_CheckConnection(context)
|
||||
return 0
|
||||
end
|
||||
|
||||
--电源结晶相关SLC
|
||||
function SLC_GeneratorCrystalStateChange(context, is_crystallized)
|
||||
local gen_cfg_id = ScriptLib.GetGadgetConfigId(context, {gadget_eid = context.source_entity_id})
|
||||
--结晶化时关掉开关的选项
|
||||
if 1 == is_crystallized then
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[电源SLC]电源结晶")
|
||||
ScriptLib.SetGroupTempValue(context, "GenState"..gen_cfg_id, 0, {base_info.group_id})
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, gen_cfg_id, {})
|
||||
if 201 == ScriptLib.GetGadgetStateByConfigId(context, base_info.group_id, gen_cfg_id) then
|
||||
--相当于关闭电源,走一遍遍历
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[电源SLC]关闭电路")
|
||||
LF_CheckConnection(context)
|
||||
end
|
||||
end
|
||||
if 0 == is_crystallized then
|
||||
--电源没打开,仍然是断路
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[电源SLC]电源结晶解除")
|
||||
if 0 == ScriptLib.GetGadgetStateByConfigId(context, base_info.group_id, gen_cfg_id) then
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, gen_cfg_id, { OPTION.START })
|
||||
else
|
||||
--相当于电源打开了,重新连通
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[电源SLC]打开电路")
|
||||
ScriptLib.SetGroupTempValue(context, "GenState"..gen_cfg_id, 1, {base_info.group_id})
|
||||
LF_CheckConnection(context)
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, gen_cfg_id, { OPTION.STOP })
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
--电桩结晶相关SLC
|
||||
function SLC_ConverterCrystalStateChange(context, is_crystallized)
|
||||
local cvt_cfg_id = ScriptLib.GetGadgetConfigId(context, {gadget_eid = context.source_entity_id})
|
||||
|
||||
--结晶化时关掉旋转的选项
|
||||
if 1 == is_crystallized then
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[中继器]中继器结晶")
|
||||
LF_CheckConnection(context)
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, cvt_cfg_id, {})
|
||||
end
|
||||
if 0 == is_crystallized then
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[中继器]中继器解除结晶")
|
||||
LF_CheckConnection(context)
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, cvt_cfg_id, {OPTION.ROTATE})
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
--接收器相关SLC,结晶和结晶化解除时都要发
|
||||
function SLC_ReceiverCrystalStateChange(context, is_crystallized)
|
||||
--结晶化时关掉旋转的选项
|
||||
LF_CheckConnection(context)
|
||||
return 0
|
||||
end
|
||||
|
||||
--对位中继器相关SLC,结晶和结晶化解除时都要发
|
||||
function SLC_ReceiverCrystalStateChange(context, is_crystallized)
|
||||
local sync_cfg_id = ScriptLib.GetGadgetConfigId(context, {gadget_eid = context.source_entity_id})
|
||||
LF_CheckConnection(context)
|
||||
return 0
|
||||
end
|
||||
--======================================================================================================================
|
||||
--LevelFunctions
|
||||
--更新所有转换器的位置信息,使用一个全局表处理,每次使用时需要重置此表
|
||||
function LF_RefreshGlobalConverterList(context)
|
||||
local _cvt_graph = {}
|
||||
-- ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[电桩]创建电桩列表")
|
||||
for config_id,cvt_type in pairs(converter_infos) do
|
||||
_cvt_graph[config_id] = LF_GetConverterData(context, config_id)
|
||||
-- ScriptLib.PrintContextLog(context, "##[EnergyTrans]:转换器"..config_id.."z".._cvt_graph[config_id].z.."x".._cvt_graph[config_id].x)
|
||||
end
|
||||
return _cvt_graph
|
||||
end
|
||||
|
||||
--开关全部的电桩选项
|
||||
function LF_LockConverterOperations(context, is_lock)
|
||||
if is_lock then
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[电桩]关闭全部中转器操作")
|
||||
for cvt_id,info in pairs(converter_infos) do
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, cvt_id, {})
|
||||
end
|
||||
else
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[电桩]打开全部中转器操作")
|
||||
for cvt_id,info in pairs(converter_infos) do
|
||||
--校验结晶化
|
||||
if 0 == ScriptLib.GetGadgetAbilityFloatValue(context, base_info.group_id, cvt_id, "GV_TMHY_CRYSTAL") then
|
||||
if info == 1 then
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, cvt_id, {OPTION.ROTATE, OPTION.PUSH})
|
||||
end
|
||||
if info == 2 then
|
||||
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, cvt_id, {OPTION.ROTATE})
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
--======================================================================================================================
|
||||
--电桩移动相关
|
||||
--获取电桩的移动路点列表
|
||||
function LF_GetMovePath(context, cvt_id, push_dir)
|
||||
local _cvt_graph = LF_RefreshGlobalConverterList(context)
|
||||
local pos_z = _cvt_graph[cvt_id].z
|
||||
local pos_x = _cvt_graph[cvt_id].x
|
||||
local cur_point = waypoint_graph[pos_z][pos_x]
|
||||
--走到下一个可以停留的点为止
|
||||
for i=1,defs.len_x do
|
||||
if push_dir == DIR.Up then
|
||||
pos_z = pos_z + 1
|
||||
end
|
||||
if push_dir == DIR.Down then
|
||||
pos_z = pos_z - 1
|
||||
end
|
||||
if push_dir == DIR.Left then
|
||||
pos_x = pos_x - 1
|
||||
end
|
||||
if push_dir == DIR.Right then
|
||||
pos_x = pos_x + 1
|
||||
end
|
||||
--检查是否越界,越界则直接返回
|
||||
if pos_z < 1 or pos_z > defs.len_z then
|
||||
-- ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[电桩]Z坐标越界")
|
||||
return 0
|
||||
end
|
||||
if pos_x < 1 or pos_x > defs.len_x then
|
||||
-- ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[电桩]X坐标越界")
|
||||
return 0
|
||||
end
|
||||
--找到下一个去的点信息
|
||||
if connected_graph[pos_z][pos_x] == NODE.Off or connected_graph[pos_z][pos_x] == NODE.Power or
|
||||
connected_graph[pos_z][pos_x] == NODE.N_Rec or connected_graph[pos_z][pos_x] == NODE.C_Rec or
|
||||
connected_graph[pos_z][pos_x] == NODE.Sy_P_Node or connected_graph[pos_z][pos_x] == NODE.Sy_R_Node then
|
||||
-- ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[电桩]前方是短路/终点/起点,停止检查")
|
||||
return 0
|
||||
end
|
||||
if connected_graph[pos_z][pos_x] == NODE.N_Pipe then
|
||||
-- ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[电桩]可以移动到中间点".."Z_"..pos_z.."X_"..pos_x)
|
||||
end
|
||||
if connected_graph[pos_z][pos_x] == NODE.Crystal then
|
||||
if LF_IsGadgetCrystal(context, gadget_graph[pos_z][pos_x]) then
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[电桩]检查中间有结晶挡住")
|
||||
return 0
|
||||
else
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[电桩]检查中间没有结晶挡住")
|
||||
end
|
||||
end
|
||||
--节点检测
|
||||
if connected_graph[pos_z][pos_x] == NODE.C_Node or connected_graph[pos_z][pos_x] == NODE.N_Node then
|
||||
-- ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[电桩]可以移动到停留点".."Z_"..pos_z.."X_"..pos_x)
|
||||
if not LF_IsGadgetCrystal(context, gadget_graph[pos_z][pos_x]) then
|
||||
for k,v in pairs(_cvt_graph) do
|
||||
if v.z == pos_z and v.x == pos_x then
|
||||
-- ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[电桩]目标点有一个电桩了,不移动")
|
||||
return 0
|
||||
end
|
||||
end
|
||||
--记录一下目标点
|
||||
ScriptLib.SetGroupTempValue(context, "Move_Target_Point", waypoint_graph[pos_z][pos_x], {})
|
||||
return {cur_point, waypoint_graph[pos_z][pos_x]}
|
||||
else
|
||||
return 0
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
--根据点的位置获取xz坐标
|
||||
function LF_GetWaypointPos(point_id)
|
||||
for z = 1,defs.len_z do
|
||||
for x = 1,defs.len_x do
|
||||
if waypoint_graph[z][x] == point_id then
|
||||
return {z,x}
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--======================================================================================================================
|
||||
--全量检查当前电路的连接情况
|
||||
function LF_CheckConnection(context)
|
||||
--每个电源都走一个递归检测逻辑
|
||||
--递归次数清零
|
||||
local _cvt_graph = LF_RefreshGlobalConverterList(context)
|
||||
--建立一个每个电线的状态表,记为0 关闭
|
||||
for z = 1, defs.len_z do
|
||||
_G_pipe_state[z] = {}
|
||||
for x = 1, defs.len_x do
|
||||
_G_pipe_state[z][x] = 0
|
||||
end
|
||||
end
|
||||
|
||||
for emt_id,emt_pos in pairs(emitter_infos) do
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[检查连接]检查电路连通,起点"..emt_id)
|
||||
--更新电流方向
|
||||
_G_ec_dir = emt_pos.dir
|
||||
_G_recur_counter = 0
|
||||
--检测一下电源的状态,
|
||||
if LF_IsGeneratorOn(context, emt_id) then
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[检查连接]开始打开电线")
|
||||
LF_RunEC(context, emt_pos, true, _cvt_graph)
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[检查连接]检查完成")
|
||||
else
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[检查连接]开始关闭电线")
|
||||
LF_RunEC(context, emt_pos, false, _cvt_graph)
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[检查连接]检查完成")
|
||||
end
|
||||
end
|
||||
|
||||
--刷新所有电线状态
|
||||
for z=1,defs.len_z do
|
||||
for x=1,defs.len_x do
|
||||
if gadget_graph[z][x] ~= 0 then
|
||||
if connected_graph[z][x] == NODE.N_Pipe or connected_graph[z][x] == NODE.N_Node then
|
||||
if _G_pipe_state[z][x] > 0 then
|
||||
ScriptLib.SetGadgetStateByConfigId(context, gadget_graph[z][x], 201)
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[检查连接]刷新物件状态"..gadget_graph[z][x])
|
||||
else
|
||||
ScriptLib.SetGadgetStateByConfigId(context, gadget_graph[z][x], 0)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--从一个点出发,更新电流信息,递归处理
|
||||
function LF_RunEC(context, ec_pos, is_on, _cvt_graph)
|
||||
_G_recur_counter = _G_recur_counter + 1
|
||||
if _G_recur_counter >= defs.len_x*defs.len_z then
|
||||
return false
|
||||
end
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[电流]步长".._G_recur_counter.."电流方向".._G_ec_dir.."当前位置z"..ec_pos.z.."当前位置x"..ec_pos.x)
|
||||
for cfg_id,cvt_pos in pairs(_cvt_graph) do
|
||||
--找有没有对应的转接器
|
||||
if cvt_pos.x == ec_pos.x and cvt_pos.z == ec_pos.z then
|
||||
--判断电桩有没有结晶化
|
||||
if 0 ~= ScriptLib.GetGadgetAbilityFloatValue(context, base_info.group_id, cfg_id, "GV_TMHY_CRYSTAL") then
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[电流]走到了一个结晶化的电桩")
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, cfg_id, "SGV_PowerOn", 0)
|
||||
return false
|
||||
end
|
||||
--更新一下电流方向
|
||||
_G_ec_dir = cvt_pos.dir
|
||||
--更新电桩状态
|
||||
if is_on then
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, cfg_id, "SGV_PowerOn", 1)
|
||||
else
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, cfg_id, "SGV_PowerOn", 0)
|
||||
end
|
||||
end
|
||||
end
|
||||
--获取电流的所在节点
|
||||
local pos_x = ec_pos.x
|
||||
local pos_z = ec_pos.z
|
||||
--根据方向流动电流
|
||||
if _G_ec_dir == DIR.Up then
|
||||
pos_z = pos_z + 1
|
||||
end
|
||||
if _G_ec_dir == DIR.Down then
|
||||
pos_z = pos_z - 1
|
||||
end
|
||||
if _G_ec_dir == DIR.Left then
|
||||
pos_x = pos_x - 1
|
||||
end
|
||||
if _G_ec_dir == DIR.Right then
|
||||
pos_x = pos_x + 1
|
||||
end
|
||||
--检查是否越界,越界检查尝试转弯
|
||||
if pos_z < 1 or pos_z > defs.len_z or pos_x < 1 or pos_x > defs.len_x then
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[电流]走到了尽头,尝试拐弯")
|
||||
local try_turn_ec = LF_TurnEcDir(context, ec_pos)
|
||||
if try_turn_ec.dir == DIR.None then
|
||||
return false
|
||||
else
|
||||
_G_ec_dir = try_turn_ec.dir
|
||||
return LF_RunEC(context, ec_pos, is_on, _cvt_graph)
|
||||
end
|
||||
end
|
||||
--下一个点的信息判断
|
||||
if connected_graph[pos_z][pos_x] == NODE.Off then
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[电流]走到了断路,尝试拐弯")
|
||||
local try_turn_ec = LF_TurnEcDir(context, ec_pos)
|
||||
if try_turn_ec.dir == DIR.None then
|
||||
return false
|
||||
else
|
||||
_G_ec_dir = try_turn_ec.dir
|
||||
return LF_RunEC(context, ec_pos, is_on, _cvt_graph)
|
||||
end
|
||||
end
|
||||
|
||||
if connected_graph[pos_z][pos_x] == NODE.Power then
|
||||
return false
|
||||
end
|
||||
|
||||
if connected_graph[pos_z][pos_x] == NODE.N_Pipe then
|
||||
if is_on then
|
||||
_G_pipe_state[pos_z][pos_x] = _G_pipe_state[pos_z][pos_x] + 1
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[电流]记录电线打开"..gadget_graph[pos_z][pos_x])
|
||||
end
|
||||
return LF_RunEC(context, {z = pos_z,x = pos_x}, is_on, _cvt_graph)
|
||||
end
|
||||
|
||||
if connected_graph[pos_z][pos_x] == NODE.C_Node or connected_graph[pos_z][pos_x] == NODE.N_Node then
|
||||
--确认节点有没有结晶化
|
||||
if LF_IsGadgetCrystal(context,gadget_graph[pos_z][pos_x]) then
|
||||
--如果是打开,就给这个位置的标记+1
|
||||
if is_on then
|
||||
_G_pipe_state[pos_z][pos_x] = _G_pipe_state[pos_z][pos_x] + 1
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[电流]记录节点打开")
|
||||
end
|
||||
end
|
||||
return LF_RunEC(context, {z = pos_z,x = pos_x}, is_on, _cvt_graph)
|
||||
end
|
||||
|
||||
if connected_graph[pos_z][pos_x] == NODE.Crystal then
|
||||
if LF_IsGadgetCrystal(context, gadget_graph[pos_z][pos_x]) then
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[电流]走到了结晶")
|
||||
return false
|
||||
else
|
||||
LF_RunEC(context, {z = pos_z,x = pos_x}, is_on, _cvt_graph)
|
||||
end
|
||||
end
|
||||
--到达了接收器
|
||||
if connected_graph[pos_z][pos_x] == NODE.N_Rec or connected_graph[pos_z][pos_x] == NODE.C_Rec then
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[电流]到达终点")
|
||||
if LF_IsGadgetCrystal(context, gadget_graph[pos_z][pos_x]) then
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[电流]到达终点,终点被结晶化,连接失败")
|
||||
return false
|
||||
else
|
||||
if is_on then
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[电流]接收器打开")
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, gadget_graph[pos_z][pos_x], "SGV_PowerOn", 1)
|
||||
ScriptLib.SetGadgetStateByConfigId(context, gadget_graph[pos_z][pos_x], 201)
|
||||
else
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[电流]接收器关闭")
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, gadget_graph[pos_z][pos_x], "SGV_PowerOn", 0)
|
||||
ScriptLib.SetGadgetStateByConfigId(context, gadget_graph[pos_z][pos_x], 0)
|
||||
end
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[电流]连接完毕")
|
||||
return true
|
||||
end
|
||||
end
|
||||
if connected_graph[pos_z][pos_x] == NODE.Sy_P_Node or connected_graph[pos_z][pos_x] == NODE.Sy_C_Node then
|
||||
-- ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[电流]到达终点")
|
||||
if LF_IsGadgetCrystal(context, gadget_graph[pos_z][pos_x]) then
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[电流]到达终点,终点被结晶化,连接失败")
|
||||
return false
|
||||
else
|
||||
if is_on then
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, gadget_graph[pos_z][pos_x], "SGV_PowerOn", 1)
|
||||
else
|
||||
ScriptLib.SetEntityServerGlobalValueByConfigId(context, gadget_graph[pos_z][pos_x], "SGV_PowerOn", 0)
|
||||
end
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[电路]连接完毕")
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--电流在走到头时自动检测是否转向
|
||||
function LF_TurnEcDir(context, cur_pos)
|
||||
--原来的电流是上下的,尝试左右移动
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[电流]尝试扭转电流")
|
||||
local can_turn_dir = 0
|
||||
if _G_ec_dir == DIR.Up or _G_ec_dir == DIR.Down then
|
||||
--尝试向右转动电流
|
||||
if (cur_pos.x + 1) <= defs.len_x and (cur_pos.x + 1) >= 1 then
|
||||
if connected_graph[cur_pos.z][cur_pos.x + 1] >= 1 then
|
||||
can_turn_dir = can_turn_dir + 1
|
||||
end
|
||||
end
|
||||
--尝试向左转动电流
|
||||
if (cur_pos.x - 1) >= 1 and (cur_pos.x - 1) <= defs.len_x then
|
||||
if connected_graph[cur_pos.z][cur_pos.x - 1] >= 1 then
|
||||
can_turn_dir = can_turn_dir + 10
|
||||
end
|
||||
end
|
||||
--电流上下都没法转或者都能转
|
||||
if can_turn_dir == 11 or can_turn_dir == 0 then
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[电流]不转")
|
||||
return {dir = DIR.None,z = cur_pos.z, x = cur_pos.x}
|
||||
else
|
||||
if can_turn_dir == 1 then
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[电流]右转")
|
||||
return {dir = DIR.Right,z = cur_pos.z,x = cur_pos.x + 1}
|
||||
end
|
||||
if can_turn_dir == 10 then
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[电流]左转")
|
||||
return {dir = DIR.Left,z = cur_pos.z,x = cur_pos.x - 1}
|
||||
end
|
||||
end
|
||||
end
|
||||
if _G_ec_dir == DIR.Left or _G_ec_dir == DIR.Right then
|
||||
--尝试向上转动电流
|
||||
if (cur_pos.z + 1) <= defs.len_z and (cur_pos.z + 1) >= 1 then
|
||||
if connected_graph[cur_pos.z+1][cur_pos.x] >= 1 then
|
||||
can_turn_dir = can_turn_dir + 1
|
||||
end
|
||||
end
|
||||
--尝试向下转动电流
|
||||
if (cur_pos.z - 1) >= 1 and (cur_pos.z - 1) <= defs.len_z then
|
||||
if connected_graph[cur_pos.z-1][cur_pos.x] >= 1 then
|
||||
can_turn_dir = can_turn_dir + 10
|
||||
end
|
||||
end
|
||||
--电流上下都没法转或者都能转
|
||||
if can_turn_dir == 11 or can_turn_dir == 0 then
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[电流]不转")
|
||||
return {dir = DIR.None, z = cur_pos.z, x = cur_pos.x }
|
||||
else
|
||||
if can_turn_dir == 1 then
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[电流]上转")
|
||||
return {dir = DIR.Up,z = cur_pos.z + 1,x = cur_pos.x }
|
||||
end
|
||||
if can_turn_dir == 10 then
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:[电流]下转")
|
||||
return {dir = DIR.Down,z = cur_pos.z - 1,x = cur_pos.x }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
--判断一个节点或者电源是否被结晶化
|
||||
function LF_IsGadgetCrystal(context, gadget_cid)
|
||||
if 0 == ScriptLib.GetGadgetAbilityFloatValue(context, base_info.group_id, gadget_cid, "GV_TMHY_CRYSTAL") then
|
||||
return false
|
||||
else
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
--判断电源是否通电,201为电源打开,GV为0时非结晶化
|
||||
function LF_IsGeneratorOn(context, gen_id)
|
||||
if 0 == ScriptLib.GetGroupTempValue(context, "GenState"..gen_id, {base_info.group_id}) then
|
||||
return false
|
||||
else
|
||||
return true
|
||||
end
|
||||
end
|
||||
--======================================================================================================================
|
||||
|
||||
--======================================================================================================================
|
||||
--计算玩家和电桩的相对位置
|
||||
--根据玩家和电桩的坐标获取对应的夹角,计算出电桩移动的位置
|
||||
function LF_CalcDirection(context, uid, cvt_id)
|
||||
local avatar_pos = LF_GetEntityPos(context, context.uid, 0)
|
||||
local conver_pos = LF_GetEntityPos(context, 0, cvt_id)
|
||||
local vec_axis_OZ = {x = (axis_Z.x - axis_O.x), z = (axis_Z.z - axis_O.z)}
|
||||
local vec_axis_OX = {x = (axis_X.x - axis_O.x), z = (axis_X.z - axis_O.z)}
|
||||
local vec_cvt2avt = {x = (avatar_pos.x - conver_pos.x), z = (avatar_pos.z - conver_pos.z)}
|
||||
local deg_avt2OZ = LF_ClacAngle(vec_axis_OZ, vec_cvt2avt)
|
||||
local deg_avt2OX = LF_ClacAngle(vec_axis_OX, vec_cvt2avt)
|
||||
if 0 <= deg_avt2OZ and deg_avt2OZ <= 45 then
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:向后推动")
|
||||
return DIR.Down
|
||||
end
|
||||
if 45 < deg_avt2OZ and deg_avt2OZ < 135 then
|
||||
if 0 <= deg_avt2OX and deg_avt2OX <= 45 then
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:向左推动")
|
||||
return DIR.Left
|
||||
end
|
||||
if 135 <= deg_avt2OX and deg_avt2OX <= 180 then
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:向右推动")
|
||||
return DIR.Right
|
||||
end
|
||||
end
|
||||
if 135 <= deg_avt2OZ and deg_avt2OZ <= 180 then
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:向前推动")
|
||||
return DIR.Up
|
||||
end
|
||||
end
|
||||
|
||||
--计算向量夹角
|
||||
function LF_ClacAngle(vec1, vec2)
|
||||
local vec_cos = (vec1.x*vec2.x + vec1.z*vec2.z)/(math.sqrt( vec1.x^2 + vec1.z^2 )*math.sqrt( vec2.x^2 + vec2.z^2))
|
||||
return (math.acos(vec_cos)/math.pi*180)
|
||||
end
|
||||
|
||||
--拿到实体位置
|
||||
function LF_GetEntityPos(context, uid, cid)
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:获取坐标")
|
||||
local _eid = 0
|
||||
--转译entityId
|
||||
if uid ~= 0 then
|
||||
_eid = ScriptLib.GetAvatarEntityIdByUid(context, uid)
|
||||
elseif cid ~= 0 then
|
||||
_eid = ScriptLib.GetEntityIdByConfigId(context, cid)
|
||||
end
|
||||
--返回安全值,印象中直接返回_array时table里不干净
|
||||
local _array = ScriptLib.GetPosByEntityId(context, _eid)
|
||||
local _res = {}
|
||||
if _array.x == 0 and _array.y == 0 and _array.z == 0 then
|
||||
ScriptLib.PrintContextLog(context, "##[EnergyTrans]:获取坐标失败,报错")
|
||||
_res.error = 1
|
||||
return _res
|
||||
end
|
||||
_res.x = _array.x
|
||||
_res.y = _array.y
|
||||
_res.z = _array.z
|
||||
return _res
|
||||
end
|
||||
|
||||
--======================================================================================================================
|
||||
--切分和储存电桩数据
|
||||
--|移动类型 1位|GadgetState 1位|Pos_Z 2位|Pos_X 2位|
|
||||
--|1移动 2固定|State 0 1 2 3代表朝向
|
||||
--切分储存的数据
|
||||
function LF_GetConverterData(context, config_id)
|
||||
local cvt_archive_int = ScriptLib.GetGroupVariableValue(context, "converter_"..tostring(config_id))
|
||||
local cvt_archive_str = tostring(math.ceil(cvt_archive_int))
|
||||
return { cvt_type = tonumber(string.sub(cvt_archive_str,1,1)),
|
||||
dir = tonumber(string.sub(cvt_archive_str,2,2)),
|
||||
z = tonumber(string.sub(cvt_archive_str,3,4)),
|
||||
x = tonumber(string.sub(cvt_archive_str,5,6))}
|
||||
end
|
||||
|
||||
--数据储存
|
||||
function LF_SetConverterData( context, config_id, data_type, data_info)
|
||||
local cvt_archive_int = ScriptLib.GetGroupVariableValue(context, "converter_"..tostring(config_id))
|
||||
local cvt_archive_str = tostring(math.ceil(cvt_archive_int))
|
||||
local cvt_new_archive_str = ""
|
||||
if data_type == "Gadget_State" then
|
||||
cvt_new_archive_str = table.concat({string.sub(cvt_archive_str,1,1), tostring(data_info), string.sub(cvt_archive_str,3,6)})
|
||||
ScriptLib.SetGroupVariableValue(context, "converter_"..config_id, math.ceil( tonumber(cvt_new_archive_str)) )
|
||||
end
|
||||
if data_type == "Gadget_Pos" then
|
||||
local cvt_pos_new_z = ""
|
||||
local cvt_pos_new_x = ""
|
||||
if data_info.pos_z < 10 then
|
||||
cvt_pos_new_z = "0"..tostring(data_info.pos_z)
|
||||
else
|
||||
cvt_pos_new_z = tostring(data_info.pos_z)
|
||||
end
|
||||
if data_info.pos_x < 10 then
|
||||
cvt_pos_new_x = "0"..tostring(data_info.pos_x)
|
||||
else
|
||||
cvt_pos_new_x = tostring(data_info.pos_x)
|
||||
end
|
||||
cvt_new_archive_str = table.concat({string.sub(cvt_archive_str,1,2), cvt_pos_new_z, cvt_pos_new_x})
|
||||
ScriptLib.SetGroupVariableValue(context, "converter_"..config_id, math.ceil( tonumber(cvt_new_archive_str)) )
|
||||
end
|
||||
end
|
||||
--======================================================================================================================
|
||||
ET_Initialize()
|
||||
110
gdconf/game_data_config/lua/common/V3_6/PB_ChaseFeather.lua
Normal file
110
gdconf/game_data_config/lua/common/V3_6/PB_ChaseFeather.lua
Normal file
@@ -0,0 +1,110 @@
|
||||
--ServerUploadTool Save to [/root/env/data/lua/common/V3_6]
|
||||
--======================================================================================================================
|
||||
--|| Filename || PB_ChaseFeather
|
||||
--|| RelVersion || V3_6
|
||||
--|| Owner || chao-jin
|
||||
--|| Description || 追逐草神羽毛的玩法
|
||||
--|| LogName || ##[PB_ChaseFeather]
|
||||
--|| Protection ||
|
||||
--======================================================================================================================
|
||||
--Defs & Miscs || 需要LD配置的内容
|
||||
|
||||
local defs = {
|
||||
feather = 108001, --草神羽毛的ID
|
||||
pointarray_id = 110200030, --草神羽毛移动的点阵ID
|
||||
target_pos = 6, --最后的目标点
|
||||
end_suite = 2, --
|
||||
}
|
||||
|
||||
--======================================================================================================================
|
||||
--Events || Group内EVENT事件,记得初始化和return 0
|
||||
local CF_Triggers = {
|
||||
{ name = "group_load", config_id = 8000101, event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_group_load", trigger_count = 0 },
|
||||
{ name = "platform_arrival", config_id = 8000102, event = EventType.EVENT_PLATFORM_ARRIVAL, source = "", condition = "", action = "action_platform_arrival", trigger_count = 0 },
|
||||
{ name = "any_gadget_die", config_id = 8000103, event = EventType.EVENT_ANY_GADGET_DIE, source = "", condition = "", action = "action_any_gadget_die", trigger_count = 0 },
|
||||
|
||||
}
|
||||
|
||||
function CF_Initialize()
|
||||
for k,v in pairs(CF_Triggers) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
end
|
||||
|
||||
CF_Initialize()
|
||||
|
||||
function action_group_load(context, evt)
|
||||
ScriptLib.PrintContextLog(context, "##[PB_ChaseFeather.lua]:追逐羽毛Group加载,初始化")
|
||||
ScriptLib.SetGroupTempValue(context, "CurrentPos", 1, {base_info.group_id})
|
||||
ScriptLib.SetGroupTempValue(context, "TargetPos", 2, {base_info.group_id})
|
||||
ScriptLib.SetGroupTempValue(context, "ChaseStarted", 0, {base_info.group_id})
|
||||
return 0
|
||||
end
|
||||
|
||||
--羽毛到达目标点
|
||||
function action_platform_arrival(context, evt)
|
||||
if evt.param1 ~= defs.feather then
|
||||
return 0
|
||||
end
|
||||
if evt.param3 ~= ScriptLib.GetGroupTempValue(context, "TargetPos", {base_info.group_id}) then
|
||||
return 0
|
||||
end
|
||||
ScriptLib.PrintContextLog(context, "##[PB_ChaseFeather.lua]:羽毛到达目标点,更新位置信息"..evt.param3)
|
||||
if evt.param3 == defs.target_pos then
|
||||
ScriptLib.PrintContextLog(context, "##[PB_ChaseFeather.lua]:羽毛到达目标点,更新羽毛状态为可以拾取")
|
||||
ScriptLib.SetGadgetStateByConfigId(context, defs.feather, 201)
|
||||
return 0
|
||||
end
|
||||
ScriptLib.SetGroupTempValue(context, "CurrentPos", evt.param3, {base_info.group_id})
|
||||
ScriptLib.SetGroupTempValue(context, "ChaseStarted", 0, {base_info.group_id})
|
||||
return 0
|
||||
end
|
||||
|
||||
--羽毛从201状态死亡,完成玩法
|
||||
function action_any_gadget_die(context, evt)
|
||||
if evt.param1 == defs.feather then
|
||||
ScriptLib.ShowReminder(context, 400112)
|
||||
-- ScriptLib.GoToGroupSuite(context, base_info.group_id, defs.end_suite)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
--======================================================================================================================
|
||||
--ServerLuaCalls || 物件SLC,记得return 0
|
||||
--羽毛被追逐
|
||||
function SLC_BeChased(context)
|
||||
if 0 ~= ScriptLib.GetGroupTempValue(context, "ChaseStarted", {base_info.group_id}) then
|
||||
ScriptLib.PrintContextLog(context, "##[PB_ChaseFeather.lua]:羽毛正在移动")
|
||||
return 0
|
||||
end
|
||||
if 0 ~= ScriptLib.GetGadgetStateByConfigId(context, base_info.group_id, defs.feather) then
|
||||
ScriptLib.PrintContextLog(context, "##[PB_ChaseFeather.lua]:羽毛移动完成")
|
||||
return 0
|
||||
end
|
||||
|
||||
local cur_pos = ScriptLib.GetGroupTempValue(context, "CurrentPos", {base_info.group_id})
|
||||
if cur_pos == 1 then
|
||||
ScriptLib.PrintContextLog(context, "##[PB_ChaseFeather.lua]:追逐开始,闪现到目标点")
|
||||
ScriptLib.SetGroupTempValue(context, "CurrentPos", 2, {base_info.group_id})
|
||||
ScriptLib.RemoveEntityByConfigId(context, base_info.group_id, EntityType.GADGET, defs.feather)
|
||||
|
||||
local _ret,R_pos,R_rot = ScriptLib.GetPlatformArrayInfoByPointId(context, defs.pointarray_id, 2)
|
||||
local blink_pos = {x = R_pos.x, y = R_pos.y, z = R_pos.z}
|
||||
ScriptLib.CreateGadgetByConfigIdByPos(context, defs.feather, blink_pos, {x = 0, y = 0, z = 0})
|
||||
ScriptLib.PrintContextLog(context, "##[PB_ChaseFeather.lua]:闪现结束".._ret)
|
||||
return 0
|
||||
end
|
||||
ScriptLib.SetGroupTempValue(context, "ChaseStarted", 1, {base_info.group_id})
|
||||
ScriptLib.SetGroupTempValue(context, "TargetPos", cur_pos+1, {base_info.group_id})
|
||||
ScriptLib.PrintContextLog(context, "##[PB_ChaseFeather.lua]:追逐开始"..cur_pos.."to"..(cur_pos+1))
|
||||
ScriptLib.SetPlatformPointArray(context, defs.feather, defs.pointarray_id, {cur_pos, cur_pos+1}, {route_type = 0})
|
||||
ScriptLib.StartPlatform(context, defs.feather)
|
||||
return 0
|
||||
end
|
||||
|
||||
--======================================================================================================================
|
||||
--LevelFunctions || 自定义函数
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
--ServerUploadTool Save to [/root/env/data/lua/common/V3_6]
|
||||
--======================================================================================================================
|
||||
--|| Filename || PB_CollectFeatherOrb
|
||||
--|| RelVersion || V3_6
|
||||
--|| Owner || chao-jin
|
||||
--|| Description || 3.6 收集草神羽毛碎片的玩法
|
||||
--|| LogName || ##[PB_CollectFeatherOrb]
|
||||
--|| Protection ||
|
||||
--======================================================================================================================
|
||||
--Defs & Miscs || 需要LD配置的内容
|
||||
--Suite1 配置羽毛 Suite2 配置微粒
|
||||
--[[
|
||||
local defs = {
|
||||
time_limit = 20,
|
||||
feather = 106001, --羽毛的ConfigID
|
||||
orb_gadget_id = 70290729,
|
||||
orb_nums = 5,
|
||||
end_suite = 3,
|
||||
}
|
||||
]]
|
||||
--======================================================================================================================
|
||||
--Events || Group内EVENT事件,记得初始化和return 0
|
||||
local CFO_Triggers = {
|
||||
{ name = "group_load", config_id = 8000101, event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_group_load", trigger_count = 0 },
|
||||
{ name = "time_axis_pass", config_id = 8000102, event = EventType.EVENT_TIME_AXIS_PASS, source = "", condition = "", action = "action_time_axis_pass", trigger_count = 0 },
|
||||
{ name = "any_gadget_die", config_id = 8000103, event = EventType.EVENT_ANY_GADGET_DIE, source = "", condition = "", action = "action_any_gadget_die", trigger_count = 0 },
|
||||
}
|
||||
|
||||
function CFO_Initialize()
|
||||
for k,v in pairs(CFO_Triggers) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
end
|
||||
|
||||
CFO_Initialize()
|
||||
|
||||
--Group加载的时候初始化值
|
||||
function action_group_load(context, evt)
|
||||
ScriptLib.PrintContextLog(context, "##[PB_CollectFeatherOrb.lua]:Group加载记录死亡的微粒数量")
|
||||
ScriptLib.SetGroupTempValue(context, "OrbsCollectNums", 0, {base_info.group_id})
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
--收集微粒的时间轴
|
||||
function action_time_axis_pass(context, evt)
|
||||
--时间轴期间没有收集完毕微粒,玩法重置
|
||||
if evt.source_name == "CollectOrbs" then
|
||||
ScriptLib.PrintContextLog(context, "##[PB_CollectFeatherOrb.lua]:时间限制内没有收集完成全部微粒,玩法重置")
|
||||
ScriptLib.SetGroupTempValue(context, "OrbsCollectNums", 0, {base_info.group_id})
|
||||
ScriptLib.ShowReminder(context, 400113)
|
||||
ScriptLib.RefreshGroup(context, {group_id = base_info.group_id, suite = 1})
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
--检测微粒死亡
|
||||
function action_any_gadget_die(context, evt)
|
||||
ScriptLib.PrintContextLog(context, "##[PB_CollectFeatherOrb.lua]:草神羽毛微粒死亡,计数+1")
|
||||
local orb_killed_num = ScriptLib.GetGroupTempValue(context, "OrbsCollectNums", {base_info.group_id})
|
||||
ScriptLib.ChangeGroupTempValue(context, "OrbsCollectNums", 1, {base_info.group_id})
|
||||
if orb_killed_num + 1 == defs.orb_nums then
|
||||
ScriptLib.PrintContextLog(context, "##[PB_CollectFeatherOrb.lua]:草神羽毛全部死亡,完成玩法")
|
||||
-- ScriptLib.GoToGroupSuite(context, base_info.group_id, defs.end_suite)
|
||||
ScriptLib.ShowReminder(context, 400112)
|
||||
ScriptLib.EndTimeAxis(context, "CollectOrbs")
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
--======================================================================================================================
|
||||
--ServerLuaCalls || 物件SLC,记得return 0
|
||||
--靠近羽毛之后,羽毛散开,创生需要收集的结晶
|
||||
function SLC_CollectStart(context)
|
||||
ScriptLib.PrintContextLog(context, "##[PB_CollectFeatherOrb.lua]:靠近草神羽毛,玩法开始")
|
||||
ScriptLib.AddExtraGroupSuite(context, base_info.group_id, 2)
|
||||
ScriptLib.RemoveEntityByConfigId(context, base_info.group_id, EntityType.GADGET, defs.feather)
|
||||
ScriptLib.InitTimeAxis(context, "CollectOrbs", {defs.time_limit}, false)
|
||||
return 0
|
||||
end
|
||||
|
||||
--======================================================================================================================
|
||||
--LevelFunctions || 自定义函数
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
--ServerUploadTool Save to [/root/env/data/lua/common/V3_6]
|
||||
--======================================================================================================================
|
||||
--|| Filename || PB_CrystalMonster
|
||||
--|| RelVersion || V3_6
|
||||
--|| Owner || chao-jin
|
||||
--|| Description ||
|
||||
--|| LogName || ##[PB_CrystalMonster]
|
||||
--|| Protection ||
|
||||
--======================================================================================================================
|
||||
--Defs & Miscs || 需要LD配置的内容
|
||||
--[[
|
||||
local crystal_to_monster = {
|
||||
[126002] = 126001,
|
||||
[126003] = 126004,
|
||||
}
|
||||
]]
|
||||
--======================================================================================================================
|
||||
--Events || Group内EVENT事件,记得初始化和return 0
|
||||
local CM_Triggers ={
|
||||
{ name = "gadget_state_change", config_id = 8000102, event = EventType.EVENT_GADGET_STATE_CHANGE, source = "", condition = "", action = "action_gadget_state_change", trigger_count = 0 },
|
||||
}
|
||||
|
||||
function CM_Initialize()
|
||||
for k,v in pairs(CM_Triggers) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
-- table.insert(variables,{ config_id = 50000001,name = "Finished", value = 0, no_refresh = true})
|
||||
end
|
||||
|
||||
CM_Initialize()
|
||||
|
||||
function action_gadget_state_change(context, evt)
|
||||
if crystal_to_monster[evt.param2] ~= nil then
|
||||
if evt.param1 == 201 then
|
||||
ScriptLib.CreateMonster(context, { config_id = crystal_to_monster[evt.param2], delay_time = 0 })
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
--======================================================================================================================
|
||||
--ServerLuaCalls || 物件SLC,记得return 0
|
||||
|
||||
--======================================================================================================================
|
||||
--LevelFunctions || 自定义函数
|
||||
|
||||
|
||||
|
||||
78
gdconf/game_data_config/lua/common/V3_6/PB_ElfFlower.lua
Normal file
78
gdconf/game_data_config/lua/common/V3_6/PB_ElfFlower.lua
Normal file
@@ -0,0 +1,78 @@
|
||||
--ServerUploadTool Save to [/root/env/data/lua/common/V3_6]
|
||||
--======================================================================================================================
|
||||
--|| Filename || PB_ElfFlower
|
||||
--|| RelVersion || V3_6
|
||||
--|| Owner || chao-jin
|
||||
--|| Description || 精灵花朵收集玩法
|
||||
--|| LogName || ##[PB_ElfFlower]
|
||||
--|| Protection ||
|
||||
--======================================================================================================================
|
||||
--Defs & Miscs || 需要LD配置的内容
|
||||
--[[
|
||||
local defs = {
|
||||
flower_gadget_id = 70290733,
|
||||
}
|
||||
local elf_flowers = {}
|
||||
]]
|
||||
--======================================================================================================================
|
||||
--Events || Group内EVENT事件,记得初始化和return 0
|
||||
local EF_Triggers ={
|
||||
{ name = "group_load", config_id = 8000101, event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_group_load", trigger_count = 0 },
|
||||
{ name = "gadget_state_change", config_id = 8000102, event = EventType.EVENT_GADGET_STATE_CHANGE, source = "", condition = "", action = "action_gadget_state_change", trigger_count = 0 },
|
||||
{ name = "time_axis_pass", config_id = 8000103, event = EventType.EVENT_TIME_AXIS_PASS, source = "", condition = "", action = "action_time_axis_pass", trigger_count = 0 },
|
||||
}
|
||||
|
||||
function EF_Initialize()
|
||||
for k,v in pairs(EF_Triggers) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
table.insert(variables,{ config_id = 50000001,name = "Finished", value = 0, no_refresh = true})
|
||||
end
|
||||
|
||||
EF_Initialize()
|
||||
|
||||
function action_group_load(context, evt)
|
||||
ScriptLib.PrintContextLog(context, "##[PB_ElfFlower]:精灵花朵玩法加载")
|
||||
ScriptLib.SetGroupTempValue(context, "FlowerBloomed", 0, {base_info.group_id})
|
||||
return 0
|
||||
end
|
||||
|
||||
--监听花朵状态
|
||||
function action_gadget_state_change(context, evt)
|
||||
if gadgets[evt.param2].gadget_id == 70290733 and evt.param1 == 201 then
|
||||
ScriptLib.PrintContextLog(context, "##[PB_ElfFlower]: 精灵花朵状态变化")
|
||||
if #elf_flowers == ScriptLib.GetGroupTempValue(context, "FlowerBloomed", {base_info.group_id}) then
|
||||
ScriptLib.EndTimeAxis(context, "FlowerBloomTrail")
|
||||
ScriptLib.PrintContextLog(context, "##[PB_ElfFlower]:挑战完成")
|
||||
for i=1,#elf_flowers do
|
||||
ScriptLib.SetGadgetStateByConfigId(context, elf_flowers[i], 202)
|
||||
end
|
||||
ScriptLib.SetGroupVariableValue(context, "Finished", 1)
|
||||
return 0
|
||||
end
|
||||
ScriptLib.EndTimeAxis(context, "FlowerBloomTrail")
|
||||
ScriptLib.InitTimeAxis(context, "FlowerBloomTrail", {defs.time_limit}, false)
|
||||
ScriptLib.ChangeGroupTempValue(context, "FlowerBloomed", 1, {base_info.group_id})
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_time_axis_pass(context, evt)
|
||||
if evt.source_name == "FlowerBloomTrail" then
|
||||
ScriptLib.PrintContextLog(context, "##[PB_ElfFlower]:时间结束,重置Group")
|
||||
ScriptLib.SetGroupTempValue(context, "FlowerBloomed", 0, {base_info.group_id})
|
||||
for i=1,#elf_flowers do
|
||||
ScriptLib.SetGadgetStateByConfigId(context, elf_flowers[i], 0)
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
--======================================================================================================================
|
||||
--ServerLuaCalls || 物件SLC,记得return 0
|
||||
|
||||
--======================================================================================================================
|
||||
--LevelFunctions || 自定义函数
|
||||
|
||||
|
||||
|
||||
85
gdconf/game_data_config/lua/common/V3_6/PB_FireTrail.lua
Normal file
85
gdconf/game_data_config/lua/common/V3_6/PB_FireTrail.lua
Normal file
@@ -0,0 +1,85 @@
|
||||
--ServerUploadTool Save to [/root/env/data/lua/common/V3_6]
|
||||
--======================================================================================================================
|
||||
--|| Filename || PB_FireTrail
|
||||
--|| RelVersion || V3_6
|
||||
--|| Owner || chao-jin
|
||||
--|| Description ||
|
||||
--|| LogName || ##[PB_FireTrail]
|
||||
--|| Protection ||
|
||||
--======================================================================================================================
|
||||
--Defs & Miscs || 需要LD配置的内容
|
||||
--[[
|
||||
local defs = {
|
||||
fire_seed = 110001,
|
||||
time_limit = 5,
|
||||
}
|
||||
|
||||
local pillars = {110002,110003,110004,110005,110006}
|
||||
]]
|
||||
--======================================================================================================================
|
||||
--Events || Group内EVENT事件,记得初始化和return 0
|
||||
local FT_Triggers ={
|
||||
{ name = "group_load", config_id = 8000101, event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_group_load", trigger_count = 0 },
|
||||
{ name = "gadget_state_change", config_id = 8000102, event = EventType.EVENT_GADGET_STATE_CHANGE, source = "", condition = "", action = "action_gadget_state_change", trigger_count = 0 },
|
||||
{ name = "time_axis_pass", config_id = 8000103, event = EventType.EVENT_TIME_AXIS_PASS, source = "", condition = "", action = "action_time_axis_pass", trigger_count = 0 },
|
||||
}
|
||||
|
||||
function FT_Initialize()
|
||||
for k,v in pairs(FT_Triggers) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
table.insert(variables,{ config_id = 50000001,name = "Finished", value = 0, no_refresh = true})
|
||||
end
|
||||
|
||||
FT_Initialize()
|
||||
|
||||
function action_group_load(context, evt)
|
||||
ScriptLib.PrintContextLog(context, "##[PB_FireTrail.lua]:火传导加载")
|
||||
ScriptLib.SetGroupTempValue(context, "PillarChanged", 0, {base_info.group_id})
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_gadget_state_change(context, evt)
|
||||
if evt.param2 == defs.fire_seed and evt.param1 == 201 then
|
||||
ScriptLib.PrintContextLog(context, "##[PB_FireTrail.lua]:火种状态变化,开启时间轴")
|
||||
ScriptLib.InitTimeAxis(context, "FireTrail", {defs.time_limit}, false)
|
||||
return 0
|
||||
else
|
||||
if gadgets[evt.param2].gadget_id == 70800422 and evt.param1 == 201 then
|
||||
ScriptLib.PrintContextLog(context, "##[PB_FireTrail.lua]:传导柱状态变化,更新数量")
|
||||
if #pillars == ScriptLib.GetGroupTempValue(context, "PillarChanged", {base_info.group_id}) then
|
||||
ScriptLib.EndTimeAxis(context, "FireTrail")
|
||||
ScriptLib.PrintContextLog(context, "##[PB_FireTrail.lua]:挑战完成")
|
||||
ScriptLib.SetGroupVariableValue(context, "Finished", 1)
|
||||
return 0
|
||||
end
|
||||
ScriptLib.EndTimeAxis(context, "FireTrail")
|
||||
ScriptLib.InitTimeAxis(context, "FireTrail", {defs.time_limit}, false)
|
||||
ScriptLib.ChangeGroupTempValue(context, "PillarChanged", 1, {base_info.group_id})
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function action_time_axis_pass(context, evt)
|
||||
if evt.source_name == "FireTrail" then
|
||||
ScriptLib.PrintContextLog(context, "##[PB_FireTrail.lua]:火种监听的时间结束,重置Group")
|
||||
ScriptLib.SetGroupTempValue(context, "PillarChanged", 0, {base_info.group_id})
|
||||
ScriptLib.SetGadgetStateByConfigId(context, defs.fire_seed, 0)
|
||||
for i=1,#pillars do
|
||||
ScriptLib.SetGadgetStateByConfigId(context, pillars[i], 0)
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
--======================================================================================================================
|
||||
--ServerLuaCalls || 物件SLC,记得return 0
|
||||
|
||||
--======================================================================================================================
|
||||
--LevelFunctions || 自定义函数
|
||||
|
||||
|
||||
|
||||
70
gdconf/game_data_config/lua/common/V3_6/PB_FlowerInStone.lua
Normal file
70
gdconf/game_data_config/lua/common/V3_6/PB_FlowerInStone.lua
Normal file
@@ -0,0 +1,70 @@
|
||||
--ServerUploadTool Save to [/root/env/data/lua/common/V3_6]
|
||||
--======================================================================================================================
|
||||
--|| Filename || PB_FlowerInStone
|
||||
--|| RelVersion || V3_6
|
||||
--|| Owner || chao-jin
|
||||
--|| Description ||
|
||||
--|| LogName || ##[PB_FlowerInStone]
|
||||
--|| Protection ||
|
||||
--======================================================================================================================
|
||||
--Defs & Miscs || 需要LD配置的内容
|
||||
--[[
|
||||
local defs = {
|
||||
bloom_time = 10,
|
||||
}
|
||||
|
||||
local flower_core = {
|
||||
[flower_cfg_id] = core_cfg_id,
|
||||
}
|
||||
]]
|
||||
--======================================================================================================================
|
||||
--Events || Group内EVENT事件,记得初始化和return 0
|
||||
local FIS_Triggers = {
|
||||
{ name = "gadget_state_change", config_id = 8000101, event = EventType.EVENT_GADGET_STATE_CHANGE, source = "", condition = "", action = "action_gadget_state_change", trigger_count = 0 },
|
||||
{ name = "time_axis_pass", config_id = 8000102, event = EventType.EVENT_TIME_AXIS_PASS, source = "", condition = "", action = "action_time_axis_pass", trigger_count = 0 },
|
||||
}
|
||||
|
||||
function FIS_Initialize()
|
||||
for k,v in pairs(FIS_Triggers) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
end
|
||||
|
||||
FIS_Initialize()
|
||||
|
||||
--石中花的状态变化,创建和移除采集物
|
||||
function action_gadget_state_change(context, evt)
|
||||
if flower_core[evt.param2] ~= nil then
|
||||
if evt.param1 == 0 then
|
||||
ScriptLib.PrintContextLog(context, "##[PB_FlowerInStone.lua]:石中花关闭,移除采集物")
|
||||
ScriptLib.RemoveEntityByConfigId(context, base_info.group_id, EntityType.GADGET, flower_core[evt.param2])
|
||||
return 0
|
||||
end
|
||||
if evt.param1 == 201 then
|
||||
ScriptLib.PrintContextLog(context, "##[PB_FlowerInStone.lua]:石中花打开,创建采集物")
|
||||
ScriptLib.CreateGadget(context, {config_id = flower_core[evt.param2]})
|
||||
ScriptLib.InitTimeAxis(context, tostring(evt.param2), {defs.bloom_time}, false)
|
||||
return 0
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
--开花后一段时间闭合
|
||||
function action_time_axis_pass(context, evt)
|
||||
local flower_id = tonumber(evt.source_name)
|
||||
if flower_id ~= nil then
|
||||
ScriptLib.SetGadgetStateByConfigId(context, flower_id, 0)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
--======================================================================================================================
|
||||
--ServerLuaCalls || 物件SLC,记得return 0
|
||||
|
||||
--======================================================================================================================
|
||||
--LevelFunctions || 自定义函数
|
||||
|
||||
|
||||
|
||||
36
gdconf/game_data_config/lua/common/V3_6/PB_LeafPlatform.lua
Normal file
36
gdconf/game_data_config/lua/common/V3_6/PB_LeafPlatform.lua
Normal file
@@ -0,0 +1,36 @@
|
||||
--ServerUploadTool Save to [/root/env/data/lua/common/V3_6]
|
||||
--======================================================================================================================
|
||||
--|| Filename || PB_LeafPlatform
|
||||
--|| RelVersion || V3_6
|
||||
--|| Owner || chao-jin
|
||||
--|| Description || 叶片平台,用于在状态改变时创生钩锁点
|
||||
--|| LogName || ##[PB_LeafPlatform]
|
||||
--|| Protection ||
|
||||
--======================================================================================================================
|
||||
--Defs & Miscs || 需要LD配置的内容
|
||||
--[[
|
||||
local hook_map = {
|
||||
[] = ,
|
||||
}
|
||||
]]
|
||||
--======================================================================================================================
|
||||
--ServerLuaCalls || 物件SLC,记得return 0
|
||||
--平台关闭
|
||||
function SLC_PlatformOff(context)
|
||||
local config_id = ScriptLib.GetGadgetConfigId(context, {gadget_eid = context.source_entity_id})
|
||||
if hook_map[config_id] ~= nil then
|
||||
ScriptLib.RemoveEntityByConfigId(context, base_info.group_id, EntityType.GADGET, hook_map[config_id])
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
--平台打开
|
||||
function SLC_PlatformOn(context)
|
||||
local config_id = ScriptLib.GetGadgetConfigId(context, {gadget_eid = context.source_entity_id})
|
||||
if hook_map[config_id] ~= nil then
|
||||
ScriptLib.CreateGadget(context, {config_id = hook_map[config_id] })
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
86
gdconf/game_data_config/lua/common/V3_6/ResidualBright.lua
Normal file
86
gdconf/game_data_config/lua/common/V3_6/ResidualBright.lua
Normal file
@@ -0,0 +1,86 @@
|
||||
--ServerUploadTool Save to [/root/env/data/lua/common/V3_4]
|
||||
--======================================================================================================================
|
||||
--|| Filename || ResidualBright
|
||||
--|| RelVersion || V3_4
|
||||
--|| Owner || chao-jin
|
||||
--|| Description ||
|
||||
--|| LogName || ##[ResidualBright]
|
||||
--|| Protection ||
|
||||
--======================================================================================================================
|
||||
--Defs & Miscs
|
||||
--[[
|
||||
local defs = {
|
||||
reset_region = 82001,
|
||||
gadget_id_bright = 70310498,
|
||||
}
|
||||
]]
|
||||
|
||||
--======================================================================================================================
|
||||
--Triggers&Init
|
||||
|
||||
local BrightTriggers={
|
||||
{ config_id = 8000001, name = "group_load", event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_group_load", trigger_count = 0 },
|
||||
{ config_id = 8000002,name = "leave_region", event = EventType.EVENT_LEAVE_REGION, source = "", condition = "", action = "action_leave_reset_region", forbid_guest = false, trigger_count = 0 },
|
||||
-- { config_id = 8000003, name = "gadget_state_change", event = EventType.EVENT_GADGET_STATE_CHANGE, source = "", condition = "", action = "action_gadget_state_change", trigger_count = 0 },
|
||||
}
|
||||
|
||||
function LF_Initialize_Group(triggers, suites)
|
||||
for i=1,#BrightTriggers do
|
||||
table.insert(triggers, BrightTriggers[i])
|
||||
table.insert(suites[init_config.suite].triggers,BrightTriggers[i].name)
|
||||
end
|
||||
table.insert(variables,{ config_id = 50000001, name = "successed", value = 0, no_refresh = true})
|
||||
--初始化
|
||||
end
|
||||
|
||||
LF_Initialize_Group(triggers, suites)
|
||||
|
||||
--======================================================================================================================
|
||||
--Events
|
||||
|
||||
|
||||
--加载判定物件状态
|
||||
function action_group_load(context, evt)
|
||||
if ScriptLib.GetGroupVariableValue(context, "successed")==1 then
|
||||
LF_RemoveAllRepeater(context)
|
||||
ScriptLib.AddExtraGroupSuite(context, base_info.group_id, 3)
|
||||
for i=1,#gadgets do
|
||||
if gadgets[i].gadget_id == defs.gadget_id_bright then
|
||||
ScriptLib.SetGroupGadgetStateByConfigId(context, base_info.group_id, gadgets[i].config_id, 901)
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
ScriptLib.AddExtraGroupSuite(context, base_info.group_id, 2)
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
--退出区域关闭挑战
|
||||
function action_leave_reset_region(context, evt)
|
||||
if evt.param1 ~= defs.reset_region then
|
||||
return 0
|
||||
end
|
||||
if ScriptLib.GetGroupVariableValue(context, "successed")==1 then
|
||||
LF_RemoveAllRepeater(context)
|
||||
return 0
|
||||
end
|
||||
ScriptLib.RefreshGroup(context,{group_id=base_info.group_id,suite=1})
|
||||
ScriptLib.AddExtraGroupSuite(context, base_info.group_id, 2)
|
||||
return 0
|
||||
end
|
||||
|
||||
--======================================================================================================================
|
||||
--LevelFunctions
|
||||
|
||||
function LF_RemoveAllRepeater(context)
|
||||
ScriptLib.PrintContextLog(context, "##[ResidualBright]:移除所有的残念")
|
||||
for i=1,#gadgets do
|
||||
if gadgets[i].gadget_id == defs.gadget_id_bright then
|
||||
ScriptLib.RemoveEntityByConfigId(context, base_info.group_id, EntityType.GADGET, gadgets[i].config_id)
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
|
||||
213
gdconf/game_data_config/lua/common/V3_6/WQ_ElfFollow.lua
Normal file
213
gdconf/game_data_config/lua/common/V3_6/WQ_ElfFollow.lua
Normal file
@@ -0,0 +1,213 @@
|
||||
--ServerUploadTool Save to [/root/env/data/lua/common/V3_6]
|
||||
--======================================================================================================================
|
||||
--|| Filename || WQ_ElfFollow
|
||||
--|| RelVersion || V3_6
|
||||
--|| Owner || chao-jin
|
||||
--|| Description || 用来给WQ任务中,小精灵伴飞的Require处理
|
||||
--|| LogName || ##[WQ_ElfFollow]
|
||||
--|| Protection || 玩法失败refresh到suite1,中间不存档
|
||||
--======================================================================================================================
|
||||
--Defs & Miscs || 需要LD配置的内容
|
||||
--[[
|
||||
local defs = {
|
||||
elf_config_id = 75001,
|
||||
pointarray_id = 110200031, --使用的点阵ID
|
||||
dis_fail_limit = 15, --跟随的最大距离限制
|
||||
dis_warning_limit = 6, --超出报警的距离
|
||||
time_fail_limit = 8, --超出最大距离限制判的上限时间
|
||||
time_warning_cd = 5, --提示玩家跟随的CD
|
||||
slusha_type = 3, --司露莎载具状态
|
||||
reminder_follow = 400094, --提示跟随
|
||||
reminder_fail = 400113,
|
||||
reminder_success = 400112,
|
||||
point_target = 15, --最终到达的终点ID
|
||||
end_suite = 2
|
||||
}
|
||||
--小精灵到达对应的Point时短暂停留,播放动画,播的动画ID
|
||||
local elf_actions = {
|
||||
[1] = {wait_time = 0,action_id = 0, next_point = 4}, --目标点在点阵内的PointID 到达点阵时播放的动画ID,没有则填0
|
||||
[4] = {wait_time = 2,action_id = 0, next_point = 8},
|
||||
[8] = {wait_time = 2,action_id = 0, next_point = 12},
|
||||
[12] = {wait_time = 2,action_id = 0, next_point = 15},
|
||||
[15] = {wait_time = 2,action_id = 0, next_point = 0},
|
||||
}
|
||||
]]
|
||||
--======================================================================================================================
|
||||
--Events || Group内EVENT事件,记得初始化和return 0
|
||||
local ElfFollow_Triggers = {
|
||||
{ name = "gadget_state_change", config_id = 8000101, event = EventType.EVENT_GADGET_STATE_CHANGE, source = "", condition = "", action = "action_gadget_state_change", trigger_count = 0 },
|
||||
{ name = "time_axis_pass", config_id = 8000102, event = EventType.EVENT_TIME_AXIS_PASS, source = "", condition = "", action = "action_time_axis_pass", trigger_count = 0 },
|
||||
{ name = "platform_arrival", config_id = 8000103, event = EventType.EVENT_PLATFORM_ARRIVAL, source = "", condition = "", action = "action_platform_arrival", trigger_count = 0 }
|
||||
}
|
||||
|
||||
function ElfFollow_Initialize()
|
||||
for k,v in pairs(ElfFollow_Triggers) do
|
||||
table.insert(triggers, v)
|
||||
table.insert(suites[1].triggers, v.name)
|
||||
end
|
||||
end
|
||||
|
||||
ElfFollow_Initialize()
|
||||
|
||||
--监听小精灵Gadget的状态,切到201的时候开始玩法
|
||||
function action_gadget_state_change(context, evt)
|
||||
if evt.param2 == defs.elf_config_id and evt.param1 == 201 then
|
||||
ScriptLib.PrintContextLog(context, "##[WQ_ElfFollow]:小精灵状态改变,开始飞行玩法")
|
||||
LF_StartFollowPlay(context)
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
--定时检测距离
|
||||
function action_time_axis_pass(context, evt)
|
||||
-- ScriptLib.PrintContextLog(context, "##[WQ_ElfFollow]:触发TimeAxis")
|
||||
--提示跟随
|
||||
if evt.source_name == "WARNING_CD" then
|
||||
ScriptLib.SetGroupTempValue(context, "IS_WARNING_CD", 0, {})
|
||||
ScriptLib.PrintContextLog(context, "##[WQ_ElfFollow]:提示CD结束")
|
||||
end
|
||||
--检查玩家和小精灵距离
|
||||
if evt.source_name == "CHECK_DISTANCE" then
|
||||
LF_CalcDist(context)
|
||||
end
|
||||
--检查玩家是否上了载具
|
||||
if evt.source_name == "CHECK_PLAYER_VEHICLE" then
|
||||
ScriptLib.PrintContextLog(context, "##[WQ_ElfFollow]:检查玩家是否上载具")
|
||||
local _host_uid = ScriptLib.GetSceneOwnerUid(context)
|
||||
if defs.slusha_type ~= ScriptLib.GetPlayerVehicleType(context, _host_uid) then
|
||||
ScriptLib.PrintContextLog(context, "##[WQ_ElfFollow]:玩家没有上载具")
|
||||
LF_FollowPlayFail(context)
|
||||
end
|
||||
end
|
||||
--小精灵继续飞行
|
||||
if evt.source_name == "ELF_FLY_AFTER_WAIT" then
|
||||
ScriptLib.PrintContextLog(context, "##[WQ_ElfFollow]:小精灵继续飞行")
|
||||
ScriptLib.SetPlatformPointArray(context, defs.elf_config_id, defs.pointarray_id, LF_GetFlyPath(context), {route_type = 0,turn_mode = false})
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
--到达停留点
|
||||
function action_platform_arrival( context, evt)
|
||||
ScriptLib.PrintContextLog(context, "##[WQ_ElfFollow]:小精灵到达点"..evt.param3)
|
||||
--到达终点
|
||||
if evt.param3 == defs.point_target then
|
||||
LF_FollowPlaySuccess(context)
|
||||
return 0
|
||||
end
|
||||
if elf_actions[evt.param3] ~= nil then
|
||||
--小精灵播动画
|
||||
if elf_actions[evt.param3].action_id ~= 0 then
|
||||
ScriptLib.SetGadgetStateByConfigId(context, defs.elf_config_id, elf_actions[evt.param3].action_id)
|
||||
end
|
||||
--更新当前的点
|
||||
if evt.param3 ~= ScriptLib.GetGroupTempValue(context, "ELF_CUR_POINT", {base_info.group_id}) then
|
||||
ScriptLib.SetGroupTempValue(context, "ELF_CUR_POINT", evt.param3, {})
|
||||
end
|
||||
--等待一段时间后继续飞行
|
||||
if elf_actions[evt.param3].wait_time ~= 0 then
|
||||
ScriptLib.InitTimeAxis(context, "ELF_FLY_AFTER_WAIT", {elf_actions[evt.param3].wait_time}, false)
|
||||
else
|
||||
ScriptLib.SetPlatformPointArray(context, defs.elf_config_id, defs.pointarray_id, LF_GetFlyPath(context), {route_type = 0,turn_mode = false})
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
--======================================================================================================================
|
||||
--LevelFunctions || 自定义函数
|
||||
--开始小精灵跟随玩法
|
||||
function LF_StartFollowPlay(context)
|
||||
ScriptLib.PrintContextLog(context, "##[WQ_ElfFollow]:跟随玩法开始")
|
||||
--记录离开距离过远的次数
|
||||
ScriptLib.SetGroupTempValue(context, "TIME_TOO_FAR", 0, {})
|
||||
--记录是否在提示冷却中
|
||||
ScriptLib.SetGroupTempValue(context, "IS_WARNING_CD", 0, {})
|
||||
--记录小精灵移动平台当前在哪个点
|
||||
ScriptLib.SetGroupTempValue(context, "ELF_CUR_POINT", 1, {})
|
||||
--创建一个时间轴,检查规定时间内是否处于载具状态
|
||||
ScriptLib.InitTimeAxis(context, "CHECK_PLAYER_VEHICLE", {8}, false)
|
||||
--创建一个时间轴,定期计算玩家和小精灵的距离
|
||||
ScriptLib.InitTimeAxis(context, "CHECK_DISTANCE", {1}, true)
|
||||
ScriptLib.SetPlatformPointArray(context, defs.elf_config_id, defs.pointarray_id, LF_GetFlyPath(context), {route_type = 0,turn_mode = false})
|
||||
end
|
||||
|
||||
--检查玩家和小精灵的距离
|
||||
function LF_CalcDist(context)
|
||||
ScriptLib.PrintContextLog(context, "##[WQ_ElfFollow]:处理玩家和小精灵之间的距离")
|
||||
--计算玩家和小精灵的距离
|
||||
local dis_h2e = 100
|
||||
local uid_list = ScriptLib.GetSceneUidList(context)
|
||||
if uid_list ~= nil then
|
||||
local _host_uid = ScriptLib.GetSceneOwnerUid(context)
|
||||
local _avatar_eid = ScriptLib.GetAvatarEntityIdByUid(context, _host_uid)
|
||||
local _avatar_pos = ScriptLib.GetPosByEntityId(context, _avatar_eid)
|
||||
|
||||
local _elf_eid = ScriptLib.GetEntityIdByConfigId(context, defs.elf_config_id)
|
||||
local _elf_pos = ScriptLib.GetPosByEntityId(context, _elf_eid)
|
||||
dis_h2e = math.sqrt( (_avatar_pos.x - _elf_pos.x)^2 + (_avatar_pos.y - _elf_pos.y)^2 +(_avatar_pos.z - _elf_pos.z)^2 )
|
||||
ScriptLib.PrintContextLog(context, "##[WQ_ElfFollow]:距离"..dis_h2e)
|
||||
end
|
||||
|
||||
--超出提示距离
|
||||
if dis_h2e > defs.dis_warning_limit then
|
||||
if 0 == ScriptLib.GetGroupTempValue(context, "IS_WARNING_CD", {}) then
|
||||
ScriptLib.ShowReminder(context, defs.reminder_follow)
|
||||
ScriptLib.SetGroupTempValue(context, "IS_WARNING_CD", 1, {})
|
||||
ScriptLib.InitTimeAxis(context, "WARNING_CD", {defs.time_waring_cd}, false)
|
||||
end
|
||||
end
|
||||
--处理超出限制距离
|
||||
if dis_h2e > defs.dis_fail_limit then
|
||||
--更新超出距离的次数
|
||||
ScriptLib.ChangeGroupTempValue(context, "TIME_TOO_FAR", 1, {})
|
||||
--计算一下
|
||||
if defs.time_fail_limit < ScriptLib.GetGroupTempValue(context, "TIME_TOO_FAR", {}) then
|
||||
LF_FollowPlayFail(context)
|
||||
return 0
|
||||
end
|
||||
else
|
||||
--靠近后累计时间清零
|
||||
ScriptLib.SetGroupTempValue(context, "TIME_TOO_FAR", 0, {})
|
||||
end
|
||||
end
|
||||
|
||||
--关闭所有时间轴
|
||||
function LF_EndAllTimeAxis(context)
|
||||
ScriptLib.PrintContextLog(context, "##[WQ_ElfFollow]:停止所有时间轴")
|
||||
ScriptLib.EndTimeAxis(context, "IS_WARNING_CD")
|
||||
ScriptLib.EndTimeAxis(context, "CHECK_PLAYER_VEHICLE")
|
||||
ScriptLib.EndTimeAxis(context, "CHECK_DISTANCE")
|
||||
end
|
||||
|
||||
--跟随玩法失败
|
||||
function LF_FollowPlayFail(context)
|
||||
ScriptLib.PrintContextLog(context, "##[WQ_ElfFollow]:玩法失败")
|
||||
LF_EndAllTimeAxis(context)
|
||||
ScriptLib.ShowReminder(context, defs.reminder_fail)
|
||||
ScriptLib.RefreshGroup(context, {group_id = base_info.group_id, suite=1})
|
||||
end
|
||||
|
||||
--跟随玩法成功
|
||||
function LF_FollowPlaySuccess(context)
|
||||
ScriptLib.PrintContextLog(context, "##[WQ_ElfFollow]:玩法成功")
|
||||
ScriptLib.ShowReminder(context, defs.reminder_success)
|
||||
LF_EndAllTimeAxis(context)
|
||||
ScriptLib.GoToGroupSuite(context, base_info.group_id, defs.end_suite)
|
||||
end
|
||||
|
||||
--根据当前点生成飞行的路径
|
||||
function LF_GetFlyPath(context)
|
||||
ScriptLib.PrintContextLog(context, "##[WQ_ElfFollow]:生成飞行路径")
|
||||
local cur_point = ScriptLib.GetGroupTempValue(context, "ELF_CUR_POINT", {})
|
||||
local fly_path = {}
|
||||
if cur_point < defs.point_target then
|
||||
local target_point = elf_actions[cur_point].next_point
|
||||
for i=cur_point,target_point do
|
||||
table.insert(fly_path, i)
|
||||
-- ScriptLib.PrintContextLog(context, "##[WQ_ElfFollow]:路径"..i)
|
||||
end
|
||||
end
|
||||
return fly_path
|
||||
end
|
||||
|
||||
@@ -5,6 +5,8 @@ dummy_points = {
|
||||
["2"] = { pos = { x = 5.318, y = 0.007, z = 0.882 }, rot = { x = 0.000, y = 237.677, z = 0.000 } },
|
||||
["4"] = { pos = { x = 3.413, y = 0.007, z = -1.706 }, rot = { x = 0.000, y = 13.807, z = 0.000 } },
|
||||
["5"] = { pos = { x = 4.283, y = 0.007, z = -1.883 }, rot = { x = 0.000, y = 20.612, z = 0.000 } },
|
||||
["15"] = { pos = { x = -4.231, y = 0.000, z = -3.281 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["16"] = { pos = { x = -0.915, y = 0.000, z = -4.960 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["13"] = { pos = { x = -0.295, y = 0.000, z = -2.558 }, rot = { x = 0.000, y = 252.169, z = 0.000 } },
|
||||
["14"] = { pos = { x = -0.625, y = 0.000, z = -1.754 }, rot = { x = 0.000, y = 215.939, z = 0.000 } },
|
||||
["12"] = { pos = { x = -0.583, y = 0.000, z = -3.304 }, rot = { x = 0.000, y = 286.068, z = 0.000 } },
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
dummy_points = {
|
||||
["24"] = { pos = { x = 10.121, y = 0.725, z = -1.842 }, rot = { x = 0.000, y = 277.555, z = 0.000 } },
|
||||
["25"] = { pos = { x = -1.442, y = 0.751, z = 2.206 }, rot = { x = 0.000, y = 107.157, z = 0.000 } },
|
||||
["26"] = { pos = { x = -2.554, y = 0.723, z = -0.143 }, rot = { x = 0.000, y = 22.409, z = 0.000 } },
|
||||
["27"] = { pos = { x = -2.579, y = 0.751, z = 4.376 }, rot = { x = 0.000, y = 141.950, z = 0.000 } },
|
||||
["20"] = { pos = { x = 12.444, y = 0.752, z = -2.359 }, rot = { x = 0.000, y = 271.448, z = 0.000 } },
|
||||
["9"] = { pos = { x = -6.548, y = 0.739, z = 1.420 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["22"] = { pos = { x = -6.677, y = 0.754, z = 3.441 }, rot = { x = 0.000, y = 184.276, z = 0.000 } },
|
||||
@@ -18,5 +22,9 @@ dummy_points = {
|
||||
["5"] = { pos = { x = -2.369, y = 0.754, z = -1.609 }, rot = { x = 0.000, y = 185.683, z = 0.000 } },
|
||||
["18"] = { pos = { x = -3.661, y = 0.754, z = -8.590 }, rot = { x = 0.000, y = 83.411, z = 0.000 } },
|
||||
["19"] = { pos = { x = -2.585, y = 0.754, z = -4.954 }, rot = { x = 0.000, y = 175.044, z = 0.000 } },
|
||||
["17"] = { pos = { x = -1.532, y = 0.754, z = -8.576 }, rot = { x = 0.000, y = 270.863, z = 0.000 } }
|
||||
["17"] = { pos = { x = -1.532, y = 0.754, z = -8.576 }, rot = { x = 0.000, y = 270.863, z = 0.000 } },
|
||||
["23"] = { pos = { x = -8.350, y = 6.976, z = -5.470 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["28"] = { pos = { x = -8.323, y = 6.976, z = -6.481 }, rot = { x = 0.000, y = 183.060, z = 0.000 } },
|
||||
["29"] = { pos = { x = -8.921, y = 6.976, z = -7.650 }, rot = { x = 0.000, y = 55.450, z = 0.000 } },
|
||||
["30"] = { pos = { x = -9.846, y = 6.976, z = -8.875 }, rot = { x = 0.000, y = 0.000, z = 0.000 } }
|
||||
}
|
||||
@@ -1,9 +1,24 @@
|
||||
dummy_points = {
|
||||
["48"] = { pos = { x = -54.848, y = 3.995, z = -0.147 }, rot = { x = 0.000, y = 260.614, z = 0.000 } },
|
||||
["47"] = { pos = { x = -56.482, y = 3.995, z = -0.483 }, rot = { x = 0.000, y = 81.198, z = 0.000 } },
|
||||
["49"] = { pos = { x = -40.400, y = 2.153, z = -2.957 }, rot = { x = 0.000, y = 274.004, z = 0.000 } },
|
||||
["58"] = { pos = { x = -40.246, y = 2.153, z = -4.419 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["59"] = { pos = { x = 1.530, y = 0.642, z = -15.887 }, rot = { x = 0.000, y = 263.716, z = 0.000 } },
|
||||
["51"] = { pos = { x = -0.065, y = 3.995, z = -56.360 }, rot = { x = 0.000, y = 180.061, z = 0.000 } },
|
||||
["60"] = { pos = { x = 1.105, y = 3.995, z = -55.677 }, rot = { x = 0.000, y = 242.719, z = 0.000 } },
|
||||
["53"] = { pos = { x = -12.703, y = 2.153, z = -31.945 }, rot = { x = 0.000, y = 200.551, z = 0.000 } },
|
||||
["52"] = { pos = { x = -13.831, y = 2.153, z = -34.976 }, rot = { x = 0.000, y = 20.086, z = 0.000 } },
|
||||
["54"] = { pos = { x = 28.597, y = 2.153, z = 28.736 }, rot = { x = 0.000, y = 47.225, z = 0.000 } },
|
||||
["13"] = { pos = { x = 86.722, y = 2.212, z = 1.014 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["37"] = { pos = { x = 18.149, y = -34.018, z = -1.049 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["38"] = { pos = { x = 17.817, y = -35.208, z = 2.085 }, rot = { x = 0.000, y = 173.096, z = 0.000 } },
|
||||
["39"] = { pos = { x = 16.683, y = -35.208, z = 1.867 }, rot = { x = 0.000, y = 149.983, z = 0.000 } },
|
||||
["40"] = { pos = { x = 25.863, y = -34.030, z = 15.085 }, rot = { x = 0.000, y = 236.933, z = 0.000 } },
|
||||
["65"] = { pos = { x = 12.485, y = 1.458, z = -8.108 }, rot = { x = 0.000, y = 305.831, z = 0.000 } },
|
||||
["61"] = { pos = { x = 37.316, y = 5.561, z = -3.139 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["62"] = { pos = { x = -19.055, y = 111.411, z = 0.523 }, rot = { x = 0.000, y = 100.800, z = 0.000 } },
|
||||
["66"] = { pos = { x = 22.319, y = 0.642, z = -9.402 }, rot = { x = 0.000, y = 299.233, z = 0.000 } },
|
||||
["50"] = { pos = { x = -0.012, y = 0.635, z = -15.958 }, rot = { x = 0.000, y = 359.951, z = 0.000 } },
|
||||
["3"] = { pos = { x = 2.929, y = 105.170, z = -6.362 }, rot = { x = 0.000, y = 289.384, z = 0.000 } },
|
||||
["4"] = { pos = { x = 2.346, y = 105.170, z = -7.363 }, rot = { x = 0.000, y = 306.814, z = 0.000 } },
|
||||
["6"] = { pos = { x = -14.984, y = 111.416, z = 6.438 }, rot = { x = 0.000, y = 141.745, z = 0.000 } },
|
||||
|
||||
@@ -1,8 +1,13 @@
|
||||
dummy_points = {
|
||||
["2"] = { pos = { x = -3.369, y = 0.055, z = 2.194 }, rot = { x = 0.000, y = 90.580, z = 0.000 } },
|
||||
["19"] = { pos = { x = -7.347, y = 0.898, z = 4.398 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["21"] = { pos = { x = -11.333, y = 0.055, z = 8.716 }, rot = { x = 0.000, y = 179.442, z = 0.000 } },
|
||||
["20"] = { pos = { x = -11.287, y = 0.055, z = 6.482 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["22"] = { pos = { x = -4.597, y = 0.057, z = 7.518 }, rot = { x = 0.000, y = 90.000, z = 0.000 } },
|
||||
["3"] = { pos = { x = 2.343, y = 0.057, z = -1.734 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["6"] = { pos = { x = -2.522, y = 0.057, z = 13.682 }, rot = { x = 0.000, y = 184.540, z = 0.000 } },
|
||||
["5"] = { pos = { x = -3.927, y = 0.057, z = 10.839 }, rot = { x = 0.000, y = 41.200, z = 0.000 } },
|
||||
["4"] = { pos = { x = -1.359, y = 0.057, z = 10.957 }, rot = { x = 0.000, y = 325.600, z = 0.000 } },
|
||||
["1"] = { pos = { x = -3.386, y = 0.057, z = 13.735 }, rot = { x = 0.000, y = 243.388, z = 0.000 } },
|
||||
["7"] = { pos = { x = -7.353, y = 0.075, z = 5.959 }, rot = { x = 0.000, y = 178.806, z = 0.000 } },
|
||||
["8"] = { pos = { x = -6.093, y = 0.055, z = 8.193 }, rot = { x = 0.000, y = 226.831, z = 0.000 } },
|
||||
@@ -13,5 +18,7 @@ dummy_points = {
|
||||
["9"] = { pos = { x = -7.508, y = 0.055, z = 7.473 }, rot = { x = 0.000, y = 90.000, z = 0.000 } },
|
||||
["12"] = { pos = { x = -4.925, y = 1.033, z = 7.569 }, rot = { x = 0.000, y = 90.000, z = 0.000 } },
|
||||
["18"] = { pos = { x = -5.091, y = 0.057, z = 8.704 }, rot = { x = 0.000, y = 238.953, z = 0.000 } },
|
||||
["13"] = { pos = { x = -5.689, y = 0.068, z = 6.693 }, rot = { x = 0.000, y = 275.892, z = 0.000 } }
|
||||
["13"] = { pos = { x = -5.689, y = 0.068, z = 6.693 }, rot = { x = 0.000, y = 275.892, z = 0.000 } },
|
||||
["16"] = { pos = { x = 1.085, y = -0.182, z = 9.506 }, rot = { x = 0.000, y = 97.127, z = 0.000 } },
|
||||
["17"] = { pos = { x = 1.702, y = -0.182, z = 9.479 }, rot = { x = 0.000, y = 287.542, z = 0.000 } }
|
||||
}
|
||||
@@ -15,5 +15,48 @@ dummy_points = {
|
||||
["10"] = { pos = { x = -26.242, y = 133.588, z = -27.103 }, rot = { x = 0.000, y = 20.999, z = 0.000 } },
|
||||
["8"] = { pos = { x = -25.568, y = 133.554, z = -25.392 }, rot = { x = 0.000, y = 221.217, z = 0.000 } },
|
||||
["11"] = { pos = { x = -32.287, y = 133.498, z = -16.269 }, rot = { x = 0.000, y = 147.665, z = 0.000 } },
|
||||
["34"] = { pos = { x = -37.344, y = 133.515, z = 0.062 }, rot = { x = 0.000, y = 268.448, z = 0.000 } }
|
||||
["34"] = { pos = { x = -37.344, y = 133.515, z = 0.062 }, rot = { x = 0.000, y = 268.448, z = 0.000 } },
|
||||
["15"] = { pos = { x = -34.118, y = 133.515, z = -0.016 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["39"] = { pos = { x = -3.720, y = 128.087, z = 3.663 }, rot = { x = 0.000, y = 139.100, z = 0.000 } },
|
||||
["16"] = { pos = { x = -7.432, y = 128.043, z = -0.351 }, rot = { x = 0.000, y = 56.090, z = 0.000 } },
|
||||
["50"] = { pos = { x = -14.196, y = 128.073, z = -0.486 }, rot = { x = 0.000, y = 84.010, z = 0.000 } },
|
||||
["49"] = { pos = { x = -3.664, y = 128.087, z = 3.748 }, rot = { x = 0.000, y = 134.760, z = 0.000 } },
|
||||
["51"] = { pos = { x = -14.595, y = 128.076, z = 0.377 }, rot = { x = 0.000, y = 93.270, z = 0.000 } },
|
||||
["48"] = { pos = { x = -7.540, y = 128.043, z = -0.353 }, rot = { x = 0.000, y = 59.130, z = 0.000 } },
|
||||
["17"] = { pos = { x = -19.109, y = 133.498, z = -29.369 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["18"] = { pos = { x = 19.211, y = 133.553, z = -29.746 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["19"] = { pos = { x = 28.906, y = 133.553, z = -23.598 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["20"] = { pos = { x = 28.451, y = 133.553, z = -21.633 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["21"] = { pos = { x = 27.793, y = 133.553, z = -22.234 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["35"] = { pos = { x = 35.397, y = 133.553, z = -7.742 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["22"] = { pos = { x = 33.835, y = 133.553, z = -7.979 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["36"] = { pos = { x = -14.386, y = 128.076, z = -0.251 }, rot = { x = 0.000, y = 266.430, z = 0.000 } },
|
||||
["23"] = { pos = { x = -4.320, y = 128.045, z = 0.151 }, rot = { x = 0.000, y = 85.700, z = 0.000 } },
|
||||
["42"] = { pos = { x = -5.284, y = 128.087, z = -1.571 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["43"] = { pos = { x = -6.281, y = 128.044, z = -1.081 }, rot = { x = 0.000, y = 43.020, z = 0.000 } },
|
||||
["44"] = { pos = { x = -4.938, y = 128.087, z = 0.917 }, rot = { x = 0.000, y = 193.700, z = 0.000 } },
|
||||
["24"] = { pos = { x = -3.845, y = 128.087, z = -3.424 }, rot = { x = 0.000, y = 117.840, z = 0.000 } },
|
||||
["59"] = { pos = { x = -4.733, y = 128.087, z = 0.042 }, rot = { x = 0.000, y = 95.700, z = 0.000 } },
|
||||
["53"] = { pos = { x = -8.924, y = 128.043, z = 0.043 }, rot = { x = 0.000, y = 109.880, z = 0.000 } },
|
||||
["52"] = { pos = { x = -8.458, y = 128.043, z = -1.041 }, rot = { x = 0.000, y = 109.200, z = 0.000 } },
|
||||
["54"] = { pos = { x = -7.434, y = 128.043, z = 0.823 }, rot = { x = 0.000, y = 120.770, z = 0.000 } },
|
||||
["25"] = { pos = { x = -30.735, y = 133.553, z = 21.339 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["26"] = { pos = { x = -19.450, y = 133.553, z = 29.560 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["27"] = { pos = { x = -6.423, y = 133.553, z = 34.579 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["28"] = { pos = { x = 7.488, y = 133.553, z = 34.599 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["29"] = { pos = { x = 8.396, y = 133.553, z = 33.559 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["37"] = { pos = { x = -3.264, y = 129.358, z = 0.025 }, rot = { x = 0.000, y = 310.700, z = 0.000 } },
|
||||
["60"] = { pos = { x = -3.391, y = 128.087, z = -2.928 }, rot = { x = 0.000, y = 314.270, z = 0.000 } },
|
||||
["38"] = { pos = { x = -4.027, y = 128.045, z = 1.910 }, rot = { x = 0.000, y = 222.400, z = 0.000 } },
|
||||
["46"] = { pos = { x = -5.287, y = 128.087, z = -1.356 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["47"] = { pos = { x = -6.036, y = 128.044, z = -0.684 }, rot = { x = 0.000, y = 48.230, z = 0.000 } },
|
||||
["45"] = { pos = { x = -5.346, y = 128.087, z = 1.231 }, rot = { x = 0.000, y = 182.600, z = 0.000 } },
|
||||
["40"] = { pos = { x = -8.509, y = 128.043, z = 0.069 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["30"] = { pos = { x = -4.512, y = 128.057, z = -1.242 }, rot = { x = 0.000, y = 281.900, z = 0.000 } },
|
||||
["58"] = { pos = { x = -7.004, y = 128.044, z = 0.250 }, rot = { x = 0.000, y = 88.700, z = 0.000 } },
|
||||
["57"] = { pos = { x = -6.968, y = 128.044, z = 1.227 }, rot = { x = 0.000, y = 111.680, z = 0.000 } },
|
||||
["55"] = { pos = { x = -4.423, y = 128.087, z = -1.984 }, rot = { x = 0.000, y = 304.000, z = 0.000 } },
|
||||
["56"] = { pos = { x = -4.677, y = 128.087, z = -0.131 }, rot = { x = 0.000, y = 274.500, z = 0.000 } },
|
||||
["31"] = { pos = { x = -4.325, y = 128.044, z = 2.016 }, rot = { x = 0.000, y = 222.040, z = 0.000 } },
|
||||
["32"] = { pos = { x = -17.573, y = 129.100, z = 0.784 }, rot = { x = 0.000, y = 0.000, z = 0.000 } }
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
dummy_points = {
|
||||
["12"] = { pos = { x = 15.090, y = 0.010, z = 21.928 }, rot = { x = 359.450, y = 107.615, z = 0.098 } },
|
||||
["13"] = { pos = { x = 15.178, y = 0.010, z = 20.232 }, rot = { x = 0.000, y = 60.062, z = 0.000 } },
|
||||
["16"] = { pos = { x = -14.230, y = 0.021, z = 8.648 }, rot = { x = 0.000, y = 221.724, z = 0.000 } },
|
||||
["14"] = { pos = { x = 0.735, y = 0.000, z = 9.546 }, rot = { x = 0.000, y = 13.001, z = 0.000 } },
|
||||
["4"] = { pos = { x = 1.192, y = 0.000, z = 12.903 }, rot = { x = 0.000, y = 180.000, z = 0.000 } },
|
||||
["3"] = { pos = { x = 0.069, y = 1.294, z = 11.571 }, rot = { x = 0.000, y = 180.000, z = 0.000 } },
|
||||
["20"] = { pos = { x = -0.035, y = 0.003, z = 9.688 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["25"] = { pos = { x = 1.804, y = 0.000, z = 9.586 }, rot = { x = 0.000, y = 0.701, z = 0.000 } },
|
||||
["15"] = { pos = { x = -0.846, y = 0.000, z = 9.734 }, rot = { x = 0.000, y = 39.246, z = 0.000 } },
|
||||
["1"] = { pos = { x = 30.543, y = 0.010, z = 8.694 }, rot = { x = 0.000, y = 347.174, z = 0.000 } },
|
||||
["5"] = { pos = { x = 15.881, y = 0.000, z = 8.680 }, rot = { x = 0.000, y = 196.762, z = 0.000 } },
|
||||
["6"] = { pos = { x = 10.699, y = 0.000, z = 7.146 }, rot = { x = 0.000, y = 265.468, z = 0.000 } },
|
||||
["7"] = { pos = { x = 12.033, y = 0.000, z = 13.660 }, rot = { x = 0.000, y = 222.325, z = 0.000 } },
|
||||
["8"] = { pos = { x = 17.905, y = 0.010, z = 21.440 }, rot = { x = 0.000, y = 229.461, z = 0.000 } },
|
||||
["19"] = { pos = { x = 19.747, y = 0.000, z = 11.829 }, rot = { x = 0.000, y = 57.775, z = 0.000 } },
|
||||
["2"] = { pos = { x = 20.136, y = 0.000, z = 11.405 }, rot = { x = 0.000, y = 48.034, z = 0.000 } },
|
||||
["18"] = { pos = { x = 19.676, y = 0.000, z = 12.797 }, rot = { x = 0.000, y = 149.144, z = 0.000 } },
|
||||
["21"] = { pos = { x = 21.422, y = 0.000, z = 11.347 }, rot = { x = 0.000, y = 320.084, z = 0.000 } },
|
||||
["24"] = { pos = { x = 19.472, y = 0.000, z = 11.089 }, rot = { x = 0.000, y = 48.034, z = 0.000 } },
|
||||
["10"] = { pos = { x = -2.605, y = 0.317, z = 12.822 }, rot = { x = 359.824, y = 358.222, z = 359.994 } },
|
||||
["17"] = { pos = { x = 17.411, y = 0.010, z = 17.066 }, rot = { x = 0.000, y = 338.007, z = 0.000 } },
|
||||
["22"] = { pos = { x = 15.059, y = 0.010, z = 22.372 }, rot = { x = 0.000, y = 143.908, z = 0.000 } },
|
||||
["23"] = { pos = { x = 16.461, y = 0.010, z = 20.355 }, rot = { x = 0.000, y = 327.909, z = 0.000 } },
|
||||
["26"] = { pos = { x = 16.842, y = 0.010, z = 16.906 }, rot = { x = 0.000, y = 338.007, z = 0.000 } },
|
||||
["11"] = { pos = { x = 17.923, y = 0.010, z = 21.155 }, rot = { x = 0.000, y = 280.965, z = 0.000 } },
|
||||
["9"] = { pos = { x = 12.227, y = 0.000, z = 10.648 }, rot = { x = 0.000, y = 98.806, z = 0.000 } }
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
dummy_points = {
|
||||
["2"] = { pos = { x = 7.903, y = 0.745, z = -0.892 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["1"] = { pos = { x = 8.016, y = 0.745, z = -2.373 }, rot = { x = 0.000, y = 0.000, z = 0.000 } }
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
dummy_points = {
|
||||
["6"] = { pos = { x = 525.664, y = 153.229, z = 616.958 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["1"] = { pos = { x = 528.321, y = 130.731, z = 655.557 }, rot = { x = 0.000, y = 151.800, z = 0.000 } },
|
||||
["5"] = { pos = { x = 530.450, y = 131.369, z = 658.349 }, rot = { x = 0.000, y = 181.260, z = 0.000 } },
|
||||
["3"] = { pos = { x = 529.322, y = 130.672, z = 655.141 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["4"] = { pos = { x = 527.683, y = 131.405, z = 658.205 }, rot = { x = 0.000, y = 181.260, z = 0.000 } },
|
||||
["2"] = { pos = { x = 528.663, y = 130.045, z = 652.363 }, rot = { x = 0.000, y = 0.000, z = 0.000 } }
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
dummy_points = {
|
||||
["57"] = { pos = { x = -7.343, y = 0.310, z = -61.370 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["55"] = { pos = { x = 26.594, y = 0.310, z = -42.895 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["56"] = { pos = { x = -36.597, y = 0.310, z = -69.166 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["23"] = { pos = { x = -3.938, y = 3.849, z = -63.630 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["24"] = { pos = { x = -18.607, y = 3.849, z = -61.240 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["25"] = { pos = { x = -15.793, y = 3.849, z = -46.448 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["26"] = { pos = { x = 23.933, y = 0.516, z = -40.425 }, rot = { x = 0.000, y = 26.670, z = 0.000 } },
|
||||
["1"] = { pos = { x = -3.859, y = 0.310, z = -80.852 }, rot = { x = 0.000, y = 308.540, z = 0.000 } },
|
||||
["27"] = { pos = { x = -3.107, y = 0.310, z = -83.309 }, rot = { x = 0.000, y = 327.490, z = 0.000 } },
|
||||
["29"] = { pos = { x = -2.435, y = 0.000, z = -82.420 }, rot = { x = 0.000, y = 123.930, z = 0.000 } },
|
||||
["28"] = { pos = { x = 0.433, y = 0.000, z = -84.179 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["30"] = { pos = { x = -0.795, y = 0.000, z = -81.823 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["11"] = { pos = { x = -1.250, y = -0.014, z = -25.921 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["9"] = { pos = { x = -1.328, y = -0.014, z = -23.429 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["37"] = { pos = { x = -0.597, y = -0.014, z = -29.274 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["39"] = { pos = { x = -0.279, y = -0.014, z = -25.393 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["38"] = { pos = { x = 0.864, y = -0.014, z = -28.800 }, rot = { x = 0.000, y = 334.510, z = 0.000 } },
|
||||
["40"] = { pos = { x = 0.284, y = -0.014, z = -26.541 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["12"] = { pos = { x = 3.708, y = -0.014, z = -25.747 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["41"] = { pos = { x = 6.865, y = -0.014, z = -29.024 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["44"] = { pos = { x = 3.767, y = -0.014, z = -25.758 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["42"] = { pos = { x = 5.896, y = -0.014, z = -29.852 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["43"] = { pos = { x = 8.610, y = 0.329, z = -28.811 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["4"] = { pos = { x = -8.087, y = 0.516, z = -51.085 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["5"] = { pos = { x = 8.430, y = 0.516, z = -72.870 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["2"] = { pos = { x = -0.418, y = 0.516, z = -30.810 }, rot = { x = 0.000, y = 327.840, z = 0.000 } },
|
||||
["31"] = { pos = { x = -0.680, y = 0.409, z = -31.381 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["33"] = { pos = { x = 0.286, y = 0.409, z = -31.049 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["32"] = { pos = { x = 0.431, y = 0.409, z = -29.579 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["34"] = { pos = { x = -0.996, y = 0.409, z = -29.840 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["35"] = { pos = { x = 1.340, y = 0.409, z = -30.593 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["36"] = { pos = { x = 1.156, y = 0.409, z = -31.662 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["3"] = { pos = { x = 0.306, y = 0.000, z = -22.942 }, rot = { x = 0.000, y = 158.660, z = 0.000 } },
|
||||
["6"] = { pos = { x = 28.065, y = -20.265, z = -69.938 }, rot = { x = 0.000, y = 172.070, z = 0.000 } },
|
||||
["8"] = { pos = { x = 28.932, y = -20.269, z = -76.006 }, rot = { x = 0.000, y = 180.250, z = 0.000 } },
|
||||
["7"] = { pos = { x = 27.930, y = -20.269, z = -78.924 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["48"] = { pos = { x = 27.198, y = -20.253, z = -69.702 }, rot = { x = 0.000, y = 173.680, z = 0.000 } },
|
||||
["50"] = { pos = { x = 28.548, y = -20.270, z = -75.878 }, rot = { x = 0.000, y = 187.010, z = 0.000 } },
|
||||
["49"] = { pos = { x = 28.153, y = -20.269, z = -78.518 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["51"] = { pos = { x = 5.345, y = 0.310, z = -23.126 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["10"] = { pos = { x = 10.018, y = 0.000, z = -21.993 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["45"] = { pos = { x = -9.308, y = 0.294, z = -28.947 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["46"] = { pos = { x = -7.723, y = 0.294, z = -28.968 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["47"] = { pos = { x = -10.369, y = 0.294, z = -27.766 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["52"] = { pos = { x = 20.290, y = 0.310, z = -66.938 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["53"] = { pos = { x = -21.579, y = 0.310, z = -86.783 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["54"] = { pos = { x = -9.350, y = 0.310, z = -62.626 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["13"] = { pos = { x = -5.988, y = 0.310, z = -79.152 }, rot = { x = 0.000, y = 310.420, z = 0.000 } },
|
||||
["14"] = { pos = { x = -10.162, y = 0.516, z = -76.213 }, rot = { x = 0.000, y = 322.020, z = 0.000 } },
|
||||
["15"] = { pos = { x = -11.270, y = 0.516, z = -70.987 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["16"] = { pos = { x = -11.641, y = 0.440, z = -65.785 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["17"] = { pos = { x = -6.288, y = 0.516, z = -60.672 }, rot = { x = 0.000, y = 26.670, z = 0.000 } },
|
||||
["18"] = { pos = { x = 1.091, y = 0.516, z = -58.354 }, rot = { x = 0.000, y = 38.290, z = 0.000 } },
|
||||
["19"] = { pos = { x = 7.304, y = 0.516, z = -53.806 }, rot = { x = 0.000, y = 26.670, z = 0.000 } },
|
||||
["20"] = { pos = { x = 8.272, y = 0.310, z = -49.605 }, rot = { x = 0.000, y = 26.670, z = 0.000 } },
|
||||
["21"] = { pos = { x = 5.085, y = 0.516, z = -43.072 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["22"] = { pos = { x = 0.188, y = 0.516, z = -34.720 }, rot = { x = 0.000, y = 0.000, z = 0.000 } }
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
dummy_points = {
|
||||
["4"] = { pos = { x = -8.131, y = -2.531, z = 54.131 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["29"] = { pos = { x = -63.270, y = 1.875, z = 52.341 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["3"] = { pos = { x = -9.169, y = -2.531, z = 53.425 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["28"] = { pos = { x = -8.177, y = -2.531, z = 54.754 }, rot = { x = 0.000, y = 113.060, z = 0.000 } },
|
||||
["25"] = { pos = { x = -0.155, y = -2.531, z = 50.764 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["27"] = { pos = { x = -8.312, y = -2.531, z = 53.141 }, rot = { x = 0.000, y = 101.820, z = 0.000 } },
|
||||
["26"] = { pos = { x = -0.336, y = -2.531, z = 54.207 }, rot = { x = 0.000, y = 184.190, z = 0.000 } },
|
||||
["24"] = { pos = { x = -6.828, y = -2.506, z = 51.072 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["23"] = { pos = { x = -8.475, y = -2.531, z = 52.130 }, rot = { x = 0.000, y = 78.310, z = 0.000 } },
|
||||
["8"] = { pos = { x = -77.169, y = 1.806, z = 51.958 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["1"] = { pos = { x = 17.609, y = 77.040, z = -81.971 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["2"] = { pos = { x = 16.706, y = 77.040, z = -82.860 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["15"] = { pos = { x = 16.413, y = 77.040, z = -80.653 }, rot = { x = 0.000, y = 174.620, z = 0.000 } },
|
||||
["14"] = { pos = { x = 2.603, y = 76.921, z = -84.417 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["16"] = { pos = { x = 15.431, y = 77.123, z = -80.805 }, rot = { x = 0.000, y = 175.310, z = 0.000 } },
|
||||
["11"] = { pos = { x = 15.091, y = 77.126, z = -82.639 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["12"] = { pos = { x = 15.159, y = 77.085, z = -83.303 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["13"] = { pos = { x = 2.832, y = 76.921, z = -83.546 }, rot = { x = 0.000, y = 177.070, z = 0.000 } },
|
||||
["5"] = { pos = { x = 10.811, y = 65.850, z = -90.566 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["6"] = { pos = { x = 18.543, y = 77.040, z = -81.025 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["7"] = { pos = { x = 17.114, y = 77.040, z = -81.433 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["18"] = { pos = { x = 17.363, y = 77.040, z = -78.488 }, rot = { x = 0.000, y = 250.360, z = 0.000 } },
|
||||
["22"] = { pos = { x = 3.393, y = 76.921, z = -85.094 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["17"] = { pos = { x = 17.417, y = 77.040, z = -79.597 }, rot = { x = 0.000, y = 279.340, z = 0.000 } },
|
||||
["20"] = { pos = { x = 15.242, y = 77.127, z = -79.029 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["19"] = { pos = { x = 15.982, y = 77.040, z = -77.278 }, rot = { x = 0.000, y = 240.380, z = 0.000 } },
|
||||
["21"] = { pos = { x = 3.340, y = 76.921, z = -83.589 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["9"] = { pos = { x = 57.593, y = 76.940, z = -81.142 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["10"] = { pos = { x = -3.588, y = -2.532, z = 53.148 }, rot = { x = 0.000, y = 0.000, z = 0.000 } }
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
dummy_points = {
|
||||
["1"] = { pos = { x = 40.649, y = 74.015, z = -63.975 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["2"] = { pos = { x = 40.445, y = 74.015, z = -65.171 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["3"] = { pos = { x = 43.679, y = 73.756, z = -64.292 }, rot = { x = 0.000, y = 264.770, z = 0.000 } },
|
||||
["7"] = { pos = { x = 31.945, y = 73.756, z = -66.569 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["4"] = { pos = { x = 43.199, y = 73.756, z = -66.194 }, rot = { x = 0.000, y = 293.930, z = 0.000 } },
|
||||
["10"] = { pos = { x = 41.492, y = 73.877, z = -66.922 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["8"] = { pos = { x = 34.036, y = 73.756, z = -66.191 }, rot = { x = 0.000, y = 343.230, z = 0.000 } },
|
||||
["6"] = { pos = { x = 31.034, y = 73.756, z = -63.035 }, rot = { x = 0.000, y = 45.860, z = 0.000 } },
|
||||
["9"] = { pos = { x = 43.016, y = 73.756, z = -67.359 }, rot = { x = 0.000, y = 300.090, z = 0.000 } },
|
||||
["5"] = { pos = { x = 32.610, y = 73.756, z = -60.647 }, rot = { x = 0.000, y = 188.850, z = 0.000 } }
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
dummy_points = {
|
||||
["2"] = { pos = { x = 0.187, y = 5.767, z = 15.309 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["1"] = { pos = { x = 1.538, y = 5.767, z = 15.550 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["6"] = { pos = { x = -1.919, y = 5.773, z = 21.670 }, rot = { x = 0.000, y = 173.460, z = 0.000 } },
|
||||
["7"] = { pos = { x = -0.293, y = 5.773, z = 22.193 }, rot = { x = 0.000, y = 184.120, z = 0.000 } },
|
||||
["9"] = { pos = { x = 0.020, y = 5.773, z = 19.782 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["8"] = { pos = { x = 1.428, y = 5.773, z = 21.770 }, rot = { x = 0.000, y = 195.760, z = 0.000 } },
|
||||
["3"] = { pos = { x = -1.160, y = 2.877, z = 4.891 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["5"] = { pos = { x = -2.749, y = 5.767, z = 16.280 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["4"] = { pos = { x = -1.086, y = 5.767, z = 15.593 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["10"] = { pos = { x = -0.007, y = 5.773, z = 11.334 }, rot = { x = 0.000, y = 179.470, z = 0.000 } },
|
||||
["11"] = { pos = { x = -2.119, y = 5.773, z = 10.559 }, rot = { x = 0.000, y = 146.600, z = 0.000 } },
|
||||
["13"] = { pos = { x = 0.004, y = 5.773, z = 9.127 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["12"] = { pos = { x = 1.608, y = 5.773, z = 10.334 }, rot = { x = 0.000, y = 227.160, z = 0.000 } },
|
||||
["14"] = { pos = { x = 0.101, y = 3.045, z = -2.867 }, rot = { x = 0.000, y = 0.000, z = 0.000 } }
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
dummy_points = {
|
||||
["1"] = { pos = { x = -9.460, y = 0.000, z = -39.264 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["2"] = { pos = { x = -8.730, y = 0.000, z = -35.542 }, rot = { x = 0.000, y = 358.450, z = 0.000 } },
|
||||
["3"] = { pos = { x = 29.235, y = 0.000, z = 5.629 }, rot = { x = 0.000, y = 0.000, z = 0.000 } }
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
dummy_points = {
|
||||
["1"] = { pos = { x = 636.529, y = 127.008, z = 334.852 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["7"] = { pos = { x = 608.788, y = 114.032, z = 498.020 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["2"] = { pos = { x = 490.211, y = 172.527, z = 602.491 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["4"] = { pos = { x = 639.093, y = 123.123, z = 397.359 }, rot = { x = 0.000, y = 230.926, z = 0.000 } },
|
||||
["5"] = { pos = { x = 7.137, y = 193.730, z = 362.236 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["3"] = { pos = { x = 13.252, y = 193.630, z = 355.244 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["6"] = { pos = { x = 5.012, y = 193.630, z = 351.965 }, rot = { x = 0.000, y = 0.000, z = 0.000 } }
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,8 @@
|
||||
dummy_points = {
|
||||
["1"] = { pos = { x = 87.452, y = 0.792, z = -22.033 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["2"] = { pos = { x = 89.140, y = 0.792, z = -20.460 }, rot = { x = 0.000, y = 257.636, z = 0.000 } },
|
||||
["3"] = { pos = { x = 88.900, y = 6.462, z = 33.100 }, rot = { x = 0.000, y = 0.000, z = 0.000 } },
|
||||
["4"] = { pos = { x = 83.923, y = 15.993, z = 108.618 }, rot = { x = 0.000, y = 85.649, z = 0.000 } },
|
||||
["5"] = { pos = { x = 106.237, y = 15.993, z = 110.155 }, rot = { x = 0.000, y = 219.604, z = 0.000 } },
|
||||
["6"] = { pos = { x = 135.571, y = 27.420, z = 110.573 }, rot = { x = 0.000, y = 165.911, z = 0.000 } }
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
function OnDie(context, element_type, strike_type)
|
||||
ScriptLib.DropSubfield(context, {subfield_name = "Ore_Trishiraite"})
|
||||
end
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,3 +1,3 @@
|
||||
-- 任务配置数据开始-----------------------------
|
||||
|
||||
-- 任务配置数据开始-----------------------------
|
||||
|
||||
main_id = 13016
|
||||
3
gdconf/game_data_config/lua/quest/Q13020ShareConfig.lua
Normal file
3
gdconf/game_data_config/lua/quest/Q13020ShareConfig.lua
Normal file
File diff suppressed because one or more lines are too long
3
gdconf/game_data_config/lua/quest/Q13021ShareConfig.lua
Normal file
3
gdconf/game_data_config/lua/quest/Q13021ShareConfig.lua
Normal file
@@ -0,0 +1,3 @@
|
||||
-- 任务配置数据开始-----------------------------
|
||||
|
||||
main_id = 13021
|
||||
3
gdconf/game_data_config/lua/quest/Q13022ShareConfig.lua
Normal file
3
gdconf/game_data_config/lua/quest/Q13022ShareConfig.lua
Normal file
File diff suppressed because one or more lines are too long
3
gdconf/game_data_config/lua/quest/Q13023ShareConfig.lua
Normal file
3
gdconf/game_data_config/lua/quest/Q13023ShareConfig.lua
Normal file
@@ -0,0 +1,3 @@
|
||||
-- 任务配置数据开始-----------------------------
|
||||
|
||||
main_id = 13023
|
||||
3
gdconf/game_data_config/lua/quest/Q13024ShareConfig.lua
Normal file
3
gdconf/game_data_config/lua/quest/Q13024ShareConfig.lua
Normal file
@@ -0,0 +1,3 @@
|
||||
-- 任务配置数据开始-----------------------------
|
||||
|
||||
main_id = 13024
|
||||
3
gdconf/game_data_config/lua/quest/Q13025ShareConfig.lua
Normal file
3
gdconf/game_data_config/lua/quest/Q13025ShareConfig.lua
Normal file
@@ -0,0 +1,3 @@
|
||||
-- 任务配置数据开始-----------------------------
|
||||
|
||||
main_id = 13025
|
||||
3
gdconf/game_data_config/lua/quest/Q13026ShareConfig.lua
Normal file
3
gdconf/game_data_config/lua/quest/Q13026ShareConfig.lua
Normal file
@@ -0,0 +1,3 @@
|
||||
-- 任务配置数据开始-----------------------------
|
||||
|
||||
main_id = 13026
|
||||
3
gdconf/game_data_config/lua/quest/Q19150ShareConfig.lua
Normal file
3
gdconf/game_data_config/lua/quest/Q19150ShareConfig.lua
Normal file
@@ -0,0 +1,3 @@
|
||||
-- 任务配置数据开始-----------------------------
|
||||
|
||||
main_id = 19150
|
||||
3
gdconf/game_data_config/lua/quest/Q19151ShareConfig.lua
Normal file
3
gdconf/game_data_config/lua/quest/Q19151ShareConfig.lua
Normal file
@@ -0,0 +1,3 @@
|
||||
-- 任务配置数据开始-----------------------------
|
||||
|
||||
main_id = 19151
|
||||
3
gdconf/game_data_config/lua/quest/Q19152ShareConfig.lua
Normal file
3
gdconf/game_data_config/lua/quest/Q19152ShareConfig.lua
Normal file
@@ -0,0 +1,3 @@
|
||||
-- 任务配置数据开始-----------------------------
|
||||
|
||||
main_id = 19152
|
||||
3
gdconf/game_data_config/lua/quest/Q19153ShareConfig.lua
Normal file
3
gdconf/game_data_config/lua/quest/Q19153ShareConfig.lua
Normal file
@@ -0,0 +1,3 @@
|
||||
-- 任务配置数据开始-----------------------------
|
||||
|
||||
main_id = 19153
|
||||
3
gdconf/game_data_config/lua/quest/Q19154ShareConfig.lua
Normal file
3
gdconf/game_data_config/lua/quest/Q19154ShareConfig.lua
Normal file
@@ -0,0 +1,3 @@
|
||||
-- 任务配置数据开始-----------------------------
|
||||
|
||||
main_id = 19154
|
||||
3
gdconf/game_data_config/lua/quest/Q19155ShareConfig.lua
Normal file
3
gdconf/game_data_config/lua/quest/Q19155ShareConfig.lua
Normal file
@@ -0,0 +1,3 @@
|
||||
-- 任务配置数据开始-----------------------------
|
||||
|
||||
main_id = 19155
|
||||
3
gdconf/game_data_config/lua/quest/Q19156ShareConfig.lua
Normal file
3
gdconf/game_data_config/lua/quest/Q19156ShareConfig.lua
Normal file
@@ -0,0 +1,3 @@
|
||||
-- 任务配置数据开始-----------------------------
|
||||
|
||||
main_id = 19156
|
||||
3
gdconf/game_data_config/lua/quest/Q19157ShareConfig.lua
Normal file
3
gdconf/game_data_config/lua/quest/Q19157ShareConfig.lua
Normal file
@@ -0,0 +1,3 @@
|
||||
-- 任务配置数据开始-----------------------------
|
||||
|
||||
main_id = 19157
|
||||
3
gdconf/game_data_config/lua/quest/Q19158ShareConfig.lua
Normal file
3
gdconf/game_data_config/lua/quest/Q19158ShareConfig.lua
Normal file
@@ -0,0 +1,3 @@
|
||||
-- 任务配置数据开始-----------------------------
|
||||
|
||||
main_id = 19158
|
||||
3
gdconf/game_data_config/lua/quest/Q19159ShareConfig.lua
Normal file
3
gdconf/game_data_config/lua/quest/Q19159ShareConfig.lua
Normal file
@@ -0,0 +1,3 @@
|
||||
-- 任务配置数据开始-----------------------------
|
||||
|
||||
main_id = 19159
|
||||
3
gdconf/game_data_config/lua/quest/Q19160ShareConfig.lua
Normal file
3
gdconf/game_data_config/lua/quest/Q19160ShareConfig.lua
Normal file
@@ -0,0 +1,3 @@
|
||||
-- 任务配置数据开始-----------------------------
|
||||
|
||||
main_id = 19160
|
||||
3
gdconf/game_data_config/lua/quest/Q19161ShareConfig.lua
Normal file
3
gdconf/game_data_config/lua/quest/Q19161ShareConfig.lua
Normal file
@@ -0,0 +1,3 @@
|
||||
-- 任务配置数据开始-----------------------------
|
||||
|
||||
main_id = 19161
|
||||
3
gdconf/game_data_config/lua/quest/Q19162ShareConfig.lua
Normal file
3
gdconf/game_data_config/lua/quest/Q19162ShareConfig.lua
Normal file
@@ -0,0 +1,3 @@
|
||||
-- 任务配置数据开始-----------------------------
|
||||
|
||||
main_id = 19162
|
||||
3
gdconf/game_data_config/lua/quest/Q19170ShareConfig.lua
Normal file
3
gdconf/game_data_config/lua/quest/Q19170ShareConfig.lua
Normal file
@@ -0,0 +1,3 @@
|
||||
-- 任务配置数据开始-----------------------------
|
||||
|
||||
main_id = 19170
|
||||
3
gdconf/game_data_config/lua/quest/Q19171ShareConfig.lua
Normal file
3
gdconf/game_data_config/lua/quest/Q19171ShareConfig.lua
Normal file
File diff suppressed because one or more lines are too long
3
gdconf/game_data_config/lua/quest/Q19172ShareConfig.lua
Normal file
3
gdconf/game_data_config/lua/quest/Q19172ShareConfig.lua
Normal file
File diff suppressed because one or more lines are too long
3
gdconf/game_data_config/lua/quest/Q19173ShareConfig.lua
Normal file
3
gdconf/game_data_config/lua/quest/Q19173ShareConfig.lua
Normal file
File diff suppressed because one or more lines are too long
3
gdconf/game_data_config/lua/quest/Q21033ShareConfig.lua
Normal file
3
gdconf/game_data_config/lua/quest/Q21033ShareConfig.lua
Normal file
@@ -0,0 +1,3 @@
|
||||
-- 任务配置数据开始-----------------------------
|
||||
|
||||
main_id = 21033
|
||||
3
gdconf/game_data_config/lua/quest/Q21034ShareConfig.lua
Normal file
3
gdconf/game_data_config/lua/quest/Q21034ShareConfig.lua
Normal file
@@ -0,0 +1,3 @@
|
||||
-- 任务配置数据开始-----------------------------
|
||||
|
||||
main_id = 21034
|
||||
3
gdconf/game_data_config/lua/quest/Q21035ShareConfig.lua
Normal file
3
gdconf/game_data_config/lua/quest/Q21035ShareConfig.lua
Normal file
@@ -0,0 +1,3 @@
|
||||
-- 任务配置数据开始-----------------------------
|
||||
|
||||
main_id = 21035
|
||||
3
gdconf/game_data_config/lua/quest/Q21036ShareConfig.lua
Normal file
3
gdconf/game_data_config/lua/quest/Q21036ShareConfig.lua
Normal file
@@ -0,0 +1,3 @@
|
||||
-- 任务配置数据开始-----------------------------
|
||||
|
||||
main_id = 21036
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user