SkillConfig = SkillConfig or {} SkillConfig.ESkillType = { DetectingArrow = 1; PlaceNirvana = 2; TestSkill = 3; } -- 玩家的技能冷却 SkillConfig.PlayerCooling = {} -- {[ESkillType] = {PlayerKey = LastSkillTime}, } SkillConfig.SkillInfo = { [SkillConfig.ESkillType.DetectingArrow] = { SkillID = 120, CD = 30, OtherEffect = function(PlayerPawn) end, }, [SkillConfig.ESkillType.PlaceNirvana] = { SkillID = 121, CD = 10, OtherEffect = function(PlayerPawn) end, }, [SkillConfig.ESkillType.TestSkill] = { SkillID = 122, CD = 10, OtherEffect = function(PlayerPawn) end, }, } SkillConfig.UseSkillName = "ExeSkill" function SkillConfig.Init() UGCGameSystem.GameState[SkillConfig.UseSkillName] = function(GS, InPlayerKey, InSkillType, InSkillEventType) SkillConfig.ExeSkill(InPlayerKey, InSkillType, InSkillEventType) end end function SkillConfig.ExeSkill(InPlayerKey, InSkillType, InSkillEventType) if UGCGameSystem.IsServer() then local InPawn = UGCGameSystem.GetPlayerPawnByPlayerKey(InPlayerKey) if UE.IsValid(InPawn) and InPawn.PlayerKey then UGCLogSystem.Log("[SkillConfig_ExeSkill] SkillType:%s, InSkillEventType:%s", tostring(InSkillType), tostring(InSkillEventType)) local TargetSkillInfo = SkillConfig.SkillInfo[InSkillType] if TargetSkillInfo then local SkillManager = InPawn:GetSkillManagerComponent() if SkillManager ~= nil then if InSkillEventType == nil then InSkillEventType = UTSkillEventType.SET_KEY_DOWN end -- UGCSkillManagerSystem.TriggerSkillEventByPath(InPawn, TargetSkillInfo.SkillID, InSkillEventType) SkillManager:TriggerEvent(TargetSkillInfo.SkillID, InSkillEventType) if TargetSkillInfo.OtherEffect then TargetSkillInfo.OtherEffect(InPawn) end UGCLogSystem.Log("[SkillConfig_ExeSkill] Succeed", tostring(InSkillType)) return true end else UGCLogSystem.LogError("[SkillConfig_ExeSkil] Exe SkillType:%s is Error", tostring(InSkillType)) end else UGCLogSystem.LogError("[SkillConfig_ExeSkill] InPawn is nil") end return false else if SkillConfig.CheckPlayerSkill(InPlayerKey, InSkillType) then UGCSendRPCSystem.ActorRPCNotify(nil, UGCGameSystem.GameState, SkillConfig.UseSkillName, InPlayerKey, InSkillType, InSkillEventType) return true else UGCLogSystem.LogError("[SkillConfig_ExeSkill] 技能还在冷却") return false end end end function SkillConfig.GetSkillRestCoolDownTime(InPlayerKey, InSkillType) local InPawn = UGCGameSystem.GetPlayerPawnByPlayerKey(InPlayerKey) if UE.IsValid(InPawn) and InPawn.PlayerKey then UGCLogSystem.Log("[SkillConfig_GetSkillCD] SkillType:%s, InSkillEventType:%s", tostring(InPlayerKey), tostring(InSkillType)) local TargetSkillInfo = SkillConfig.SkillInfo[InSkillType] if TargetSkillInfo then local SkillManager = InPawn:GetSkillManagerComponent() if SkillManager ~= nil then return SkillManager:GetRestCoolDownTime(TargetSkillInfo.SkillID) end end end return nil end function SkillConfig.GetSkillCD(InSkillType) local TargetSkillInfo = SkillConfig.SkillInfo[InSkillType] if TargetSkillInfo then return TargetSkillInfo.CD end end function SkillConfig.CheckPlayerSkill(InPlayerKey, InSkillType) local RestCoolDownTime = SkillConfig.GetSkillRestCoolDownTime(InPlayerKey, InSkillType) return (RestCoolDownTime ~= nil and RestCoolDownTime <= 0) end