跳转到内容

简单连招系统

简单连招系统

local SimpleCombo = {}
--使用方法:
--[[local SimpleCombo=require'SimpleCombo'
客户端游戏启动时入口 注册按键
function GameClient:OnStart()
UI:RegisterPressed(100046,function()
SimpleCombo:ComboAtk()
end)
end
]]
-- 动作参数配置
local AnimName = {
Atk1 = 'Summon01',--水平抓取
Atk2 = 'Summon02',--向上抓取
Atk3 ='LoopShooting01',--连续推掌
Atk4 ='LoopShooting01',--连续推掌
}
-- 播放模式配置
local PlayMode = {
FullBody = Animation.PART_NAME.FullBody, -- 全身播放动画
HalfBody = Animation.PART_NAME.UpperBody -- 半身播放动画
}
-- 玩家属性管理表(可多人)
local playerData = {}
--每次更新的间隔时间
local update_time=0.1
--是否已初始化连招
local isIni=false
--连招方法,在开始游戏时注册按键
function SimpleCombo:ComboAtk()
--确保已经初始化
if not isIni then
SimpleCombo.ComboIni()
isIni=true
end
local player = Character:GetLocalPlayerId()-- 获取本地的玩家
-- 初始化玩家数据(防止玩家没有被初始化)
if not playerData[player] then
playerData[player] = {
AttackCD = false,
AttackCount = 0,
ComboCD = 0
}
end
local data = playerData[player]
-- 判断是否处于攻击CD状态
if not data.AttackCD then
-- 禁用玩家移动
--Character:SetAttributeEnabled(player, Character.ATTR_ENABLE.CanMove, false)
-- 增加玩家攻击次数
data.AttackCount = (data.AttackCount or 0) + 1
-- 根据攻击次数执行对应动作
if data.AttackCount == 1 then
-- 播放动作1
Animation:PlayAnim(Animation.PLAYER_TYPE.Character,player, AnimName.Atk1, PlayMode.FullBody)
elseif data.AttackCount == 2 then
-- 播放动作2
Animation:PlayAnim(Animation.PLAYER_TYPE.Character,player, AnimName.Atk2, PlayMode.FullBody)
elseif data.AttackCount == 3 then
-- 播放动作3
Animation:PlayAnim(Animation.PLAYER_TYPE.Character,player, AnimName.Atk3, PlayMode.FullBody)
elseif data.AttackCount == 4 then
-- 播放动作4,并重置攻击次数为8
Animation:PlayAnim(Animation.PLAYER_TYPE.Character,player, AnimName.Atk4, PlayMode.FullBody)
data.AttackCount = 8
else
-- 重置攻击次数为0
data.AttackCount = 0
end
-- 设置连招CD(每次按键重置ComboCD为0.6秒)
data.ComboCD = 0.6
-- 延迟恢复玩家攻击CD和移动
TimerManager:AddTimer(
0.3,
function ()
data.AttackCD = false
-- Character:SetAttributeEnabled(player, Character.ATTR_ENABLE.CanMove, true)
end)
-- 设置攻击CD状态
data.AttackCD = true
end
end
SimpleCombo.players=0
function SimpleCombo:ComboIni()
-- 清空玩家属性表(游戏重启时)
playerData = {}
---用于检测连招段数
SimpleCombo.players = Character:GetAllPlayerIds()
local ComboTimer=TimerManager:AddLoopTimer(
update_time,
function()
SimpleComboComboTick()
end
)
end
--tick
function SimpleCombo:ComboTick()
-- -- 每update_time秒执行一次
-- local players = Character:GetAllPlayers() -- 获取所有玩家
for _, player in ipairs(SimpleCombo.players) do
local data = playerData[player]
local comboCD = data.ComboCD or 0
-- 如果ComboCD > 0,则减少ComboCD时间
if comboCD > 0 then
data.ComboCD = comboCD - update_time
else
-- 如果ComboCD <= 0,重置攻击次数
data.AttackCount = 0
end
end
end
return SimpleCombo