local MiniGameMode_DigitalTrap = { IsGameEnd = false; bIsInGame = false; -- 给玩家结算添加的得分{[PlayerKey] = AddScore, ...} PlayerAddScore = {}; TrapManager = nil; TrapManagerPath = ""; AddScore = 1; DeadPC = {}; PlayerStunEnemyCount = {}; } --- 游戏初始化 function MiniGameMode_DigitalTrap:Init() self.TrapManagerPath = MiniGameConfig.MiniGameInfo[MiniGameConfig.MiniGameType.DigitalTrap].GameParam.TrapManagerPath self.TrapManager = UGCSystemLibrary.GetUniqueInstanceFromPath(self.TrapManagerPath) UGCEventSystem.AddListener(EventEnum.PlayerDropMiniGameKillBox, self.PlayerDropTrap, self) end --- 准备时间结束游戏开始 function MiniGameMode_DigitalTrap:GameBegin() self.bIsInGame = true -- 二次赋值 if not UE.IsValid(self.TrapManager) then self.TrapManager = UGCSystemLibrary.GetUniqueInstanceFromPath(self.TrapManagerPath) end if UE.IsValid(self.TrapManager) then self.TrapManager:StartPlay() if self:CheckTrapGameIsFinish_InternalCall() then self:SetMiniGameModeEnd() end else UGCLogSystem.LogError("[MiniGameMode_DigitalTrap_GameBegin] TrapManager is nil") self:SetMiniGameModeEnd() end local AllPawn = UGCGameSystem.GetAllPlayerPawn() for i, v in pairs(AllPawn) do if v.PlayerKey then v:SetNowCameraType(CustomEnum.EPlayerPawnCameraType.JumpCamera2) end end end function MiniGameMode_DigitalTrap:Update(DeltaTime) -- 判断该玩法是否已结束 if self.IsGameEnd then return end -- Update逻辑 -- 判断是否有玩家退出且场景没有玩家 if self.bIsInGame then if self.LastCheckAliveTime == nil then self.LastCheckAliveTime = 0 end self.LastCheckAliveTime = self.LastCheckAliveTime + DeltaTime if self.LastCheckAliveTime >= 2 then self.LastCheckAliveTime = 0 if UGCSystemLibrary.GetAlivePlayerCount() <= 1 then self:SetMiniGameModeEnd() end end end -- Update逻辑 End end --- 设置游戏结束,手动触发会结束该玩法,倒计时结束将自动触发该函数 function MiniGameMode_DigitalTrap:SetMiniGameModeEnd() if not self.IsGameEnd then self.IsGameEnd = true self:MiniGameEnd() end end --- 获取当前回合游戏结算, ---@return "{[PlayerKey] = AddScore, ...}" function MiniGameMode_DigitalTrap:GetPlayerAddScore() return self.PlayerAddScore end --- 外层调用,判断该玩法是否已结束 function MiniGameMode_DigitalTrap:CheckGameFinish() return self.IsGameEnd end --- 内部作用,判断玩法是否结束函数 function MiniGameMode_DigitalTrap:CheckTrapGameIsFinish_InternalCall() local AllPC = UGCGameSystem.GetAllPlayerController() local AliveNum = 0 for i, v in pairs(AllPC) do if self.DeadPC[v.PlayerKey] == nil then AliveNum = AliveNum + 1 end end if AliveNum <= (GlobalConfigs.IsDebug and 0 or 1) then return true else return false end end --- 结束触发 function MiniGameMode_DigitalTrap:MiniGameEnd() if UE.IsValid(self.TrapManager) then self.TrapManager:StopTrapGame() -- 给存活玩家+4分 for i, v in pairs(UGCGameSystem.GetAllPlayerController()) do if self.PlayerAddScore[v.PlayerKey] == nil then self.PlayerAddScore[v.PlayerKey] = 4 end end else UGCLogSystem.LogError("[MiniGameMode_DigitalTrap_MiniGameEnd] TrapManager is nil") end UGCGameSystem.GameState:SetPlayerMiniGameScore(self.PlayerAddScore) UGCEventSystem.RemoveListener(EventEnum.PlayerDropMiniGameKillBox, self.PlayerDropTrap, self) end ------------------------------------------ Player ------------------------------------------ --- 玩家死亡 function MiniGameMode_DigitalTrap:PlayerDead(VictimKey, CauserKey, WeaponID, DamageType, IsHeadShotDamage, Distance, DamageValue, Assister) end --- 玩家伤害修改 function MiniGameMode_DigitalTrap:PlayerDamageModify(DamageAmount, VictimPawn, CauserPC) if VictimPawn ~= nil and CauserPC ~= nil and CauserPC.PlayerKey ~= nil and VictimPawn.PlayerKey ~= CauserPC.PlayerKey then if SkillConfig.ExeSkill(SkillConfig.ESkillType.Stun, VictimPawn) then if self.PlayerStunEnemyCount[CauserPC.PlayerKey] == nil then self.PlayerStunEnemyCount[CauserPC.PlayerKey] = 1 else self.PlayerStunEnemyCount[CauserPC.PlayerKey] = 1 + self.PlayerStunEnemyCount[CauserPC.PlayerKey] end MiniGameConfig.CheckPlayerTask(CauserPC.PlayerKey, MiniGameConfig.MiniGameType.DigitalTrap, self.PlayerStunEnemyCount[CauserPC.PlayerKey], false) end return 0 end return DamageAmount end --- 玩家受控时 function MiniGameMode_DigitalTrap:PlayerPossessed(PlayerKey) end --- 玩家BeginPlay触发 function MiniGameMode_DigitalTrap:PlayerBeginPlay(PlayerPawn) end ---------------------------------------- Player End ---------------------------------------- function MiniGameMode_DigitalTrap:PlayerDropTrap(PlayerKey) if self.DeadPC[PlayerKey] then return end self.DeadPC[PlayerKey] = 1 local PP = UGCGameSystem.GetPlayerPawnByPlayerKey(PlayerKey) UGCPawnAttrSystem.SetHealth(PP, -1); local PC = UGCGameSystem.GetPlayerControllerByPlayerKey(PlayerKey) if PC then -- UGCSendRPCSystem.ActorRPCNotify(PlayerKey, PC, "BlendToGodCamera") PC:Server_SetSceneCamera(true) end self.PlayerAddScore[PlayerKey] = self.AddScore self.AddScore = self.AddScore + 1 if self:CheckTrapGameIsFinish_InternalCall() then self:SetMiniGameModeEnd() end end return MiniGameMode_DigitalTrap