local EventAction_Play = { GameTime = 0; GameEndEvent = -1; } -- 触发器激活时,将执行Action的Execute function EventAction_Play:Execute(...) if not UGCGameSystem.IsServer() then return end self.bEnableActionTick = true -- 设置当前游戏模式 UGCGameSystem.GameState:SetGameStateType(CustomEnum.EGameState.Playing) -- 重置所有玩家 位置及游戏得分信息等 local TempPlayerControllers = UGCGameSystem.GetAllPlayerController() for _,PlayerController in pairs(TempPlayerControllers) do -- Test --if UE.IsValid(PlayerController.Pawn) then PlayerController.Pawn:K2_DestroyActor() end --UGCGameSystem.GetRespawnComponent():AddRespawnPlayer(PlayerController.PlayerKey, 0) if PlayerController.PlayerState then PlayerController.PlayerState:ResetPlayerState() end UGCLogSystem.Log("[EventAction_Play_Execute] ResSpawnSucceed Key: %d", PlayerController.PlayerKey) end -- Test -- 重置所有玩家 UGCGameSystem.SendModeCustomEvent("ResetAllPlayer") -- 更新得分信息 UGCGameSystem.GameState:UpdateAllPlayerScoreDatas() -- 重置队伍得分 UGCGameSystem.GameState:ResetTeamScore() -- 绑定游戏结束事件 UGCEventSystem.AddListener(EventEnum.GameStateChange, self.GameFinish, self) -- 初始化游戏时间 self.GameStartTime = UGCSystemLibrary.GetGameTime(); self.LastUpdateRemainTime = self.GameTime UGCGameSystem.GameState:SetGameTime(self.GameTime) UGCLogSystem.Log("[EventAction_Play_Execute] Finish") return true end function EventAction_Play:GameFinish(GameStateType) if GameStateType == CustomEnum.EGameState.End then self.bEnableActionTick = false if self.GameEndEvent then -- 发送游戏结束事件 UGCEventSystem.SendEvent(self.GameEndEvent) else UGCLogSystem.Log("[EventAction_Play_GameFinish] GameEndEvent is nil") end UGCEventSystem.RemoveListener(EventEnum.GameStateChange, self.GameFinish, self) end end function EventAction_Play:Update(DeltaSeconds) local CurrentRealTime = UGCSystemLibrary.GetGameTime(); local RemainTime = self.GameTime - (CurrentRealTime - self.GameStartTime); local CurrentUpdateRemainTime = math.ceil(RemainTime) -- 更新游戏时间 if self.LastUpdateRemainTime - CurrentUpdateRemainTime >= 1 then -- 判断游戏时间是否已结束 if CurrentUpdateRemainTime <= 0 then self.LastUpdateRemainTime = 0 UGCGameSystem.GameState:GameFinish() else self.LastUpdateRemainTime = CurrentUpdateRemainTime end UGCGameSystem.GameState:SetGameTime(self.LastUpdateRemainTime) -- UGCLogSystem.Log("[EventAction_Play_Update] WaitTime: %d", self.LastUpdateRemainTime) end end return EventAction_Play