505 lines
16 KiB
Lua
505 lines
16 KiB
Lua
|
--[[------------------------------------------游戏数据管理中心------------------------------------------------------]]--
|
|||
|
GameDataManager = GameDataManager or {}
|
|||
|
|
|||
|
GameDataManager.HasInitialized = false
|
|||
|
|
|||
|
--[[------------------------------------------动态数据------------------------------------------------------]]--
|
|||
|
|
|||
|
--游戏准备阶段配置表
|
|||
|
GameDataManager.GameReadyStageConfigTable = {}
|
|||
|
|
|||
|
--技能配置表
|
|||
|
GameDataManager.SkillConfigTable = {}
|
|||
|
|
|||
|
--武器初始化表
|
|||
|
GameDataManager.WeaponConstructTable = {}
|
|||
|
|
|||
|
--物品初始化表
|
|||
|
GameDataManager.ItemConfigTable = {}
|
|||
|
|
|||
|
--物品模型表
|
|||
|
GameDataManager.ItemMeshConfigTable = {}
|
|||
|
|
|||
|
--怪物信息表(已分类)
|
|||
|
GameDataManager.MonsterBaseConfigTable = {}
|
|||
|
|
|||
|
--结算数据(仅用于Client)
|
|||
|
GameDataManager.GameResultData = {}
|
|||
|
|
|||
|
-- 表示视觉效果的全局ID
|
|||
|
GameDataManager.EffectInstanceId = 0
|
|||
|
|
|||
|
--[[------------------------------------------常用指针------------------------------------------------------]]--
|
|||
|
|
|||
|
--当前PlayerState (仅用于Client)
|
|||
|
GameDataManager.OwnerPlayerState = nil
|
|||
|
|
|||
|
--当前PlayerController (仅用于Client)
|
|||
|
GameDataManager.OwnerPlayerController = nil
|
|||
|
|
|||
|
GameDataManager.CommonAttackWaveList = {}
|
|||
|
|
|||
|
function GameDataManager:Init()
|
|||
|
if GameDataManager.HasInitialized then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
self:LoadGameReadyStageConfigTable()
|
|||
|
self:LoadSkillConfigTable()
|
|||
|
self:LoadWeaponConstructTable()
|
|||
|
self:LoadItemConfigTable()
|
|||
|
self:LoadMonsterBaseConfigTable()
|
|||
|
|
|||
|
GameDataManager.InitCommonAttackWaveList()
|
|||
|
|
|||
|
GameDataManager.HasInitialized = true
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager:UnInit()
|
|||
|
GameDataManager.MonsterBaseConfigTable = nil
|
|||
|
GameDataManager.ItemConfigTable = nil
|
|||
|
GameDataManager.ItemMeshConfigTable = nil
|
|||
|
GameDataManager.GameReadyStageConfigTable = nil
|
|||
|
GameDataManager.SkillConfigTable = nil
|
|||
|
GameDataManager.WeaponConstructTable = nil
|
|||
|
GameDataManager.GameResultData = nil
|
|||
|
GameDataManager.OwnerPlayerState = nil
|
|||
|
GameDataManager.OwnerPlayerController = nil
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager.GetEffectInstanceId()
|
|||
|
GameDataManager.EffectInstanceId = GameDataManager.EffectInstanceId + 1
|
|||
|
return GameDataManager.EffectInstanceId
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager:LoadGameReadyStageConfigTable()
|
|||
|
GameDataManager.GameReadyStageConfigTable = CSVLoader.LoadTable("CSV/GameReadyStageConfigTable", nil)
|
|||
|
|
|||
|
table.sort(GameDataManager.GameReadyStageConfigTable, function(a, b) return a.Stage < b.Stage end)
|
|||
|
|
|||
|
for i, v in pairs(GameDataManager.GameReadyStageConfigTable) do
|
|||
|
UE.Log("[CSV][GameReadyStageConfig] 游戏准备阶段配置: Index = %d, Stage = %d, WaitTime = %.2f", i, v.Stage, v.WaitTime)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager:LoadSkillConfigTable()
|
|||
|
local SkillConfig = require("Script.SimpleSkill.SkillConfig")
|
|||
|
GameDataManager.SkillConfigTable = SkillConfig
|
|||
|
|
|||
|
for i, v in pairs(GameDataManager.SkillConfigTable) do
|
|||
|
UE.Log("[CSV][SkillConfig] 技能参数配置: SkillName = %s, Desc = %s", i, v.Description)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager:LoadWeaponConstructTable()
|
|||
|
GameDataManager.WeaponConstructTable = CSVLoader.LoadTable("CSV/WeaponAppearanceTable", nil)
|
|||
|
|
|||
|
for i, v in pairs(GameDataManager.WeaponConstructTable) do
|
|||
|
UE.Log("[CSV][WeaponConstruct] 武器初始化配置: WeaponID = %s, WeaponName = %s", i, v.WeaponName)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager:LoadItemConfigTable()
|
|||
|
local ItemDataConfigTable = CSVLoader.LoadTable("CSV/ItemDataConfigTable", "ItemID")
|
|||
|
|
|||
|
GameDataManager.ItemMeshConfigTable = Tables.ItemMeshConfig
|
|||
|
GameDataManager.ItemConfigTable = ItemDataConfigTable
|
|||
|
|
|||
|
for i, v in pairs(GameDataManager.ItemConfigTable) do
|
|||
|
UE.Log("[CSV][ItemConfig] 道具配置: ItemID = %s, ItemType = %s", i, v.ItemType)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager:LoadMonsterBaseConfigTable()
|
|||
|
local InfoTable = {}
|
|||
|
for MonsterID, MonsterConfig in pairs(Tables.MonsterBaseConfig) do
|
|||
|
if InfoTable[MonsterConfig.Type] == nil then
|
|||
|
InfoTable[MonsterConfig.Type] = {}
|
|||
|
end
|
|||
|
table.insert(InfoTable[MonsterConfig.Type], MonsterConfig)
|
|||
|
end
|
|||
|
GameDataManager.MonsterBaseConfigTable = InfoTable
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager.GetItemMeshPathByItemType(InItemType, WeaponClassType)
|
|||
|
local MeshPath = GameDataManager.ItemMeshConfigTable[InItemType]
|
|||
|
if MeshPath == nil then
|
|||
|
return nil
|
|||
|
end
|
|||
|
if WeaponClassType == nil then
|
|||
|
return KismetSystemLibrary.MakeSoftObjectPath(MeshPath)
|
|||
|
end
|
|||
|
return KismetSystemLibrary.MakeSoftObjectPath(MeshPath[WeaponClassType])
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager.GetItemInfoByItemID(InItemID)
|
|||
|
--首先获取各种类型
|
|||
|
--操作一下Id
|
|||
|
if DropItemConfigTable.Items[InItemID] ~= nil then
|
|||
|
return DropItemConfigTable.Items[InItemID]
|
|||
|
end
|
|||
|
|
|||
|
InItemID = InItemID // 100 * 100
|
|||
|
if DropItemConfigTable.Items[InItemID] ~= nil then
|
|||
|
return DropItemConfigTable.Items[InItemID]
|
|||
|
end
|
|||
|
|
|||
|
local ItemType = GetItemTypeByItemId(InItemID)
|
|||
|
if DropItemConfigTable.Items[ItemType] ~= nil then
|
|||
|
return DropItemConfigTable.Items[ItemType + 1]
|
|||
|
end
|
|||
|
|
|||
|
-- 这个就是具体的大类
|
|||
|
local val = InItemID // 1000 * 1000
|
|||
|
if ItemType == EItemType.SkillBook then
|
|||
|
val = 21000
|
|||
|
end
|
|||
|
if DropItemConfigTable.Items[val] ~= nil then
|
|||
|
return DropItemConfigTable.Items[val]
|
|||
|
end
|
|||
|
|
|||
|
print("[GameDataManager.GetItemInfoByItemID] 查看是否其他方式进行找到对应数据的,通过现有的方法无法找到")
|
|||
|
return nil
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager.GetItemIconByItemID(InItemID)
|
|||
|
return GameDataManager.GetItemInfoByItemID(InItemID).Icon
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager.GetItemDescByItemID(InItemID)
|
|||
|
InItemID = InItemID - InItemID % 1000
|
|||
|
return GameDataManager.ItemConfigTable[InItemID].Desc
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager.GetItemNameByItemID(InItemID)
|
|||
|
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager.GetItemTypeByItemID(InItemID)
|
|||
|
InItemID = InItemID - InItemID % 1000
|
|||
|
return GameDataManager.ItemConfigTable[InItemID].ItemType
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager.GetGameReadyStageConfig()
|
|||
|
if table.isEmpty(GameDataManager.GameReadyStageConfigTable) then
|
|||
|
GameDataManager:LoadGameReadyStageConfigTable()
|
|||
|
end
|
|||
|
|
|||
|
return GameDataManager.GameReadyStageConfigTable
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager.GetGameReadyStageInfoByStage(InStage)
|
|||
|
if table.isEmpty(GameDataManager.GameReadyStageConfigTable) then
|
|||
|
GameDataManager:LoadGameReadyStageConfigTable()
|
|||
|
end
|
|||
|
|
|||
|
for _, v in pairs(GameDataManager.GameReadyStageConfigTable) do
|
|||
|
if v.Stage == InStage then
|
|||
|
return v
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
return nil
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager.GetWeaponMeshInfo(ID)
|
|||
|
local WeaponConstructData = GameDataManager.GetWeaponConstructDataByID(ID)
|
|||
|
if WeaponConstructData then
|
|||
|
return WeaponConstructData.MeshConfig
|
|||
|
end
|
|||
|
return nil
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager.GetWeaponIcon(ID)
|
|||
|
local WeaponConstructData = GameDataManager.GetWeaponConstructDataByID(ID)
|
|||
|
if WeaponConstructData then
|
|||
|
return WeaponConstructData.Icon
|
|||
|
end
|
|||
|
return nil
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager.GetWeaponType(ID)
|
|||
|
local WeaponConstructData = GameDataManager.GetWeaponConstructDataByID(ID)
|
|||
|
if WeaponConstructData then
|
|||
|
return WeaponConstructData.WeaponType
|
|||
|
end
|
|||
|
return nil
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager.GetSkillData(SkillName)
|
|||
|
if table.isEmpty(GameDataManager.SkillConfigTable) then
|
|||
|
GameDataManager:LoadSkillConfigTable()
|
|||
|
end
|
|||
|
|
|||
|
for i, v in pairs(GameDataManager.SkillConfigTable) do
|
|||
|
if tonumber(i) == tonumber(SkillName) then
|
|||
|
UE.Log("[GameDataManager][GetSkillData] find skillname: InSkillName = %s", tostring(SkillName))
|
|||
|
return v
|
|||
|
end
|
|||
|
end
|
|||
|
UE.Log("[GameDataManager][GetSkillData] can't find skill: InSkillName = %s", tostring(SkillName))
|
|||
|
return nil
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager.GetSkillTypeByName(SkillName)
|
|||
|
if table.isEmpty(GameDataManager.SkillConfigTable) then
|
|||
|
GameDataManager:LoadSkillConfigTable()
|
|||
|
end
|
|||
|
|
|||
|
for i, v in pairs(GameDataManager.SkillConfigTable) do
|
|||
|
if tonumber(i) == tonumber(SkillName) then
|
|||
|
UE.Log("[GameDataManager][GetSkillTypeByName] skillname = %d, Find SkillType=%d", SkillName, v.SkillType)
|
|||
|
return v.SkillType
|
|||
|
end
|
|||
|
end
|
|||
|
UE.Log("[GameDataManager][GetSkillTypeByName] skillname = %d, cant Find SkillType", SkillName)
|
|||
|
return nil
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager.GetSkillNamesByAccessType(InAccessType)
|
|||
|
if InAccessType > ESkillAccessType.Acquired or InAccessType < ESkillAccessType.BuiltIn then
|
|||
|
return {}
|
|||
|
end
|
|||
|
|
|||
|
if table.isEmpty(GameDataManager.SkillConfigTable) then
|
|||
|
GameDataManager:LoadSkillConfigTable()
|
|||
|
end
|
|||
|
|
|||
|
local SkillNames = {}
|
|||
|
for SkillName, SkillConfig in pairs(GameDataManager.SkillConfigTable) do
|
|||
|
if SkillConfig.SkillAccess == InAccessType then
|
|||
|
table.insert(SkillNames, SkillName)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
return SkillNames
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager.GetSkillDescByName(SkillName)
|
|||
|
local SkillInfo = GlobalConfigs.SkillInfo[SkillName]
|
|||
|
if SkillInfo then
|
|||
|
return SkillInfo.Desc
|
|||
|
end
|
|||
|
|
|||
|
return ""
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager.GetTalentSkillShortDescByName(SkillName)
|
|||
|
local SkillInfo = GlobalConfigs.SkillInfo[SkillName]
|
|||
|
if SkillInfo then
|
|||
|
local ShortDesc = SkillInfo.ShortDesc
|
|||
|
return ShortDesc or ""
|
|||
|
end
|
|||
|
|
|||
|
return ""
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager.GetSkillNameStrByName(SkillName)
|
|||
|
local SkillInfo = GlobalConfigs.SkillInfo[SkillName]
|
|||
|
if SkillInfo then
|
|||
|
return SkillInfo.Name
|
|||
|
end
|
|||
|
|
|||
|
return ""
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager.GetSkillIconPathByName(SkillName)
|
|||
|
local SkillInfo = GlobalConfigs.SkillInfo[SkillName]
|
|||
|
local IconIndex = -1
|
|||
|
if SkillInfo then
|
|||
|
IconIndex = SkillInfo.IconIndex
|
|||
|
end
|
|||
|
if IconIndex <= 0 then
|
|||
|
return ""
|
|||
|
end
|
|||
|
|
|||
|
return UGCGameSystem.GetUGCResourcesFullPath(string.format('Asset/IconTexture/Role_Icon/Textures/Icon_UGC_role_%02d.Icon_UGC_role_%02d', IconIndex, IconIndex))
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager.GetWeaponConstructDataByID(ID)
|
|||
|
if table.isEmpty(GameDataManager.WeaponConstructTable) then
|
|||
|
GameDataManager:LoadWeaponConstructTable()
|
|||
|
end
|
|||
|
|
|||
|
local WeaponConstructData = GameDataManager.WeaponConstructTable[ID]
|
|||
|
if WeaponConstructData then
|
|||
|
return WeaponConstructData
|
|||
|
end
|
|||
|
UE.Log("[GameDataManager][GetWeaponConstructDataByID] ID = %s, Failed", tostring(ID))
|
|||
|
return nil
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager.GetMonsterTypeByID(InID)
|
|||
|
local MonsterInfo = Tables.MonsterBaseConfig[InID]
|
|||
|
if MonsterInfo then
|
|||
|
return MonsterInfo.Type
|
|||
|
end
|
|||
|
return EMonsterType.Default
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager.GetRandCommonMonsterClass()
|
|||
|
return GameDataManager.GetRandMonsterClassByType(EMonsterType.Common)
|
|||
|
end
|
|||
|
function GameDataManager.InitCommonAttackWaveList()
|
|||
|
local TempCommonAttackWave = TableHelper.DeepCopy(Tables.CommonAttackWave)
|
|||
|
table.sort(TempCommonAttackWave, function (CommonAttackWave1, CommonAttackWave2) return CommonAttackWave1.Order < CommonAttackWave2.Order end)
|
|||
|
local TempAttackWave = 1
|
|||
|
for k, v in pairs(TempCommonAttackWave) do
|
|||
|
for i = 1 ,TempCommonAttackWave[k].AttackWaveNumber do
|
|||
|
GameDataManager.CommonAttackWaveList[TempAttackWave] = TempCommonAttackWave[k].CommonID
|
|||
|
print("InitCommonAttackWaveList_TempAttackWave " .. TempAttackWave .." CommonID " .. TempCommonAttackWave[k].CommonID)
|
|||
|
TempAttackWave = TempAttackWave + 1
|
|||
|
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
function GameDataManager.GetAttackWaveCommonMonsterClass()
|
|||
|
local MonsterClass = nil
|
|||
|
if GameDataManager.CommonAttackWaveList[UGCGameSystem.GameState.CurAttackWave] then
|
|||
|
local MonsterPath = Tables.MonsterBaseConfig[GameDataManager.CommonAttackWaveList[UGCGameSystem.GameState.CurAttackWave]].Path
|
|||
|
MonsterClass = UE.LoadClass(MonsterPath)
|
|||
|
UE.Log("GetAttackWaveCommonMonsterClass_Succeed")
|
|||
|
else
|
|||
|
MonsterClass = GameDataManager.GetRandCommonMonsterClass()
|
|||
|
UE.Log("[Error] GameDataManager.GetAttackWaveCommonMonsterClass CommonAttackWaveList: %d is nil", UGCGameSystem.GameState.CurAttackWave)
|
|||
|
end
|
|||
|
return MonsterClass
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager.GetRandBossMonsterClass()
|
|||
|
if GameDataManager.BossIndex == nil then
|
|||
|
GameDataManager.BossIndex = 0
|
|||
|
end
|
|||
|
GameDataManager.BossIndex = GameDataManager.BossIndex + 1
|
|||
|
local CurBossID = UGCGameSystem.GameState.BossList[GameDataManager.BossIndex]
|
|||
|
|
|||
|
return GameDataManager.GetMonsterClassByID(CurBossID)
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager.GetRandHangupMonsterClass()
|
|||
|
return GameDataManager.GetRandMonsterClassByType(EMonsterType.HangupRoom)
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager.GetRandBreachMonsterClass()
|
|||
|
return GameDataManager.GetRandMonsterClassByType(EMonsterType.Breach)
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager.GetRandMonsterClassByType(InMonsterType)
|
|||
|
if table.isEmpty(GameDataManager.MonsterBaseConfigTable) then
|
|||
|
GameDataManager:LoadMonsterBaseConfigTable()
|
|||
|
end
|
|||
|
|
|||
|
local MonsterConfig = GameDataManager.MonsterBaseConfigTable[InMonsterType]
|
|||
|
if MonsterConfig then
|
|||
|
local Index = math.random(1, #MonsterConfig)
|
|||
|
return UE.LoadClass(MonsterConfig[Index].Path)
|
|||
|
end
|
|||
|
return nil
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager.GetMonsterConfigsByType(InMonsterType)
|
|||
|
if table.isEmpty(GameDataManager.MonsterBaseConfigTable) then
|
|||
|
GameDataManager:LoadMonsterBaseConfigTable()
|
|||
|
end
|
|||
|
|
|||
|
return GameDataManager.MonsterBaseConfigTable[InMonsterType]
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager.GetMonsterClassByID(InID)
|
|||
|
local MonsterConfig = Tables.MonsterBaseConfig[InID]
|
|||
|
if MonsterConfig then
|
|||
|
return UE.LoadClass(MonsterConfig.Path)
|
|||
|
end
|
|||
|
return nil
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager.GetRandDullMonsterClass()
|
|||
|
local DullMonsters = Tables.MonsterPawn.DullMonsters
|
|||
|
if DullMonsters then
|
|||
|
local Index = math.random(1, #DullMonsters)
|
|||
|
return UE.LoadClass(DullMonsters[Index])
|
|||
|
end
|
|||
|
return nil
|
|||
|
--return UE.LoadClass(Tables.MonsterPawn.AttackMonsters.Normal[1])
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager.GetChallengeInfoIndex(InMonsterType)
|
|||
|
return Tables.ChallengeMonsterTypeInfo[InMonsterType]
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager.GetChallengeMonsterLifeSpan(InMonsterType)
|
|||
|
local ChallengeInfoIndex = Tables.ChallengeMonsterTypeInfo[InMonsterType]
|
|||
|
if ChallengeInfoIndex then
|
|||
|
local ChallengeInfo = Tables.ChallengeInfo[ChallengeInfoIndex]
|
|||
|
return ChallengeInfo.LifeTime
|
|||
|
end
|
|||
|
return -1
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager:SetLocalPlayerController(InController)
|
|||
|
GameDataManager.OwnerPlayerController = InController
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager:SetLocalPlayerState(InPlayerState)
|
|||
|
GameDataManager.OwnerPlayerState = InPlayerState
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager.GetLocalPlayerState()
|
|||
|
if GameDataManager.OwnerPlayerState == nil or UE.IsValid(GameDataManager.OwnerPlayerState) == false then
|
|||
|
local LocalPC = GameDataManager.GetLocalPlayerController()
|
|||
|
if LocalPC then
|
|||
|
local PlayerState = LocalPC.PlayerState
|
|||
|
if PlayerState ~= nil and UE.IsValid(PlayerState) then
|
|||
|
GameDataManager:SetLocalPlayerState(PlayerState)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
return GameDataManager.OwnerPlayerState
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager.GetLocalPlayerKey()
|
|||
|
local LocalPC = GameDataManager.GetLocalPlayerController()
|
|||
|
if LocalPC then
|
|||
|
return LocalPC.PlayerKey
|
|||
|
end
|
|||
|
|
|||
|
return -1
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager.GetLocalPlayerController()
|
|||
|
if GameDataManager.OwnerPlayerController == nil or UE.IsValid(GameDataManager.OwnerPlayerController) == false then
|
|||
|
local GameState = UGCGameSystem.GameState
|
|||
|
if GameState ~= nil and UE.IsValid(GameState) then
|
|||
|
local PC = STExtraGameplayStatics.GetFirstPlayerController(GameState)
|
|||
|
if PC ~= nil and UE.IsValid(PC) then
|
|||
|
GameDataManager:SetLocalPlayerController(PC)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
return GameDataManager.OwnerPlayerController
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager.GetLocalPlayerPawn()
|
|||
|
if GameDataManager.GetLocalPlayerController() == nil then
|
|||
|
return nil
|
|||
|
end
|
|||
|
return GameDataManager.OwnerPlayerController:GetPlayerCharacterSafety()
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
-------------------------------- Skill ----------------------------------
|
|||
|
function GameDataManager.GetSkillNameById(InId)
|
|||
|
return InId // 100 % 100
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager.GetSkillLevelById(InID)
|
|||
|
return InID // 10 % 10
|
|||
|
end
|
|||
|
|
|||
|
function GameDataManager.GetSkillIdByNameAndLevel(InSkillName, InLevel)
|
|||
|
return 20000 + InSkillName * 100 + InLevel * 10
|
|||
|
end
|
|||
|
|
|||
|
return GameDataManager
|