Files
Main/Assets/GameAssets/Resources/Lua/Logic/BaJiZhen/BaJiZhenSystem.lua
2025-01-25 04:38:09 +08:00

443 lines
14 KiB
Lua

------------------------------------------------
-- 作者: 王圣
-- 日期: 2019-09-23
-- 文件: BaJiZhenSystem.lua
-- 模块: BaJiZhenSystem
-- 描述: 八级阵图系统脚本
------------------------------------------------
-- 引用
local BaJiJuDianData = require "Logic.BaJiZhen.BaJiJuDianData"
local BaJiRankData = require "Logic.BaJiZhen.BaJiRankData"
local BaJiZhenSystem = {
-- 本服服务器id
OwnServerId = 0,
-- 本服服务器名字
OwnServerName = nil,
-- 本服分配的颜色Id
CurServerColId = 0,
-- 当前进入的据点Id
CurJuDianId = 0,
-- 据点数据list
ListJuDianData = List:New(),
-- 据点进度
ListJinDu = List:New(),
-- 排行数据
OwnFightRankData = nil,
OwnSaiJiRankData = nil,
ListFightRankData = List:New(),
ListSaiJiRankData = List:New(),
-- 各个服务器对应的颜色
DicColorServer = Dictionary:New(),
DicColorServerId = Dictionary:New(),
-- 副本剩余时间
LeftTime = -1,
MatchLv = 0,
MatchServerNum = 0,
IsOpen = false,
LineEffectTick = 0,
ListFightRankReward = List:New(),
ListSaiJiRankReward = List:New(),
}
local L_JinDuData = {
Name = nil,
Level = 0
}
function BaJiZhenSystem:Initialize()
DataConfig.DataEightCity:Foreach(function(k, v)
local juDianData = BaJiJuDianData:New(k)
self.ListJuDianData:Add(juDianData)
end)
DataConfig.DataEightCityReward:Foreach(function(k, v)
if v.Type == 1 then
local rankInfo1 = BaJiRankData:New()
local _msg = {
name = DataConfig.DataMessageString.Get("C_STCZ_NOTOWNER"),
integral = 0,
colorCamp = 0,
serverid = 0
}
rankInfo1:Parase(_msg, k, BaJiRankType.FightRank)
self.ListFightRankReward:Add(rankInfo1)
elseif v.Type == 2 then
local rankInfo1 = BaJiRankData:New()
local _msg = {
name = DataConfig.DataMessageString.Get("C_STCZ_NOTOWNER"),
integral = 0,
colorCamp = 0,
serverid = 0
}
rankInfo1:Parase(_msg, k - 100 , BaJiRankType.SaiJiRank)
self.ListSaiJiRankReward:Add(rankInfo1)
end
end)
end
-- 通过据点id获取据点数据
function BaJiZhenSystem:GetJuDianDataById(id)
if id <= #self.ListJuDianData then
return self.ListJuDianData[id]
end
return nil
end
-- 通过据点cfgId获取据点数据
function BaJiZhenSystem:GetJuDianDataByCfgId(cfgId)
for i = 1, #self.ListJuDianData do
if self.ListJuDianData[i].CfgId == cfgId then
return self.ListJuDianData[i]
end
end
end
-- 获取进度数据
function BaJiZhenSystem:GetJinDuList()
return self.ListJinDu
end
-- 获取进度数据
function BaJiZhenSystem:GetJinDuDataByIndex(index)
if index <= #self.ListJinDu then
return self.ListJinDu[index].Name, self.ListJinDu[index].Level
end
end
-- 设置进度数据
function BaJiZhenSystem:SetJinDuData(msg)
if msg == nil then
return
end
self.ListJinDu:Clear()
local cfg = DataConfig.DataDaily[106]
local key1 = 0
local key2 = 0
local level1 = 0
local level2 = 0
local list = nil
local list_4 = nil
local list_8 = nil
if cfg ~= nil then
list = Utils.SplitStr(cfg.CrossMatch, ';')
list_4 = Utils.SplitStr(list[1], '_')
list_8 = Utils.SplitStr(list[2], '_')
key1 = tonumber(list_8[1])
level1 = tonumber(list_8[2])
key2 = tonumber(list_4[1])
level2 = tonumber(list_4[2])
local infos = msg.serverMatch_4
local useLarge = true
local valList = List:New()
for i = 1, #infos do
local _openDay = Time.GetOpenSeverDayByOpenTime(infos[i].openTime * 0.001)
if _openDay < level2 then
if useLarge then
useLarge = false
end
else
valList:Add(i)
end
local sdata = GameCenter.ServerListSystem:FindServer(infos[i].serverid)
if sdata ~= nil then
local name = UIUtils.CSFormat("S{0}_{1}", sdata.ShowServerId, sdata.Name)
local tab = {
Name = name,
Level = _openDay
}
self.ListJinDu:Add(tab)
end
end
if not useLarge then
if #valList < 4 then
self.MatchServerNum = key2
self.MatchLv = level2
else
self.MatchServerNum = key1
self.MatchLv = level1
end
else
if #valList >= 4 then
self.ListJinDu:Clear()
self.MatchServerNum = key1
self.MatchLv = level1
for i = 1, #msg.serverMatch_8 do
local sdata = GameCenter.ServerListSystem:FindServer(msg.serverMatch_8[i].serverid)
if sdata ~= nil then
local name = UIUtils.CSFormat("S{0}_{1}", sdata.ShowServerId, sdata.Name)
local tab = {
Name = name,
Level = Time.GetOpenSeverDayByOpenTime(msg.serverMatch_8[i].openTime * 0.001)--msg.serverMatch_8[i].serverWroldLv
}
self.ListJinDu:Add(tab)
end
end
else
self.MatchServerNum = key2
self.MatchLv = level2
end
end
local visable = #valList >= 4
GameCenter.MainFunctionSystem:SetFunctionVisible(FunctionStartIdCode.BaJiZhen, visable)
end
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_BAJIZHEN_OPEN_JINDU)
end
-- 获取排行数据
function BaJiZhenSystem:GetRankDataListByType(rankType)
if rankType == BaJiRankType.FightRank then
return self.ListFightRankData
elseif rankType == BaJiRankType.SaiJiRank then
return self.ListSaiJiRankData
end
end
-- 获取排行数据
function BaJiZhenSystem:GetRankDataByIndex(index, rankType)
local list = nil
if rankType == BaJiRankType.FightRank then
list = self.ListFightRankData
elseif rankType == BaJiRankType.SaiJiRank then
list = self.ListSaiJiRankData
end
if index <= #list then
return list[index]
end
end
function BaJiZhenSystem:GetOwnRankData(rankType)
if rankType == BaJiRankType.FightRank then
return self.OwnFightRankData
elseif rankType == BaJiRankType.SaiJiRank then
return self.OwnSaiJiRankData
end
end
-- 通过颜色获取服务器名字
function BaJiZhenSystem:GetServerNameByColor(color)
if self.DicColorServer:ContainsKey(color) then
return self.DicColorServer[color]
end
return nil
end
-- 进入据点副本
function BaJiZhenSystem:EnterJuDian(cfgId)
self.CurJuDianId = cfgId
self:ReqEnterEightCityMap(cfgId)
end
-- 返回自己的排名
function BaJiZhenSystem:GetOwnFightRankData()
return self.OwnFightRankData
end
-- 获取颜色字符串
function BaJiZhenSystem:GetColorStr(color)
local ret = nil
if color == BaJiColor.Color_0 then
ret = "#f0ee51"
elseif color == BaJiColor.Color_1 then
ret = "#b1ff48"
elseif color == BaJiColor.Color_2 then
ret = "#15bd32"
elseif color == BaJiColor.Color_3 then
ret = "#29f2e2"
elseif color == BaJiColor.Color_4 then
ret = "#ffa42a"
elseif color == BaJiColor.Color_5 then
ret = "#9c3dde"
elseif color == BaJiColor.Color_6 then
ret = "#dc3a28"
elseif color == BaJiColor.Color_7 then
ret = "#6976ff"
end
return ret
end
function BaJiZhenSystem:GetColorStrFormat(color)
local ret = nil
if color == BaJiColor.Color_0 then
ret = "[f0ee51]{0}[-]"
elseif color == BaJiColor.Color_1 then
ret = "[b1ff48]{0}[-]"
elseif color == BaJiColor.Color_2 then
ret = "[15bd32]{0}[-]"
elseif color == BaJiColor.Color_3 then
ret = "[29f2e2]{0}[-]"
elseif color == BaJiColor.Color_4 then
ret = "[ffa42a]{0}[-]"
elseif color == BaJiColor.Color_5 then
ret = "[9c3dde]{0}[-]"
elseif color == BaJiColor.Color_6 then
ret = "[dc3a28]{0}[-]"
elseif color == BaJiColor.Color_7 then
ret = "[6976ff]{0}[-]"
end
return ret
end
function BaJiZhenSystem:GetFlagName(color)
local ret = nil
if color == BaJiColor.Color_0 then
ret = "n_z_117_19"
elseif color == BaJiColor.Color_1 then
ret = "n_z_117_20"
elseif color == BaJiColor.Color_2 then
ret = "n_z_117_21"
elseif color == BaJiColor.Color_3 then
ret = "n_z_117_22"
elseif color == BaJiColor.Color_4 then
ret = "n_z_117_23"
elseif color == BaJiColor.Color_5 then
ret = "n_z_117_24"
elseif color == BaJiColor.Color_6 then
ret = "n_z_117_25"
elseif color == BaJiColor.Color_7 then
ret = "n_z_117_26"
end
return ret
end
---------------------------------------------msg-------------------------------------------------
-- 打开八卦阵页面
function BaJiZhenSystem:ReqEightDiagramsPanel()
GameCenter.Network.Send("MSG_EightDiagrams.ReqEightDiagramsPanel")
end
-- 返回打开八极阵图界面
function BaJiZhenSystem:ResEightDiagramsPanel(result)
if result == nil then
return
end
self.IsOpen = result.isopen
self.CurServerColId = result.selfCamp
self.OwnServerId = result.selfSid
local sdata = GameCenter.ServerListSystem:FindServer(result.selfSid)
if sdata ~= nil then
self.OwnServerName = UIUtils.CSFormat("S{0}_{1}", sdata.ShowServerId, sdata.Name)
end
if result.cityListInfo == nil then
return
end
for i = 1, #result.cityListInfo do
local juDianData = self:GetJuDianDataByCfgId(result.cityListInfo[i].cityID)
juDianData:Parase(result.cityListInfo[i])
end
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_BAJIZHENTU_OPEN_RESULT)
end
-- 请求打开排行界面
function BaJiZhenSystem:ReqRankPanel()
GameCenter.Network.Send("MSG_EightDiagrams.ReqRankPanel")
end
-- 返回打开排行榜
function BaJiZhenSystem:ResRankPanel(result)
if result == nil then
return
end
self.ListFightRankData:Clear()
self.ListSaiJiRankData:Clear()
if result.curRankInfoList ~= nil then
for i = 1, #result.curRankInfoList do
local rankInfo1 = BaJiRankData:New()
rankInfo1:Parase(result.curRankInfoList[i], i, BaJiRankType.FightRank)
self.ListFightRankData:Add(rankInfo1)
end
end
if result.seasonRankInfoList ~= nil then
for i = 1, #result.seasonRankInfoList do
local rankInfo2 = BaJiRankData:New()
rankInfo2:Parase(result.seasonRankInfoList[i], i, BaJiRankType.SaiJiRank)
self.ListSaiJiRankData:Add(rankInfo2)
end
end
if self.OwnFightRankData == nil then
self.OwnFightRankData = BaJiRankData:New()
end
if result.selfCurRankInfo ~= nil then
self.OwnFightRankData:Parase(result.selfCurRankInfo, result.selfCurRankInfo.rank, BaJiRankType.FightRank)
else
self.OwnFightRankData.Rank = -1
end
if self.OwnSaiJiRankData == nil then
self.OwnSaiJiRankData = BaJiRankData:New()
end
if result.selfSeasonRankInfo ~= nil then
self.OwnSaiJiRankData:Parase(result.selfSeasonRankInfo, result.selfSeasonRankInfo.rank, BaJiRankType.SaiJiRank)
else
self.OwnSaiJiRankData.Rank = -1
end
GameCenter.PushFixEvent(UIEventDefine.UIBaJiZhenRankForm_Open)
end
-- 请求进入城市
function BaJiZhenSystem:ReqEnterEightCityMap(id)
GameCenter.Network.Send("MSG_EightDiagrams.ReqEnterEightCityMap", {
cityID = id
})
end
-- tick消息
function BaJiZhenSystem:ReqTickMapInfo(id)
GameCenter.Network.Send("MSG_EightDiagrams.ReqTickMapInfo", {
cityID = id
})
end
-- 返回tick消息
function BaJiZhenSystem:ResTickMapInfo(result)
if result == nil then
return
end
self.OwnServerId = GameCenter.ServerListSystem.LastEnterServer.ReallyServerId
self.CurServerColId = result.selfCamp
-- 更新据点信息
local juDianData = self:GetJuDianDataByCfgId(result.curCityInfo.cityID)
if juDianData ~= nil then
juDianData:Parase(result.curCityInfo)
self.CurJuDianId = result.curCityInfo.cityID
end
-- 更新排行信息
if result.curRankInfoList ~= nil then
for i = 1, #self.ListFightRankData do
self.ListFightRankData[i]:Clear()
end
for i = 1, #result.curRankInfoList do
local rankInfo = nil
if i > #self.ListFightRankData then
rankInfo = BaJiRankData:New()
self.ListFightRankData:Add(rankInfo)
else
rankInfo = self.ListFightRankData[i]
end
rankInfo:Parase(result.curRankInfoList[i], i, BaJiRankType.FightRank)
end
end
self.ListFightRankData:Sort(function(a, b)
return a.Rank < b.Rank
end)
if self.OwnFightRankData == nil then
self.OwnFightRankData = BaJiRankData:New()
end
if result.selfRankInfo ~= nil then
self.OwnFightRankData:Parase(result.selfRankInfo, result.selfRankInfo.rank, BaJiRankType.FightRank)
end
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_UPDATE_BAJIZHENCOPY_INFO)
end
function BaJiZhenSystem:ResLastTime(result)
if result == nil then
return
end
self.LeftTime = result.seconds
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_UPDATE_BAJIZHENCOPY_TIME, result.seconds)
end
---------------------------------------------msg-------------------------------------------------
return BaJiZhenSystem