222 lines
8.3 KiB
Lua
222 lines
8.3 KiB
Lua
---@class UGCPlayerController_C:BP_UGCPlayerController_C
|
||
--Edit Below--
|
||
---@type UGCPlayerController_C
|
||
local UGCPlayerController = {
|
||
NeedExePlayerIsFirstTimePlaying = false;
|
||
bAutoShowGuide = false;
|
||
PlayerSpawnBuffList = {};
|
||
};
|
||
|
||
|
||
--function UGCPlayerController:GetReplicatedProperties()
|
||
-- return
|
||
--end
|
||
|
||
function UGCPlayerController:ReceiveBeginPlay()
|
||
self.SuperClass.ReceiveBeginPlay(self);
|
||
require("Script.Global.WidgetManager.WidgetManager")
|
||
|
||
-- 不要自动切换相机
|
||
self.bAutoManageActiveCameraTarget = false
|
||
|
||
if self:HasAuthority() then
|
||
-- 更新出生点位置
|
||
-- self:UpdatePlayerStartType()
|
||
self.PlayerControllerRespawnedDelegate:AddInstance(self.LuaOnPlayerRespawned, self)
|
||
else
|
||
|
||
TipConfig.Init(self)
|
||
WidgetManager:Init(WidgetConfig.PlayModeUI)
|
||
-- self:ShowNowGameStateTypeUI()
|
||
self:ShowDefaultUI()
|
||
UGCEventSystem.AddListener(EventEnum.GameStateChange, self.GameStateChange, self)
|
||
UGCEventSystem.AddListener(EventEnum.PlayerDeathInfo, self.CameraMoveToKiller, self)
|
||
UGCEventSystem.AddListener(ArchiveDataConfig.GetParamNotifyEvent(ArchiveDataConfig.EArchiveType.NumberOfPlays), self.ShowGuide, self)
|
||
self.PlayerControllerRespawnedDelegate:AddInstance(self.ShowRespawnWidget, self)
|
||
self:ShowGuide()
|
||
UGCLogSystem.Log("[UGCPlayerController_ReceiveBeginPlay] Finish")
|
||
end
|
||
|
||
end
|
||
|
||
|
||
|
||
function UGCPlayerController:LuaOnPlayerRespawned()
|
||
-- 给予初始装备
|
||
if GlobalConfigs.GameSetting.GiveInitialBackpack then
|
||
self:InitPlayerBackPack()
|
||
end
|
||
-- 给予初始Buff
|
||
self:PlayerAddSpawnBuff()
|
||
end
|
||
|
||
|
||
|
||
|
||
function UGCPlayerController:ShowRespawnWidget()
|
||
UGCLogSystem.Log("[UGCPlayerController_ShowRespawnWidget]")
|
||
-- 客户端显示重选武器按键
|
||
if GlobalConfigs.GameSetting.CanRespawnSelectWeapon then
|
||
WidgetManager:ShowPanel(WidgetConfig.EUIType.ReselectWeaponBtn, false)
|
||
end
|
||
end
|
||
|
||
-- 初始Buff设置 ----------------------------------------------------------------------------------------
|
||
function UGCPlayerController:AddPlayerSpawnBuff(InBuffAssetType)
|
||
self.PlayerSpawnBuffList[#self.PlayerSpawnBuffList + 1] = InBuffAssetType
|
||
if UE.IsValid(self.Pawn) then
|
||
BuffSystemAPI.PlayerAddBuff(self.Pawn, InBuffAssetType)
|
||
end
|
||
end
|
||
|
||
function UGCPlayerController:RemovePlayerSpawnBuff(InBuffAssetType)
|
||
table.removeValue(self.PlayerSpawnBuffList, InBuffAssetType)
|
||
end
|
||
|
||
function UGCPlayerController:ClearPlayerSpawnBuffs()
|
||
self.PlayerSpawnBuffList = {}
|
||
end
|
||
|
||
function UGCPlayerController:PlayerAddSpawnBuff()
|
||
if UE.IsValid(self.Pawn) then
|
||
for i, v in pairs(self.PlayerSpawnBuffList) do
|
||
BuffSystemAPI.PlayerAddBuff(self.Pawn, v)
|
||
end
|
||
end
|
||
end
|
||
-- 初始Buff设置 End ------------------------------------------------------------------------------------
|
||
|
||
|
||
function UGCPlayerController:InitPlayerBackPack()
|
||
-- 默认背包装备
|
||
self.DefaultBackPack = TableHelper.DeepCopy(UGCGameSystem.GameState:GetPlayerBeBornParts(self.PlayerKey))
|
||
-- 给予初始装备
|
||
UGCGameSystem.GameState:PlayerAddItemInfo(self.PlayerKey, self.DefaultBackPack)
|
||
-- 给予初始武器
|
||
UGCGameSystem.GameState:UpdatePlayerWeapon(self.PlayerKey)
|
||
-- 补满弹夹
|
||
UGCEventSystem.SetTimer(self, function()
|
||
if UE.IsValid(self.Pawn) then
|
||
self.Pawn:SetAllWeaponBulletNumToMaxOnServer(true, false)
|
||
for i, v in pairs(ShootWeaponEnums) do
|
||
local Weapon = UGCWeaponManagerSystem.GetWeaponBySlot(self.Pawn, v)
|
||
if UE.IsValid(Weapon) then
|
||
UGCGunSystem.EnableClipInfiniteBullets(Weapon, true)
|
||
local MaxBulletNumInOneClip = UGCGunSystem.GetMaxBulletNumInOneClip(Weapon)
|
||
Weapon:SetCurrentBulletNumInClipOnServer(MaxBulletNumInOneClip, true)
|
||
-- 玩家离开换弹状态
|
||
UGCPawnSystem.LeavePawnState(self.Pawn, EPawnState.Roload)
|
||
end
|
||
end
|
||
end
|
||
end, 3)
|
||
end
|
||
|
||
function UGCPlayerController:UpdatePlayerStartType()
|
||
if self.UpdatePlayerStartCount == nil then
|
||
self.UpdatePlayerStartCount = 1
|
||
else
|
||
self.UpdatePlayerStartCount = 1 + self.UpdatePlayerStartCount
|
||
end
|
||
local TeamID = UGCPlayerStateSystem.GetTeamID(self.PlayerKey)
|
||
UGCLogSystem.Log("[UGCPlayerController_UpdatePlayerStartType] TeamID:%s, UpdatePlayerStartCount:%s", tostring(TeamID), tostring(self.UpdatePlayerStartCount))
|
||
if TeamID > 0 then
|
||
self:SetStartPointType(TeamID)
|
||
UGCLogSystem.Log("[UGCPlayerController_UpdatePlayerStartType] TeamID:%s", tostring(TeamID))
|
||
if self.UpdatePlayerStartCount > 1 then
|
||
UGCSystemLibrary.RespawnPlayer(self.PlayerKey)
|
||
end
|
||
else
|
||
self:SetStartPointType(1)
|
||
UGCEventSystem.SetTimer(self, self.UpdatePlayerStartType, 0.1)
|
||
end
|
||
end
|
||
|
||
-- 判断显示拍脸图
|
||
function UGCPlayerController:ShowGuide()
|
||
UGCLogSystem.Log("[UGCPlayerController_ShowGuide] PlayerKey:%s", tostring(self.PlayerKey))
|
||
local PlayNumber = ArchiveDataConfig.GetPlayerArchiveDataFromType(self.PlayerKey, ArchiveDataConfig.EArchiveType.NumberOfPlays)
|
||
if PlayNumber and PlayNumber <= 1 then
|
||
UGCLogSystem.Log("[UGCPlayerController_ShowGuide] PlayNumber:%s", tostring(PlayNumber))
|
||
--WidgetManager:ShowPanel(WidgetConfig.EUIType.Guide, false)
|
||
end
|
||
end
|
||
|
||
-- 显示默认UI
|
||
function UGCPlayerController:ShowDefaultUI()
|
||
-- WidgetManager:ShowPanel(WidgetConfig.EUIType.DamageAnim, false)
|
||
-- WidgetManager:ShowPanel(WidgetConfig.EUIType.SelectBuff, false)
|
||
end
|
||
|
||
-- 游戏模式改变
|
||
function UGCPlayerController:GameStateChange(NewGameStateType)
|
||
if NewGameStateType == CustomEnum.EGameState.End or NewGameStateType == CustomEnum.EGameState.InsufficientNumberOfPeople then
|
||
-- 移除不可显示UI
|
||
UGCLogSystem.Log("[UGCPlayerController_GameStateChange]")
|
||
WidgetManager:DestroyPanel(WidgetConfig.EUIType.InvincibleTime)
|
||
WidgetManager:DestroyPanel(WidgetConfig.EUIType.WaitingTime)
|
||
end
|
||
-- self:ShowNowGameStateTypeUI()
|
||
end
|
||
|
||
function UGCPlayerController:Client_PlayerIsFirstTimePlaying()
|
||
if self:HasAuthority() then return end
|
||
UGCLogSystem.Log("[UGCGameState_Client_PlayerIsFirstTimePlaying]")
|
||
if WidgetManager.Initialized == false then
|
||
self.NeedExePlayerIsFirstTimePlaying = true
|
||
else
|
||
self:PlayerIsFirstTimePlaying()
|
||
end
|
||
end
|
||
|
||
|
||
--- 根据是否为第一次进入该游戏进行判断
|
||
function UGCPlayerController:AutoShowGuide()
|
||
if self.bAutoShowGuide then
|
||
-- WidgetManager:ShowPanel(WidgetConfig.EUIType.Guide, false)
|
||
end
|
||
end
|
||
|
||
function UGCPlayerController:CameraMoveToKiller(VictimKey, CauserKey)
|
||
if GlobalConfigs.GameSetting.EnableLerpCamera and VictimKey == self.PlayerKey then
|
||
local TrackCamera = UGCSystemLibrary.GetUniqueInstanceFromPath(UGCGameSystem.GetUGCResourcesFullPath('Asset/Blueprint/SceneActor/BP_TrackKillerCamera.BP_TrackKillerCamera_C'))
|
||
if UE.IsValid(TrackCamera) then
|
||
self:SetViewTargetWithBlend(TrackCamera, 0.,EViewTargetBlendFunction.VTBlend_Linear, 0., false);
|
||
UGCLogSystem.Log("[UGCPlayerController_CameraMoveToKiller] Succeed")
|
||
else
|
||
UGCLogSystem.LogError("[UGCPlayerController_CameraMoveToKiller] TrackCamera is nil")
|
||
end
|
||
end
|
||
end
|
||
|
||
function UGCPlayerController:GetReplicatedProperties()
|
||
return
|
||
end
|
||
|
||
function UGCPlayerController:SetStartPointType(InStartPointType)
|
||
self.StartPointType = InStartPointType
|
||
end
|
||
|
||
function UGCPlayerController:GetStartPointType()
|
||
if self.StartPointType == nil then
|
||
self.StartPointType = EPlayerStartType.Default
|
||
end
|
||
return self.StartPointType
|
||
end
|
||
|
||
--- 商城注册
|
||
function UGCPlayerController:Server_OnUGCCommodityPlayerDataReady()
|
||
UGCLogSystem.Log("[UGCPlayerController_Server_OnUGCCommodityPlayerDataReady]")
|
||
--注册了名为PlacementModeConfig.PlacingAttr.GoldBrickName的协议,用于购买9000001号商品(商品表已配置该商品),单次购买数量为1
|
||
--UGCCommoditySystem.RegBuyCMD(PlacementModeConfig.PlacingAttr.GoldBrickName, 9000000, 100)
|
||
UGCLogSystem.Log("[UGCPlayerController_Server_OnUGCCommodityPlayerDataReady] Finish")
|
||
end
|
||
|
||
|
||
|
||
function UGCPlayerController:GetAvailableServerRPCs()
|
||
return
|
||
"Client_PlayerIsFirstTimePlaying"
|
||
end
|
||
|
||
return UGCPlayerController; |