216 lines
No EOL
8.5 KiB
Lua
216 lines
No EOL
8.5 KiB
Lua
--查看玩家信息管理器
|
||
XPlayerInfoManagerCreator = function()
|
||
local XPlayerInfoManager = {}
|
||
|
||
local GET_PLAYER_INFO_INTERVAL = 120
|
||
|
||
--缓存信息
|
||
--结构为 key:playerId value:dataType
|
||
--如果dataType为CharacterInfo,则CharacterInfo继续细分 key:characterId value:具体角色信息
|
||
local cache = {}
|
||
local cacheTime = {}
|
||
|
||
local dataType = {
|
||
PlayerInfo = 1, --玩家信息
|
||
PlayerCharacter = 2, --展示的成员列表
|
||
PlayerFashion = 3, --成员涂装
|
||
PlayerWeaponFashion = 4, --武器涂装
|
||
PlayerTitle = 5, --收藏品列表
|
||
CharacterInfo = 6 --成员的详情信息(等级、技能、装备等)
|
||
}
|
||
|
||
local PlayerInfoRequest = {
|
||
RequestPlayerInfo = "QueryPlayerDetailRequest", --获取玩家信息
|
||
RequestPlayerCharacterList = "QueryPlayerCharacterListRequest", --查看玩家成员展示信息
|
||
RequestPlayerFashion = "QueryPlayerFashionRequest", --查看玩家涂装展示信息
|
||
RequestPlayerWeaponFashion = "QueryPlayerWeaponFashionRequest", --查看玩家武器涂装展示信息
|
||
RequestPlayerTitle = "QueryPlayerTitleRequest", --查看玩家收藏品展示信息
|
||
RequestCharacterInfo = "QueryCharacterInfoRequest" --查看成员详情
|
||
}
|
||
|
||
--保存展示信息
|
||
function XPlayerInfoManager.SaveData(charactersAppearanceType, characterIds, appearanceSettingInfo, cb)
|
||
XPlayer.SetAppearance(charactersAppearanceType, characterIds, appearanceSettingInfo, cb)
|
||
end
|
||
|
||
local function CanRequest(playerId, type, characterId)
|
||
if cache[playerId] == nil then
|
||
--没有请求过该玩家的信息
|
||
cache[playerId] = {}
|
||
cacheTime[playerId] = {}
|
||
return true
|
||
else
|
||
if cache[playerId][type] then
|
||
--缓存着玩家的这个种类的信息
|
||
|
||
if dataType.CharacterInfo == type then
|
||
--若是角色详情,判断是否请求过该角色的信息
|
||
if cache[playerId][type][characterId] then
|
||
return XTime.GetServerNowTimestamp() - cacheTime[playerId][type][characterId] > GET_PLAYER_INFO_INTERVAL
|
||
else
|
||
return true
|
||
end
|
||
end
|
||
|
||
return XTime.GetServerNowTimestamp() - cacheTime[playerId][type] > GET_PLAYER_INFO_INTERVAL
|
||
else
|
||
--该玩家的这个种类的信息没有请求过
|
||
cache[playerId][type] = {}
|
||
cacheTime[playerId][type] = {}
|
||
return true
|
||
end
|
||
end
|
||
end
|
||
|
||
--请求玩家信息
|
||
function XPlayerInfoManager.RequestPlayerInfoData(playerId, cb)
|
||
--检查缓存
|
||
if CanRequest(playerId, dataType.PlayerInfo) then
|
||
XNetwork.Call(PlayerInfoRequest.RequestPlayerInfo, { PlayerId = playerId }, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
cache[playerId][dataType.PlayerInfo] = res.Detail
|
||
cacheTime[playerId][dataType.PlayerInfo] = XTime.GetServerNowTimestamp()
|
||
|
||
if cb then
|
||
cb(cache[playerId][dataType.PlayerInfo])
|
||
end
|
||
end)
|
||
else
|
||
if cb then
|
||
cb(cache[playerId][dataType.PlayerInfo])
|
||
end
|
||
end
|
||
end
|
||
|
||
-- 请求玩家收藏品展示信息
|
||
function XPlayerInfoManager.RequestPlayerTitleData(playerId, cb)
|
||
--检查缓存
|
||
if CanRequest(playerId, dataType.PlayerTitle) then
|
||
XNetwork.Call(PlayerInfoRequest.RequestPlayerTitle, { PlayerId = playerId }, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
|
||
cache[playerId][dataType.PlayerTitle].Titles = res.Titles
|
||
cache[playerId][dataType.PlayerTitle].Walls = res.Walls
|
||
cacheTime[playerId][dataType.PlayerTitle] = XTime.GetServerNowTimestamp()
|
||
|
||
if cb then
|
||
cb(cache[playerId][dataType.PlayerTitle])
|
||
end
|
||
end)
|
||
else
|
||
if cb then
|
||
cb(cache[playerId][dataType.PlayerTitle])
|
||
end
|
||
end
|
||
end
|
||
|
||
-- 请求玩家成员展示信息
|
||
function XPlayerInfoManager.RequestPlayerCharacterListData(playerId, cb)
|
||
--检查缓存
|
||
if CanRequest(playerId, dataType.PlayerCharacter) then
|
||
XNetwork.Call(PlayerInfoRequest.RequestPlayerCharacterList, { PlayerId = playerId }, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
|
||
cache[playerId][dataType.PlayerCharacter] = res.CharacterShows
|
||
cacheTime[playerId][dataType.PlayerCharacter] = XTime.GetServerNowTimestamp()
|
||
|
||
if cb then
|
||
cb(cache[playerId][dataType.PlayerCharacter])
|
||
end
|
||
end)
|
||
else
|
||
if cb then
|
||
cb(cache[playerId][dataType.PlayerCharacter])
|
||
end
|
||
end
|
||
|
||
end
|
||
|
||
-- 请求玩家涂装展示信息
|
||
function XPlayerInfoManager.RequestPlayerFashionData(playerId, cb)
|
||
--检查缓存
|
||
if CanRequest(playerId, dataType.PlayerFashion) then
|
||
XNetwork.Call(PlayerInfoRequest.RequestPlayerFashion, { PlayerId = playerId }, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
|
||
cache[playerId][dataType.PlayerFashion] = res.Fashions
|
||
cacheTime[playerId][dataType.PlayerFashion] = XTime.GetServerNowTimestamp()
|
||
|
||
if cb then
|
||
cb(cache[playerId][dataType.PlayerFashion])
|
||
end
|
||
end)
|
||
else
|
||
if cb then
|
||
cb(cache[playerId][dataType.PlayerFashion])
|
||
end
|
||
end
|
||
end
|
||
|
||
-- 请求玩家武器涂装展示信息
|
||
function XPlayerInfoManager.RequestPlayerWeaponFashionData(playerId, cb)
|
||
--检查缓存
|
||
if CanRequest(playerId, dataType.PlayerWeaponFashion) then
|
||
XNetwork.Call(PlayerInfoRequest.RequestPlayerWeaponFashion, { PlayerId = playerId }, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
|
||
cache[playerId][dataType.PlayerWeaponFashion] = res.WeaponFashions
|
||
cacheTime[playerId][dataType.PlayerWeaponFashion] = XTime.GetServerNowTimestamp()
|
||
|
||
if cb then
|
||
cb(cache[playerId][dataType.PlayerWeaponFashion])
|
||
end
|
||
end)
|
||
else
|
||
if cb then
|
||
cb(cache[playerId][dataType.PlayerWeaponFashion])
|
||
end
|
||
end
|
||
end
|
||
|
||
-- 请求角色详情
|
||
function XPlayerInfoManager.RequestCharacterInfoData(playerId, characterId, cb)
|
||
--检查缓存
|
||
if CanRequest(playerId, dataType.CharacterInfo, characterId) then
|
||
XNetwork.Call(PlayerInfoRequest.RequestCharacterInfo, { PlayerId = playerId, CharacterId = characterId }, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
local characterInofo = { CharacterData = res.CharacterData
|
||
, EquipData = res.EquipData
|
||
, PartnerData = res.PartnerData
|
||
, WeaponFashionId = res.WeaponFashionId
|
||
, AssignChapterRecords = res.AssignChapterRecords
|
||
, IsSelfData = playerId == XPlayer.Id } -- 设置是否为属于玩家和非玩家(好友)标志
|
||
cache[playerId][dataType.CharacterInfo][characterId] = characterInofo
|
||
cacheTime[playerId][dataType.CharacterInfo][characterId] = XTime.GetServerNowTimestamp()
|
||
|
||
if cb then
|
||
cb(cache[playerId][dataType.CharacterInfo][characterId])
|
||
end
|
||
end)
|
||
else
|
||
if cb then
|
||
cb(cache[playerId][dataType.CharacterInfo][characterId])
|
||
end
|
||
end
|
||
end
|
||
|
||
return XPlayerInfoManager
|
||
end |