2025-01-04 23:00:19 +08:00

146 lines
5.2 KiB
Lua
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local EventAction_RoundBegining = {
GameTime = 0;
--- 准备阶段时间
PreparationTime = 0;
GameEndEvent = -1;
}
-- 触发器激活时将执行Action的Execute
function EventAction_RoundBegining:Execute(...)
if not UGCGameSystem.IsServer() then return end
self.DoOnceEnableMove = false
-- 初始化游戏时间
self.GameTimeInst = self.GameTime + self.PreparationTime
-- 更新回合的防线信息
UGCGameSystem.GameState:UpdateNumOfBreakingThroughDefenseLine()
-- 获取防守玩家
self.DefenderPlayerKey = UGCGameSystem.GameState:GetNowDefender()
-- 开启防守玩家的呼吸回血
UGCGameSystem.GameState:SetRespiratoryRegurgitationPlayers({self.DefenderPlayerKey})
-- 当前玩家的地图代码
local MapCode = UGCGameSystem.GameState:GetNowDefenderSelectMap()
UGCLogSystem.Log("[EventAction_RoundBegining_Execute] MapCode:%s", MapCode)
PlacementModeConfig.GetPlaceManager():ImportPlacementCode(self.DefenderPlayerKey, MapCode)
local AllPC = UGCGameSystem.GetAllPlayerController()
for i, v in pairs(AllPC) do
if v.PlayerKey == self.DefenderPlayerKey then
UGCGameSystem.GameState:SetPlayerWeaponCombination(v.PlayerKey, WeaponSelectionCombinationConfig.ECombinationType.Combination2)
UGCSendRPCSystem.ClientShowUI(v.PlayerKey, WidgetConfig.EUIType.TeamChangeTip, true, false, true)
else
UGCGameSystem.GameState:SetPlayerWeaponCombination(v.PlayerKey, WeaponSelectionCombinationConfig.ECombinationType.Combination1)
UGCSendRPCSystem.ClientShowUI(v.PlayerKey, WidgetConfig.EUIType.TeamChangeTip, true, false, false)
end
UGCGameSystem.GameState:ShowPlayerSelectWeaponWidget(v.PlayerKey)
end
-- 刷新出生点
UGCEventSystem.SendEvent(EventEnum.UpdatePlayerStartList)
-- 显示战斗界面
UGCGameSystem.GameState:ShowSimplePlayModeUI(WidgetConfig.EUIType.FightPanel)
-- 设置当前游戏模式
UGCGameSystem.GameState:SetGameStateType(CustomEnum.EGameState.Playing)
-- 清空死亡盒子和可拾取物
UGCSystemLibrary.RemoveActorFromClassName("PlayerTombBox")
UGCSystemLibrary.RemoveActorFromClassName("PickUpWrapperActor")
-- 重置所有玩家
self:RespawnAllPlayers()
-- 设置所有玩家不可移动
UGCSystemLibrary.SetAllPlayerIsMovable(false)
self.bEnableActionTick = true
UGCLogSystem.Log("[EventAction_RoundBegining_Execute] Finish")
return true
end
function EventAction_RoundBegining:RespawnAllPlayers()
UGCGameSystem.SendModeCustomEvent("ResetAllPlayers")
end
function EventAction_RoundBegining:RoundFinish(bAttackSucceed)
self.bEnableActionTick = false
-- 增加防守成功玩家的得分
if not bAttackSucceed then
PlayerScoreSystem.AddPlayerScoreData(self.DefenderPlayerKey, PlacementModeConfig.AddScoreType.DefendSucceedAddScore, 1)
-- 发送得分信息
UGCSendRPCSystem.RPCEvent(self.DefenderPlayerKey, EventEnum.AddTip, TipConfig.TipType.AddScore, PlacementModeConfig.AddScoreType.DefendSucceedAddScore)
end
if self.GameEndEvent then
-- 发送回合结束事件
UGCEventSystem.SendEvent(self.GameEndEvent)
UGCEventSystem.RemoveListener(EventEnum.PlayerEnterLineOfDefense, self.PlayerEnterLineOfDefense, self)
end
end
function EventAction_RoundBegining:Update(DeltaSeconds)
if not self.bEnableActionTick then
return
end
self.GameTimeInst = self.GameTimeInst - DeltaSeconds
-- 判断准备阶段是否结束
if self.GameTimeInst <= self.GameTime and not self.DoOnceEnableMove then
self.DoOnceEnableMove = true
self:EndOfPreparationTime()
end
-- 设置游戏时间
UGCGameSystem.GameState:SetGameTime(math.clamp(math.floor(self.GameTimeInst), 0, self.GameTime))
if self.GameTimeInst <= 0 then
self:RoundFinish(false)
end
end
function EventAction_RoundBegining:EndOfPreparationTime()
UGCLogSystem.Log("[EventAction_RoundBegining_EndOfPreparationTime]")
UGCSystemLibrary.SetAllPlayerIsMovable(true)
-- 发送准备时间结束到客户端
UGCSendRPCSystem.RPCEvent(nil, EventEnum.RoundReadyFinish)
UGCEventSystem.AddListener(EventEnum.PlayerEnterLineOfDefense, self.PlayerEnterLineOfDefense, self)
end
-- 玩家进入防线
function EventAction_RoundBegining:PlayerEnterLineOfDefense(PlayerKey)
-- 判断是否为防守玩家
if PlayerKey == self.DefenderPlayerKey then return end
UGCGameSystem.GameState:AddBreakThroughNum()
-- 增加得分
PlayerScoreSystem.AddPlayerScoreData(PlayerKey, PlacementModeConfig.AddScoreType.EnterDefenseLineAddScore, 1)
-- 发送得分信息
UGCSendRPCSystem.RPCEvent(PlayerKey, EventEnum.AddTip, TipConfig.TipType.AddScore, PlacementModeConfig.AddScoreType.EnterDefenseLineAddScore)
local AllPK = UGCSystemLibrary.GetAllPlayerKeys()
for i, OtherPlayerKey in pairs(AllPK) do
if OtherPlayerKey ~= PlayerKey then
UGCSendRPCSystem.RPCEvent(OtherPlayerKey, EventEnum.AddTip, TipConfig.TipType.PlayerBreakthrough, PlayerKey)
end
end
if UGCGameSystem.GameState:IsAttackSucceed() then
self:RoundFinish(true)
else
UGCSystemLibrary.RespawnPlayer(PlayerKey)
end
end
return EventAction_RoundBegining