129 lines
5.7 KiB
Lua
129 lines
5.7 KiB
Lua
|
---
|
|||
|
--- Generated by EmmyLua(https://github.com/EmmyLua)
|
|||
|
--- Created by LT.
|
|||
|
--- DateTime: 2023/12/3 16:48
|
|||
|
---
|
|||
|
|
|||
|
WeaponGradientManager = WeaponGradientManager or {}
|
|||
|
|
|||
|
--- 武器梯度
|
|||
|
WeaponGradientManager.WeaponGradient = {}
|
|||
|
--- 玩家等级 PlayerKey = Grade:uint
|
|||
|
WeaponGradientManager.PlayerGrade = {}
|
|||
|
--- 玩家梯度索引 PlayerKey = GradientIndex:uint
|
|||
|
WeaponGradientManager.PlayerGradientIndex = {}
|
|||
|
--- 玩家更新武器梯度的时间句柄 PlayerKey = TimeHandle
|
|||
|
WeaponGradientManager.UpdateWeaponMatchingHandle = {}
|
|||
|
|
|||
|
|
|||
|
function WeaponGradientManager.Init()
|
|||
|
if UGCGameSystem.IsServer() then
|
|||
|
--- 洗牌梯度列表
|
|||
|
WeaponGradientManager.WeaponGradient = table.DeepCopy(WeaponGradientTable.Gradient)
|
|||
|
table.Shuffle(WeaponGradientManager.WeaponGradient)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
|
|||
|
--- 更新玩家武器搭配
|
|||
|
function WeaponGradientManager.UpdatePlayerGradientWeaponMatching(PlayerKey, NewGrade, IgnoreWeaponIDs)
|
|||
|
if IgnoreWeaponIDs == nil then
|
|||
|
IgnoreWeaponIDs = {}
|
|||
|
elseif type(IgnoreWeaponIDs) ~= "table" then
|
|||
|
IgnoreWeaponIDs = {IgnoreWeaponIDs, }
|
|||
|
end
|
|||
|
|
|||
|
local PlayerPawn = UGCGameSystem.GetPlayerPawnByPlayerKey(PlayerKey)
|
|||
|
if PlayerPawn == nil then
|
|||
|
UGCLogSystem.LogError("[WeaponGradientManager_UpdatePlayerGradientWeaponMatching] Player[%s] is nil or Dead 1,Grade:%s", tostring(PlayerKey), tostring(NewGrade))
|
|||
|
return
|
|||
|
end
|
|||
|
local PlayerGradient = WeaponGradientManager.GetPlayerGradient(PlayerKey)
|
|||
|
|
|||
|
if PlayerGradient == nil then
|
|||
|
UGCLogSystem.LogError("[WeaponGradientManager_UpdatePlayerGradientWeaponMatching] Player[%s], PlayerGradient[NewGrade] is nil ", tostring(PlayerKey), tostring(NewGrade))
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
--- 新的武器ID及配件ID
|
|||
|
local NewWeaponID = PlayerGradient[NewGrade]
|
|||
|
if NewWeaponID == nil then
|
|||
|
UGCLogSystem.LogError("[WeaponGradientManager_UpdatePlayerGradientWeaponMatching] NewGrade 错误 Player[%s], PlayerGradient[%s] is nil ", tostring(PlayerKey), tostring(NewGrade))
|
|||
|
return
|
|||
|
end
|
|||
|
local PartIDs = WeaponTable.RecommendedWeaponParts[NewWeaponID]
|
|||
|
|
|||
|
--- 验证玩家当前背包武器及配件是否需要销毁
|
|||
|
---@return ItemDataList LuaTable @LuaTable<ItemData>, ItemData结构:ItemID,InstanceID,Count,Type,SubType,IsAvatar
|
|||
|
local AllItems = UGCBackPackSystem.GetAllItemData(PlayerPawn)
|
|||
|
for i, ItemInfo in pairs(AllItems) do
|
|||
|
if UGCSystemLibrary.GetItemTypeID(ItemInfo.ItemID) < 300 then
|
|||
|
if not table.hasValue(PartIDs, ItemInfo.ItemID) and ItemInfo.ItemID ~= NewWeaponID and not table.hasValue(IgnoreWeaponIDs, ItemInfo.ItemID) then
|
|||
|
--- 销毁背包中的物品
|
|||
|
UGCBackPackSystem.DropItem(PlayerPawn, ItemInfo.ItemID, ItemInfo.Count, true)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
--- 隔帧给玩家赋予武器及配件
|
|||
|
if WeaponGradientManager.UpdateWeaponMatchingHandle[PlayerKey] then
|
|||
|
UGCEventSystem.StopTimer(WeaponGradientManager.UpdateWeaponMatchingHandle[PlayerKey])
|
|||
|
WeaponGradientManager.UpdateWeaponMatchingHandle[PlayerKey] = nil
|
|||
|
end
|
|||
|
WeaponGradientManager.UpdateWeaponMatchingHandle[PlayerKey] = UGCEventSystem.SetTimer(UGCGameSystem.GameState,
|
|||
|
function()
|
|||
|
WeaponGradientManager.UpdateWeaponMatchingHandle[PlayerKey] = nil
|
|||
|
if UE.IsValid(PlayerPawn) then
|
|||
|
if NewWeaponID > 0 and UGCBackPackSystem.GetItemCount(PlayerPawn, NewWeaponID) == 0 then
|
|||
|
UGCBackPackSystem.AddItem(PlayerPawn, NewWeaponID, 1)
|
|||
|
--UGCSystemLibrary.AddItem(PlayerPawn, NewWeaponID, 1)
|
|||
|
for k, ShootWeaponEnum in pairs(ShootWeaponEnums) do
|
|||
|
local Weapon = UGCWeaponManagerSystem.GetWeaponBySlot(PlayerPawn, ShootWeaponEnum)
|
|||
|
if UE.IsValid(Weapon) then
|
|||
|
UGCGunSystem.SetMaxBulletNumInOneClip(Weapon, 1000)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
if PartIDs then
|
|||
|
PlayerPawn = UGCGameSystem.GetPlayerPawnByPlayerKey(PlayerKey)
|
|||
|
if PlayerPawn == nil then
|
|||
|
UGCLogSystem.LogError("[WeaponGradientManager_UpdatePlayerGradientWeaponMatching] Player[%s] is nil or Dead 2,Grade:%s", tostring(PlayerKey), tostring(NewGrade))
|
|||
|
return
|
|||
|
end
|
|||
|
for i, PartID in pairs(PartIDs) do
|
|||
|
if UGCBackPackSystem.GetItemCount(PlayerPawn, PartID) == 0 then
|
|||
|
UGCBackPackSystem.AddItem(PlayerPawn, PartID, 1)
|
|||
|
--UGCSystemLibrary.AddItem(PlayerPawn, PartID, 1)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end,
|
|||
|
0.1
|
|||
|
)
|
|||
|
end
|
|||
|
|
|||
|
--- 获取玩家当前武器梯度,若玩家没有设置梯度则自动随机获取一个
|
|||
|
---@param PlayerKey uint
|
|||
|
---@return PlayerGradient table WeaponIDs
|
|||
|
function WeaponGradientManager.GetPlayerGradient(PlayerKey)
|
|||
|
if WeaponGradientManager.PlayerGradientIndex[PlayerKey] == nil then
|
|||
|
local GradientIndex = math.random(1, #WeaponGradientManager.WeaponGradient)
|
|||
|
WeaponGradientManager.PlayerGradientIndex[PlayerKey] = GradientIndex
|
|||
|
end
|
|||
|
return WeaponGradientManager.WeaponGradient[WeaponGradientManager.PlayerGradientIndex[PlayerKey]]
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
|
|||
|
--- 更新玩家下一个武器梯度,返回玩家梯度
|
|||
|
---@param PlayerKey uint
|
|||
|
---@return PlayerGradient table WeaponIDs
|
|||
|
function WeaponGradientManager.UpdatePlayerNextGradient(PlayerKey)
|
|||
|
WeaponGradientManager.PlayerGradientIndex[PlayerKey] = (WeaponGradientManager.PlayerGradientIndex[PlayerKey] % #WeaponGradientManager.WeaponGradient) + 1
|
|||
|
return WeaponGradientManager.GetPlayerGradient(PlayerKey)
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
return WeaponGradientManager
|