This commit is contained in:
yinghua 2025-02-04 13:03:37 +08:00
commit 150f1d59e4
113 changed files with 1181 additions and 155 deletions

View File

@ -153,16 +153,20 @@ function UGCSystemLibrary.AsyncLoadAsset(AssetPath, CallBackFunc, Obj, SaveAsset
end end
end end
---@param AssetPath:string --- 通过路径获取DataTable
---@param SaveAsset:bool 是否保存 ---@param DataTablePath string
function UGCSystemLibrary.LoadAsset(AssetPath, SaveAsset) ---@param ToNumberKey bool 是否将Key值转化为Number类型再返回
if SaveAsset == nil then SaveAsset = true end function UGCSystemLibrary.GetDataTableFromPath(DataTablePath, ToNumberKey)
if not UE.IsValid(UGCSystemLibrary.CacheAsset[AssetPath]) then local ResDataTable = Gameplay.GetTable(DataTablePath)
local TargetAsset = UE.LoadObject(AssetPath)
if SaveAsset and UE.IsValid(TargetAsset) then UGCSystemLibrary.CacheAsset[AssetPath] = TargetAsset end if ToNumberKey then
return TargetAsset local Res = {}
for i, v in pairs(ResDataTable) do
Res[tonumber(i)] = v
end
return Res
else else
return UGCSystemLibrary.CacheAsset[AssetPath] return ResDataTable
end end
end end

View File

@ -14,7 +14,7 @@ DefaultLevelDirectorPath=/Asset/Blueprint/UGCLevelDirector.UGCLevelDirector_C
[MatchSetting] [MatchSetting]
NumberOfTeams=2 NumberOfTeams=2
TeamPlayers=4 TeamPlayers=2
bEnableChat=1 bEnableChat=1
bEnableRoomChat=1 bEnableRoomChat=1
ChannelName=全部 ChannelName=全部
@ -53,18 +53,18 @@ SwitchesInMaps=((Key="r.Mobile.EnableIBL",Value=0),(Key="s.StreamableDelegateLim
PlayBindingArray=[] PlayBindingArray=[]
[JobOption] [JobOption]
LastJobId=600043001 LastJobId=-1
LastWindowsJobId=600039234 LastWindowsJobId=-1
LastAndroidJobId=600039234 LastAndroidJobId=-1
LastIOSJobId=600039234 LastIOSJobId=-1
PakOnly=1 PakOnly=0
LastSkipBake=True LastSkipBake=False
LastTargetPlatform=LinuxServer+Android_ETC2 LastTargetPlatform=LinuxServer
[UGCUploadOption] [UGCUploadOption]
PlatformIndex=0 PlatformIndex=0
SkipBake=True SkipBake=True
TargetPlatform=LinuxServer+WindowsNoEditor+Android_ETC2+IOS+OpenHarmony_ETC2 TargetPlatform=LinuxServer+Android_ETC2
[DebugSettings] [DebugSettings]
bRoomOB=0 bRoomOB=0

View File

@ -153,6 +153,22 @@ function UGCSystemLibrary.AsyncLoadAsset(AssetPath, CallBackFunc, Obj, SaveAsset
end end
end end
--- 通过路径获取DataTable
---@param DataTablePath string
---@param ToNumberKey bool 是否将Key值转化为Number类型再返回
function UGCSystemLibrary.GetDataTableFromPath(DataTablePath, ToNumberKey)
local ResDataTable = Gameplay.GetTable(DataTablePath)
if ToNumberKey then
local Res = {}
for i, v in pairs(ResDataTable) do
Res[tonumber(i)] = v
end
return Res
else
return ResDataTable
end
end
---@param AssetPath:string ---@param AssetPath:string
---@param SaveAsset:bool 是否保存 ---@param SaveAsset:bool 是否保存
function UGCSystemLibrary.LoadAsset(AssetPath, SaveAsset) function UGCSystemLibrary.LoadAsset(AssetPath, SaveAsset)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,20 +1,132 @@
---@class BP_PreViewFXActor_C:AActor ---@class BP_PreViewFXActor_C:AActor
---@field DynamicTextRender UDynamicTextRenderComponent ---@field DynamicTextRender UDynamicTextRenderComponent
---@field DefaultSceneRoot USceneComponent ---@field DefaultSceneRoot USceneComponent
---@field MuzzleParticle UParticleSystem ---@field DefaultFX TMap:TEnumAsByte<EFXType>,UParticleSystem
---@field KillParticle UParticleSystem
---@field BulletParticle UParticleSystem
---@field TailedMuzzle UParticleSystem
---@field HitParticle UParticleSystem
---@field KillParticleOffsetTF FTransform ---@field KillParticleOffsetTF FTransform
--Edit Below-- --Edit Below--
local BP_PreViewFXActor = {} local BP_PreViewFXActor = {
FXTable = {};
FXIDList = {};
OverrideColor = {};
NowFXIndex = {};
}
--[[
function BP_PreViewFXActor:ReceiveBeginPlay() function BP_PreViewFXActor:ReceiveBeginPlay()
BP_PreViewFXActor.SuperClass.ReceiveBeginPlay(self) BP_PreViewFXActor.SuperClass.ReceiveBeginPlay(self)
if UGCGameSystem.IsServer() then
else
--self.DefaultFX = {
-- [EFXType.Muzzle] = self.MuzzleParticle;
-- [EFXType.Kill] = self.KillParticle;
-- [EFXType.Bullet] = self.BulletParticle;
-- [EFXType.MuzzleTailed] = self.TailedMuzzle;
-- [EFXType.Hit] = self.HitParticle;
--}
self:InitFXTable()
end
end
--[[
FFXData
ID int32
FXType EFXType
Rarity int32
Name FString
Desc FString
Particle UParticleSystem
ColorValue float[]
BaseColor FLinearColor
]]
function BP_PreViewFXActor:InitFXTable()
for i, v in pairs(EFXType) do
self.FXIDList[v] = {}
self.NowFXIndex[v] = 0
end
local ReadFXTable = UGCSystemLibrary.GetDataTableFromPath(UGCGameSystem.GetUGCResourcesFullPath('Asset/FX/A_Table/Table_FXData.Table_FXData'))
self.FXTable = table.DeepCopy(ReadFXTable)
for i, v in pairs(self.FXTable) do
UGCLogSystem.Log("[BP_PreViewFXActor_LoadFXTable] Key:%s", tostring(i))
table.insert(self.FXIDList[v.FXType], v.ID)
end
for i, v in pairs(self.FXIDList) do
table.sort(self.FXIDList[i])
end
end
function BP_PreViewFXActor:GetParticleColor(FXType)
return self.OverrideColor[FXType]
end
function BP_PreViewFXActor:GetParticleDefaultColor(FXType)
local FXIndex = self:GetNowFXIndex(FXType)
local FXID = self.FXIDList[FXType][FXIndex]
if FXID then
return self.FXTable[FXID].BaseColor
end
return nil
end
function BP_PreViewFXActor:GetColorValue(FXType)
local FXIndex = self:GetNowFXIndex(FXType)
local FXID = self.FXIDList[FXType][FXIndex]
if FXID then
return self.FXTable[FXID].ColorValue
end
return {}
end
--- 覆盖对应特效的颜色
---@param FXType EFXType
---@param NewColor FLinearColor 为nil则重置为默认颜色
function BP_PreViewFXActor:SetOverrideColor(FXType, NewColor)
---@field SetColorParameter:fun(ParameterName:FName,param:FLinearColor)
---@field SetVectorParameter:fun(ParameterName:FName,param:FVector)
self.OverrideColor[FXType] = NewColor
UGCEventSystem.SendEvent(EventEnum.OverrideFXColor, FXType, self.OverrideColor[FXType])
end
function BP_PreViewFXActor:GetNowFXIndex(FXType)
return self.NowFXIndex[FXType]
end
function BP_PreViewFXActor:GetNowFXFromFXType(FXType)
local FXIndex = self:GetNowFXIndex(FXType)
local FXID = self.FXIDList[FXType][FXIndex]
if FXID then
return self.FXTable[FXID].Particle
else
return self.DefaultFX[FXType]
end
end
function BP_PreViewFXActor:SetNextFX(FXType)
if #self.FXIDList[FXType] > 0 then
self.NowFXIndex[FXType] = (self.NowFXIndex[FXType] % #self.FXIDList[FXType]) + 1
UGCEventSystem.SendEvent(EventEnum.ChangeFX, FXType)
end
end
function BP_PreViewFXActor:SetParticleCompColor(ParticleComp, FXType)
if UE.IsValid(ParticleComp) then
local ColorValue = self:GetColorValue(FXType)
local Color = self:GetParticleColor(FXType)
if Color == nil then
Color = self:GetParticleDefaultColor(FXType)
end
for i, v in pairs(ColorValue) do
local TempColor = table.DeepCopy(UE.ToTable(Color))
local ColorVector = KismetMathLibrary.Conv_LinearColorToVector(TempColor)
ColorVector = VectorHelper.MulNumber(ColorVector, v)
ParticleComp:SetVectorParameter("Color" .. i, ColorVector)
end
end
end end
--]]
--[[ --[[
function BP_PreViewFXActor:ReceiveTick(DeltaTime) function BP_PreViewFXActor:ReceiveTick(DeltaTime)

View File

@ -27,13 +27,19 @@ end
function UGCGameState:SpawnParticleAtPos(Pos) function UGCGameState:SpawnParticleAtPos(Pos)
local TempPreViewActor = self:GetPreViewFXActor() local TempPreViewActor = self:GetPreViewFXActor()
if UE.IsValid(TempPreViewActor) then if UE.IsValid(TempPreViewActor) then
Pos = { local KillParticle = TempPreViewActor:GetNowFXFromFXType(EFXType.Kill)
X = Pos.X + TempPreViewActor.KillParticleOffsetTF.Translation.X, if UE.IsValid(KillParticle) then
Y = Pos.Y + TempPreViewActor.KillParticleOffsetTF.Translation.Y, Pos = {
Z = Pos.Z + TempPreViewActor.KillParticleOffsetTF.Translation.Z, X = Pos.X + TempPreViewActor.KillParticleOffsetTF.Translation.X,
} Y = Pos.Y + TempPreViewActor.KillParticleOffsetTF.Translation.Y,
local FXScale = {X = TempPreViewActor.KillParticleOffsetTF.Scale3D.X, Y = TempPreViewActor.KillParticleOffsetTF.Scale3D.Y, Z = TempPreViewActor.KillParticleOffsetTF.Scale3D.Z} Z = Pos.Z + TempPreViewActor.KillParticleOffsetTF.Translation.Z,
GameplayStatics.SpawnEmitterAtLocation(self, TempPreViewActor.KillParticle, Pos, {Roll = 0, Pitch = 0, Yaw = 0}, FXScale, true) }
local FXScale = {X = TempPreViewActor.KillParticleOffsetTF.Scale3D.X, Y = TempPreViewActor.KillParticleOffsetTF.Scale3D.Y, Z = TempPreViewActor.KillParticleOffsetTF.Scale3D.Z}
local KillParticleComp = GameplayStatics.SpawnEmitterAtLocation(self, KillParticle, Pos, {Roll = 0, Pitch = 0, Yaw = 0}, FXScale, true)
-- 设置颜色
TempPreViewActor:SetParticleCompColor(KillParticleComp, EFXType.Kill)
end
end end
end end

View File

@ -0,0 +1,40 @@
---@class UGCPlayerController_C:BP_UGCPlayerController_C
--Edit Below--
local UGCPlayerController = {}
function UGCPlayerController:ReceiveBeginPlay()
UGCPlayerController.SuperClass.ReceiveBeginPlay(self)
if UGCGameSystem.IsServer() then
else
local PreviewFxWidget = UserWidget.NewWidgetObjectBP(self, UE.LoadClass(UGCGameSystem.GetUGCResourcesFullPath('Asset/UI/PreviewFX/WB_FX_Main.WB_FX_Main_C')));
PreviewFxWidget:AddToViewport(20000)
end
end
--[[
function UGCPlayerController:ReceiveTick(DeltaTime)
UGCPlayerController.SuperClass.ReceiveTick(self, DeltaTime)
end
--]]
--[[
function UGCPlayerController:ReceiveEndPlay()
UGCPlayerController.SuperClass.ReceiveEndPlay(self)
end
--]]
--[[
function UGCPlayerController:GetReplicatedProperties()
return
end
--]]
--[[
function UGCPlayerController:GetAvailableServerRPCs()
return
end
--]]
return UGCPlayerController

View File

@ -31,10 +31,15 @@ function UGCPlayerPawn:ReceiveBeginPlay()
if not UGCGameSystem.IsServer() and self.CheckFXHandle == nil then if not UGCGameSystem.IsServer() and self.CheckFXHandle == nil then
-- 这里防止未设置成功做的校验 -- 这里防止未设置成功做的校验
self.CheckFXHandle = UGCEventSystem.SetTimerLoop(self, self.UpdateFX, 2) self.CheckFXHandle = UGCEventSystem.SetTimerLoop(self, self.UpdateFX, 2)
-- 绑定粒子颜色改变的函数
UGCEventSystem.AddListener(EventEnum.OverrideFXColor, self.OverrideFXColor, self)
-- 绑定粒子改变
UGCEventSystem.AddListener(EventEnum.ChangeFX, self.ChangeFX, self)
end end
local TempRescueOtherComp = self:GetCharacterRescueOtherComponent() local TempRescueOtherComp = self:GetCharacterRescueOtherComponent()
local TempPreViewActor = UGCGameSystem.GameState:GetPreViewFXActor()
if UE.IsValid(TempRescueOtherComp) and UE.IsValid(TempPreViewActor) then if UE.IsValid(TempRescueOtherComp) and UE.IsValid(TempPreViewActor) then
-- 配置倒地粒子 没有用这个方法 -- 配置倒地粒子 没有用这个方法
@ -89,8 +94,33 @@ function UGCPlayerPawn:OnPostGetWeapon(Weapon)
self:WeaponAttachEffect(Weapon) self:WeaponAttachEffect(Weapon)
end end
-- 覆盖拖尾特效的颜色
function UGCPlayerPawn:OverrideFXColor(FXType)
--UGCLogSystem.Log("[UGCPlayerPawn_OverrideFXColor] FXType:%s", tostring(FXType))
if FXType ~= EFXType.MuzzleTailed then return end
if not UE.IsValid(self.MuzzleTailedParticleComp) then return end
local TempPreViewActor = UGCGameSystem.GameState:GetPreViewFXActor()
if UE.IsValid(TempPreViewActor) then
TempPreViewActor:SetParticleCompColor(self.MuzzleTailedParticleComp, EFXType.MuzzleTailed)
end
end
-- 替换FX
function UGCPlayerPawn:ChangeFX(FXType)
UGCLogSystem.Log("[UGCPlayerPawn_ChangeFX] FXType:%s", tostring(FXType))
if FXType ~= EFXType.MuzzleTailed then return end
if not UE.IsValid(self.MuzzleTailedParticleComp) then return end
local TempPreViewActor = UGCGameSystem.GameState:GetPreViewFXActor()
if UE.IsValid(TempPreViewActor) then
local Particle = TempPreViewActor:GetNowFXFromFXType(FXType)
self.MuzzleTailedParticleComp:SetTemplate(Particle)
self:OverrideFXColor(EFXType.MuzzleTailed)
UGCLogSystem.Log("[UGCPlayerPawn_ChangeFX] Succeed")
end
end
UGCPlayerPawn.BoundOnceEffectWeapons = {} UGCPlayerPawn.BoundOnceEffectWeapons = {}
function UGCPlayerPawn:UpdateFX() function UGCPlayerPawn:UpdateFX()
UGCLogSystem.Log("[UGCPlayerPawn_UpdateFX] PawnName:%s", KismetSystemLibrary.GetObjectName(self)) UGCLogSystem.Log("[UGCPlayerPawn_UpdateFX] PawnName:%s", KismetSystemLibrary.GetObjectName(self))
@ -104,6 +134,7 @@ function UGCPlayerPawn:UpdateFX()
end end
function UGCPlayerPawn:WeaponAttachEffect(Weapon) function UGCPlayerPawn:WeaponAttachEffect(Weapon)
if UGCGameSystem.IsServer() then return end
local TempPreViewActor = UGCGameSystem.GameState:GetPreViewFXActor() local TempPreViewActor = UGCGameSystem.GameState:GetPreViewFXActor()
if UE.IsValid(TempPreViewActor) then if UE.IsValid(TempPreViewActor) then
if UE.IsValid(Weapon) then if UE.IsValid(Weapon) then
@ -116,9 +147,10 @@ function UGCPlayerPawn:WeaponAttachEffect(Weapon)
--"RemoteMuzzleFX", --"RemoteMuzzleFX",
--"ScopeMuzzleFX", --"ScopeMuzzleFX",
} }
if UE.IsValid(Effect) and UE.IsValid(TempPreViewActor.MuzzleParticle) then local MuzzleParticle = TempPreViewActor:GetNowFXFromFXType(EFXType.Muzzle)
if UE.IsValid(Effect) and UE.IsValid(MuzzleParticle) then
for i, v in pairs(MuzzleFXParamName) do for i, v in pairs(MuzzleFXParamName) do
Effect[v] = TempPreViewActor.MuzzleParticle Effect[v] = MuzzleParticle
end end
UGCLogSystem.Log("[UGCPlayerPawn_WeaponAttachEffect] Succeed") UGCLogSystem.Log("[UGCPlayerPawn_WeaponAttachEffect] Succeed")
end end
@ -134,17 +166,19 @@ function UGCPlayerPawn:WeaponAttachEffect(Weapon)
-- 枪口拖尾特效 -- 枪口拖尾特效
if UE.IsValid(TempPreViewActor.TailedMuzzle) then local MuzzleTailedParticle = TempPreViewActor:GetNowFXFromFXType(EFXType.MuzzleTailed)
if UE.IsValid(MuzzleTailedParticle) then
UGCLogSystem.Log("[UGCPlayerPawn_WeaponAttachEffect] 11111111111111111111111111") UGCLogSystem.Log("[UGCPlayerPawn_WeaponAttachEffect] 11111111111111111111111111")
if UE.IsValid(SKMesh) then if UE.IsValid(SKMesh) then
UGCLogSystem.Log("[UGCPlayerPawn_WeaponAttachEffect] 22222222222222222222222222222") UGCLogSystem.Log("[UGCPlayerPawn_WeaponAttachEffect] 22222222222222222222222222222")
UGCLogSystem.Log("[UGCPlayerPawn_WeaponAttachEffect] Bind TailedMuzzle") UGCLogSystem.Log("[UGCPlayerPawn_WeaponAttachEffect] Bind TailedMuzzle")
self.BoundOnceEffectWeapons[#self.BoundOnceEffectWeapons + 1] = Weapon self.BoundOnceEffectWeapons[#self.BoundOnceEffectWeapons + 1] = Weapon
GameplayStatics.SpawnEmitterAttached(TempPreViewActor.TailedMuzzle, SKMesh, "MuzzleEffect", {X=0,Y=0,Z=0}, {Roll = 0, Pitch = 0, Yaw = 0}, {X=1,Y=1,Z=1}, EAttachLocation.SnapToTarget, true) self.MuzzleTailedParticleComp = GameplayStatics.SpawnEmitterAttached(MuzzleTailedParticle, SKMesh, "MuzzleEffect", {X=0,Y=0,Z=0}, {Roll = 0, Pitch = 0, Yaw = 0}, {X=1,Y=1,Z=1}, EAttachLocation.SnapToTarget, true)
self:OverrideFXColor(EFXType.MuzzleTailed)
end end
end end
-- 子弹拖尾特效 -- 子弹拖尾特效
if TempPreViewActor.BulletParticle then if TempPreViewActor:GetNowFXFromFXType(EFXType.Bullet) then
Weapon.OnBulletBeforeShootDelegate:Add(self.BindBulletTailFX, self) Weapon.OnBulletBeforeShootDelegate:Add(self.BindBulletTailFX, self)
end end
end end
@ -160,23 +194,11 @@ function UGCPlayerPawn:BindBulletTailFX(Bullet)
local TempPreViewActor = UGCGameSystem.GameState:GetPreViewFXActor() local TempPreViewActor = UGCGameSystem.GameState:GetPreViewFXActor()
if UE.IsValid(TempPreViewActor) then if UE.IsValid(TempPreViewActor) then
if UE.IsValid(Bullet) then if UE.IsValid(Bullet) then
-- GameplayStatics.SpawnEmitterAttached(TempPreViewActor.BulletParticle, Bullet:K2_GetRootComponent(), "", {X=0,Y=0,Z=0}, {Roll = 0, Pitch = 0, Yaw = 0}, {X=1,Y=1,Z=1}, EAttachLocation.SnapToTarget, true)
local BulletTailFXActor = UGCGameSystem.GameState:GetBulletFXActor() local BulletTailFXActor = UGCGameSystem.GameState:GetBulletFXActor()
--BulletTailFXActor.ProjectileMovement.InitialSpeed = InitialSpeed
--BulletTailFXActor.ProjectileMovement.Velocity = VectorHelper.MulNumber(Bullet:GetActorForwardVector(), InitialSpeed)
local InitialSpeed = Bullet:GetMaxBulletFlySpeed() local InitialSpeed = Bullet:GetMaxBulletFlySpeed()
local Velocity = VectorHelper.MulNumber(Bullet:GetActorForwardVector(), InitialSpeed) local Velocity = VectorHelper.MulNumber(Bullet:GetActorForwardVector(), InitialSpeed)
BulletTailFXActor:ActiveFly(Bullet:K2_GetActorRotation(), Bullet:K2_GetActorLocation(), Velocity, TempPreViewActor.BulletParticle) BulletTailFXActor:ActiveFly(Bullet:K2_GetActorRotation(), Bullet:K2_GetActorLocation(), Velocity, TempPreViewActor:GetNowFXFromFXType(EFXType.Bullet))
UGCLogSystem.Log("[UGCPlayerPawn_BindBulletTailFX] InitialSpeed:%s", tostring(InitialSpeed)) UGCLogSystem.Log("[UGCPlayerPawn_BindBulletTailFX] InitialSpeed:%s", tostring(InitialSpeed))
--Bullet.NormalTailFX = TempPreViewActor.BulletParticle
--Bullet.BeamTailFX = TempPreViewActor.BulletParticle
--
--Bullet.NormalTailFXComp:SetTemplate(TempPreViewActor.BulletParticle)
--Bullet.BeamTailFXComp:SetTemplate(TempPreViewActor.BulletParticle)
--
--Bullet.bShowNormalTailFXImpactInfo = true
end end
end end
end end

View File

@ -2,3 +2,13 @@
-- sorted by enum name asc -- sorted by enum name asc
---@enum EFXType
EFXType = {
Muzzle = 0,
Kill = 1,
Bullet = 2,
MuzzleTailed = 3,
Hit = 4,
};

View File

@ -0,0 +1,14 @@
-- auto exported UStruct while compiling
-- sorted by struct name asc
---@class FFXData
---@field ID int32
---@field FXType EFXType
---@field Rarity int32
---@field Name FString
---@field Desc FString
---@field Particle UParticleSystem
---@field ColorValue float[]
---@field BaseColor FLinearColor

View File

@ -56,6 +56,11 @@ function BP_BulletTailFX:ActiveFly(Rot, Pos, Velocity, ParticleSystemTemplate)
end end
self.BulletFXComp:SetActive(true, true) self.BulletFXComp:SetActive(true, true)
local TempPreViewActor = UGCGameSystem.GameState:GetPreViewFXActor()
if UE.IsValid(TempPreViewActor) then
TempPreViewActor:SetParticleCompColor(self.BulletFXComp, EFXType.Bullet)
end
self.ProjectileMovement.Velocity = Velocity self.ProjectileMovement.Velocity = Velocity
self.BulletFXComp:SetHiddenInGame(false, true); self.BulletFXComp:SetHiddenInGame(false, true);

View File

@ -1,56 +1,14 @@
NowEventID = 0;
function GetNewEventID()
NowEventID = NowEventID + 1
return NowEventID
end
EventEnum = { EventEnum = {
-- DefaultEvent
DSStartUp = 1001, -- 服务器启动
PlayerLogin = 1003, -- 玩家加入房间 PlayerKey
PlayerExit = 1004, -- 玩家离开房间 PlayerKey
-- GameState
GameStateChange = 2001, -- 游戏模式改变 CustomEnum.EGameState
WaitPlayerJoin = 2002, -- 等待玩家加入
GamePlay = 2003, -- 游戏开始
GameEnd = 2004, -- 游戏结束
RoundBegining = 2005, -- 回合开始
RoundEnd = 2006, -- 回合结束
RoundReadyFinish = 2007, -- 回合准备阶段结束
-- PlayerEvent -- PlayerEvent
PlayerDeathInfo = 3001, -- 死亡信息 VictimKey, CauserKey, WeaponID, DamageType, IsHeadShotDamage, Distance, DamageValue uint, uint, int, int, bool, float, float PlayerDeathInfo = GetNewEventID(), -- 死亡信息 VictimKey, CauserKey, WeaponID, DamageType, IsHeadShotDamage, Distance, DamageValue uint, uint, int, int, bool, float, float
PlayerInjuryInfo = 3002, -- 受伤信息 VictimKey, CauserKey, WeaponID, DamageType, IsHeadShotDamage, Distance, DamageValue uint, uint, int, int, bool, float, float PlayerInjuryInfo = GetNewEventID(), -- 受伤信息 VictimKey, CauserKey, WeaponID, DamageType, IsHeadShotDamage, Distance, DamageValue uint, uint, int, int, bool, float, float
PlayerPossessed = 3003, -- 玩家受控 PlayerKey
PlayerBeginPlay = 3004, -- 玩家受控 PlayerPawn
BulletHitCallBack = 3005, -- 玩家射出的子弹命中物体或玩家的回调 (PlayerPawn:UGCPlayerPawn, ShootWeapon:ASTExtraShootWeapon,Bullet:ASTExtraShootWeaponBulletBase,HitInfo:FHitResult)
PlayerTeamChange = 3006, -- 玩家的队伍改变 PC, TeamID
-- PlayerPawn同步参数更新 更新传入Pawn及其同步变量值
UpdateCanObtainIncreaseCount = 4001,
UpdateNowCanSelectIncrease = 4002,
UpdateOwnedIncrease = 4003,
UpdateToGodSchedule = 4004,
-- PlayerEvent End
UpdatePlayerStartList = 10001, -- 通知出生点控制器进行更新出生点指针
AchievementSettlement = 10002, -- 成就事件游戏结算
UpdateTeamScore = 10003, -- 队伍得分信息更新
UpdatePlayerScoreData = 10004, -- 玩家得分信息更新 通过UGCGameSystem.GameState.PlayerScoreDatas 获取玩家得分信息
AddTip = 10005, -- 添加提提示 TipStr TipType
GameWillBegin = 10006, -- 游戏即将开始
PlayerIsAliveIsChange = 10007, -- 玩家存活列表改变
UpdatePlayerInfo = 10008, -- 玩家个人信息更新
PlayerWeaponCombinationUpdate = 11001, -- 玩家可选的武器配置列表更新 [PlayerKey] = CombinationType
PlayerSelectedWeaponIndexUpdate = 11002, -- 玩家选择的武器配置索引更新 [PlayerKey] = Index
--- SelectMap
LoadMap = 20001, -- 关卡加载 MapConifg.MapType
SelectMapCallBack = 20002, -- 地图选择服务器的回调 bSucceed, MapType
SelectDefaultWeaponCallBack = 20003, -- 默认武器选择回调 bSucceed, WeaponID
RandomSelectVoteMap = 20004,
UpdateMapKey = 20005, -- 随机出的地图索引 MapKey
ChangeFX = GetNewEventID(), -- 切换特效 传入EFXType
OverrideFXColor = GetNewEventID(), -- 切换特效颜色 传入EFXType
} }

View File

@ -14,3 +14,4 @@ require(Prefix .. 'UGCSendRPCSystem')
require(Prefix .. 'PlayerScoreSystem') require(Prefix .. 'PlayerScoreSystem')
require(Prefix .. 'MyVehicleSystem') require(Prefix .. 'MyVehicleSystem')
require(Prefix .. 'MyWeaponSystem') require(Prefix .. 'MyWeaponSystem')
require(Prefix .. 'WidgetLibrary')

View File

@ -153,6 +153,23 @@ function UGCSystemLibrary.AsyncLoadAsset(AssetPath, CallBackFunc, Obj, SaveAsset
end end
end end
--- 通过路径获取DataTable
---@param DataTablePath string
---@param ToNumberKey bool 是否将Key值转化为Number类型再返回
function UGCSystemLibrary.GetDataTableFromPath(DataTablePath, ToNumberKey)
local ResDataTable = Gameplay.GetTable(DataTablePath)
if ToNumberKey then
local Res = {}
for i, v in pairs(ResDataTable) do
Res[tonumber(i)] = v
end
return Res
else
return ResDataTable
end
end
---@param AssetPath:string ---@param AssetPath:string
---@param SaveAsset:bool 是否保存 ---@param SaveAsset:bool 是否保存
function UGCSystemLibrary.LoadAsset(AssetPath, SaveAsset) function UGCSystemLibrary.LoadAsset(AssetPath, SaveAsset)
@ -166,6 +183,7 @@ function UGCSystemLibrary.LoadAsset(AssetPath, SaveAsset)
end end
end end
--- 通过ItemID获取item类型 --- 通过ItemID获取item类型
---@param ItemID int ---@param ItemID int
---@return ItemTypeID int ---@return ItemTypeID int

View File

@ -0,0 +1,52 @@
WidgetLibrary = WidgetLibrary or {}
--- 设置
---@param widget UUserWidget
---@param offset float
function WidgetLibrary.SetWidgetToRightBorder(widget, offset)
if not widget then return end
local slot = WidgetLayoutLibrary.SlotAsCanvasSlot(widget)
slot:SetAnchors({ Minimum = { X = 1, Y = 0 }, Maximum = { X = 1, Y = 0 } })
slot:SetAlignment({ X = 1, Y = 0 })
local offsets = slot:GetOffsets()
slot:SetOffsets({ Left = offset, Right = offsets.Right, Bottom = offsets.Bottom, Top = offsets.Top })
end
--- 为防止被清除做出的全局处理
function WidgetLibrary.BindButtonClicked(TargetButton, Func, Obj)
TargetButton.OnClicked:Add(Func, Obj)
end
--- 为防止被清除做出的全局处理
function WidgetLibrary.BindButtonPressed(TargetButton, Func, Obj)
TargetButton.OnPressed:Add(Func, Obj)
end
--- 为防止被清除做出的全局处理
function WidgetLibrary.BindButtonReleased(TargetButton, Func, Obj)
TargetButton.OnReleased:Add(Func, Obj)
end
--- 绑定UI文本
function WidgetLibrary.TextBlockBindingPropertyText(TargetTextBlock, Func, Obj)
TargetTextBlock:BindingProperty("Text", Func, Obj)
end
--- 直接绑定按键点击打开WidgetManager的页面
function WidgetLibrary.ButtonOnClickShowPanel(TargetButton, UIType, IsClose)
TargetButton.OnClicked:Add(
function()
if IsClose then
WidgetManager:ClosePanel(UIType)
else
WidgetManager:ShowPanel(UIType, false)
end
end
)
end
function WidgetLibrary.SliderOnValueChanged(Slider, Func, Obj)
Slider.OnValueChanged:Add(Func, Obj)
end

View File

@ -0,0 +1,26 @@
---@class WB_FX_Main_C:UUserWidget
---@field NewButton_ShowPanel UNewButton
---@field REINST_WB_PreviewFX_C_0 UWB_PreviewFX_C
---@field WB_PreviewFX UWB_PreviewFX_C
--Edit Below--
local WB_FX_Main = { bInitDoOnce = false }
function WB_FX_Main:Construct()
self.WB_PreviewFX:LuaInit()
WidgetLibrary.BindButtonClicked(self.NewButton_ShowPanel, self.ShowPreviewFXPanel, self)
end
function WB_FX_Main:ShowPreviewFXPanel()
self.WB_PreviewFX:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
end
-- function WB_FX_Main:Tick(MyGeometry, InDeltaTime)
-- end
-- function WB_FX_Main:Destruct()
-- end
return WB_FX_Main

View File

@ -0,0 +1,102 @@
---@class WB_Item_FXType_C:UUserWidget
---@field NewButton_BindColor UNewButton
---@field NewButton_Change UNewButton
---@field NewButton_ResetColor UNewButton
---@field TextBlock_TypeName UTextBlock
---@field WidgetSwitcher_BindColor UWidgetSwitcher
---@field Setting_PickUp_BP USetting_Pickup_UIBP_C
--Edit Below--
local WB_Item_FXType = {
bInitDoOnce = false;
IsBind = false
}
--[==[ Construct
function WB_Item_FXType:Construct()
end
-- Construct ]==]
-- function WB_Item_FXType:Tick(MyGeometry, InDeltaTime)
-- end
-- function WB_Item_FXType:Destruct()
-- end
function WB_Item_FXType:LuaInit()
if self.bInitDoOnce then return end self.bInitDoOnce = true
WidgetLibrary.BindButtonClicked(self.NewButton_ResetColor, self.ResetColor, self)
WidgetLibrary.BindButtonClicked(self.NewButton_Change, self.NextFx, self)
WidgetLibrary.BindButtonClicked(self.NewButton_BindColor, self.ChangeBindColor, self)
end
FXTypeName = {
[EFXType.Muzzle] = "枪口火焰",
[EFXType.MuzzleTailed] = "枪口拖尾",
[EFXType.Kill] = "击杀效果",
[EFXType.Bullet] = "弹道",
[EFXType.Hit] = "命中效果",
}
function WB_Item_FXType:SetType(InType)
self:LuaInit()
self.FXType = InType
if FXTypeName[self.FXType] then
self.TextBlock_TypeName:SetText(FXTypeName[self.FXType])
end
end
function WB_Item_FXType:GetFXType()
return self.FXType
end
function WB_Item_FXType:ResetColor()
local TempPreViewActor = UGCGameSystem.GameState:GetPreViewFXActor()
if UE.IsValid(TempPreViewActor) then
TempPreViewActor:SetOverrideColor(self.FXType, nil)
self:SetBindColor(false)
end
end
function WB_Item_FXType:NextFx()
local TempPreViewActor = UGCGameSystem.GameState:GetPreViewFXActor()
if UE.IsValid(TempPreViewActor) then
TempPreViewActor:SetNextFX(self.FXType)
end
end
function WB_Item_FXType:ChangeBindColor()
self:SetBindColor(not self.IsBind)
end
function WB_Item_FXType:SetBindColor(InIsBind)
if self.IsBind ~= InIsBind then
self.IsBind = InIsBind
self.WidgetSwitcher_BindColor:SetActiveWidgetIndex(self.IsBind and 1 or 0)
self:BindChangeCallBackNotify()
end
end
function WB_Item_FXType:GetIsBindColor()
return self.IsBind
end
function WB_Item_FXType:BindChangeCallBackNotify()
if self.CallBackFunc then
if self.CallBackObj then
self.CallBackFunc(self.CallBackObj, self.FXType, self.IsBind)
else
self.CallBackFunc(self.FXType, self.IsBind)
end
end
end
function WB_Item_FXType:BindLockCallBack(InFunc, InObj)
self.CallBackFunc = InFunc
self.CallBackObj = InObj
end
return WB_Item_FXType

View File

@ -0,0 +1,98 @@
---@class WB_Item_Slide_C:UUserWidget
---@field Button_SlideMode_add UButton
---@field Button_SlideMode_minus UButton
---@field CanvasPanel_11 UCanvasPanel
---@field ProgressBar_SlideMode UProgressBar
---@field SlideMode_Value UTextBlock
---@field Slider_SlideMode USlider
---@field TextBlock_Name UTextBlock
---@field Setting_PickUp_BP USetting_Pickup_UIBP_C
--Edit Below--
local WB_Item_Slide = {
bInitDoOnce = false;
Interval = 256.;
MinVal = 0;
MaxVal = 255
}
function WB_Item_Slide:Construct()
self:LuaInit()
end
function WB_Item_Slide:LuaInit()
if self.bInitDoOnce then return ; end self.bInitDoOnce = true
WidgetLibrary.SliderOnValueChanged(self.Slider_SlideMode, self.UpdateVal, self)
WidgetLibrary.BindButtonClicked(self.Button_SlideMode_add, self.AddVal, self)
WidgetLibrary.BindButtonClicked(self.Button_SlideMode_minus, self.SubVal, self)
self.Slider_SlideMode:SetStepSize(1./self.Interval)
self:UpdateVal()
end
function WB_Item_Slide:SetID(InID)
self.ID = InID
local NameList = {"R", "G", "B"}
local RGBColor = {
{R = 1, G = 0, B = 0, A = 1 },
{R = 0, G = 1, B = 0, A = 1 },
{R = 0, G = 0, B = 1, A = 1 },
}
if NameList[InID] then
self.TextBlock_Name:SetText(NameList[InID])
self.ProgressBar_SlideMode:SetFillColorAndOpacity(RGBColor[InID])
end
end
function WB_Item_Slide:GetVal()
return math.floor(math.clamp(KismetMathLibrary.Round(self.Slider_SlideMode:GetValue() * self.Interval + self.MinVal), self.MinVal, self.MaxVal) + 0.5)
end
function WB_Item_Slide:GetSlideVal()
return self.Slider_SlideMode:GetValue()
end
function WB_Item_Slide:AddVal()
local TargetVal = math.clamp(self.Slider_SlideMode:GetValue() + 1./self.Interval, 0, 1)
self.Slider_SlideMode:SetValue(TargetVal)
self:UpdateVal()
end
function WB_Item_Slide:SubVal()
local TargetVal = math.clamp(self.Slider_SlideMode:GetValue() - 1./self.Interval, 0, 1)
self.Slider_SlideMode:SetValue(TargetVal)
self:UpdateVal()
end
function WB_Item_Slide:UpdateVal()
local Val = self:GetVal()
local SlideVal = self:GetSlideVal()
self.SlideMode_Value:SetText(Val)
self.ProgressBar_SlideMode:SetPercent(SlideVal)
self:CallBackNotify()
end
function WB_Item_Slide:CallBackNotify()
if self.CallBackFunc then
if self.CallBackObj then
self.CallBackFunc(self.CallBackObj, self.ID, self:GetSlideVal())
else
self.CallBackFunc(self.ID, self:GetSlideVal())
end
end
end
function WB_Item_Slide:BindValueCallBack(InFunc, InObj)
self.CallBackFunc = InFunc
self.CallBackObj = InObj
end
-- function WB_Item_Slide:Tick(MyGeometry, InDeltaTime)
-- end
-- function WB_Item_Slide:Destruct()
-- end
return WB_Item_Slide

View File

@ -0,0 +1,88 @@
---@class WB_PreviewFX_C:UUserWidget
---@field Image_Color UImage
---@field NewButton_Close UNewButton
---@field VerticalBox_FXItemPanel UVerticalBox
---@field WB_Item_Slide_B UWB_Item_Slide_C
---@field WB_Item_Slide_G UWB_Item_Slide_C
---@field WB_Item_Slide_R UWB_Item_Slide_C
--Edit Below--
local WB_PreviewFX = {
bInitDoOnce = false;
NowColor = {R = 1., G = 1., B = 1., A = 1.}
}
function WB_PreviewFX:Construct()
self:LuaInit()
end
function WB_PreviewFX:LuaInit()
if self.bInitDoOnce then return ; end
WidgetLibrary.BindButtonClicked(self.NewButton_Close, self.CloseSelf, self)
local RGBSlide = {
self.WB_Item_Slide_R,
self.WB_Item_Slide_G,
self.WB_Item_Slide_B,
}
for i, v in pairs(RGBSlide) do
v:LuaInit()
v:SetID(i)
v:BindValueCallBack(self.UpdateColor, self)
end
for i = 1, self.VerticalBox_FXItemPanel:GetChildrenCount() do
local Item = self.VerticalBox_FXItemPanel:GetChildAt(i - 1)
if i <= table.getCount(EFXType) then
Item:SetType(i)
Item:BindLockCallBack(self.LockChange, self)
end
end
end
function WB_PreviewFX:CloseSelf()
self:SetVisibility(ESlateVisibility.Collapsed)
end
function WB_PreviewFX:UpdateColor(ColorID, Val)
UGCLogSystem.Log("[WB_PreviewFX_UpdateColor] ColorID:%s, Val:%s", tostring(ColorID), tostring(Val))
if ColorID == 1 then
self.NowColor.R = Val
elseif ColorID == 2 then
self.NowColor.G = Val
elseif ColorID == 3 then
self.NowColor.B = Val
end
self.Image_Color:SetColorAndOpacity(self.NowColor)
local TempPreViewActor = UGCGameSystem.GameState:GetPreViewFXActor()
if UE.IsValid(TempPreViewActor) then
for i = 1, self.VerticalBox_FXItemPanel:GetChildrenCount() do
local Item = self.VerticalBox_FXItemPanel:GetChildAt(i - 1)
if i <= table.getCount(EFXType) then
if Item:GetIsBindColor() then
UGCLogSystem.Log("[WB_PreviewFX_UpdateColor] i:%s", tostring(i))
TempPreViewActor:SetOverrideColor(i, self.NowColor)
end
end
end
end
end
function WB_PreviewFX:LockChange(FXType, IsBind)
if IsBind then
local TempPreViewActor = UGCGameSystem.GameState:GetPreViewFXActor()
if UE.IsValid(TempPreViewActor) then
TempPreViewActor:SetOverrideColor(FXType, self.NowColor)
end
end
end
return WB_PreviewFX

Binary file not shown.

View File

@ -53,13 +53,13 @@ SwitchesInMaps=((Key="r.Mobile.EnableIBL",Value=0),(Key="s.StreamableDelegateLim
PlayBindingArray=[] PlayBindingArray=[]
[JobOption] [JobOption]
LastJobId=600040486 LastJobId=-1
LastWindowsJobId=600040035 LastWindowsJobId=-1
LastAndroidJobId=600040035 LastAndroidJobId=-1
LastIOSJobId=600040035 LastIOSJobId=-1
PakOnly=1 PakOnly=0
LastSkipBake=True LastSkipBake=False
LastTargetPlatform=LinuxServer+WindowsNoEditor+Android_ETC2+IOS+OpenHarmony_ETC2 LastTargetPlatform=LinuxServer
[UGCUploadOption] [UGCUploadOption]
PlatformIndex=0 PlatformIndex=0
@ -68,6 +68,6 @@ TargetPlatform=LinuxServer+WindowsNoEditor+Android_ETC2+IOS+OpenHarmony_ETC2
[DebugSettings] [DebugSettings]
bRoomOB=0 bRoomOB=0
TeamPlayers=5,0; TeamPlayers=2,0;

View File

@ -567,7 +567,7 @@ end
function UGCGameState:SetPlayerWeaponCombination(PlayerKey, WeaponCombinationType) function UGCGameState:SetPlayerWeaponCombination(PlayerKey, WeaponCombinationType)
self.PlayerWeaponCombination[PlayerKey] = WeaponCombinationType self.PlayerWeaponCombination[PlayerKey] = WeaponCombinationType
self:ResetPlayerSelectWeaponIndex(PlayerKey) -- self:ResetPlayerSelectWeaponIndex(PlayerKey)
end end
function UGCGameState:GetPlayerWeaponCombination(PlayerKey) function UGCGameState:GetPlayerWeaponCombination(PlayerKey)
@ -580,7 +580,8 @@ end
--- 重置玩家选择的武器配置索引 --- 重置玩家选择的武器配置索引
function UGCGameState:ResetPlayerSelectWeaponIndex(PlayerKey) function UGCGameState:ResetPlayerSelectWeaponIndex(PlayerKey)
self.PlayerSelectedWeaponIndex[PlayerKey] = 1 if self.PlayerSelectedWeaponIndex[PlayerKey] == nil then self.PlayerSelectedWeaponIndex[PlayerKey] = {} end
self.PlayerSelectedWeaponIndex[PlayerKey][self:GetPlayerWeaponCombination(PlayerKey)] = 1
end end
--- 重置所有玩家的武器配置索引 --- 重置所有玩家的武器配置索引
@ -590,7 +591,8 @@ end
--- 设置玩家选择的武器配置索引 --- 设置玩家选择的武器配置索引
function UGCGameState:PlayerSelectWeaponIndex(PlayerKey, WeaponCombinationIndex) function UGCGameState:PlayerSelectWeaponIndex(PlayerKey, WeaponCombinationIndex)
self.PlayerSelectedWeaponIndex[PlayerKey] = WeaponCombinationIndex if self.PlayerSelectedWeaponIndex[PlayerKey] == nil then self.PlayerSelectedWeaponIndex[PlayerKey] = {} end
self.PlayerSelectedWeaponIndex[PlayerKey][self:GetPlayerWeaponCombination(PlayerKey)] = WeaponCombinationIndex
self:UpdatePlayerWeapon(PlayerKey) self:UpdatePlayerWeapon(PlayerKey)
if self.PlayerAutoSelectWeaponHandle[PlayerKey] then if self.PlayerAutoSelectWeaponHandle[PlayerKey] then
UGCEventSystem.StopTimer(self.PlayerAutoSelectWeaponHandle[PlayerKey]) UGCEventSystem.StopTimer(self.PlayerAutoSelectWeaponHandle[PlayerKey])
@ -614,15 +616,16 @@ end
--- 获取玩家选择的武器配置索引 --- 获取玩家选择的武器配置索引
function UGCGameState:GetPlayerSelectedWeaponIndex(PlayerKey) function UGCGameState:GetPlayerSelectedWeaponIndex(PlayerKey)
return self.PlayerSelectedWeaponIndex[PlayerKey] if self.PlayerSelectedWeaponIndex[PlayerKey] == nil then self.PlayerSelectedWeaponIndex[PlayerKey] = {} end
if self.PlayerSelectedWeaponIndex[PlayerKey][self:GetPlayerWeaponCombination(PlayerKey)] == nil then
self.PlayerSelectedWeaponIndex[PlayerKey][self:GetPlayerWeaponCombination(PlayerKey)] = 1
end
return self.PlayerSelectedWeaponIndex[PlayerKey][self:GetPlayerWeaponCombination(PlayerKey)]
end end
--- 获取玩家选择的武器索引对应的武器及配件 --- 获取玩家选择的武器索引对应的武器及配件
function UGCGameState:GetPlayerSelectedWeaponAndParts(PlayerKey) function UGCGameState:GetPlayerSelectedWeaponAndParts(PlayerKey)
local Res = {} local Res = {}
if not self:CheckPlayerSelectWeaponIndex(PlayerKey) then
self.PlayerSelectedWeaponIndex[PlayerKey] = 1
end
local PlayerWeaponCombination = self:GetPlayerWeaponCombination(PlayerKey) local PlayerWeaponCombination = self:GetPlayerWeaponCombination(PlayerKey)
local PlayerSelectedWeaponIndex = self:GetPlayerSelectedWeaponIndex(PlayerKey) local PlayerSelectedWeaponIndex = self:GetPlayerSelectedWeaponIndex(PlayerKey)
local WeaponCombination = WeaponSelectionCombinationConfig.WeaponCombinationList[PlayerWeaponCombination] local WeaponCombination = WeaponSelectionCombinationConfig.WeaponCombinationList[PlayerWeaponCombination]
@ -666,9 +669,6 @@ end
--- 获取玩家选择的武器Item表 --- 获取玩家选择的武器Item表
function UGCGameState:GetPlayerSelectedWeaponItemInfo(PlayerKey) function UGCGameState:GetPlayerSelectedWeaponItemInfo(PlayerKey)
local Res = {} local Res = {}
if not self:CheckPlayerSelectWeaponIndex(PlayerKey) then
self.PlayerSelectedWeaponIndex[PlayerKey] = 1
end
local PlayerWeaponCombination = self:GetPlayerWeaponCombination(PlayerKey) local PlayerWeaponCombination = self:GetPlayerWeaponCombination(PlayerKey)
local PlayerSelectedWeaponIndex = self:GetPlayerSelectedWeaponIndex(PlayerKey) local PlayerSelectedWeaponIndex = self:GetPlayerSelectedWeaponIndex(PlayerKey)
local WeaponCombination = WeaponSelectionCombinationConfig.WeaponCombinationList[PlayerWeaponCombination] local WeaponCombination = WeaponSelectionCombinationConfig.WeaponCombinationList[PlayerWeaponCombination]
@ -1169,6 +1169,59 @@ function UGCGameState:PlayerIsChallenge(InPlayerKey)
return self:GetChallengePlayer() == InPlayerKey return self:GetChallengePlayer() == InPlayerKey
end end
function UGCGameState:GetNextChallenge()
local AllPK = UGCSystemLibrary.GetAllPlayerKeys()
if self.ChallengedPlayers == nil then self.ChallengedPlayers = {} end
local TempChallengePlayer = nil
for i, v in pairs(AllPK) do
if not table.hasValue(self.ChallengedPlayers, v) then
TempChallengePlayer = v
break
end
end
return TempChallengePlayer
end
-- 更新玩家的队伍
function UGCGameState:ChangePlayerTeamLogic(PlayerKey, PlayerTeamID)
-- 设置出生点类型
local PC = UGCGameSystem.GetPlayerControllerByPlayerKey(PlayerKey)
if PlayerTeamID == 1 then
PC:SetStartPointType(EPlayerStartType.Team1)
self:SetPlayerWeaponCombination(PlayerKey, WeaponSelectionCombinationConfig.ECombinationType.Combination1)
else
PC:SetStartPointType(EPlayerStartType.Team2)
self:SetPlayerWeaponCombination(PlayerKey, WeaponSelectionCombinationConfig.ECombinationType.Combination2)
end
-- 官方逻辑设置队伍ID
UGCTeamSystem.ChangePlayerTeamID(PlayerKey, PlayerTeamID)
-- 玩家信息栏设置队伍信息
self.PlayerPersonalInfos[PlayerKey].TeamID = PlayerTeamID
-- 玩家比分栏设置比分信息
PlayerScoreSystem.UpdatePlayerTeamID(PlayerKey, PlayerTeamID)
end
-- 选出下一个挑战者
function UGCGameState:SelectNextChallenge()
local TempChallengePlayer = self:GetNextChallenge()
if TempChallengePlayer then
self.ChallengePlayer = TempChallengePlayer
self.ChallengedPlayers[#self.ChallengedPlayers + 1] = TempChallengePlayer
local AllPK = UGCSystemLibrary.GetAllPlayerKeys()
-- 配置队伍ID
for i, PlayerKey in pairs(AllPK) do
if PlayerKey == self.ChallengePlayer then
self:ChangePlayerTeamLogic(self.ChallengePlayer, 2)
else
self:ChangePlayerTeamLogic(PlayerKey, 1)
end
end
UGCSendRPCSystem.RPCEvent(nil, EventEnum.AddTip, TipConfig.TipType.ChallengerPlayer, self.ChallengePlayer)
return true
end
end
-- 工程设置------------------------------------------------------------------------------------------------------------- -- 工程设置-------------------------------------------------------------------------------------------------------------

View File

@ -19,7 +19,7 @@ function EventAction_PlayerExit:Execute(...)
local HasNotControlled = false local HasNotControlled = false
for k, Pawn in pairs(AllPawn) do for k, Pawn in pairs(AllPawn) do
if not Pawn:IsControlled() then if not Pawn:IsControlled() then
Pawn:K2_DestroyActor() -- Pawn:K2_DestroyActor()
HasNotControlled = true HasNotControlled = true
end end
end end

View File

@ -105,6 +105,8 @@ end
-- 根据工程的修改而改变的开始执行逻辑 -- 根据工程的修改而改变的开始执行逻辑
function EventAction_RoundBegin:ExecuteOtherLogic() function EventAction_RoundBegin:ExecuteOtherLogic()
-- 选出下一个挑战者
UGCGameSystem.GameState:SelectNextChallenge()
-- 判断玩家是否死亡,死亡则重生 -- 判断玩家是否死亡,死亡则重生
local AllPC = UGCGameSystem.GetAllPlayerController() local AllPC = UGCGameSystem.GetAllPlayerController()

View File

@ -44,9 +44,11 @@ end
--- 判断玩法是否结束 根据玩法进行修改 --- 判断玩法是否结束 根据玩法进行修改
function EventAction_RoundEnd:CheckGameEnd() function EventAction_RoundEnd:CheckGameEnd()
return UGCGameSystem.GameState:IsFinishRound() --return UGCGameSystem.GameState:IsFinishRound()
or UGCGameSystem.GameState:GetMaxTeamScore() > GlobalConfigs.GameSetting.MaxRound // 2 -- or UGCGameSystem.GameState:GetMaxTeamScore() > GlobalConfigs.GameSetting.MaxRound // 2
or #UGCTeamSystem.GetPlayerKeysByTeamID(1) < 1 or #UGCTeamSystem.GetPlayerKeysByTeamID(2) < 1 -- or #UGCTeamSystem.GetPlayerKeysByTeamID(1) < 1 or #UGCTeamSystem.GetPlayerKeysByTeamID(2) < 1
-- or UGCGameSystem.GameState:GettNextChallenge() == nil
return UGCGameSystem.GameState:IsFinishRound() or UGCGameSystem.GameState:GetNextChallenge() == nil
end end
--其他逻辑可修改替换 ------------------------ --其他逻辑可修改替换 ------------------------
@ -63,18 +65,18 @@ end
function EventAction_RoundEnd:OtherGameFinishLogic() function EventAction_RoundEnd:OtherGameFinishLogic()
-- 调换出生点 -- 调换出生点
if GlobalConfigs.GameSetting.ActiveChangeTeam then --if GlobalConfigs.GameSetting.ActiveChangeTeam then
if UGCGameSystem.GameState:GetRoundCount() == GlobalConfigs.GameSetting.MaxRound // 2 then -- if UGCGameSystem.GameState:GetRoundCount() == GlobalConfigs.GameSetting.MaxRound // 2 then
local AllPC = UGCGameSystem.GetAllPlayerController() -- local AllPC = UGCGameSystem.GetAllPlayerController()
for i, PC in pairs(AllPC) do -- for i, PC in pairs(AllPC) do
if PC:GetStartPointType() == EPlayerStartType.Team1 then -- if PC:GetStartPointType() == EPlayerStartType.Team1 then
PC:SetStartPointType(EPlayerStartType.Team2) -- PC:SetStartPointType(EPlayerStartType.Team2)
else -- else
PC:SetStartPointType(EPlayerStartType.Team1) -- PC:SetStartPointType(EPlayerStartType.Team1)
end -- end
end -- end
end -- end
end --end
end end

View File

@ -124,7 +124,7 @@ function EventAction_WaitingPlayer:OtherFinishLogic()
UGCEventSystem.SendEvent(EventEnum.UpdatePlayerStartList) UGCEventSystem.SendEvent(EventEnum.UpdatePlayerStartList)
-- 选出挑战者 -- 选出挑战者
UGCGameSystem.GameState:ElectChallengePlayer() -- UGCGameSystem.GameState:ElectChallengePlayer()
-- 广播提示XXX成为挑战者 -- 广播提示XXX成为挑战者
-- 显示武器选择界面 -- 显示武器选择界面

View File

@ -153,6 +153,23 @@ function UGCSystemLibrary.AsyncLoadAsset(AssetPath, CallBackFunc, Obj, SaveAsset
end end
end end
--- 通过路径获取DataTable
---@param DataTablePath string
---@param ToNumberKey bool 是否将Key值转化为Number类型再返回
function UGCSystemLibrary.GetDataTableFromPath(DataTablePath, ToNumberKey)
local ResDataTable = Gameplay.GetTable(DataTablePath)
if ToNumberKey then
local Res = {}
for i, v in pairs(ResDataTable) do
Res[tonumber(i)] = v
end
return Res
else
return ResDataTable
end
end
---@param AssetPath:string ---@param AssetPath:string
---@param SaveAsset:bool 是否保存 ---@param SaveAsset:bool 是否保存
function UGCSystemLibrary.LoadAsset(AssetPath, SaveAsset) function UGCSystemLibrary.LoadAsset(AssetPath, SaveAsset)

View File

@ -134,7 +134,7 @@ WidgetConfig.Configs = {
ShowOnce = false, ShowOnce = false,
}, },
[WidgetConfig.EUIType.Settlement] = { [WidgetConfig.EUIType.Settlement] = {
Widget = UGCGameSystem.GetUGCResourcesFullPath('Asset/UI/Settlement/WB_TeamSettlement.WB_TeamSettlement_C'), Widget = UGCGameSystem.GetUGCResourcesFullPath('Asset/UI/Settlement/WB_Settlement_2.WB_Settlement_2_C'),
Layer = WidgetConfig.EUILayerGroup.High, Layer = WidgetConfig.EUILayerGroup.High,
ShowOnce = false, ShowOnce = false,
}, },

View File

@ -1,6 +1,7 @@
---@class WB_PlayerHead_48_C:UUserWidget ---@class WB_PlayerHead_48_C:UUserWidget
---@field Border_HeadMain UBorder ---@field Border_HeadMain UBorder
---@field Common_Avatar_BP_C_0 UCommon_Avatar_BP_C ---@field Common_Avatar_BP_C_0 UCommon_Avatar_BP_C
---@field Overlay_Dead UOverlay
---@field Overlay_KnockedDown UOverlay ---@field Overlay_KnockedDown UOverlay
---@field ProgressBar_Health UProgressBar ---@field ProgressBar_Health UProgressBar
---@field WidgetSwitcher_Frame UWidgetSwitcher ---@field WidgetSwitcher_Frame UWidgetSwitcher
@ -107,11 +108,13 @@ function WB_PlayerHead_48:UpdateWidgetState(InPlayerHeadState)
end end
self.Overlay_KnockedDown:SetVisibility(ESlateVisibility.Collapsed) self.Overlay_KnockedDown:SetVisibility(ESlateVisibility.Collapsed)
self.Border_HeadMain:SetContentColorAndOpacity({R=1,G=1,B=1,A=1}) self.Border_HeadMain:SetContentColorAndOpacity({R=1,G=1,B=1,A=1})
self.Overlay_Dead:SetVisibility(ESlateVisibility.Collapsed)
elseif self.PlayerHeadState == EPlayerHeadInfoState.Death then elseif self.PlayerHeadState == EPlayerHeadInfoState.Death then
-- 死亡 -- 死亡
self.ProgressBar_Health:SetVisibility(ESlateVisibility.Collapsed) self.ProgressBar_Health:SetVisibility(ESlateVisibility.Collapsed)
self.Overlay_KnockedDown:SetVisibility(ESlateVisibility.Collapsed) self.Overlay_KnockedDown:SetVisibility(ESlateVisibility.Collapsed)
self.Border_HeadMain:SetContentColorAndOpacity({R=0.281250,G=0.281250,B=0.281250,A=1.000000}) self.Border_HeadMain:SetContentColorAndOpacity({R=0.281250,G=0.281250,B=0.281250,A=1.000000})
self.Overlay_Dead:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
elseif self.PlayerHeadState == EPlayerHeadInfoState.KnockedDown then elseif self.PlayerHeadState == EPlayerHeadInfoState.KnockedDown then
-- 倒地 -- 倒地
if self.IsShowHealth then if self.IsShowHealth then
@ -120,6 +123,7 @@ function WB_PlayerHead_48:UpdateWidgetState(InPlayerHeadState)
end end
self.Overlay_KnockedDown:SetVisibility(ESlateVisibility.SelfHitTestInvisible) self.Overlay_KnockedDown:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
self.Border_HeadMain:SetContentColorAndOpacity({R=1,G=1,B=1,A=1}) self.Border_HeadMain:SetContentColorAndOpacity({R=1,G=1,B=1,A=1})
self.Overlay_Dead:SetVisibility(ESlateVisibility.Collapsed)
end end
end end
end end

Some files were not shown because too many files have changed in this diff Show More