2025-06-04 05:02:57 +08:00

311 lines
6.5 KiB
Plaintext

autoImport("DojoData")
autoImport("DojoMsgData")
autoImport("DojoRewardData")
DojoProxy = class('DojoProxy', pm.Proxy)
DojoProxy.Instance = nil;
DojoProxy.NAME = "DojoProxy"
DojoCellType = "DojoMsg"
DojoProxy.PassType = {
First = Dojo_pb.EPASSTYPE_FIRST,
Help = Dojo_pb.EPASSTYPE_HELP,
Normal = Dojo_pb.EPASSTYPE_NORMAL,
}
function DojoProxy:ctor(proxyName, data)
self.proxyName = proxyName or DojoProxy.NAME
if(DojoProxy.Instance == nil) then
DojoProxy.Instance = self
end
if data ~= nil then
self:setData(data)
end
self:Init()
end
function DojoProxy:Init()
self.maxCompletedId = 0
self.msgData = {}
self.rewardItems = {}
self.chatMaxNums = 50
end
function DojoProxy:RecvDojoPrivateInfo(data)
local groupid = data.groupid
if groupid == nil then
errorLog("DojoProxy RecvDojoPrivateInfo groupId == nil")
return
end
self:HandleDojoData(groupid)
self.maxCompletedId = 0
for i=1,#self.dojoData[groupid] do
local dojo = self.dojoData[groupid][i]
if i == 1 then
dojo:SetLock(false)
end
for j=1,#data.completed_id do
if dojo.id == data.completed_id[j] then
self.dojoData[groupid][i]:SetComplete(true)
if dojo.id > self.maxCompletedId then
self.maxCompletedId = dojo.id
end
end
end
end
end
function DojoProxy:RecvDojoPublicInfo(data)
if data == nil then
errorLog("DojoProxy RecvDojoPublicInfo data == nil")
return
end
if data.dojoid == nil then
errorLog("DojoProxy RecvDojoPublicInfo data.dojoid == nil")
return
end
if data.msgblob == nil then
errorLog("DojoProxy RecvDojoPublicInfo data.msgblob == nil")
return
end
if data.msgblob.msgs == nil then
errorLog("DojoProxy RecvDojoPublicInfo data.msgblob.msgs == nil")
return
end
self.msgData[data.dojoid] = {}
for i=1,#data.msgblob.msgs do
if data.msgblob.msgs[i] then
local msg = DojoMsgData.new(data.msgblob.msgs[i])
table.insert(self.msgData[data.dojoid] , 1 , msg)
else
errorLog(string.format("DojoProxy RecvDojoPublicInfo data.msgblob.msgs[%s] == nil",tostring(i)))
end
end
end
function DojoProxy:RecvAddMsg(data)
if data == nil then
errorLog("DojoProxy RecvAddMsg data == nil")
return
end
if(#self.msgData[data.dojoid] >= self.chatMaxNums)then
table.remove(self.msgData[data.dojoid] , 1)
end
local msg = DojoMsgData.new(data.dojomsg)
table.insert(self.msgData[data.dojoid] , 1 , msg)
end
function DojoProxy:RecvDojoReward(data)
TableUtility.ArrayClear(self.rewardItems)
if data and data.items then
for i=1,#data.items do
local itemInfo = DojoRewardData.new(data.items[i])
table.insert(self.rewardItems , itemInfo)
end
end
end
function DojoProxy:InitGroupData()
self.groupData = {}
for k,v in ipairs(GameConfig.GuildDojo.Dojo) do
table.insert(self.groupData , v)
end
table.sort( self.groupData, function(l,r)
return l.DojoGroupId < r.DojoGroupId
end)
end
function DojoProxy:InitDojoData()
self.dojoData = {}
for k,v in ipairs(Table_Guild_Dojo) do
local groupId = v.DojoGroupId
if groupId then
if self.dojoData[groupId] == nil then
self.dojoData[groupId] = {}
end
table.insert(self.dojoData[groupId],DojoData.new(v))
else
errorLog("DojoProxy InitDojoData groupId = nil")
end
end
for k,v in ipairs(self.dojoData) do
table.sort( v, function(l,r)
return l.id < r.id
end)
end
end
function DojoProxy:InitGuildInfo()
self.guildInfo = {}
for k,v in ipairs(Table_Guild) do
for i=1,#v.DojoGroup do
local groupid = v.DojoGroup[i]
if self.guildInfo[groupid] == nil then
self.guildInfo[groupid] = {}
end
table.insert(self.guildInfo[groupid] , v.id)
end
end
end
function DojoProxy:HandleDojoData(groupId)
if groupId == nil then
errorLog("DojoProxy HandleDojoData groupId == nil")
return
end
if self.dojoData == nil then
self:InitDojoData()
end
if self.dojoData[groupId] == nil then
self.dojoData[groupId] = {}
end
end
function DojoProxy:GetGroupData()
if self.groupData == nil then
self:InitGroupData()
end
return self.groupData
end
function DojoProxy:GetDojoData(groupId)
if groupId == nil then
errorLog("DojoProxy GetDojoData groupId == nil")
return
end
self:HandleDojoData(groupId)
return self.dojoData[groupId]
end
function DojoProxy:GetMsgData(dojoid)
if self.msgData[dojoid] == nil then
self.msgData[dojoid] = {}
end
return self.msgData[dojoid]
end
function DojoProxy:GetWaitData()
local result = {}
local members = TeamProxy.Instance.myTeam:GetPlayerMemberList(false, true)
for i=1,#members do
local id = members[i].id
if GuildProxy.Instance:CheckPlayerInMyGuild(id) then
local data = {}
data.id = id
data.name = members[i].name
if id == Game.Myself.data.id then
data.agree = true
end
table.insert(result , data)
end
end
return result
end
function DojoProxy:IsSelfInDojo()
local mapid = Game.MapManager:GetMapID();
if mapid then
local mapRaid = Table_MapRaid[mapid]
if mapRaid then
if mapRaid.Type == 9 then
return true
end
end
end
return false
end
function DojoProxy:RecvCountdownUserCmd(data)
TimeTickManager.Me():ClearTick(self)
self.TicData = {}
if(data and data.tick and data.tick ~=0)then
self.TicData.tick = data.tick
TimeTickManager.Me():CreateTick(0,50,self.UpdateTip,self)
end
end
function DojoProxy:UpdateTip(deltaTime)
-- body
if(self.TicData.tick <=0)then
TimeTickManager.Me():ClearTick(self)
return
end
self.TicData.tick = self.TicData.tick - deltaTime/1000
end
function DojoProxy:GetCountdownUserCmd()
if(self.TicData and self.TicData.tick)then
self.TicData.tick = math.floor(self.TicData.tick)
end
return self.TicData
end
function DojoProxy:CheckCanOpenGroup(groupId)
local myGuildData = GuildProxy.Instance.myGuildData
if myGuildData == nil then
return false
end
if self.guildInfo == nil then
self:InitGuildInfo()
end
if self.guildInfo[groupId] == nil then
return false
end
for i=1,#self.guildInfo[groupId] do
local guildLevel = self.guildInfo[groupId][i]
if guildLevel and myGuildData.level >= guildLevel then
return true
end
end
return false
end
function DojoProxy:GetGuildDataByGroupId(groupId)
if self.guildInfo == nil then
self:InitGuildInfo()
end
return self.guildInfo[groupId]
end
function DojoProxy:GetReward()
return self.rewardItems
end
function DojoProxy:IsLockById(id)
if id > self.maxCompletedId + 1 then
return true
end
return false
end
function DojoProxy:GetGroupLvreq(dojoid)
local data = Table_Guild_Dojo[dojoid]
local lvreq
if data and data.DojoGroupId then
for k,v in ipairs(GameConfig.GuildDojo.Dojo) do
if v.DojoGroupId == data.DojoGroupId then
lvreq = v.lvreq
break
end
end
end
return lvreq
end