local Action_CheckPlayers = { -- 可配置参数定义,参数将显示在Action配置面板 -- 例: -- MyIntParameter = 0 -- CheckPlayers } -- 触发器激活时,将执行Action的Execute function Action_CheckPlayers:Execute(...) UGCLogSystem.Log("[Action_CheckPlayers:Execute] 执行") GlobalTickTool:AddTick(self, self.OnCheckPlayers, 10); -- 检查 GlobalTickTool:AddTick(self, self.OnCheckInfinite, 3) GlobalCheckPlayers = self; return true end function Action_CheckPlayers:OnCheckPlayers(dt, st) local PCs = UGCGameSystem.GetAllPlayerController(false) if table.getCount(PCs) == 1 then if table.isEmpty(GameState.PlayerDisconnect) then -- 说明此时没有走玩家退出逻辑,开始执行结束 local LastPlayerKey = nil; for i, PC in pairs(PCs) do UGCLogSystem.Log("[Action_CheckPlayers:OnCheckPlayers] 111") MiniManager.CurrMiniMode:HandlePlayerRank(PC.PlayerKey, true); LastPlayerKey = PC.PlayerKey; end if table.getCount(UE.GetAccountInfo()) == 1 then UGCLogSystem.Log("[Action_CheckPlayers:OnCheckPlayers] 333") for i, v in pairs(UE.GetAccountInfo()) do MiniManager.CurrMiniMode:SetGameOver(i); end else for PlayerKey, Info in pairs(UE.GetAccountInfo()) do if PlayerKey ~= LastPlayerKey then UGCLogSystem.Log("[Action_CheckPlayers:OnCheckPlayers] 222") table.func(MiniManager, "OnPlayerLeave", PlayerKey) GlobalTickTool:RemoveAll(self); end end end end end end -- 永远不要停 function Action_CheckPlayers:OnCheckInfinite() UGCLogSystem.Log("[Action_CheckPlayers:OnCheckInfinite] 检测是否有无限子弹") local Pawns = UGCGameSystem.GetAllPlayerPawn(); for _, Pawn in pairs(Pawns) do -- 设置玩家无限子弹方式 if UE.IsValidPawn(Pawn) then -- 检查是否是无限子弹模式 for _, Enum in pairs(AllWeaponEnums) do local Weapon = UGCWeaponManagerSystem.GetWeaponBySlot(Pawn, Enum); if Weapon and UE.IsValid(Weapon) and ItemTool.IsShootWeapon(Weapon) then local ItemID = Weapon:GetWeaponItemID(); if table.isEmpty(WeaponSuits[ItemID]) then break ; end -- 因为只有一把枪,可以这样搞 -- 首先检查一下是否存在这个配件, if WeaponSuits[ItemID][EWeaponPartType.Magazine] then --- 获取武器是否有配件 local Parts = ItemTool.GetWeaponParts(Weapon); local BestMagazineList = WeaponSuits[ItemID][EWeaponPartType.Magazine] if table.isEmpty(BestMagazineList) then return; end local BestMagazine = BestMagazineList[1]; UGCLogSystem.Log("[Action_CheckPlayers:OnCheckInfinite] BestMagazine = %d", BestMagazine); local HasTheBest = false; --- 检查是否存在 for _, PartId in pairs(Parts) do if PartId == BestMagazine then HasTheBest = true; end end if not HasTheBest then Pawn:ReplacePartId(BestMagazine, EWeaponPartType.Magazine); end end end end ItemTool.SetAllWeaponInfinite(Pawn, EFillBulletType.ClipInfinite, true); end end end return Action_CheckPlayers