ro-table/Asstes/Resources/Script/FrameWork/Proxy/ShareAnnounceQuestProxy.txt
2025-06-04 05:02:57 +08:00

296 lines
8.8 KiB
Plaintext

ShareAnnounceQuestProxy = class('ShareAnnounceQuestProxy', pm.Proxy)
ShareAnnounceQuestProxy.Instance = nil;
ShareAnnounceQuestProxy.NAME = "ShareAnnounceQuestProxy"
local tempArray = {}
function ShareAnnounceQuestProxy:ctor(proxyName, data)
self.proxyName = proxyName or ShareAnnounceQuestProxy.NAME
if(ShareAnnounceQuestProxy.Instance == nil) then
ShareAnnounceQuestProxy.Instance = self
end
self:initData()
self:initListener()
-- self:Test()
end
function ShareAnnounceQuestProxy:initListener( )
-- body
EventManager.Me():AddEventListener(TeamEvent.MemberExitTeam,self.ExitTeamHandler,self)
EventManager.Me():AddEventListener(TeamEvent.ExitTeam,self.MeExitTeamHandler,self)
end
function ShareAnnounceQuestProxy:initData( )
-- body
self.questList = {}
self.helpQuestList = {}
end
function ShareAnnounceQuestProxy:Test( )
-- body
local data = MemberWantedQuest.new(4294967339,50420001,SceneQuest_pb.EQUESTACTION_ACCEPT)
table.insert(self.questList,data)
data = MemberWantedQuest.new(4295509080,50420001,SceneQuest_pb.EQUESTACTION_SUBMIT)
table.insert(self.questList,data)
data = MemberWantedQuest.new(4296409659,50050001,SceneQuest_pb.EQUESTACTION_ACCEPT)
table.insert(self.questList,data)
data = MemberWantedQuest.new(4300969038,50350001,SceneQuest_pb.EQUESTACTION_ABANDON_GROUP)
table.insert(self.questList,data)
data = MemberWantedQuest.new(4300969038,53400001,SceneQuest_pb.EQUESTACTION_ACCEPT)
table.insert(self.questList,data)
table.insert(self.helpQuestList,53400001)
table.insert(self.helpQuestList,50050001)
table.insert(self.helpQuestList,50420001)
table.insert(self.helpQuestList,50350001)
self:updateHelpQuestIds()
end
function ShareAnnounceQuestProxy:RecvQuestWantedQuestTeamCmd(data)
-- helplog("ShareAnnounceQuestProxy:RecvQuestWantedQuestTeamCmd(data)")
local quests = data.quests
if(not quests)then
LogUtility.ErrorFormat("ShareAnnounceQuestProxy:RecvQuestWantedQuestTeamCmd() data.quests is nil")
return
end
TableUtility.ArrayClear(self.questList)
for i=1,#quests do
local single = quests[i]
local data = MemberWantedQuest.new()
data:updateByServerData(single)
table.insert(self.questList,data)
end
end
function ShareAnnounceQuestProxy:RecvUpdateWantedQuestTeamCmd(data)
-- helplog("ShareAnnounceQuestProxy:RecvUpdateWantedQuestTeamCmd(data)")
local bRet = false
local memberWantedQuest = data.quest
if(not memberWantedQuest)then
LogUtility.ErrorFormat("ShareAnnounceQuestProxy:RecvUpdateWantedQuestTeamCmd() data.quest is nil")
return
end
local charId = memberWantedQuest.charid
for i=1,#self.questList do
local single = self.questList[i]
if(single.charId == charId)then
single:updateByServerData(memberWantedQuest)
bRet = true
break
end
end
if(not bRet)then
local data = MemberWantedQuest.new()
data:updateByServerData(memberWantedQuest)
table.insert(self.questList,data)
end
self:updateHelpQuestIds()
GameFacade.Instance:sendNotification(QuestEvent.UpdateAnnounceQuestList,memberWantedQuest.questid)
end
function ShareAnnounceQuestProxy:RecvUpdateHelpWantedTeamCmd(data)
-- helplog("ShareAnnounceQuestProxy:RecvUpdateHelpWantedTeamCmd(data)")
local dels = data.dellist
local adds = data.addlist
if(dels and #dels>0)then
for i=1,#dels do
self:removeHelpQuestId(dels[i])
end
end
if(adds and #adds>0)then
for i=1,#adds do
table.insert(self.helpQuestList,adds[i])
end
end
self:updateHelpQuestIds(dels)
end
function ShareAnnounceQuestProxy:RecvQueryHelpWantedTeamCmd(data)
-- helplog("ShareAnnounceQuestProxy:RecvQueryHelpWantedTeamCmd(data)")
TableUtility.ArrayClear(self.helpQuestList)
local questIds = data.questids
if(questIds and #questIds > 0)then
for i=1,#questIds do
local single = questIds[i]
table.insert(self.helpQuestList,single)
end
self:updateHelpQuestIds()
end
end
function ShareAnnounceQuestProxy:updateHelpQuestIds(removes)
local array = {}
local removeArray = removes and removes or {}
for i=1,#self.helpQuestList do
local questId = self.helpQuestList[i]
local ifNeedShow ,memberQuestData = self:checkHelpQuestIsNeedShow(questId)
-- helplog("updateHelpQuestIds:",ifNeedShow)
if(ifNeedShow)then
local wantedData = Table_WantedQuest[questId]
if(wantedData)then
local targetText = QuestDataUtil.parseWantedQuestTranceInfo(memberQuestData.questData,wantedData)
local currentComple =self:getCurrentCompleteMember(questId)
local totalCount = self:getTotalCountMenber(questId)
local process = currentComple.."/"..totalCount
local traceData = {
type = QuestDataType.QuestDataType_HelpTeamQuest,
questDataStepType = wantedData.Content,
id = questId,
traceTitle = wantedData.Name,
whetherTrace = 1,
map = wantedData.MapId,
traceInfo = string.format(ZhString.MainViewAddTrace_HelpTeamTraceInfo, targetText,process)
}
table.insert(array,traceData)
else
table.insert(removeArray,questId)
end
else
table.insert(removeArray,questId)
end
end
if(#removeArray>0)then
self:removeHelpQuestIds(removeArray)
end
if(#array>0)then
QuestProxy.Instance:AddTraceCells(array)
end
end
function ShareAnnounceQuestProxy:checkHelpQuestIsNeedShow(questId)
local myTeam = TeamProxy.Instance.myTeam
if(not myTeam)then
return
end
for i=1,#self.questList do
local single = self.questList[i]
local fit = single.action == SceneQuest_pb.EQUESTACTION_ACCEPT
local memberData = myTeam:GetMemberByGuid(single.charId);
if(fit and memberData and single.questId == questId)then
return true,single
end
end
end
function ShareAnnounceQuestProxy:getCurrentCompleteMember(questId)
local count = 0
for i=1,#self.questList do
local single = self.questList[i]
local fit = single.action == SceneQuest_pb.EQUESTACTION_ACCEPT
local params = single.questData.params
local isComplete = params.mark_team_wanted == 1
if(fit and isComplete and single.questId == questId )then
count = count +1
end
end
return count
end
function ShareAnnounceQuestProxy:getTotalCountMenber(questId)
local count = #(self:getOnGoTeamMembersByQuestIdAndAction(questId))
return count
end
function ShareAnnounceQuestProxy:removeHelpQuestIds(dels)
TableUtility.ArrayClear(tempArray)
for i=1,#dels do
local data = {}
data.id = dels[i]
data.type = QuestDataType.QuestDataType_HelpTeamQuest
table.insert(tempArray,data)
end
QuestProxy.Instance:RemoveTraceCells(tempArray)
end
function ShareAnnounceQuestProxy:removeHelpQuestId(questId)
for i=1,#self.helpQuestList do
if(self.helpQuestList[i] == questId)then
table.remove(self.helpQuestList,i)
break
end
end
end
function ShareAnnounceQuestProxy:removeTeamMemberQuest(charId)
for i=1,#self.questList do
if(self.questList[i].charId == charId)then
table.remove(self.questList,i)
break
end
end
end
function ShareAnnounceQuestProxy:getOnGoTeamMembersByQuestIdAndAction(questId)
-- LogUtility.InfoFormat("getOnGoTeamMembersByQuestIdAndAction:getTeamMembersByQuestIdAndAction() questId:{0},count:{1}",questId,#self.questList)
TableUtility.ArrayClear(tempArray)
for i=1,#self.questList do
local single = self.questList[i]
local fit = single.action == SceneQuest_pb.EQUESTACTION_ACCEPT
if(fit and single.questId == questId)then
table.insert(tempArray,single.charId)
end
end
return tempArray
end
function ShareAnnounceQuestProxy:getAllMembersQuest()
return self.questList
end
function ShareAnnounceQuestProxy:ExitTeamHandler( note )
-- body
local member = note.data;
if(member)then
local id = member.id
self:removeTeamMemberQuest(id)
self:updateHelpQuestIds()
end
GameFacade.Instance:sendNotification(QuestEvent.UpdateAnnounceQuest)
end
function ShareAnnounceQuestProxy:MeExitTeamHandler( )
-- body
TableUtility.ArrayClear(self.questList)
self:updateHelpQuestIds(self.helpQuestList)
TableUtility.ArrayClear(self.helpQuestList)
GameFacade.Instance:sendNotification(QuestEvent.UpdateAnnounceQuest)
end
MemberWantedQuest = class("MemberWantedQuest")
function MemberWantedQuest:ctor(charId,questId,action,step)
if(charId)then
self:update(charId,questId,action,step)
end
end
function MemberWantedQuest:updateByServerData(serverData)
self:update(serverData.charid,serverData.questid,serverData.action,serverData.step,serverData.questdata)
end
function MemberWantedQuest:update(charId,questId,action,step,questDataServer)
-- LogUtility.InfoFormat("MemberWantedQuest:update charId:{0},questId:{1} ",charId,questId)
-- LogUtility.InfoFormat("MemberWantedQuest:update action:{0},step:{1} ",action,step)
self.charId = charId
self.questId = questId
self.action = action
self.step = step
if(not self.questData)then
self.questData = QuestData.CreateAsArray(QuestDataScopeType.QuestDataScopeType_CITY)
self.questData.notMine = true
end
self.questData:updateByIdAndStep(questId,step,questDataServer)
if(not self.questData.wantedData)then
LogUtility.ErrorFormat("MemberWantedQuest:update can't find id:{0} in Table_WantedQuest",questId)
end
end