UGCProjects/SoloKing/Script/gamemode/Action_CheckPlayers.lua
2025-01-04 23:00:19 +08:00

87 lines
3.0 KiB
Lua
Raw 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 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