From 8bb3aaae814e50a9a2fa65b1317a4549250b3bda Mon Sep 17 00:00:00 2001 From: Alar of Daggerspine Date: Sat, 14 Feb 2015 00:58:50 +0100 Subject: [PATCH] Moved mission completion routine to their own file Signed-off-by: Alar of Daggerspine --- MissionCompletion.lua | 221 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 221 insertions(+) diff --git a/MissionCompletion.lua b/MissionCompletion.lua index e69de29..13c3908 100644 --- a/MissionCompletion.lua +++ b/MissionCompletion.lua @@ -0,0 +1,221 @@ +local me, ns = ... +local addon=ns.addon --#addon +local L=ns.L +local D=ns.D +local C=ns.C +local AceGUI=ns.AceGUI +local _G=_G +local new, del, copy =ns.new,ns.del,ns.copy +local GMF=GarrisonMissionFrame +local GMFMissions=GarrisonMissionFrameMissions +local G=C_Garrison +ns.missionautocompleting=false + +do + local missions={} + local states={} + local currentMission + local scroller + local report + local timer + local function startTimer(delay) + delay=delay or 0.2 + addon:ScheduleTimer("MissionAutoComplete",delay,"LOOP") + end + local function stopTimer() + timer=nil + end + function addon:MissionsCleanup() + stopTimer() + self:MissionEvents(false) + GMF.MissionTab.MissionList.CompleteDialog:Hide() + GMF.MissionComplete:Hide() + GMF.MissionCompleteBackground:Hide() + GMF.MissionComplete.currentIndex = nil + GMF.MissionTab:Show() + GarrisonMissionList_UpdateMissions() + -- Re-enable "view" button + GMFMissions.CompleteDialog.BorderFrame.ViewButton:SetEnabled(true) + missionautocompleting=nil + GarrisonMissionFrame_SelectTab(1) + GarrisonMissionFrame_CheckCompleteMissions() + end + function addon:MissionEvents(start) + self:UnregisterEvent("GARRISON_MISSION_BONUS_ROLL_COMPLETE") + self:UnregisterEvent("GARRISON_MISSION_BONUS_ROLL_LOOT") + self:UnregisterEvent("GARRISON_MISSION_COMPLETE_RESPONSE") + self:UnregisterEvent("GARRISON_FOLLOWER_XP_CHANGED") + self:UnregisterEvent("GET_ITEM_INFO_RECEIVED") + if start then + self:RegisterEvent("GARRISON_MISSION_BONUS_ROLL_LOOT","MissionAutoComplete") + self:RegisterEvent("GARRISON_MISSION_BONUS_ROLL_COMPLETE","MissionAutoComplete") + self:RegisterEvent("GARRISON_MISSION_COMPLETE_RESPONSE","MissionAutoComplete") + self:RegisterEvent("GARRISON_FOLLOWER_XP_CHANGED","MissionAutoComplete") + self:RegisterEvent("GET_ITEM_INFO_RECEIVED","MissionAutoComplete") + else + self:SafeRegisterEvent("GARRISON_MISSION_BONUS_ROLL_LOOT") + self:SafeRegisterEvent("GARRISON_MISSION_BONUS_ROLL_COMPLETE") + self:SafeRegisterEvent("GARRISON_MISSION_COMPLETE_RESPONSE") + self:SafeRegisterEvent("GARRISON_FOLLOWER_XP_CHANGED") + end + end + function addon:MissionComplete(this,button) + GMFMissions.CompleteDialog.BorderFrame.ViewButton:SetEnabled(false) + missions=G.GetCompleteMissions() + --GMFMissions.CompleteDialog.BorderFrame.ViewButton:SetEnabled(false) -- Disabling standard Blizzard Completion + if (missions and #missions > 0) then + ns.missionautocompleting=true + report=self:GenerateMissionCompleteList("Missions' results") + --report:SetPoint("TOPLEFT",GMFMissions.CompleteDialog.BorderFrame) + --report:SetPoint("BOTTOMRIGHT",GMFMissions.CompleteDialog.BorderFrame) + report:SetParent(GMF) + report:SetPoint("TOP",GMF) + report:SetPoint("BOTTOM",GMF) + report:SetWidth(500) + report:SetCallback("OnClose",function() return addon:MissionsCleanup() end) + for i=1,#missions do + missions[i].followerXp={} + missions[i].items={} + for k,v in pairs(missions[i].followers) do + missions[i].followerXp[v]={0,G.GetFollowerXP(v),self:GetFollowerData(v,'level'),self:GetFollowerData(v,'quality')} + end + end + currentMission=tremove(missions) + self:MissionEvents(true) + self:MissionAutoComplete("LOOP") + end + end + function addon:MissionAutoComplete(event,ID,arg1,arg2,arg3,arg4) +-- C_Garrison.MarkMissionComplete Mark mission as complete and prepare it for bonus roll, da chiamare solo in caso di successo +-- C_Garrison.MissionBonusRoll + --@debug@ + print("evt",event,ID,arg1,arg2,agr3) + --@end-debug@ + if self['Event'..event] then + self['Event'..event](self,event,ID,arg1,arg2,arg3,arg4) + end + if (event =="LOOP" ) then + ID=currentMission and currentMission.missionID or "none" + arg1=currentMission and currentMission.state or "none" + end + -- GARRISON_FOLLOWER_XP_CHANGED: followerID, xpGained, actualXp, newLevel, quality + if (event=="GARRISON_FOLLOWER_XP_CHANGED") then + if (arg1 > 0) then + --report:AddFollower(ID,arg1,arg2) + currentMission.followerXp[ID][1]=currentMission.followerXp[ID][1]+arg1 + end + return + -- GET_ITEM_INFO_RECEIVED: itemID + elseif (event=="GET_ITEM_INFO_RECEIVED") then + currentMission.items[ID]=1 + return + -- GET_ITEM_INFO_RECEIVED: itemID + elseif (event=="GARRISON_MISSION_BONUS_ROLL_LOOT") then + currentMission.items[ID]=1 + return + -- GARRISON_MISSION_COMPLETE_RESPONSE: missionID, requestCompleted, succeeded + elseif (event=="GARRISON_MISSION_COMPLETE_RESPONSE") then + if (not arg1) then + -- We need to call server again + currentMission.state=0 + elseif (arg2) then -- success, we need to roll + currentMission.state=1 + else -- failure, just print results + currentMission.state=2 + startTimer(0.6) + return + end + startTimer(0.1) + return + -- GARRISON_MISSION_BONUS_ROLL_COMPLETE: missionID, requestCompleted; happens after C_Garrison.MissionBonusRoll + elseif (event=="GARRISON_MISSION_BONUS_ROLL_COMPLETE") then + if (not arg1) then + -- We need to call server again + currentMission.state=1 + else + currentMission.state=3 + startTimer(0.6) + return + end + startTimer(0.1) + return + else + if (currentMission) then + local step=currentMission.state or -1 + if (step<1) then + step=0 + currentMission.state=0 + local _ + _,_,_,currentMission.successChance,_,_,currentMission.xpBonus,currentMission.multiplier=G.GetPartyMissionInfo(currentMission.missionID) + currentMission.xp=select(2,G.GetMissionInfo(currentMission.missionID)) + end + if (step==0) then + G.MarkMissionComplete(currentMission.missionID) + elseif (step==1) then + G.MissionBonusRoll(currentMission.missionID) + elseif (step>=2) then + self:MissionPrintResults(step==3) + self:RefreshFollowerStatus() + currentMission=tremove(missions) + startTimer() + return + end + currentMission.state=step + else + report:AddRow(DONE) + end + end + end + function addon:MissionPrintResults(success) + stopTimer() + + if (success) then + report:AddMissionName(currentMission.name,C(format("Succeeded. (Chance was: %s%%)", currentMission.successChance),"Green")) + PlaySound("UI_Garrison_Mission_Complete_Mission_Success") + else + PlaySound("UI_Garrison_Mission_Complete_Encounter_Fail") + report:AddMissionName(currentMission.name,C(format("Failed. (Chance was: %s%%", currentMission.successChance),"Red")) + end +--@debug@ + --report:AddRow(format("Resource multiplier: %d Xp Bonus:%d",currentMission.multiplier,currentMission.xpBonus)) + --report:AddRow(format("ID: %d",currentMission.missionID)) +--@end-debug@ + if success then + for k,v in pairs(currentMission.rewards) do + v.quantity=v.quantity or 0 + v.multiplier=v.multiplier or 1 +--@debug@ +-- ns.xprint(format("Reward type: = %s",k)) +-- for field,value in pairs(v) do +-- ns.xprint(format(" %s = %s",field,value),C.Silver()) +-- end +--@end-debug@ + if v.currencyID then + if v.currencyID == 0 then + -- Money reward + report:AddIconText(v.icon,GetMoneyString(v.quantity)) + elseif v.currencyID == GARRISON_CURRENCY then + -- Garrison currency reward + report:AddIconText(v.icon,GetCurrencyLink(v.currencyID),v.quantity * v.multiplier) + else + -- Other currency reward + report:AddIconText(v.icon,GetCurrencyLink(v.currencyID),v.quantity ) + end + elseif v.itemID then + -- Item reward + report:AddItem(v.itemID,1) + currentMission.items[v.itemID]=nil + else + -- Follower XP reward + --report:AddIconText(v.icon,v.name) + end + end + end + for k,v in pairs(currentMission.items) do + report:AddItem(k,v) + end + for k,v in pairs(currentMission.followers) do + report:AddFollower(v,currentMission.followerXp[v]) + end + end +end -- 1.7.9.5