246 lines
9.6 KiB
Lua
246 lines
9.6 KiB
Lua
---@class UGCPlayerPawn_C:BP_UGCPlayerPawn_C
|
|
--Edit Below--
|
|
---@type UGCPlayerPawn_C
|
|
local UGCPlayerPawn = {
|
|
};
|
|
|
|
function UGCPlayerPawn:GetReplicatedProperties()
|
|
return
|
|
end
|
|
|
|
-- 关闭盒子掉落
|
|
function UGCPlayerPawn:IsSkipSpawnDeadTombBox(EventInstigater)
|
|
return true
|
|
end
|
|
|
|
function UGCPlayerPawn:ReceiveBeginPlay()
|
|
self.SuperClass.ReceiveBeginPlay(self);
|
|
--- 设置翻墙功能
|
|
self.bVaultIsOpen = true
|
|
--- 设置滑铲功能
|
|
self.IsOpenShovelAbility = true
|
|
|
|
UGCEventSystem.SendEvent(EventEnum.PlayerBeginPlay, self)
|
|
|
|
|
|
if self:HasAuthority() then
|
|
self:AddEvent()
|
|
if UE.IsValid(self:GetController()) then
|
|
self:ReceivePossessed(self:GetController())
|
|
UGCLogSystem.Log("[UGCPlayerPawn_ReceiveBeginPlay] Controller Is Valid")
|
|
end
|
|
else
|
|
|
|
end
|
|
end
|
|
|
|
--- 客户端必定执行的BeginPlay
|
|
function UGCPlayerPawn:ClientMustBeExeBeginPlay()
|
|
if self.DoOnceMustBeExeBeginPlay then return end
|
|
self.DoOnceMustBeExeBeginPlay = true
|
|
--UGCEventSystem.SetTimer(self, function()
|
|
-- if self and self.PlayerKey == UGCSystemLibrary.GetLocalPlayerKey() and UGCGameSystem.GameState:GetGameStateType() == CustomEnum.EGameState.Playing then
|
|
-- UGCLogSystem.Log("[UGCPlayerPawn_ClientMustBeExeBeginPlay]")
|
|
-- -- 显示武器重选按键
|
|
-- WidgetManager:ShowPanel(WidgetConfig.EUIType.ReselectWeaponBtn, false)
|
|
-- end
|
|
--end, 1)
|
|
end
|
|
|
|
|
|
function UGCPlayerPawn:ReceivePossessed(NewController)
|
|
self.SuperClass.ReceivePossessed(self, NewController);
|
|
UGCLogSystem.Log("[UGCPlayerPawn_ReceivePossessed] PlayerKey:%s", tostring(NewController.PlayerKey))
|
|
UGCEventSystem.SendEvent(EventEnum.PlayerPossessed, NewController.PlayerKey)
|
|
UGCGameSystem.GameState:SetPlayerIsAlive(NewController.PlayerKey, self)
|
|
|
|
if UGCSystemLibrary.GetIsPreparationState() then
|
|
UGCSystemLibrary.SetPlayerPawnMovable(self, false)
|
|
end
|
|
|
|
--- 循环判断默认装备是否有给予
|
|
--self.DefaultBackPack = TableHelper.DeepCopy(GlobalConfigs.GameSetting.BeBornItems)
|
|
self.DefaultBackPack = TableHelper.DeepCopy(UGCGameSystem.GameState:GetPlayerBeBornParts(NewController.PlayerKey))
|
|
|
|
if not PlacementModeConfig.IsPlaceMode() then
|
|
self.CheckBornItemsHandle = UGCEventSystem.SetTimerLoop(self, self.CheckBornItems, 1.)
|
|
--self.CheckBornItemsHandle = UGCEventSystem.SetTimer(self, self.CheckBornItems, 2.)
|
|
self.CheckWeaponAndPartsHandle = UGCEventSystem.SetTimerLoop(self, self.CheckWeaponAndParts, 1.)
|
|
end
|
|
|
|
UGCEventSystem.SetTimer(self, function()
|
|
if UGCGameSystem.GameState:GetGameStateType() == CustomEnum.EGameState.Playing then
|
|
UGCLogSystem.Log("[UGCPlayerPawn_ReceivePossessed] 111 ")
|
|
UGCSendRPCSystem.ClientShowUI(NewController.PlayerKey, WidgetConfig.EUIType.ReselectWeaponBtn)
|
|
end
|
|
end, 1)
|
|
end
|
|
|
|
|
|
|
|
function UGCPlayerPawn:ReceiveTick(DeltaTime)
|
|
self.SuperClass.ReceiveTick(self, DeltaTime);
|
|
if not UGCGameSystem.IsServer() then
|
|
self:ClientMustBeExeBeginPlay()
|
|
end
|
|
end
|
|
|
|
function UGCPlayerPawn:ReceiveEndPlay()
|
|
self.SuperClass.ReceiveEndPlay(self);
|
|
self:RemoveEvent()
|
|
end
|
|
|
|
function UGCPlayerPawn:AddEvent()
|
|
if self:HasAuthority() then
|
|
self.DeadNotifyDelegate:Add(self.PlayerDead, self)
|
|
self.DamageNotifyDelegate:Add(self.PlayerInjury, self)
|
|
else
|
|
end
|
|
end
|
|
|
|
function UGCPlayerPawn:RemoveEvent()
|
|
if self:HasAuthority() then
|
|
self.DeadNotifyDelegate:Remove(self.PlayerDead, self)
|
|
self.DamageNotifyDelegate:Remove(self.PlayerInjury, self)
|
|
|
|
|
|
if self.CheckBornItemsHandle then
|
|
UGCEventSystem.StopTimer(self.CheckBornItemsHandle)
|
|
self.CheckBornItemsHandle = nil
|
|
end
|
|
if self.CheckWeaponAndPartsHandle then
|
|
UGCEventSystem.StopTimer(self.CheckWeaponAndPartsHandle)
|
|
self.CheckWeaponAndPartsHandle = nil
|
|
end
|
|
else
|
|
end
|
|
end
|
|
|
|
|
|
function UGCPlayerPawn:CheckWeaponAndParts()
|
|
UGCGameSystem.GameState:CheckWeaponAndParts(self.PlayerKey)
|
|
end
|
|
|
|
|
|
|
|
function UGCPlayerPawn:CheckBornItems()
|
|
UGCLogSystem.Log("[UGCPlayerPawn_CheckBornItems] PlayerKey:%s", tostring(self.PlayerKey))
|
|
UGCLogSystem.LogTree("[UGCPlayerPawn_CheckBornItems]", self.DefaultBackPack)
|
|
for i = #self.DefaultBackPack, 1, -1 do
|
|
local ItemID = self.DefaultBackPack[i].ItemID
|
|
local Count = self.DefaultBackPack[i].Count
|
|
local InstCount = UGCBackPackSystem.GetItemCount(self, ItemID)
|
|
if InstCount >= Count then
|
|
UGCLogSystem.Log("[UGCPlayerPawn_CheckBornItems] i:%s", tostring(i))
|
|
table.remove(self.DefaultBackPack, i)
|
|
UGCLogSystem.LogTree("[UGCPlayerPawn_CheckBornItems]", self.DefaultBackPack)
|
|
else
|
|
UGCBackPackSystem.AddItem(self, ItemID, Count - InstCount)
|
|
end
|
|
end
|
|
if #self.DefaultBackPack == 0 then
|
|
UGCEventSystem.StopTimer(self.CheckBornItemsHandle)
|
|
self.CheckBornItemsHandle = nil
|
|
UGCLogSystem.Log("[UGCPlayerPawn_CheckBornItems] Succeed PlayerKey:%s", tostring(self.PlayerKey));
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-------------------------------------------------- Delegate --------------------------------------------------
|
|
|
|
---@param DamageInfo FDamageInfoCollection
|
|
---@return VictimKey, CauserKey, WeaponID, DamageType, IsHeadShotDamage, Distance, DamageValue uint, uint, int, EDamageType, bool, float, float
|
|
function UGCPlayerPawn:GetDamageInfoCollectionInfo(DamageInfo)
|
|
local CauserController = DamageInfo.Instigator
|
|
local WeaponID = -1
|
|
local CauserKey = CauserController and CauserController.PlayerKey or -1
|
|
local VictimKey = self.PlayerKey
|
|
local CauserItemID = DamageInfo.CauserItemID
|
|
--- 近战投掷、投掷手雷
|
|
if CauserItemID then
|
|
WeaponID = CauserItemID
|
|
end
|
|
UGCLogSystem.Log("[UGCPlayerPawn_GetDamageInfoCollectionInfo] WeaponID:%d", WeaponID)
|
|
local Distance = 0.
|
|
if CauserController and CauserController.Pawn then
|
|
Distance = VectorHelper.GetDistance(self:K2_GetActorLocation(), CauserController.Pawn:K2_GetActorLocation())
|
|
end
|
|
|
|
local IsHeadShotDamage = (DamageInfo.Hit.BoneName == "head")
|
|
return VictimKey, CauserKey, WeaponID, DamageInfo.DamageType, IsHeadShotDamage, Distance, DamageInfo.Damage
|
|
end
|
|
|
|
---@param DamageInfo FDamageInfoCollection
|
|
function UGCPlayerPawn:PlayerDead(DamageInfo)
|
|
local VictimKey, CauserKey, WeaponID, DamageType, IsHeadShotDamage, Distance, DamageValue = self:GetDamageInfoCollectionInfo(DamageInfo)
|
|
UGCSendRPCSystem.RPCEvent(nil, EventEnum.PlayerDeathInfo, VictimKey, CauserKey, WeaponID, DamageType, IsHeadShotDamage, Distance, DamageValue)
|
|
UGCEventSystem.SendEvent(EventEnum.PlayerDeathInfo, VictimKey, CauserKey, WeaponID, DamageType, IsHeadShotDamage, Distance, DamageValue)
|
|
UGCGameSystem.GameState:SetPlayerIsAlive(VictimKey, nil)
|
|
end
|
|
|
|
---@param DamageInfo FDamageInfoCollection
|
|
---@param ReturnValue float
|
|
function UGCPlayerPawn:PlayerInjury(DamageInfo)
|
|
local VictimKey, CauserKey, WeaponID, DamageType, IsHeadShotDamage, Distance, DamageValue = self:GetDamageInfoCollectionInfo(DamageInfo)
|
|
UGCEventSystem.SendEvent(EventEnum.PlayerInjuryInfo, VictimKey, CauserKey, WeaponID, DamageType, IsHeadShotDamage, Distance, DamageValue)
|
|
UGCSendRPCSystem.RPCEvent(CauserKey, EventEnum.PlayerInjuryInfo, VictimKey, CauserKey, WeaponID, DamageType, IsHeadShotDamage, Distance, DamageValue)
|
|
end
|
|
|
|
------------------------------------------------ Delegate End ------------------------------------------------
|
|
|
|
|
|
|
|
|
|
------------------------------------------------ ModifyDamage ------------------------------------------------
|
|
|
|
function UGCPlayerPawn:UGC_TakeDamageOverrideEvent(Damage, DamageType, EventInstigator, DamageCauser, Hit)
|
|
local DamageAmount = Damage
|
|
UGCLogSystem.Log("[UGCPlayerPawn_UGC_TakeDamageOverrideEvent] InDamageAmount:%s", tostring(DamageAmount))
|
|
if EventInstigator and EventInstigator.PlayerKey then
|
|
local CauserTeamID = UGCPlayerStateSystem.GetTeamID(EventInstigator.PlayerKey)
|
|
local SelfTeamID = UGCPlayerStateSystem.GetTeamID(self.PlayerKey)
|
|
|
|
if EventInstigator.PlayerKey == self.PlayerKey and GlobalConfigs.GameSetting.bEnableSelfHarm then
|
|
--- 对自己的伤害
|
|
DamageAmount = GlobalConfigs.GameSetting.SelfHarmInjuryRatio * DamageAmount
|
|
else
|
|
--- 伤害设置(友方、敌方)
|
|
DamageAmount = (CauserTeamID == SelfTeamID and GlobalConfigs.GameSetting.FriendlyInjuryRatio * DamageAmount or DamageAmount)
|
|
end
|
|
|
|
elseif DamageCauser and DamageCauser:GetOwner() then
|
|
UGCLogSystem.Log("[UGCPlayerPawn_UGC_TakeDamageOverrideEvent] DamageCauser:GetOwner():%s", KismetSystemLibrary.GetObjectName(DamageCauser:GetOwner()))
|
|
local TargetPlayerKey = DamageCauser:GetOwner().PlayerKey
|
|
if TargetPlayerKey then
|
|
local CauserTeamID = UGCPlayerStateSystem.GetTeamID(TargetPlayerKey)
|
|
local SelfTeamID = UGCPlayerStateSystem.GetTeamID(self.PlayerKey)
|
|
DamageAmount = (CauserTeamID == SelfTeamID and GlobalConfigs.GameSetting.FriendlyInjuryRatio * DamageAmount or DamageAmount)
|
|
end
|
|
else
|
|
--- 掉落伤害
|
|
DamageAmount = GlobalConfigs.GameSetting.bEnableDropDamage and DamageAmount or 0.
|
|
end
|
|
|
|
if DamageType == EDamageType.MeleeDamage then
|
|
DamageAmount = DamageAmount * GlobalConfigs.GameSetting.MeleeDamageScale
|
|
end
|
|
|
|
UGCLogSystem.Log("[UGCPlayerPawn_UGC_TakeDamageOverrideEvent] ModifyDamageAmount:%s", tostring(DamageAmount))
|
|
return DamageAmount
|
|
end
|
|
|
|
---------------------------------------------- ModifyDamage End ----------------------------------------------
|
|
|
|
|
|
|
|
function UGCPlayerPawn:GetAvailableServerRPCs()
|
|
return
|
|
end
|
|
|
|
|
|
return UGCPlayerPawn; |