pg = pg or {} pg.GuideMgr2 = singletonClass("GuideMgr2") slot0 = pg.GuideMgr2 slot1 = createLog("GuideMgr2", LOG_GUIDE2) slot0.ENABLE_GUIDE = true slot0.MANAGER_STATE = { LOADING = 0, STOP = 3, IDLE = 1, BUSY = 2 } slot2 = 0.1 slot3 = 0.5 slot4 = 1 slot5 = 2 slot6 = 3 slot7 = 4 slot8 = 5 slot9 = 1 slot10 = 2 slot11 = 3 slot12 = 6 slot13 = { MODE2 = 2, MODE1 = 1 } slot14 = 3 slot15 = 0.5 slot16 = require("GameCfg.guide.style") slot17 = require("GameCfg.guide.commonEvent") function slot0.Init(slot0, slot1) print("initializing guide2 manager...") PoolMgr.GetInstance():GetUI("GuideUI", true, function (slot0) uv0._go = slot0 uv0._go:SetActive(false) uv0.UIOverlay = tf(GameObject.Find("Overlay/UIOverlay")) uv0._go.transform:SetParent(uv0.UIOverlay, false) uv0.guiderTF = findTF(uv0._go, "Guider") uv0.styleTF1 = findTF(uv0.guiderTF, "mode1") uv0.styleTF2 = findTF(uv0.guiderTF, "mode2") SetActive(uv0.guiderTF, false) uv0._bg = findTF(uv0._go, "BG") uv0.bgAlpha = uv0._bg:GetComponent(typeof(CanvasGroup)) uv0.fingerTF = findTF(uv0._go, "finger") SetActive(uv0.fingerTF, false) uv0.fingerSprites = {} eachChild(findTF(uv0._go, "resources"), function (slot0) table.insert(uv0.fingerSprites, slot0:GetComponent(typeof(Image)).sprite) end) uv0.horizontalSlip = uv0._go:GetComponent(typeof(HorizontalSlip)) uv0.managerState = uv1.MANAGER_STATE.IDLE pg.GuideMgr.GetInstance():Init(uv2) end) slot0.managerState = uv0.MANAGER_STATE.LOADING end function slot0.updateCurrentGuideStep(slot0, slot1) uv0("current guide index--->" .. slot1) if not uv1.ENABLE_GUIDE or GUIDE_FINALE <= slot1 then slot0:AbortGuide("disable guide") return end slot2 = nil slot2 = slot1 == 0 and 1 or require("GameCfg.guide.G" .. slot1).nextId uv0("load Guider id =======" .. slot2) if GUIDE_FINALE <= slot2 then slot0:AbortGuide("nextId greater than final", true) return end if require("GameCfg.guide.G" .. slot2).condition then slot4 = slot0:passGuider(slot3.condition) slot5 = true if slot3.condition_1 then slot5 = slot0:passGuider(slot3.condition_1) end if not slot4 or not slot5 then uv0("条件不符合。。。。load next id>>" .. slot3.nextId) slot0:updateCurrentGuideStep(slot3.id) return end end slot0.currentGuide = slot3 slot0.curEvents = Clone(slot0.currentGuide.events) end function slot0.passGuider(slot0, slot1) if getProxy(slot1[1]) and not slot0:Match(slot1[3], slot2[slot1[2]](slot2, slot1[5]), slot1[4]) then return false end return true end slot18 = 807 function slot0.updateSystemGuideStep(slot0, slot1) uv0("load System Guider id =======" .. slot1) slot0.currentGuide = require("GameCfg.guide.G" .. slot1) if slot0.currentGuide.condition and not slot0:passGuider(slot0.currentGuide.condition) then if uv1 < slot0.currentGuide.nextId then slot0:AbortGuide("system guide finished", true, slot0.currentGuide.id) else slot0:updateSystemGuideStep(slot0.currentGuide.nextId) end return end slot0.curEvents = Clone(slot0.currentGuide.events) end function slot0.dispatch(slot0, slot1) slot2 = slot1.func if not slot0.curEvents then uv0("disable guider") if slot2 then slot2() end return end if not slot0.currentGuide.permit and (not uv1.ENABLE_GUIDE or GUIDE_FINALE <= slot0.currentGuide.id) then uv0("disable guider...") uv0(slot0.curEvents) uv0(slot0.currentGuide) if slot2 then slot2() end return end uv0("Event name ===" .. slot1.event) if not slot0.curEvents[slot1.event] then uv0("should exist event...." .. slot1.event) if slot2 then slot2() end return end if slot3.commonEvent then slot4 = uv2[slot3.commonEvent] slot3.action = slot4.action slot3.viewComponent = slot4.viewComponent end if slot0.managerState ~= uv1.MANAGER_STATE.IDLE then uv0("manager busy...") if slot2 then slot2() end return end slot5 = slot3.viewComponent if defaultValue(slot1.checkView, true) and slot1.viewComponent ~= slot5 then uv0("not in the current scene...") uv0("data view == " .. slot1.viewComponent) uv0("event view == " .. slot5) if slot2 then slot2() end return end if slot3.condition and slot0:condition(slot1, slot3) == false then if slot3.branch and slot0:condition(slot1, slot3.branch) then if slot3.branch.rockBack then pg.m02:sendNotification(GAME.UPDATE_GUIDE_INDEX, { index = slot3.branch.rockBack }) end if slot3.branch.newEvent then slot6 = slot3.branch.newEvent slot0:dispatch({ viewComponent = slot6.viewComponent, event = slot6.name, data = slot6.data }) end end if slot3.failEvent then slot0:dispatchNewEvent(slot3.failEvent) end if slot2 then slot2() end return end if slot3.verify and not slot0:verify(slot3.verify) then if slot2 then slot2() end return end slot0:startGuide(slot3, slot1, slot2) end function slot0.startGuide(slot0, slot1, slot2, slot3) pg.DelegateInfo.New(slot0) slot0.waitProcess = coroutine.wrap(function () uv0("start guider .......") uv1.managerState = uv2.MANAGER_STATE.BUSY pg.m02:sendNotification(GAME.START_GUIDE) uv1._go.transform:SetAsLastSibling() uv1._go:SetActive(true) SetActive(uv1.fingerTF, false) uv1.bgAlpha.alpha = 0.2 if uv3.isView then uv1.checkViewHandle = uv3.viewComponent coroutine.yield() end uv1.waitProcess = nil uv1:doCurrEvent(uv4, uv5) uv1.PreEvent = uv3.event end) slot0.waitProcess() end function slot0.dispatchLoaded(slot0, slot1) if slot0.checkViewHandle and slot1.viewComponent == slot0.checkViewHandle and slot0.waitProcess then Canvas.ForceUpdateCanvases() slot0.waitProcess() slot0.checkViewHandle = nil end end function slot0.condition(slot0, slot1, slot2) for slot6, slot7 in ipairs(slot2.condition) do slot8 = nil if slot7[4] == uv0 then slot8 = slot1.arg elseif slot7[4] == uv1 then slot8 = slot1.data elseif slot7[4] == uv2 then slot8 = slot0 elseif slot7[4] == uv3 then slot8 = ys.Battle.BattleDataProxy.GetInstance():GetStatistics() end if slot0:Match(slot7[2], slot8[slot7[1]], slot7[3]) == false then uv4("condition mismatch.......") uv4(slot8[slot7[1]]) uv4(slot7[3]) return false end end return true end function slot0.verify(slot0, slot1) slot2 = slot0.currentGuide.verify.condition slot3 = getProxy(slot2[1]) if not slot0:Match(slot2[3], slot3[slot2[2]](slot3), slot2[4]) then uv0("verify failed.......") if slot1.action then slot0:dispatchNewEvent(slot1) else slot0:dispatchNewEvent(slot0.currentGuide.verify) end if slot1.closePath and not IsNil(GameObject.Find(slot1.closePath)) then triggerButton(slot5) end return false end if slot1.continue then slot5 = slot1.continue.condition slot6 = getProxy(slot5[1]) if not slot0:Match(slot5[3], slot6[slot5[2]](slot6), slot5[4]) then slot0:dispatchNewEvent(slot1.continue) return false end end uv0("verify successed.......") return true end function slot0.doCurrEvent(slot0, slot1, slot2) if table.getCount(slot1.action or {}) == 0 or slot3 == 1 and slot1.action.newEvent then slot0:finishCurrEvent(slot1, slot2) slot0:dispatchNewEvent(slot1) return end if slot1.uiWait then slot0.interactive = false slot0.waitTimer = Timer.New(function () uv0.interactive = true uv0.waitTimer:Stop() uv0.waitTimer = nil end, slot1.uiWait, 1) slot0.waitTimer:Start() else slot0.interactive = true end onButton(slot0, slot0._go, function () if not uv0.interactive then uv1("ui mask............") return end uv0:finishCurrEvent(uv2, uv3) uv0:dispatchNewEvent(uv2) if uv2.action.say and uv2.action.say.goScene then pg.m02:sendNotification(GAME.GO_SCENE, SCENE[uv2.action.say.goScene]) end end, SFX_PANEL) setButtonEnabled(slot0._go, not slot1.action.ui) if slot1.action.say then slot0:updateContent(slot1.action.say, slot1.text) end SetActive(slot0.guiderTF, slot1.action.say and slot1.action.say.text) if slot1.action.ui then slot0:updateUI(slot1, slot2) end end function slot0.finishCurrEvent(slot0, slot1, slot2) if not slot1.openUI then slot0._go:SetActive(false) end if slot1.updateIndex then pg.m02:sendNotification(GAME.UPDATE_GUIDE_INDEX, { cmd = true, index = slot0.currentGuide.id }) end pg.DelegateInfo.Dispose(slot0) slot0.bgAlpha.alpha = 0.2 removeOnButton(slot0._go) SetParent(slot0.fingerTF, tf(slot0._go), false) SetActive(slot0.fingerTF, false) SetActive(slot0.guiderTF, false) if slot0.cloneTarget then SetActive(slot0.cloneTarget, false) Destroy(slot0.cloneTarget) slot0.cloneTarget = nil end if slot0.targetTimer then slot0.targetTimer:Stop() slot0.targetTimer = nil end if slot0.contentTarget then SetActive(slot0.contentTarget, false) Destroy(slot0.contentTarget) slot0.contentTarget = nil end if slot1.redundancys then for slot6, slot7 in pairs(slot1.redundancys) do if slot0.curEvents[slot7] and not slot8.retain then uv0("redundancy event remove......" .. slot7) slot0.curEvents[slot7] = nil end end end if slot1.finish then uv0("finish guider id == " .. slot0.currentGuide.id) pg.m02:sendNotification(GAME.UPDATE_GUIDE_INDEX, { index = slot0.currentGuide.id }) if slot1.finishEvent then pg.m02:sendNotification(GAME.GUIDE_FINISH) end end uv0("finish guider event") slot0.managerState = uv1.MANAGER_STATE.IDLE if not slot0.isWake then pg.m02:sendNotification(GAME.END_GUIDE) end if slot1.enabelGuild then slot0:AbortGuide("solt guild end ") end slot0.isWake = nil if slot2 then slot2() end if slot1.endEvent then uv0("new endEvent......") slot0:startGuide(slot1.endEvent[1], {}) end if not slot1.retain then for slot6, slot7 in pairs(slot0.curEvents or {}) do if slot7 == slot1 then uv0("event remove......" .. slot6) slot0.curEvents[slot6] = nil break end end end end function slot0.updateContent(slot0, slot1, slot2) slot3 = {} if slot1.style then slot3 = slot1.style elseif slot1.commonStyle then slot3 = uv0[slot1.commonStyle] end slot4 = slot3.dir or 1 slot5 = slot3.mode or 1 slot6 = slot3.posX or 0 slot7 = slot3.posY or 0 slot8 = slot3.alpha or 0.8 if slot3.ui then slot0.contentTarget = slot0:cloneGO(GameObject.Find(slot3.ui.path).gameObject, slot0.UIOverlay, slot3.ui) onButton(slot0, slot0.contentTarget, function () triggerButton(uv0._go) end) end SetActive(slot0.styleTF1, slot5 == uv1.MODE1) SetActive(slot0.styleTF2, slot5 == uv1.MODE2) slot9 = nil if slot5 == uv1.MODE1 then slot9 = slot0.styleTF1 elseif slot5 == uv1.MODE2 then slot9 = slot0.styleTF2 end slot0.bgAlpha.alpha = slot8 slot10 = slot4 == 1 and Vector3(1, 1, 1) or Vector3(-1, 1, 1) slot9.localScale = slot10 slot9:Find("content").localScale = slot10 setText(slot11, slot2 and slot2 or slot1.text or "") slot0:checkTextAlign(slot11) setAnchoredPosition(slot0.guiderTF, Vector3(slot6, slot7, 0)) end function slot0.checkTextAlign(slot0, slot1) if slot0:getTextRowNum(slot1) > 1 then slot1:GetComponent(typeof(Text)).alignment = TextAnchor.MiddleLeft else slot3.alignment = TextAnchor.MiddleCenter end end function slot0.getTextRowNum(slot0, slot1) slot2 = slot1:GetComponent(typeof(Text)) slot2.text = "" slot2.text = slot2.text return math.floor(slot2.preferredHeight / slot2.preferredHeight) end function slot0.updateUI(slot0, slot1, slot2) slot3 = slot1.action.ui slot4 = slot1.action.ui.triggerType if slot0.cloneTimer then slot0.cloneTimer:Stop() slot0.cloneTimer = nil end if slot3.delay then slot0:addTimer(slot3.delay, function () uv0:StartSearch(uv1, uv2) end) else slot0:StartSearch(slot1, slot2) end end function slot0.cloneGO(slot0, slot1, slot2, slot3) slot4 = tf(Instantiate(slot1)) slot4.sizeDelta = tf(slot1).sizeDelta SetActive(slot4, true) slot4:SetParent(slot2, false) if slot3.pos then slot4.localPosition = Vector3(slot3.pos.x or tf(slot1).localPosition.x, slot3.pos.y, 0) else if slot0.targetTimer then slot0.targetTimer:Stop() slot0.targetTimer = nil end slot0.targetTimer = Timer.New(function () if not IsNil(uv0) and not IsNil(uv1) then uv1.position = uv0.transform.position slot0 = uv1.localPosition uv1.localPosition = Vector3(slot0.x, slot0.y, 0) end end, 0.5, -1) slot0.targetTimer:Start() slot0.targetTimer.func() end slot5 = slot3.scale or 1 slot4.localScale = Vector3(slot5, slot5, slot5) if slot3.eulerAngles then slot4.eulerAngles = Vector3(slot3.eulerAngles[1], slot3.eulerAngles[2], slot3.eulerAngles[3]) else slot4.eulerAngles = Vector3(0, 0, 0) end if slot3.clearColor then slot4:GetComponent(typeof(Image)).color = Color.New(0, 0, 0, 0) end return slot4 end function slot0.StartSearch(slot0, slot1, slot2) slot3 = slot1.action.ui slot4 = slot3.path if slot3.condition then slot5 = getProxy(slot3.condition[1]) if slot0:Match(slot3.condition[3], slot5[slot3.condition[2]](slot5), slot3.condition[4]) then slot4 = slot3.path_1 end end if IsNil(GameObject.Find(slot4)) then slot0:ReSearchTarget(slot4, function () uv0:StartSearch(uv1, uv2) end, function () uv0:AbortGuide("target is nil>>1" .. uv1, true) end, uv0, uv1) return end if slot3.tweenPath then uv2("tweenPath>>>>" .. slot3.tweenPath) slot6 = uv3 if LeanTween.isTweening(GameObject.Find(slot3.tweenPath)) then uv2("tweenPath time : " .. LeanTween.getTakeTime(slot7)) else uv2(" no animating >>> " .. slot7.name) end slot0:addTimer(slot6, function () uv0:SearchTarget(uv1, uv2, uv3) end) else slot0:SearchTarget(slot5, slot1, slot2) end end function slot0.SearchTarget(slot0, slot1, slot2, slot3) slot1 = tf(slot1) if slot2.action.ui.childIndex then if slot4.childIndex == "#" then if slot1.childCount == 0 then slot0:AbortGuide("childCount is zero", true) return end slot5 = nil for slot9 = 0, slot1.childCount - 1 do if slot1:GetChild(slot9).gameObject.name ~= "-1" then slot5 = slot10 end end slot1 = slot5 elseif slot4.childIndex == "*" then slot1 = slot1:Find(slot0:GetFlagShipId()) elseif slot4.childIndex == "%" then slot1 = slot1:Find(slot0:getDailyId()) else slot5 = 0 for slot9 = 0, slot1.childCount - 1 do if slot1:GetChild(slot9).gameObject.activeSelf then if slot5 == slot4.childIndex then slot1 = slot10 break end slot5 = slot5 + 1 end end end if IsNil(slot1) then slot0:AbortGuide("target is nil>>2>>>childIndex>>>" .. slot4.childIndex, true) return end end if slot4.hide ~= nil then SetActive(slot1, not slot4.hide) if slot4.hidePaths then for slot8, slot9 in ipairs(slot4.hidePaths) do SetActive(GameObject.Find(slot9), not slot4.hide) end end slot0:finishCurrEvent(slot2, slot3) slot0:dispatchNewEvent(slot2) else slot0.cloneTarget = slot0:cloneGO(slot1.gameObject, slot0.UIOverlay, slot4) slot0:addTargetListener(slot1, slot2) slot0:setFinger(slot1, slot0.cloneTarget, slot4) end end function slot0.ReSearchTarget(slot0, slot1, slot2, slot3, slot4, slot5) slot6 = 0 slot7 = Time.realtimeSinceStartup function slot8() uv0.searchTimer:Stop() uv0.searchTimer = nil end slot0.searchTimer = Timer.New(function () uv0("ReSearchTarget.....>>" .. uv1) if not IsNil(GameObject.Find(uv2)) then if uv3 then uv3() end uv4() end uv1 = uv1 + 1 if uv1 == uv5 and IsNil(slot0) then uv0("cost time>>>" .. Time.realtimeSinceStartup - uv6) if uv7 then uv7() end uv4() end end, slot4, slot5) slot0.searchTimer:Start() end function slot0.addTimer(slot0, slot1, slot2) if slot0.cloneTimer then slot0.cloneTimer:Stop() slot0.cloneTimer = nil end slot0.cloneTimer = Timer.New(function () uv0.cloneTimer:Stop() uv0.cloneTimer = nil if uv1 then uv1() end end, slot1 + uv0, 1) slot0.cloneTimer:Start() end function slot0.setFinger(slot0, slot1, slot2, slot3) SetActive(slot0.fingerTF, true) slot4 = slot1.sizeDelta.x / 2 slot5 = slot1.sizeDelta.y / 2 slot6 = slot3.scale and 1 / slot3.scale or 1 slot0.fingerTF.localScale = Vector3(slot6, slot6, 1) if LeanTween.isTweening(go(slot0.fingerTF)) then LeanTween.cancel(go(slot0.fingerTF)) end slot7 = slot3.fingerPos and Vector3(slot3.fingerPos.posX, slot3.fingerPos.posY, 0) or Vector3(slot4, -slot5, 0) if slot2 then slot0.fingerTF:SetParent(slot2, false) end setAnchoredPosition(slot0.fingerTF, slot7) LeanTween.play(slot0.fingerTF, slot0.fingerSprites):setLoopPingPong() end function slot0.addTargetListener(slot0, slot1, slot2) slot4 = nil slot4 = (not slot2.action.ui.childPath or findTF(slot1, slot3.childPath)) and (not slot3.eventPath or findTF(slot1, slot3.eventPath)) and slot1 slot0.lastTriggleType = slot3.triggerType and slot3.triggerType[1] or uv0 eachChild(slot0.cloneTarget, function (slot0) GetOrAddComponent(slot0, typeof(CanvasGroup)).blocksRaycasts = false end) if slot0.cloneTarget:GetComponent(typeof(Image)) == nil then go(slot0.cloneTarget):AddComponent(typeof(Image)).color = Color(0, 0, 0, 0) end if slot5 == uv0 then onButton(slot0, slot0.cloneTarget, function () uv0:finishCurrEvent(uv1, callback) if not uv2.verify or not not uv0:verify(uv2.verify) then slot0 = uv1 if uv2.clickCondition and not uv0:passGuider(uv2.clickCondition) then slot0 = uv2 end if not IsNil(uv3) then triggerButton(uv3) end uv0:dispatchNewEvent(slot0) end end, SFX_PANEL) elseif slot5 == uv1 then onToggle(slot0, slot0.cloneTarget, function (slot0) if slot0 then uv0:finishCurrEvent(uv1, callback) if not uv2.verify or not not uv0:verify(uv2.verify) then slot1 = uv1 if uv2.clickCondition and not uv0:passGuider(uv2.clickCondition) then slot1 = uv2 end if not IsNil(uv3) then triggerToggle(uv3, uv2.triggerType[2] or true) end uv0:dispatchNewEvent(slot1) end end end, SFX_PANEL) else if slot5 == uv2 or slot5 == uv3 then slot6 = slot0.cloneTarget:GetComponent(typeof(EventTriggerListener)) slot7 = slot1:GetComponent(typeof(EventTriggerListener)) slot8 = true slot9 = 0 if slot5 == uv3 then slot8 = false end slot6:AddPointUpFunc(function (slot0, slot1) if Time.time - uv0 > (uv1.triggerType[2] or 0.5) and uv2 then uv3 = true end uv4:OnPointerUp(slot1) if uv3 then uv5:finishCurrEvent(uv6, callback) else pg.m02:sendNotification(GAME.START_GUIDE) end end) slot6:AddPointDownFunc(function (slot0, slot1) uv0 = Time.time uv1:OnPointerDown(slot1) if uv2 and uv3.wake then pg.m02:sendNotification(GAME.END_GUIDE) uv4.isWake = true end playSoundEffect(SFX_PANEL) end) return end if slot5 == uv4 then GetOrAddComponent(go(slot0.cloneTarget), typeof(EventTriggerListener)):AddPointDownFunc(function (slot0, slot1) uv0:finishCurrEvent(uv1, callback) playSoundEffect(SFX_PANEL) end) end end end function slot0.dispatchNewEvent(slot0, slot1) uv0("newEvent ready.....") if slot0.managerState == uv1.MANAGER_STATE.IDLE then uv0(slot1.action.newEvent) if slot1.action.newEvent then uv0("start dispatch new event.....") slot0:dispatch({ viewComponent = slot2.viewComponent, event = slot2.name, data = slot2.data, isView = slot2.isView }) else uv0("newEvent dispatch failed>>>no event.....") end else uv0("newEvent dispatch failed>> mgr busy.....") end if slot1.inject then slot2 = slot0.curEvents[slot1.inject] slot1.action = slot2.action slot1.viewComponent = slot2.viewComponent end end function slot0.Match(slot0, slot1, slot2, slot3) if slot1 == "=" then return slot2 == slot3 elseif slot1 == "<" then return slot2 < slot3 elseif slot1 == ">" then return slot3 < slot2 elseif slot1 == "<=" then return slot2 <= slot3 elseif slot1 == ">=" then return slot3 <= slot2 elseif slot1 == "~=" then return slot2 ~= slot3 else return false end end function slot0.GetFlagShipId(slot0) if not slot0.shipId then slot0.shipId = getProxy(SettingsProxy):GetSelectedShipId() end return slot0.shipId end function slot0.getDailyId(slot0) for slot6, slot7 in pairs(pg.expedition_daily_template.all) do if table.contains(slot2[slot7].weekday, tonumber(pg.TimeMgr.GetInstance():GetServerWeek())) then uv0("daily id >>>" .. slot7) return slot7 end end end function slot0.onDisconnected(slot0) if slot0._go and uv0.MANAGER_STATE.BUSY == slot0.managerState then slot0.isBreak = true SetActive(slot0._go, false) if slot0.cloneTarget then SetActive(slot0.cloneTarget, false) end end end function slot0.onReconneceted(slot0) if slot0._go and slot0.isBreak then SetActive(slot0._go, true) slot0.isBreak = nil if slot0.cloneTarget then SetActive(slot0.cloneTarget, true) end end end function slot0.ClearGuide(slot0) if slot0.cloneTimer then slot0.cloneTimer:Stop() slot0.cloneTimer = nil end if slot0.targetTimer then slot0.targetTimer:Stop() slot0.targetTimer = nil end if slot0.cloneTarget then SetParent(slot0.fingerTF, slot0._go) Destroy(slot0.cloneTarget) slot0.cloneTarget = nil end slot0._go:SetActive(false) removeOnButton(slot0._go) if slot0.curEvents then slot0.curEvents = nil end if slot0.contentTarget then removeOnButton(slot0.contentTarget) Destroy(slot0.contentTarget) slot0.contentTarget = nil end if slot0.currentGuide then slot0.currentGuide = nil end end function slot0.Reset(slot0) uv0("RESET..................") if uv1.ENABLE_GUIDE == false then uv1.ENABLE_GUIDE = true end slot0.managerState = uv1.MANAGER_STATE.IDLE end function slot0.AbortGuide(slot0, slot1, slot2, slot3) uv0("Guide Abort............" .. slot1) slot0:ClearGuide() uv1.ENABLE_GUIDE = false slot0.managerState = uv1.MANAGER_STATE.STOP if slot2 then uv0("destroyGuide") pg.m02:sendNotification(GAME.UPDATE_GUIDE_INDEX, { index = slot3 or GUIDE_FINALE }) end end function slot0.QuitGuide(slot0) uv0("Guide qiut............") slot0:ClearGuide() slot0.managerState = uv1.MANAGER_STATE.IDLE end