UGCProjects/SoloKing/Script/gamemode/Action_CheckPlayers.lua

87 lines
3.0 KiB
Lua
Raw Permalink Normal View History

2025-01-04 23:00:19 +08:00
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