1405 lines
45 KiB
Lua
1405 lines
45 KiB
Lua
------------------------------------------------
|
|
-- 作者: 王圣
|
|
-- 日期: 2021-02-01
|
|
-- 文件: CrossFuDiSystem.lua
|
|
-- 模块: CrossFuDiSystem
|
|
-- 描述: 跨服福地
|
|
------------------------------------------------
|
|
-- 引用
|
|
local L_CrossFuDi = require "Logic.CrossFuDi.CrossFuDiData"
|
|
local L_ResultData = require "Logic.CrossFuDi.CrossFuDiResultData"
|
|
local L_TimeUtils = CS.Thousandto.Core.Base.TimeUtils
|
|
local RedPointCustomCondition = CS.Thousandto.Code.Logic.RedPointCustomCondition
|
|
local RedPointItemCondition = CS.Thousandto.Code.Logic.RedPointItemCondition
|
|
|
|
local CrossFuDiSystem = {
|
|
-- 是否解锁
|
|
IsUnLock = false,
|
|
-- 当前天禁值
|
|
CurTianJin = 0,
|
|
-- 最大天禁值
|
|
MaxTianJin = 0,
|
|
-- 本周积分
|
|
Score = 0,
|
|
-- 跨服世界等级
|
|
CrossWorldLv = 0,
|
|
-- 当前跨服类型
|
|
CrossType = FuDiCrossType.Cross_2,
|
|
-- 城市(复活点)列表
|
|
DicFuDi = Dictionary:New(),
|
|
-- 积分领奖列表
|
|
RewardList = nil,
|
|
-- 积分排行{Rank, Name, ServerId, Score}
|
|
ScoreRankList = List:New(),
|
|
-- 击杀排行{Rank, Name, ServerId, Score}
|
|
KillRankList = List:New(),
|
|
-- 我的排名{Rank, Name, ServerId, Score}
|
|
MyRank = nil,
|
|
-- 结算数据
|
|
ResultData = nil,
|
|
-- 当前选中的城市Id
|
|
CurCityId = 0,
|
|
-- 当前进入的城市Id
|
|
EnterCityId = 0,
|
|
-- 跨副本传送数据
|
|
CrossTransData = nil,
|
|
-- 副本数据同步消息缓存
|
|
CacheCopyMsgList = List:New(),
|
|
CacheCopyHurtMsgList = List:New(),
|
|
|
|
-- 魔王裂隙数据
|
|
M_ShowBossList = nil,
|
|
-- 魔王裂隙活动boss数据
|
|
M_DicBossList = Dictionary:New(),
|
|
-- 魔王裂隙团本数据
|
|
M_CopyList = nil,
|
|
-- 魔王裂隙活动时间数据
|
|
M_OpenData = nil,
|
|
-- 魔王裂隙副本数据同步消息缓存
|
|
M_CacheCopyMsgList = List:New(),
|
|
M_CacheCopyHurtMsgList = List:New(),
|
|
|
|
--是否检测魔王缝隙的红点
|
|
IsCheckOyLiKaiRedPoint = false,
|
|
--是否支援古魔封印
|
|
IsHelpFengXi = false,
|
|
WaitFastEnter = false,
|
|
}
|
|
|
|
-- 初始化
|
|
function CrossFuDiSystem:Initialize()
|
|
GameCenter.RegFixEventHandle(LogicLuaEventDefine.EID_EVENT_SLAYER_LISTUPDATE, self.SlayerUpdate, self)
|
|
GameCenter.RegFixEventHandle(LogicLuaEventDefine.EID_EVENT_SLAYER_FOLLOW, self.SlayerUpdate, self)
|
|
GameCenter.RegFixEventHandle(LogicLuaEventDefine.EID_EVENT_UPDATE_HOOKSITTING, self.OnUpdateWorldLevel)
|
|
|
|
self.TimerEventId = GameCenter.TimerEventSystem:AddTimeStampHourEvent(2, 3600, true, nil,
|
|
function(id, remainTime, param)
|
|
self:SetFunctionVisable()
|
|
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_CROSSFUDI_REFRESH_TIME)
|
|
end)
|
|
end
|
|
|
|
function CrossFuDiSystem:UnInitialize()
|
|
GameCenter.UnRegFixEventHandle(LogicLuaEventDefine.EID_EVENT_SLAYER_LISTUPDATE, self.SlayerUpdate, self)
|
|
GameCenter.UnRegFixEventHandle(LogicLuaEventDefine.EID_EVENT_SLAYER_FOLLOW, self.SlayerUpdate, self)
|
|
GameCenter.UnRegFixEventHandle(LogicLuaEventDefine.EID_EVENT_UPDATE_HOOKSITTING, self.OnUpdateWorldLevel)
|
|
end
|
|
|
|
--检测魔王缝隙红点
|
|
function CrossFuDiSystem:CheckOyLieKaiRedPoint()
|
|
--清理掉魔王缝隙的红点
|
|
GameCenter.RedPointSystem:CleraFuncCondition(FunctionStartIdCode.OyLieKai)
|
|
|
|
--关注红点
|
|
local _haveCount = false
|
|
local _copyList = GameCenter.SlayerBossSystem.FollowCopyList
|
|
for i = 1, #_copyList do
|
|
local _copyId = _copyList[i]
|
|
if GameCenter.SlayerBossSystem:GetCopyCountByID(_copyId) > 0 then
|
|
_haveCount = true
|
|
end
|
|
end
|
|
if _haveCount then
|
|
GameCenter.RedPointSystem:AddFuncCondition(FunctionStartIdCode.OyLieKai, 1, RedPointCustomCondition(true))
|
|
--GameCenter.RedPointSystem:AddFuncCondition(FunctionStartIdCode.CrossFuDi, 1, RedPointCustomCondition(true))
|
|
end
|
|
|
|
--物品红点
|
|
local _dataList = self:GetMCopyDataList()
|
|
if _dataList ~= nil then
|
|
for i = 1, #_dataList do
|
|
local _data = _dataList[i]
|
|
--添加红点条件
|
|
GameCenter.RedPointSystem:AddFuncCondition(FunctionStartIdCode.OyLieKai, _data.Id, RedPointItemCondition(_data.Need.Id, _data.Need.Num))
|
|
--GameCenter.RedPointSystem:AddFuncCondition(FunctionStartIdCode.CrossFuDi, _data.Id, RedPointItemCondition(_data.Need.Id, _data.Need.Num))
|
|
end
|
|
end
|
|
end
|
|
|
|
function CrossFuDiSystem:IsShowLieKaiRedPoint()
|
|
local _ret = false
|
|
--关注红点
|
|
local _copyList = GameCenter.SlayerBossSystem.FollowCopyList
|
|
for i = 1, #_copyList do
|
|
local _copyId = _copyList[i]
|
|
if GameCenter.SlayerBossSystem:GetCopyCountByID(_copyId) > 0 then
|
|
_ret = true
|
|
break
|
|
end
|
|
end
|
|
|
|
--物品红点
|
|
local _dataList = self:GetMCopyDataList()
|
|
if _dataList ~= nil then
|
|
for i = 1, #_dataList do
|
|
local _data = _dataList[i]
|
|
local _haveNum = GameCenter.ItemContianerSystem:GetItemCountFromCfgId(_data.Need.Id)
|
|
if _haveNum >= _data.Need.Num then
|
|
_ret = true
|
|
break
|
|
end
|
|
end
|
|
end
|
|
return _ret
|
|
end
|
|
|
|
function CrossFuDiSystem:SlayerUpdate(obj, sender)
|
|
self.IsCheckOyLiKaiRedPoint = true
|
|
end
|
|
|
|
function CrossFuDiSystem:OnUpdateWorldLevel(obj, sender)
|
|
local _openDay = Time.GetOpenSeverDay()
|
|
local _worldLv = GameCenter.OfflineOnHookSystem.CurWorldLevel
|
|
if self.M_ShowBossList == nil then
|
|
self.M_ShowBossList = List:New()
|
|
else
|
|
self.M_ShowBossList:Clear()
|
|
end
|
|
local _lp = GameCenter.GameSceneSystem:GetLocalPlayer()
|
|
if _lp == nil then
|
|
return
|
|
end
|
|
local _playerOcc = _lp.IntOcc
|
|
DataConfig.DataCrossDevilBoss:Foreach(function(k, v)
|
|
if v.Position == 0 then
|
|
local _dayCondition = Utils.SplitNumber(v.Day, '_')
|
|
local _lvCondition = Utils.SplitNumber(v.Level, '_')
|
|
if _openDay <= _dayCondition[2] and _openDay >= _dayCondition[1] and _worldLv <= _lvCondition[2] and _worldLv >= _lvCondition[1] then
|
|
local _head = v.Icon
|
|
local _name = v.Name
|
|
local _itemList = List:New()
|
|
local _list = Utils.SplitStr(v.Reward, ';')
|
|
if _list ~= nil then
|
|
for i = 1, #_list do
|
|
local _values = Utils.SplitNumber(_list[i], '_')
|
|
if _values ~= nil and #_values == 2 then
|
|
local _occ = _values[1]
|
|
local _itemId = _values[2]
|
|
if _occ == 9 or _occ == _playerOcc then
|
|
local _itemData = {
|
|
Id = _itemId,
|
|
Num = 1,
|
|
IsBind = true
|
|
}
|
|
_itemList:Add(_itemData)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
local _data = {
|
|
CfgId = k,
|
|
Head = _head,
|
|
Name = _name,
|
|
ItemList = _itemList
|
|
}
|
|
self.M_ShowBossList:Add(_data)
|
|
end
|
|
end
|
|
end)
|
|
-- 排序
|
|
self.M_ShowBossList:Sort(function(a, b)
|
|
return a.CfgId < b.CfgId
|
|
end)
|
|
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_HUOSHI_BOSSLIST_UPDATE, self.M_ShowBossList)
|
|
end
|
|
|
|
function CrossFuDiSystem:OnEnterScene()
|
|
if self.CrossTransData ~= nil then
|
|
if self.CrossTransData.Type == 1 then
|
|
GameCenter.CrossFuDiSystem:SetCurCityId(self.CrossTransData.CityId)
|
|
GameCenter.CrossFuDiSystem:SetEnterCityId(self.CrossTransData.CityId)
|
|
GameCenter.CrossFuDiSystem:SetCurSelectBossId(self.CrossTransData.BossId)
|
|
GameCenter.CrossFuDiSystem:ReqCrossFudEnter(self.CrossTransData.CityId, self.CrossTransData.Type)
|
|
else
|
|
-- 需要进入对应的副本
|
|
GameCenter.CrossFuDiSystem:SetCurCityId(self.CrossTransData.CityId)
|
|
GameCenter.CrossFuDiSystem:SetCurSelectBossId(self.CrossTransData.BossId)
|
|
GameCenter.CrossFuDiSystem:ReqCrossFudEnter(self.CrossTransData.CityId, self.CrossTransData.Type)
|
|
end
|
|
self.CrossTransData = nil
|
|
end
|
|
end
|
|
|
|
-- 获取当前天禁值
|
|
function CrossFuDiSystem:GetCurTianJin()
|
|
return self.CurTianJin
|
|
end
|
|
|
|
-- 获取最大天禁值
|
|
function CrossFuDiSystem:GetMaxTianJin()
|
|
if self.MaxTianJin == 0 then
|
|
DataConfig.DataCrossFudiMain:ForeachCanBreak(function(k, v)
|
|
if v.MaxTianjin ~= 0 then
|
|
self.MaxTianJin = v.MaxTianjin
|
|
return true
|
|
end
|
|
end)
|
|
end
|
|
return self.MaxTianJin
|
|
end
|
|
|
|
-- 获取跨服类型
|
|
function CrossFuDiSystem:GetCrossType()
|
|
return self.CrossType
|
|
end
|
|
|
|
-- 获取跨服福地数据data
|
|
function CrossFuDiSystem:GetFuDiDatas()
|
|
return self.DicFuDi
|
|
end
|
|
|
|
-- 获取本服可以进入的福地
|
|
function CrossFuDiSystem:GetValidFuDiDatas()
|
|
local _ret = Dictionary:New()
|
|
local _keys = self.DicFuDi:GetKeys()
|
|
if _keys ~= nil then
|
|
for i = 1, #_keys do
|
|
local _key = _keys[i]
|
|
local _city = self.DicFuDi[_key]
|
|
if _city:IsLocalOwn() then
|
|
local _list = _city:GetRelationCity()
|
|
for m = 1, #_list do
|
|
local _relationKey = _list[m]
|
|
if _ret[_relationKey] == nil then
|
|
_ret[_relationKey] = self.DicFuDi[_relationKey]
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return _ret
|
|
end
|
|
|
|
-- 通过福地id获取福地数据
|
|
function CrossFuDiSystem:GetFuDiData(id)
|
|
local _ret = nil
|
|
local _dic = self:GetFuDiDatas()
|
|
if _dic ~= nil then
|
|
_ret = _dic[id]
|
|
end
|
|
return _ret
|
|
end
|
|
|
|
-- 获取选中的城市数据
|
|
function CrossFuDiSystem:GetCurCityData()
|
|
local _ret = nil
|
|
local _cityId = self:GetCurCityId()
|
|
_ret = self:GetFuDiData(_cityId)
|
|
return _ret
|
|
end
|
|
|
|
-- 获取进入的城市数据
|
|
function CrossFuDiSystem:GetEnterCityData()
|
|
local _ret = nil
|
|
local _cityId = self:GetEnterCityId()
|
|
_ret = self:GetFuDiData(_cityId)
|
|
return _ret
|
|
end
|
|
|
|
-- 获取指定被占领福地的阵营名字
|
|
function CrossFuDiSystem:GetCampName(id)
|
|
local _ret = nil
|
|
local _city = self:GetFuDiData(id)
|
|
if _city ~= nil then
|
|
-- 判断当前跨服类型
|
|
if self.CrossType == FuDiCrossType.Cross_2 or self.CrossType == FuDiCrossType.Cross_4 or self.CrossType ==
|
|
FuDiCrossType.Cross_8 then
|
|
local _sdata = GameCenter.ServerListSystem:FindServer(_city:GetGetOccupierServerId())
|
|
if _sdata ~= nil then
|
|
_ret = UIUtils.CSFormat("S{0}_{1}", _sdata.ShowServerId, _sdata.Name)
|
|
end
|
|
else
|
|
end
|
|
end
|
|
return _ret
|
|
end
|
|
|
|
function CrossFuDiSystem:GetLocalCampName()
|
|
local _ret = nil
|
|
-- 判断当前跨服类型
|
|
if self.CrossType == FuDiCrossType.Cross_2 or self.CrossType == FuDiCrossType.Cross_4 or self.CrossType ==
|
|
FuDiCrossType.Cross_8 then
|
|
local _sdata = GameCenter.ServerListSystem:FindServer(
|
|
GameCenter.ServerListSystem:GetCurrentServer().ReallyServerId)
|
|
if _sdata ~= nil then
|
|
_ret = UIUtils.CSFormat("S{0}_{1}", _sdata.ShowServerId, _sdata.Name)
|
|
end
|
|
else
|
|
end
|
|
return _ret
|
|
end
|
|
|
|
-- 获取积分领奖数据
|
|
function CrossFuDiSystem:GetRewardList()
|
|
if self.RewardList == nil then
|
|
self.RewardList = List:New()
|
|
DataConfig.DataCrossFudiScoreReward:Foreach(function(k, v)
|
|
local _id = v.Id
|
|
local _score = v.Need
|
|
local _list = Utils.SplitNumber(v.Reward, '_')
|
|
local _itemData = {
|
|
Id = _list[1],
|
|
Num = _list[2],
|
|
IsBind = true
|
|
}
|
|
local _pay = v.IfPay
|
|
local _data = {
|
|
Id = _id,
|
|
Need = _score,
|
|
ItemData = _itemData,
|
|
IsPay = false,
|
|
PayNum = _pay,
|
|
IsReward = false
|
|
}
|
|
self.RewardList:Add(_data)
|
|
end)
|
|
end
|
|
return self.RewardList
|
|
end
|
|
|
|
function CrossFuDiSystem:GetScoreReward(id)
|
|
local _ret = nil
|
|
local _list = self:GetRewardList()
|
|
if _list ~= nil then
|
|
for i = 1, #_list do
|
|
local _data = _list[i]
|
|
if _data.Id == id then
|
|
_ret = _data
|
|
end
|
|
end
|
|
end
|
|
return _ret
|
|
end
|
|
|
|
-- 是否显示锁
|
|
function CrossFuDiSystem:IsShowLock()
|
|
local _score = 0
|
|
local _dataList = self:GetRewardList()
|
|
if _dataList ~= nil then
|
|
for i = 1, #_dataList do
|
|
local _data = _dataList[i]
|
|
if _data.PayNum > 0 and not self.IsUnLock then
|
|
-- _score = _data.Need
|
|
self.IsUnLock = _data.IsPay
|
|
break
|
|
end
|
|
end
|
|
-- _ret = self.Score >= _score
|
|
end
|
|
return not self.IsUnLock
|
|
end
|
|
|
|
-- 设置积分排行数据
|
|
function CrossFuDiSystem:SetScoreRankDatas(msg)
|
|
if msg.rankList == nil then
|
|
return
|
|
end
|
|
self.ScoreRankList:Clear()
|
|
-- {Rank, Name, ServerId, Score}
|
|
for i = 1, #msg.rankList do
|
|
local _rank = msg.rankList[i]
|
|
local _playerId = _rank.playerId
|
|
local _name = _rank.name
|
|
local _rankId = _rank.rank
|
|
local _score = _rank.score
|
|
local _damage = _rank.damage
|
|
local _occ = _rank.career
|
|
local _visInfo = nil
|
|
if _rank.facade ~= nil then
|
|
_visInfo = PlayerVisualInfo:New()
|
|
_visInfo:ParseByLua(_rank.facade, 0)
|
|
end
|
|
local _facade = _rank.facade
|
|
local _campName = ""
|
|
-- 判断当前跨服类型
|
|
local _camp = _rank.camp
|
|
local _crossType = self:GetCrossType()
|
|
if _camp ~= nil then
|
|
if _crossType == FuDiCrossType.Cross_2 or _crossType == FuDiCrossType.Cross_4 or _crossType ==
|
|
FuDiCrossType.Cross_8 then
|
|
if _camp.serverId ~= nil and #_camp.serverId > 0 then
|
|
local _sdata = GameCenter.ServerListSystem:FindServer(_camp.serverId[1])
|
|
if _sdata ~= nil then
|
|
_campName = UIUtils.CSFormat("S{0}_{1}", _sdata.ShowServerId, _sdata.Name)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
local _data = {
|
|
PlayerId = _playerId,
|
|
Name = _name,
|
|
Rank = _rankId,
|
|
Score = _score,
|
|
Damage = _damage,
|
|
Occ = _occ,
|
|
VisInfo = _visInfo,
|
|
ServerName = _campName
|
|
}
|
|
self.ScoreRankList:Add(_data)
|
|
end
|
|
end
|
|
|
|
-- 获取积分排行数据
|
|
function CrossFuDiSystem:GetScoreRankDatas()
|
|
return self.ScoreRankList
|
|
end
|
|
|
|
-- 设置击杀排行数据
|
|
function CrossFuDiSystem:SetKillRankDatas(msg)
|
|
if msg == nil then
|
|
return
|
|
end
|
|
if msg.rankList == nil then
|
|
return
|
|
end
|
|
self.KillRankList:Clear()
|
|
-- {Rank, Name, ServerId, Score}
|
|
for i = 1, #msg.rankList do
|
|
local _rank = msg.rankList[i]
|
|
local _playerId = _rank.playerId
|
|
local _name = _rank.name
|
|
local _rankId = _rank.rank
|
|
local _score = _rank.kill
|
|
local _damage = _rank.damage
|
|
local _occ = _rank.career
|
|
local _visInfo = nil
|
|
if _rank.facade ~= nil then
|
|
_visInfo = PlayerVisualInfo:New()
|
|
_visInfo:ParseByLua(_rank.facade, 0)
|
|
end
|
|
local _facade = _rank.facade
|
|
local _campName = ""
|
|
-- 判断当前跨服类型
|
|
local _camp = _rank.camp
|
|
local _crossType = self:GetCrossType()
|
|
if _camp ~= nil then
|
|
if _crossType == FuDiCrossType.Cross_2 or _crossType == FuDiCrossType.Cross_4 or _crossType ==
|
|
FuDiCrossType.Cross_8 then
|
|
if _camp.serverId ~= nil and #_camp.serverId > 0 then
|
|
local _sdata = GameCenter.ServerListSystem:FindServer(_camp.serverId[1])
|
|
if _sdata ~= nil then
|
|
_campName = UIUtils.CSFormat("S{0}_{1}", _sdata.ShowServerId, _sdata.Name)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
local _data = {
|
|
PlayerId = _playerId,
|
|
Name = _name,
|
|
Rank = _rankId,
|
|
Score = _score,
|
|
Damage = _damage,
|
|
Occ = _occ,
|
|
VisInfo = _visInfo,
|
|
ServerName = _campName
|
|
}
|
|
self.KillRankList:Add(_data)
|
|
end
|
|
end
|
|
|
|
-- 获取击杀排行数据
|
|
function CrossFuDiSystem:GetKillRankDatas()
|
|
return self.KillRankList
|
|
end
|
|
|
|
-- 设置我的排名
|
|
function CrossFuDiSystem:SetMyRank(msg)
|
|
if msg.my == nil then
|
|
return
|
|
end
|
|
local _rank = msg.my
|
|
local _playerId = _rank.playerId
|
|
local _name = _rank.name
|
|
local _rankId = _rank.rank
|
|
local _score = _rank.score
|
|
local _kill = _rank.kill
|
|
local _damage = _rank.damage
|
|
local _occ = _rank.career
|
|
local _visInfo = nil
|
|
if _rank.facade ~= nil then
|
|
_visInfo = PlayerVisualInfo:New()
|
|
_visInfo:ParseByLua(_rank.facade, 0)
|
|
end
|
|
local _facade = _rank.facade
|
|
local _campName = ""
|
|
-- 判断当前跨服类型
|
|
local _camp = _rank.camp
|
|
local _crossType = self:GetCrossType()
|
|
if _crossType == FuDiCrossType.Cross_2 or _crossType == FuDiCrossType.Cross_4 or _crossType == FuDiCrossType.Cross_8 then
|
|
if _camp.serverId ~= nil and #_camp.serverId > 0 then
|
|
local _sdata = GameCenter.ServerListSystem:FindServer(_camp.serverId[1])
|
|
if _sdata ~= nil then
|
|
_campName = UIUtils.CSFormat("S{0}_{1}", _sdata.ShowServerId, _sdata.Name)
|
|
end
|
|
end
|
|
end
|
|
local _data = {
|
|
PlayerId = _playerId,
|
|
Name = _name,
|
|
Rank = _rankId,
|
|
Score = _score,
|
|
Kill = _kill,
|
|
Damage = _damage,
|
|
Occ = _occ,
|
|
VisInfo = _visInfo,
|
|
ServerName = _campName
|
|
}
|
|
self.MyRank = _data
|
|
end
|
|
|
|
-- 获取我的排名
|
|
function CrossFuDiSystem:GetMyRank()
|
|
return self.MyRank
|
|
end
|
|
|
|
-- 获取结算数据
|
|
function CrossFuDiSystem:GetResultData()
|
|
if self.ResultData == nil then
|
|
self.ResultData = L_ResultData:New()
|
|
end
|
|
return self.ResultData
|
|
end
|
|
|
|
-- 获取选中的城市Id
|
|
function CrossFuDiSystem:GetCurCityId()
|
|
return self.CurCityId
|
|
end
|
|
|
|
-- 设置选中的城市Id
|
|
function CrossFuDiSystem:SetCurCityId(id)
|
|
self.CurCityId = id
|
|
end
|
|
|
|
-- 获取进入的城市Id
|
|
function CrossFuDiSystem:GetEnterCityId()
|
|
return self.EnterCityId
|
|
end
|
|
|
|
-- 设置进入的城市Id
|
|
function CrossFuDiSystem:SetEnterCityId(id)
|
|
self.EnterCityId = id
|
|
end
|
|
|
|
-- 设置当前算中的bossId
|
|
function CrossFuDiSystem:SetCurSelectBossId(id)
|
|
local _cityId = self:GetCurCityId()
|
|
local _city = self:GetFuDiData(_cityId)
|
|
if _city ~= nil then
|
|
_city:SetCurSelectBossId(id)
|
|
end
|
|
end
|
|
|
|
-- 获取玩家在城市中选中的bossId
|
|
function CrossFuDiSystem:GetCuSelectBossId()
|
|
local _ret = 0
|
|
local _cityId = self:GetCurCityId()
|
|
local _city = self:GetFuDiData(_cityId)
|
|
if _city ~= nil then
|
|
_ret = _city:GetCurSelectBossId()
|
|
end
|
|
return _ret
|
|
end
|
|
|
|
function CrossFuDiSystem:SetFunctionVisable()
|
|
local _day = Time.GetOpenSeverDay()
|
|
GameCenter.MainFunctionSystem:SetFunctionVisible(FunctionStartIdCode.CrossFuDi, _day >= 3)
|
|
end
|
|
|
|
function CrossFuDiSystem:GetCityLeftTime(id)
|
|
local _ret = 0
|
|
local _city = self:GetFuDiData(id)
|
|
if _city ~= nil then
|
|
_ret = _city:GetLeftTime()
|
|
end
|
|
return _ret
|
|
end
|
|
|
|
-- 获取魔王裂隙Boss展示数据
|
|
function CrossFuDiSystem:GetMShowBossList()
|
|
if self.M_ShowBossList == nil then
|
|
self.M_ShowBossList = List:New()
|
|
local _playerOcc = GameCenter.GameSceneSystem:GetLocalPlayer().IntOcc
|
|
DataConfig.DataCrossDevilBoss:Foreach(function(k, v)
|
|
if v.Position == 0 then
|
|
local _head = v.Icon
|
|
local _name = v.Name
|
|
local _itemList = List:New()
|
|
local _list = Utils.SplitStr(v.Reward, ';')
|
|
if _list ~= nil then
|
|
for i = 1, #_list do
|
|
local _values = Utils.SplitNumber(_list[i], '_')
|
|
if _values ~= nil and #_values == 2 then
|
|
local _occ = _values[1]
|
|
local _itemId = _values[2]
|
|
if _occ == 9 or _occ == _playerOcc then
|
|
local _itemData = {
|
|
Id = _itemId,
|
|
Num = 1,
|
|
IsBind = true
|
|
}
|
|
_itemList:Add(_itemData)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
local _data = {
|
|
CfgId = k,
|
|
Head = _head,
|
|
Name = _name,
|
|
ItemList = _itemList
|
|
}
|
|
self.M_ShowBossList:Add(_data)
|
|
end
|
|
end)
|
|
-- 排序
|
|
self.M_ShowBossList:Sort(function(a, b)
|
|
return a.CfgId < b.CfgId
|
|
end)
|
|
end
|
|
return self.M_ShowBossList
|
|
end
|
|
|
|
-- 获取魔王裂隙Boss列表数据
|
|
function CrossFuDiSystem:GetMBossList(cityId)
|
|
local _ret = nil
|
|
if self.M_DicBossList ~= nil then
|
|
_ret = self.M_DicBossList[cityId]
|
|
end
|
|
return _ret
|
|
end
|
|
|
|
-- 获取魔王裂隙boss数据
|
|
function CrossFuDiSystem:GetMBossData(cityId, bossId)
|
|
local _ret = nil
|
|
if self.M_DicBossList ~= nil then
|
|
local _bossList = self.M_DicBossList[cityId]
|
|
if _bossList ~= nil then
|
|
for i = 1, #_bossList do
|
|
local _boss = _bossList[i]
|
|
if _boss.CfgId == bossId then
|
|
_ret = _boss
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return _ret
|
|
end
|
|
|
|
-- 获取魔王裂隙第一个boss数据
|
|
function CrossFuDiSystem:GetMFirstBossData(cityId)
|
|
local _ret = nil
|
|
if self.M_DicBossList ~= nil then
|
|
local _bossList = self.M_DicBossList[cityId]
|
|
if _bossList ~= nil then
|
|
for i = 1, #_bossList do
|
|
local _boss = _bossList[i]
|
|
_ret = _boss
|
|
break
|
|
end
|
|
end
|
|
end
|
|
return _ret
|
|
end
|
|
|
|
-- 获取魔王蕾西boss伤害排行数据
|
|
function CrossFuDiSystem:GetMBossRankList(cityId, bossId)
|
|
local _ret = nil
|
|
if self.M_DicBossList ~= nil then
|
|
local _bossList = self.M_DicBossList[cityId]
|
|
if _bossList ~= nil then
|
|
for i = 1, #_bossList do
|
|
local _boss = _bossList[i]
|
|
if _boss.CfgId == bossId or _boss.MonsterId == bossId then
|
|
_ret = _boss.RankList
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return _ret
|
|
end
|
|
|
|
-- 判断是否处于魔王裂隙活动时间
|
|
function CrossFuDiSystem:OyLiKaiIsOpen()
|
|
local _ret = false
|
|
local _openServerDay = Time.GetOpenSeverDay()
|
|
if _openServerDay < 11 then
|
|
return false
|
|
end
|
|
if self.M_OpenData == nil then
|
|
local _dayList = List:New()
|
|
local _openTime = 0
|
|
local _endTime = 0
|
|
local _cfg = DataConfig.DataDaily[114]
|
|
if _cfg ~= nil then
|
|
local _list = Utils.SplitNumber(_cfg.OpenTime, '_')
|
|
for i = 1, #_list do
|
|
_dayList:Add(_list[i])
|
|
end
|
|
_list = Utils.SplitNumber(_cfg.Time, '_')
|
|
_openTime = _list[1] * 60
|
|
_endTime = _list[2] * 60
|
|
end
|
|
self.M_OpenData = {
|
|
DayList = _dayList,
|
|
OpenTime = _openTime,
|
|
EndTime = _endTime
|
|
}
|
|
end
|
|
local _serverTime = math.floor(GameCenter.HeartSystem.ServerZoneTime)
|
|
-- 计算当前周几 1 - 7
|
|
local week = L_TimeUtils.GetStampTimeWeeklyNotZone(_serverTime)
|
|
if #self.M_OpenData.DayList == 1 and self.M_OpenData.DayList[1] == 0 then
|
|
local _hour, _min, _sec = L_TimeUtils.GetStampTimeHHMMSSNotZone(_serverTime)
|
|
local _curSeconds = _hour * 3600 + _min * 60 + _sec
|
|
if _curSeconds >= self.M_OpenData.OpenTime and _curSeconds <= self.M_OpenData.EndTime then
|
|
_ret = true
|
|
end
|
|
else
|
|
if self.M_OpenData.DayList:Contains(week) then
|
|
local _hour, _min, _sec = L_TimeUtils.GetStampTimeHHMMSSNotZone(_serverTime)
|
|
local _curSeconds = _hour * 3600 + _min * 60 + _sec
|
|
if _curSeconds >= self.M_OpenData.OpenTime and _curSeconds <= self.M_OpenData.EndTime then
|
|
_ret = true
|
|
end
|
|
end
|
|
end
|
|
return _ret
|
|
end
|
|
|
|
function CrossFuDiSystem:GetLieKaiLeftTime()
|
|
local _ret = 0
|
|
if self.M_OpenData == nil then
|
|
local _dayList = List:New()
|
|
local _openTime = 0
|
|
local _endTime = 0
|
|
local _cfg = DataConfig.DataDaily[114]
|
|
if _cfg ~= nil then
|
|
local _list = Utils.SplitNumber(_cfg.OpenTime, '_')
|
|
for i = 1, #_list do
|
|
_dayList:Add(_list[i])
|
|
end
|
|
_list = Utils.SplitNumber(_cfg.Time, '_')
|
|
_openTime = _list[1] * 60
|
|
_endTime = _list[2] * 60
|
|
end
|
|
self.M_OpenData = {
|
|
DayList = _dayList,
|
|
OpenTime = _openTime,
|
|
EndTime = _endTime
|
|
}
|
|
end
|
|
local _serverTime = math.floor(GameCenter.HeartSystem.ServerZoneTime)
|
|
local _hour, _min, _sec = L_TimeUtils.GetStampTimeHHMMSSNotZone(_serverTime)
|
|
local _curSeconds = _hour * 3600 + _min * 60 + _sec
|
|
if _curSeconds >= self.M_OpenData.OpenTime and _curSeconds <= self.M_OpenData.EndTime then
|
|
_ret = self.M_OpenData.EndTime - _curSeconds
|
|
end
|
|
return _ret
|
|
end
|
|
|
|
|
|
function CrossFuDiSystem:GetLieKaiPreTime()
|
|
local _ret = 0
|
|
if self.M_OpenData == nil then
|
|
local _dayList = List:New()
|
|
local _openTime = 0
|
|
local _endTime = 0
|
|
local _cfg = DataConfig.DataDaily[114]
|
|
if _cfg ~= nil then
|
|
local _list = Utils.SplitNumber(_cfg.OpenTime, '_')
|
|
for i = 1, #_list do
|
|
_dayList:Add(_list[i])
|
|
end
|
|
_list = Utils.SplitNumber(_cfg.Time, '_')
|
|
_openTime = _list[1] * 60
|
|
_endTime = _list[2] * 60
|
|
end
|
|
self.M_OpenData = {
|
|
DayList = _dayList,
|
|
OpenTime = _openTime,
|
|
EndTime = _endTime
|
|
}
|
|
end
|
|
local week = L_TimeUtils.GetStampTimeWeeklyNotZone(_serverTime)
|
|
if self.M_OpenData.DayList:Contains(week) then
|
|
local _serverTime = math.floor(GameCenter.HeartSystem.ServerZoneTime)
|
|
local _hour, _min, _sec = L_TimeUtils.GetStampTimeHHMMSSNotZone(_serverTime)
|
|
local _curSeconds = _hour * 3600 + _min * 60 + _sec
|
|
if _curSeconds > self.M_OpenData.OpenTime then
|
|
_ret = _curSeconds - self.M_OpenData.OpenTime
|
|
end
|
|
end
|
|
return _ret
|
|
end
|
|
|
|
--获取下次开启时间
|
|
function CrossFuDiSystem:GetOyLiKaiNextTime()
|
|
local _ret1 = 0
|
|
local _ret2 = 0
|
|
if self.M_OpenData == nil then
|
|
local _dayList = List:New()
|
|
local _openTime = 0
|
|
local _endTime = 0
|
|
local _cfg = DataConfig.DataDaily[114]
|
|
if _cfg ~= nil then
|
|
local _list = Utils.SplitNumber(_cfg.OpenTime, '_')
|
|
for i = 1, #_list do
|
|
_dayList:Add(_list[i])
|
|
end
|
|
_list = Utils.SplitNumber(_cfg.Time, '_')
|
|
_openTime = _list[1] * 60
|
|
_endTime = _list[2] * 60
|
|
end
|
|
self.M_OpenData = {
|
|
DayList = _dayList,
|
|
OpenTime = _openTime,
|
|
EndTime = _endTime
|
|
}
|
|
end
|
|
local _serverTime = math.floor(GameCenter.HeartSystem.ServerZoneTime)
|
|
-- 计算当前周几 1 - 7
|
|
local week = L_TimeUtils.GetStampTimeWeeklyNotZone(_serverTime)
|
|
if #self.M_OpenData.DayList == 1 and self.M_OpenData.DayList[1] == 0 then
|
|
local _hour, _min, _sec = L_TimeUtils.GetStampTimeHHMMSSNotZone(_serverTime)
|
|
local _curSeconds = _hour * 3600 + _min * 60 + _sec
|
|
if _curSeconds > self.M_OpenData.OpenTime then
|
|
_ret1 = 3600 * 24 - _curSeconds + self.M_OpenData.OpenTime
|
|
_ret2 = week
|
|
else
|
|
_ret1 = self.M_OpenData.OpenTime - _curSeconds
|
|
_ret2 = week + 1
|
|
end
|
|
if _ret2 > 7 then
|
|
_ret2 = 1
|
|
end
|
|
else
|
|
local _hour, _min, _sec = L_TimeUtils.GetStampTimeHHMMSSNotZone(_serverTime)
|
|
local _curSeconds = _hour * 3600 + _min * 60 + _sec
|
|
local _preDay = 0
|
|
local _nextDay = 0
|
|
local _disDay = 0
|
|
for i = 1, #self.M_OpenData.DayList do
|
|
_preDay = self.M_OpenData.DayList[i]
|
|
if week == 1 then
|
|
_nextDay = self.M_OpenData.DayList[#self.M_OpenData.DayList]
|
|
break
|
|
else
|
|
if self.M_OpenData.DayList[i] >= week then
|
|
if self.M_OpenData.DayList[i] == week then
|
|
if _curSeconds < self.M_OpenData.EndTime then
|
|
_nextDay = self.M_OpenData.DayList[i]
|
|
end
|
|
else
|
|
_nextDay = self.M_OpenData.DayList[i]
|
|
end
|
|
break
|
|
end
|
|
end
|
|
end
|
|
if _nextDay == 0 then
|
|
_nextDay = self.M_OpenData.DayList[1]
|
|
_disDay = 7 - week + _nextDay - 1
|
|
else
|
|
_disDay = _nextDay - week - 1
|
|
end
|
|
if week == _preDay and self.M_OpenData.OpenTime > _curSeconds then
|
|
_ret1 = self.M_OpenData.OpenTime - _curSeconds
|
|
_ret2 = _preDay
|
|
else
|
|
_ret1 = 3600 * 24 - _curSeconds + _disDay * 3600 * 24 + self.M_OpenData.OpenTime
|
|
_ret2 = _nextDay
|
|
end
|
|
end
|
|
return _ret1, _ret2
|
|
end
|
|
|
|
function CrossFuDiSystem:GetMCopyDataList()
|
|
if self.M_CopyList == nil then
|
|
self.M_CopyList = List:New()
|
|
local _lp = GameCenter.GameSceneSystem:GetLocalPlayer()
|
|
if _lp == nil then
|
|
return
|
|
end
|
|
local _playerOcc = _lp.IntOcc
|
|
DataConfig.DataCrossDevilGroupCopy:Foreach(function(k, v)
|
|
local _id = v.Id
|
|
local _name = v.Name
|
|
local _list = Utils.SplitNumber(v.OpenItem, '_')
|
|
local _needItem = {
|
|
Id = _list[1],
|
|
Num = _list[2],
|
|
IsBind = false
|
|
}
|
|
local _sprName = v.Icon
|
|
-- CapReward = 5,
|
|
-- MemberReward = 6,
|
|
local _leaderItemList = List:New()
|
|
_list = Utils.SplitStr(v.CapReward, ';')
|
|
if _list ~= nil then
|
|
for i = 1, #_list do
|
|
local _values = Utils.SplitNumber(_list[i], '_')
|
|
local _occ = _values[4]
|
|
if _occ == 9 or _occ == _playerOcc then
|
|
local _leaderItem = {
|
|
Id = _values[1],
|
|
Num = _values[2],
|
|
IsBind = _values[3] == 1
|
|
}
|
|
_leaderItemList:Add(_leaderItem)
|
|
end
|
|
end
|
|
end
|
|
|
|
local _memberItemList = List:New()
|
|
_list = Utils.SplitStr(v.MemberReward, ';')
|
|
if _list ~= nil then
|
|
for i = 1, #_list do
|
|
local _values = Utils.SplitNumber(_list[i], '_')
|
|
local _occ = _values[4]
|
|
if _occ == 9 or _occ == _playerOcc then
|
|
local _memberItem = {
|
|
Id = _values[1],
|
|
Num = _values[2],
|
|
IsBind = _values[3] == 1
|
|
}
|
|
_memberItemList:Add(_memberItem)
|
|
end
|
|
end
|
|
end
|
|
local _copyData = {
|
|
Id = _id,
|
|
Name = _name,
|
|
SprName = _sprName,
|
|
Need = _needItem,
|
|
LeaderItemList = _leaderItemList,
|
|
MemberItemList = _memberItemList
|
|
}
|
|
self.M_CopyList:Add(_copyData)
|
|
end)
|
|
end
|
|
return self.M_CopyList
|
|
end
|
|
|
|
-- 心跳
|
|
function CrossFuDiSystem:Update(dt)
|
|
if self.IsCheckOyLiKaiRedPoint then
|
|
self:CheckOyLieKaiRedPoint()
|
|
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_LIEXI_REDPOINT)
|
|
self.IsCheckOyLiKaiRedPoint = false
|
|
end
|
|
-- if self.CacheCopyMsgList ~= nil and #self.CacheCopyMsgList > 0 then
|
|
-- -- 同步数据
|
|
-- GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_CROSSFUDI_COPY_DATAUPDATE)
|
|
-- end
|
|
-- -- CacheCopyHurtMsgList
|
|
-- if self.CacheCopyHurtMsgList ~= nil and #self.CacheCopyHurtMsgList > 0 then
|
|
-- -- 同步数据
|
|
-- end
|
|
end
|
|
|
|
-- ==========================================================消息==========================================================
|
|
|
|
-- 请求跨服福地数据
|
|
function CrossFuDiSystem:ReqAllCrossFudInfo()
|
|
GameCenter.Network.Send("MSG_GuildCrossFud.ReqAllCrossFudInfo")
|
|
end
|
|
|
|
-- 请求解锁积分宝箱
|
|
function CrossFuDiSystem:ReqCrossFudUnLockScoreBox(id)
|
|
GameCenter.Network.Send("MSG_GuildCrossFud.ReqCrossFudUnLockScoreBox", {
|
|
boxId = id
|
|
})
|
|
end
|
|
|
|
-- 请求领取积分宝箱
|
|
function CrossFuDiSystem:ReqCrossFudScoreBoxOpen(id)
|
|
GameCenter.Network.Send("MSG_GuildCrossFud.ReqCrossFudScoreBoxOpen", {
|
|
boxId = id
|
|
})
|
|
end
|
|
|
|
-- 领取福地宝箱
|
|
function CrossFuDiSystem:ReqCrossFudBoxOpen(id)
|
|
GameCenter.Network.Send("MSG_GuildCrossFud.ReqCrossFudBoxOpen", {
|
|
cityId = id
|
|
})
|
|
end
|
|
|
|
-- 获取福地详情
|
|
function CrossFuDiSystem:ReqCrossFudCityInfo(id, t)
|
|
GameCenter.Network.Send("MSG_GuildCrossFud.ReqCrossFudCityInfo", {
|
|
city = id,
|
|
type = t
|
|
})
|
|
end
|
|
|
|
-- 获取个人排名
|
|
function CrossFuDiSystem:ReqCrossFudRank(t)
|
|
GameCenter.Network.Send("MSG_GuildCrossFud.ReqCrossFudRank", {
|
|
type = t
|
|
})
|
|
end
|
|
|
|
-- 请求关注
|
|
function CrossFuDiSystem:ReqCrossFudCareBoss(t, cId, bId)
|
|
GameCenter.Network.Send("MSG_GuildCrossFud.ReqCrossFudCareBoss", {
|
|
type = t,
|
|
cityId = cId,
|
|
bossId = bId
|
|
})
|
|
end
|
|
|
|
-- 请求进入跨服福地
|
|
function CrossFuDiSystem:ReqCrossFudEnter(id, t)
|
|
self:SetCurCityId(id)
|
|
GameCenter.Network.Send("MSG_GuildCrossFud.ReqCrossFudEnter", {
|
|
cityId = id,
|
|
type = t
|
|
})
|
|
end
|
|
|
|
--请求魔王缝隙boss列表
|
|
function CrossFuDiSystem:ReqDevilBossList()
|
|
GameCenter.Network.Send("MSG_GuildCrossFud.ReqDevilBossList")
|
|
end
|
|
|
|
--返回魔王缝隙boss展示列表
|
|
function CrossFuDiSystem:ResDevilBossList(msg)
|
|
|
|
end
|
|
|
|
-- 返回跨服福地数据
|
|
function CrossFuDiSystem:ResAllCrossFudInfo(msg)
|
|
if msg == nil then
|
|
return
|
|
end
|
|
-- 设置个人积分
|
|
self.Score = msg.score
|
|
-- 设置世界等级
|
|
self.CrossWorldLv = msg.worldLevel
|
|
-- 设置当前天禁值
|
|
self.CurTianJin = msg.tValue
|
|
-- 设置城市数据
|
|
if msg.cityList ~= nil then
|
|
for i = 1, #msg.cityList do
|
|
local _city = self.DicFuDi[msg.cityList[i].cityId]
|
|
if _city == nil then
|
|
_city = L_CrossFuDi:New()
|
|
self.DicFuDi[msg.cityList[i].cityId] = _city
|
|
end
|
|
_city:SetData(msg.cityList[i])
|
|
_city:SetFinalItem(msg.cityList[i].box)
|
|
if i == 1 then
|
|
-- 设置跨服类型
|
|
self.CrossType = _city:GetCrossType()
|
|
end
|
|
end
|
|
local _keys = self.DicFuDi:GetKeys()
|
|
if _keys ~= nil then
|
|
for i = 1, #_keys do
|
|
local _key = _keys[1]
|
|
if math.floor(_key / 100) ~= self.CrossType then
|
|
self.DicFuDi:Remove(_key)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
-- 设置个人积分宝箱
|
|
local _rewardList = self:GetRewardList()
|
|
if msg.boxList ~= nil then
|
|
for i = 1, #msg.boxList do
|
|
local _box = msg.boxList[i]
|
|
local _data = self:GetScoreReward(_box.boxId)
|
|
if _data ~= nil then
|
|
_data.IsPay = not _box.isLock
|
|
_data.IsReward = _box.isGet
|
|
end
|
|
end
|
|
end
|
|
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_CROSSFUDI_DATA_RESULT)
|
|
end
|
|
|
|
-- 福地宝箱领取返回
|
|
function CrossFuDiSystem:ResUpdateCrossFudBox(msg)
|
|
if msg == nil then
|
|
return
|
|
end
|
|
local _city = self:GetFuDiData(msg.cityId)
|
|
if _city ~= nil then
|
|
_city:RewardedBox()
|
|
end
|
|
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_CROSSFUDI_BOX_REWARDED, msg)
|
|
end
|
|
|
|
-- 积分宝箱解锁
|
|
function CrossFuDiSystem:ResUpdateCrossFudScoreBox(msg)
|
|
if msg == nil then
|
|
return
|
|
end
|
|
if msg.boxList == nil then
|
|
return
|
|
end
|
|
for i = 1, #msg.boxList do
|
|
local _box = msg.boxList[i]
|
|
local _data = self:GetScoreReward(_box.boxId)
|
|
if _data ~= nil then
|
|
_data.IsPay = not _box.isLock
|
|
_data.IsReward = _box.isGet
|
|
end
|
|
end
|
|
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_CROSSFUDI_DATA_RESULT)
|
|
end
|
|
|
|
-- 返回福地详情
|
|
function CrossFuDiSystem:ResCrossFudCityInfo(msg)
|
|
if msg == nil then
|
|
return
|
|
end
|
|
local _playerOcc = GameCenter.GameSceneSystem:GetLocalPlayer().IntOcc
|
|
if msg.type == 0 then
|
|
local _city = self:GetFuDiData(msg.cityId)
|
|
if _city == nil then
|
|
return
|
|
end
|
|
-- 设置服务器(阵营)排行
|
|
_city:SetServerScoreRankDatas(msg)
|
|
-- 设置boss列表
|
|
_city:SetBossDatas(msg.bossList)
|
|
_city.OwnPlayerNum = msg.enterRole
|
|
else
|
|
local _bossList = List:New()
|
|
if msg.bossList ~= nil then
|
|
for i = 1, #msg.bossList do
|
|
local _bossMsg = msg.bossList[i]
|
|
local _cfgId = _bossMsg.bossId
|
|
local _bossState = 0
|
|
if _bossMsg.time == nil then
|
|
_bossMsg.time = 0
|
|
end
|
|
if _bossMsg.isDie and _bossMsg.time <= 0 then
|
|
_bossState = 1
|
|
end
|
|
local _leftTime = _bossMsg.time / 1000
|
|
local _cfg = DataConfig.DataCrossDevilBoss[_bossMsg.bossId]
|
|
local _itemList = List:New()
|
|
local _list = Utils.SplitStr(_cfg.Reward, ';')
|
|
if _list ~= nil then
|
|
for i = 1, #_list do
|
|
local _values = Utils.SplitNumber(_list[i], '_')
|
|
if _values ~= nil and #_values == 2 then
|
|
local _occ = _values[1]
|
|
local _itemId = _values[2]
|
|
if _occ == 9 or _occ == _playerOcc then
|
|
local _itemData = {
|
|
Id = _itemId,
|
|
Num = 1,
|
|
IsBind = true
|
|
}
|
|
_itemList:Add(_itemData)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
local _head = _cfg.Icon
|
|
local _name = _cfg.Name
|
|
local _monsterCfg = DataConfig.DataMonster[_cfg.MonsterId]
|
|
local _level = _monsterCfg.Level
|
|
local _boss = {
|
|
CfgId = _cfgId,
|
|
MonsterId = _cfg.MonsterId,
|
|
BossState = _bossState,
|
|
LeftTime = _leftTime,
|
|
Head = _head,
|
|
Name = _name,
|
|
Level = _level,
|
|
ItemList = _itemList,
|
|
RankList = List:New()
|
|
}
|
|
_bossList:Add(_boss)
|
|
end
|
|
end
|
|
self.M_DicBossList[msg.cityId] = _bossList
|
|
end
|
|
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_CROSSFUDI_CITY_DETAIL, msg.cityId)
|
|
end
|
|
|
|
-- 返回福地排名
|
|
function CrossFuDiSystem:ResCrossFudRankInfo(msg)
|
|
if msg == nil then
|
|
return
|
|
end
|
|
if msg.type == 0 then
|
|
-- 设置积分排名
|
|
self:SetScoreRankDatas(msg)
|
|
elseif msg.type == 1 then
|
|
-- 设置击杀排名
|
|
self:SetKillRankDatas(msg)
|
|
end
|
|
-- 设置我的排名
|
|
self:SetMyRank(msg)
|
|
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_CROSSFUDI_RANK_RESULT)
|
|
end
|
|
|
|
-- 福地攻打情况
|
|
function CrossFuDiSystem:ResCrossFudReport(msg)
|
|
if msg == nil then
|
|
return
|
|
end
|
|
if msg.type == 0 then
|
|
self:SetCurCityId(msg.cityId)
|
|
local _cityData = self:GetFuDiData(msg.cityId)
|
|
if _cityData == nil then
|
|
return
|
|
end
|
|
_cityData:SetBossDatas(msg.boss)
|
|
self.CacheCopyMsgList:Add(1)
|
|
else
|
|
local _bossList = List:New()
|
|
if msg.boss ~= nil then
|
|
for i = 1, #msg.boss do
|
|
local _bossMsg = msg.boss[i]
|
|
local _cfgId = _bossMsg.bossId
|
|
local _bossState = 0
|
|
if _bossMsg.isDie and _bossMsg.time <= 0 then
|
|
_bossState = 1
|
|
end
|
|
local _leftTime = _bossMsg.time / 1000
|
|
local _cfg = DataConfig.DataCrossDevilBoss[_bossMsg.bossId]
|
|
local _head = _cfg.Icon
|
|
local _name = _cfg.Name
|
|
local _monsterCfg = DataConfig.DataMonster[_cfg.MonsterId]
|
|
local _level = _monsterCfg.Level
|
|
local _boss = {
|
|
CfgId = _cfgId,
|
|
MonsterId = _cfg.MonsterId,
|
|
BossState = _bossState,
|
|
LeftTime = _leftTime,
|
|
Head = _head,
|
|
Name = _name,
|
|
Level = _level,
|
|
RankList = List:New()
|
|
}
|
|
_bossList:Add(_boss)
|
|
end
|
|
end
|
|
self.M_DicBossList[msg.cityId] = _bossList
|
|
self.M_CacheCopyMsgList:Add(1)
|
|
end
|
|
end
|
|
|
|
-- 福地伤害统计
|
|
function CrossFuDiSystem:ResCrossFudBossReport(msg)
|
|
if msg == nil then
|
|
return
|
|
end
|
|
if msg.type == 0 then
|
|
local _cityData = self:GetEnterCityData()
|
|
if _cityData ~= nil then
|
|
_cityData:SetBossGuiShuCamp(msg.camp)
|
|
_cityData:SetDamageRankList(msg.rankList, msg.boss.bossId)
|
|
end
|
|
else
|
|
local _bossMsg = msg.boss
|
|
local _cfgId = _bossMsg.bossId
|
|
local _bossState = 0
|
|
if _bossMsg.isDie then
|
|
_bossState = 1
|
|
end
|
|
local _leftTime = _bossMsg.time / 1000
|
|
local _cfg = DataConfig.DataCrossDevilBoss[_bossMsg.bossId]
|
|
local _head = _cfg.Icon
|
|
local _name = _cfg.Name
|
|
local _monsterCfg = DataConfig.DataMonster[_cfg.MonsterId]
|
|
local _level = _monsterCfg.Level
|
|
local _boss = self:GetMBossData(self:GetEnterCityId(), _bossMsg.bossId)
|
|
_boss.CfgId = _cfgId
|
|
_boss.BossState = _bossState
|
|
_boss.Head = _head
|
|
_boss.Name = _name
|
|
_boss.Level = _level
|
|
_boss.RankList:Clear()
|
|
if msg.rankList ~= nil then
|
|
for i = 1, #msg.rankList do
|
|
local _rank = msg.rankList[i]
|
|
_boss.RankList:Add({
|
|
Rank = _rank.rank,
|
|
Name = _rank.name,
|
|
Damage = _rank.damage
|
|
})
|
|
end
|
|
_boss.RankList:Sort(function(a, b)
|
|
return a.Damage > b.Damage
|
|
end)
|
|
end
|
|
end
|
|
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_CROSSFUDI_HURTRANK_UPDATE)
|
|
end
|
|
|
|
-- 福地结算
|
|
function CrossFuDiSystem:ResCrossFudOwnerNotice(msg)
|
|
if msg == nil then
|
|
return
|
|
end
|
|
local _data = self:GetResultData()
|
|
_data:SetFirstData(msg)
|
|
-- 设置城市数据
|
|
local _cityData = self:GetFuDiData(msg.city.cityId)
|
|
if _cityData == nil then
|
|
-- 有可能没有打开过界面没有获取到城市数据
|
|
_cityData = L_CrossFuDi:New()
|
|
self.DicFuDi[msg.city.cityId] = _cityData
|
|
end
|
|
if _cityData ~= nil then
|
|
_cityData:SetData(msg.city)
|
|
-- 设置击杀排名
|
|
_cityData:SetPersonKillRankDatas(msg.killRank)
|
|
-- 设置积分排名
|
|
_cityData:SetPersonScoreRankDatas(msg.scoreRank)
|
|
end
|
|
_data:SetFinalItemData(msg.city.box.boxId)
|
|
GameCenter.PushFixEvent(UILuaEventDefine.UICrossFuDiResultForm_OPEN, msg.city.cityId)
|
|
end
|
|
|
|
-- 返回关注数据
|
|
function CrossFuDiSystem:ResCrossFudCareBoss(msg)
|
|
if msg == nil then
|
|
return
|
|
end
|
|
local _cityData = self:GetFuDiData(msg.cityId)
|
|
if _cityData == nil then
|
|
return
|
|
end
|
|
local _bossData = _cityData:GetBossData(msg.boss.bossId)
|
|
if _bossData == nil then
|
|
return
|
|
end
|
|
_bossData.IsCare = msg.boss.care
|
|
-- local _cfg = DataConfig.DataCrossFudiMain[msg.cityId]
|
|
-- if _cfg ~= nil then
|
|
-- GameCenter.PushFixEvent(UIEventDefine.UIBossInfoTips_OPEN, {_cfg.Id, _cfg.CloneId, msg.boss.bossId, 13})
|
|
-- end
|
|
end
|
|
|
|
function CrossFuDiSystem:ResCrossFudCareBossRefresh(msg)
|
|
if msg == nil then
|
|
return
|
|
end
|
|
local _cfg = DataConfig.DataCrossFudiMain[msg.cityId]
|
|
if _cfg ~= nil then
|
|
GameCenter.PushFixEvent(UIEventDefine.UIBossInfoTips_OPEN, {_cfg.Id, _cfg.CloneId, msg.bossId, 13})
|
|
end
|
|
end
|
|
|
|
function CrossFuDiSystem:ResUpdateTJValue(msg)
|
|
if msg == nil then
|
|
return
|
|
end
|
|
self.CurTianJin = msg.tValue
|
|
end
|
|
|
|
-- ==========================================================消息==========================================================
|
|
|
|
return CrossFuDiSystem
|