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

322 lines
11 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

FunctionGuide = class("FunctionGuide",EventDispatcher)
autoImport("GuideMaskView")
autoImport("FunctionGuide_Map");
function FunctionGuide.Me()
if nil == FunctionGuide.me then
FunctionGuide.me = FunctionGuide.new()
end
return FunctionGuide.me
end
function FunctionGuide:ctor()
end
function FunctionGuide:stopGuide( )
-- body
if(GuideMaskView.Instance)then
GuideMaskView.Instance:CloseSelf()
-- errorLog("checkIfNeedRemoveGuideView GuideMaskView.Instance:CloseSelf()")
end
end
function FunctionGuide:skillPointCheck( value )
-- body
self:checkQuestGuide(3,value)
end
function FunctionGuide:buyItemCheck( value )
-- body
self:checkQuestGuide(2,value)
end
function FunctionGuide:attrPointCheck( value )
-- body
self:checkQuestGuide(1,value)
end
function FunctionGuide:checkQuestGuide(optionId,value)
-- body
local instance = GuideMaskView.Instance
-- errorLog("FunctionGuide:checkQuestGuide:"..optionId..";value:"..value)
if(instance and instance.guideData)then
local guideData = instance.guideData
if(guideData and guideData.optionId and guideData.optionId == optionId)then
local optionData = Table_GuideOption[optionId]
if(optionData)then
local type = optionData.content.type
local dataValue = optionData.content.value
-- errorLog("FunctionGuide.checkQuestGuide optionId:"..optionId..";value:"..value)
-- errorLog("optionData:optionId:"..optionId..";value:"..dataValue)
local complete = false
if(type == ">")then
if value > dataValue then
complete = true
end
elseif(type == "<")then
if value < dataValue then
complete = true
end
elseif(type == "==")then
if value == dataValue then
complete = true
end
else
--helplog("can't recognize the option type!!!")
end
if(complete)then
if(instance.lastOption == optionId)then
return
end
instance.lastOption = optionId
local questData = instance.questData
QuestProxy.Instance:notifyQuestState(questData.id,questData.staticData.FinishJump)
else
--helplog("complete is false")
end
else
--helplog("optionData is nil")
end
else
-- --helplog("guideData or guideData.optionId is nil or optionId unequal!!!")
end
end
end
-- 界面關閉呼叫
-- 傳入單個guideId or guideIdList
function FunctionGuide:checkGuideStateWhenExit( singleOrList )
-- body
-- --helplog("FunctionGuide:checkGuideStateWhenExit")
local instance = GuideMaskView.Instance
if(instance and instance.questData)then
local questData = instance.questData
local currentGuideId = instance.currentGuideId
local curBtnId = instance.currentTriggerId or -1
if(type(singleOrList) == "table")then
for i=1,#singleOrList do
local single = singleOrList[i]
-- --helplog("single guideId:"..single.id)
--如果前面已經發送了引導更新訊息則認為該引導正在等待回覆不認為該引導失敗
-- --helplog(instance.guideData.ButtonID)
if(currentGuideId == single.id)then
instance:restoreParent()
if(curBtnId ~= instance.guideData.ButtonID)then
--helplog("notifyQuestState FailJump")
QuestProxy.Instance:notifyQuestState(instance.questData.id,instance.questData.staticData.FailJump)
instance:CloseSelf()
return
end
end
end
--helplog("current questGuideId unequal the argument by singleOrList!currentGuideId:",currentGuideId)
return
else
--如果前面已經發送了引導更新訊息則認為該引導正在等待回覆不認為該引導失敗
if(currentGuideId == singleOrList and curBtnId ~= instance.guideData.ButtonID)then
QuestProxy.Instance:notifyQuestState(instance.questData.id,instance.questData.staticData.FailJump)
instance:CloseSelf()
else
--helplog("current questGuideId unequal the argument!")
end
end
else
-- --helplog("instance is nil or questData is nil")
end
end
--TODO 目前限制按鈕只觸發一次
function FunctionGuide:triggerWithTag(tag)
-- body
-- --helplog("FunctionGuide:triggerWithTag:"..tag)
local instance = GuideMaskView.Instance
if(instance and instance.questData and instance.guideData)then
local guideData = instance.guideData
local btnId = guideData.ButtonID
if(btnId and btnId == tag)then
local sameButton = (instance.currentTriggerId and instance.currentTriggerId == btnId) or false
local clickCauseComplete = guideData.press
clickCauseComplete = clickCauseComplete and clickCauseComplete == 1
if(clickCauseComplete and not sameButton)then
local jumpId = instance.questData.staticData.FinishJump
local questId = instance.questData.id
--helplog("notifyQuestState questId:"..questId..";FinishJump:",jumpId)
instance.currentTriggerId = btnId
local questData = instance.questData
QuestProxy.Instance:notifyQuestState(questData.id,questData.staticData.FinishJump)
--非強制引導先不處理
local guideType = instance.questData.params.type
if(guideType == QuestDataGuideType.QuestDataGuideType_force)then
instance:restoreParent()
end
--提前遮擋防止下次任務執行前誤操作
instance:Show(instance.mask)
else
--helplog("tag unequal with quest id! or same button! or clickCauseComplete is false")
end
else
--helplog("buttonId is nil")
end
else
-- errorLog("questData or button is nil")
end
end
--展示引導
function FunctionGuide:showGuideByQuestData( questData )
-- body
if(not questData)then
return
end
--helplog("FunctionGuide:showGuideByQuestData",questData.id,questData.step)
local instance = GuideMaskView.getInstance()
if(instance and instance.forbid)then
return
end
instance:restoreParent()
instance:resetData()
local guideId = questData.params.guideID
local guideType = questData.params.type
local guideData = Table_GuideID[guideId]
if(guideData)then
local tag =guideData.ButtonID
if(guideData.Preguide and guideData.Preguide ~= instance.currentGuideId)then
--目前任務的前置引導未完成需要回退
QuestProxy.Instance:notifyQuestState(questData.id,questData.staticData.FailJump)
-- errorLog("questData.staticData.FailJump:")
-- errorLog(questData.staticData.FailJump)
-- helplog("preguide is ErrorguideData.Preguide:",guideData.Preguide,instance.currentGuideId)
return
end
if(tag)then
local tagObj = GuideTagCollection.getGuideItemById(tag)
if(tagObj and not GameObjectUtil.Instance:ObjectIsNULL(tagObj) and tagObj.gameObject.activeInHierarchy)then
-- helplog("instance:showGuideByQuestData(questData)")
instance:showGuideByQuestData(questData)
elseif(not tagObj and guideData.ServerEvent ~= "")then
--需要等待伺服器事件
-- helplog("wait ServerEvent:",guideData.ServerEvent)
instance:waitServerEvent(guideData.ServerEvent,questData)
else
--未找到目前任務所需要引導的view 回退
if(tagObj)then
-- helplog("obj activeInHierarchy:",tagObj.gameObject.activeInHierarchy)
end
-- helplog("can't find obj by tag:",tag,questData.staticData.FailJump)
local FailJump = guideData.FailJump
if(FailJump == 1)then
QuestProxy.Instance:notifyQuestState(questData.id,questData.staticData.FailJump)
else
FunctionGuideChecker.Me():AddGuideCheck(questData)
end
return
end
-- if(tagObj)then
-- --helplog("obj activeInHierarchy:",tagObj.gameObject.activeInHierarchy)
-- end
elseif(guideType == QuestDataGuideType.QuestDataGuideType_showDialog)then
if(self:checkGuideMap(questData.map))then
QuestProxy.Instance:notifyQuestState(questData.id,questData.staticData.FinishJump)
GameFacade.Instance:sendNotification(GuideEvent.ShowBubble, guideData.BubbleID)
-- helplog("QuestDataGuideType_showDialog Show Bubble guide !FinishJump:",questData.staticData.FinishJump,guideData.BubbleID)
else
QuestProxy.Instance:notifyQuestState(questData.id,questData.staticData.FailJump)
-- helplog("QuestDataGuideType_showDialog Show Bubble guide !FailJump:",questData.staticData.FailJump,guideData.BubbleID)
end
instance:CloseSelf()
elseif(guideType == QuestDataGuideType.QuestDataGuideType_showDialog_Repeat)then
if(self:checkGuideMap(questData.map))then
local bubbleId = guideData.BubbleID
helplog("QuestDataGuideType_showDialog_Repeat Show Bubble guide !bubbleId:1",bubbleId)
if(bubbleId and Table_BubbleID[bubbleId])then
helplog("QuestDataGuideType_showDialog_Repeat Show Bubble guide !bubbleId:2",bubbleId)
GameFacade.Instance:sendNotification(GuideEvent.ShowBubble, bubbleId)
local bubbleData = Table_BubbleID[bubbleId]
local delayTime = bubbleData.RepeatDeltaTime or 60
local questId = questData.id
local step = questData.step
self:CheckBubbleGuideRepeat(questId,step,delayTime)
--helplog("error Guide Quest!!! can't find BubbleID in Table_BubbleID")
end
else
helplog("QuestDataGuideType_showDialog_Repeat Show Bubble guide !bubbleId: FailJump",bubbleId)
QuestProxy.Instance:notifyQuestState(questData.id,questData.staticData.FailJump)
end
instance:CloseSelf()
elseif(guideType == QuestDataGuideType.QuestDataGuideType_showDialog_Anim)then
if(self:checkGuideMap(questData.map))then
local bubbleId = guideData.BubbleID
helplog("QuestDataGuideType_showDialog_Anim Show Bubble guide !bubbleId:1",bubbleId)
GameFacade.Instance:sendNotification(GuideEvent.MiniMapAnim, {questData = questData,bubbleId = bubbleId})
else
helplog("QuestDataGuideType_showDialog_Anim Show Bubble guide !bubbleId: FailJump",bubbleId)
QuestProxy.Instance:notifyQuestState(questData.id,questData.staticData.FailJump)
end
instance:CloseSelf()
else
--helplog("no tag find")
QuestProxy.Instance:notifyQuestState(questData.id,questData.staticData.FailJump)
return
end
else
--helplog("guideData is nil by id:",guideId)
QuestProxy.Instance:notifyQuestState(questData.id,questData.staticData.FailJump)
return
end
end
function FunctionGuide:setGuideUIActive( tag,bRet )
-- body
local instance = GuideMaskView.Instance
if(instance and instance.questData and instance.guideData)then
local guideData = instance.guideData
local btnId = guideData.ButtonID
-- --helplog("FunctionGuide:setGuideUIActivetag:"..tag..";bRet:",bRet)
if(btnId)then
if(btnId == tag)then
instance:setGuideUIActive(bRet)
else
--helplog("removeGuideUI:tag unequal with quest id!")
end
else
--helplog("removeGuideUI:current questData buttonId is nil")
end
else
-- --helplog("removeGuideUI:questData or button is nil")
end
end
function FunctionGuide:checkGuideMap( map )
-- body
local currentMapID = Game.MapManager:GetMapID()
if(currentMapID == map)then
return true
else
return false
end
end
function FunctionGuide:CheckBubbleGuideRepeat( questId,step,delayTime )
-- body
LeanTween.delayedCall(delayTime,function ( )
-- body
local data = QuestProxy.Instance:getQuestDataByIdAndType(questId)
local count = QuestProxy.Instance:GetTraceCellCount()
local noTraceCells = not count or count <=0
-- --helplog(data.step,step,noTraceCells)
if(data and data.step == step and noTraceCells )then
QuestProxy.Instance:notifyQuestState(questId,data.staticData.FailJump)
-- --helplog("QuestDataGuideType_showDialog_Repeat Show Bubble guide !FailJump:",data.staticData.FailJump)
else
if(data)then
QuestProxy.Instance:notifyQuestState(questId,data.staticData.FinishJump)
-- --helplog("QuestDataGuideType_showDialog_Repeat Show Bubble guide !FinishJump:",data.staticData.FinishJump)
end
end
end)
end