146 lines
5.2 KiB
Lua
146 lines
5.2 KiB
Lua
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 |