394 lines
11 KiB
Plaintext
394 lines
11 KiB
Plaintext
autoImport("MainViewAimMonsterCell")
|
||
|
||
MainViewAutoAimMonster = class("MainViewAutoAimMonster",SubView)
|
||
|
||
local noSweepBgHeight = 426
|
||
local sweepBgHeight = 466
|
||
local isClickMvpStopwatchReady = false
|
||
local clickMvpStopwatch
|
||
|
||
function MainViewAutoAimMonster:Init()
|
||
self:FindObj()
|
||
self:AddButtonEvt()
|
||
self:AddViewEvt()
|
||
self:InitShow()
|
||
end
|
||
|
||
function MainViewAutoAimMonster:FindObj()
|
||
local BeforePanel = self:FindGO("BeforePanel")
|
||
local Anchor_DownRight = self:FindGO("Anchor_DownRight",BeforePanel)
|
||
self.autoAimMonster = self:LoadPreferb("view/MainViewAutoAimMonster",Anchor_DownRight,true)
|
||
|
||
self.autoFightBtn = self:FindGO("AutoBattleButton")
|
||
self.autoFight = self:FindGO("Auto", self.autoFightBtn)
|
||
self.autoAim = self:FindGO("AutoAim" , self.autoFightBtn)
|
||
self.autoBattleBtnSps = self:FindComponent("AutoBattleBg", UISprite, self.autoFightBtn)
|
||
self.autoFightTip = self:FindComponent("Label", UILabel, self.autoFightBtn)
|
||
self.protectToggle = self:FindGO("ProtectToggle"):GetComponent(UIToggle)
|
||
self.stayToggle = self:FindGO("StayToggle"):GetComponent(UIToggle)
|
||
self.sweepBtn = self:FindGO("SweepBtn")
|
||
self.sweepCheckmark = self:FindGO("Checkmark", self.sweepBtn)
|
||
self.bg = self:FindGO("Bg", self.autoAimMonster):GetComponent(UISprite)
|
||
end
|
||
|
||
function MainViewAutoAimMonster:AddButtonEvt()
|
||
local closeButton = self:FindGO("CloseButton", self.autoAimMonster)
|
||
self:AddClickEvent(closeButton, function (go)
|
||
self:SelfClose()
|
||
end)
|
||
|
||
self.closecomp = self.autoAimMonster:GetComponent(CloseWhenClickOtherPlace);
|
||
self.closecomp.callBack = function (go)
|
||
self:SelfClose()
|
||
end
|
||
self:AddClickEvent(self.autoFightBtn, function ()
|
||
local myself = Game.Myself
|
||
local isHanding,handowner = myself:IsHandInHand()
|
||
local isAuto = Game.AutoBattleManager.on
|
||
if(not isHanding or handowner==true ) then
|
||
if(isAuto)then
|
||
self.isSweep = false
|
||
|
||
Game.AutoBattleManager:AutoBattleOff()
|
||
Game.Myself:Client_SetAutoEndlessTowerSweep(self.isSweep)
|
||
else
|
||
if myself:Client_GetFollowLeaderID() ~= 0 then
|
||
Game.AutoBattleManager:AutoBattleOn()
|
||
else
|
||
self:SetBubbleTipActive(not state)
|
||
if SkillProxy.Instance:HasLearnedSkill(GameConfig.AutoAimMonster.SkillId) then
|
||
self:ShowView(true)
|
||
end
|
||
end
|
||
end
|
||
end
|
||
end)
|
||
self:AddClickEvent(self.sweepBtn, function ()
|
||
if Game.Myself:Client_GetFollowLeaderID() ~= 0 then
|
||
MsgManager.ShowMsgByID(3433)
|
||
return
|
||
end
|
||
|
||
self.isSweep = not self.isSweep
|
||
self:UpdateSweepCheckmark(self.isSweep)
|
||
|
||
if self.isSweep then
|
||
self:SelfClose()
|
||
end
|
||
end)
|
||
end
|
||
|
||
function MainViewAutoAimMonster:AddViewEvt()
|
||
self:AddListenEvt(SceneUserEvent.SceneAddNpcs,self.UpdateInfo)
|
||
self:AddListenEvt(SceneUserEvent.SceneRemoveNpcs,self.UpdateInfo)
|
||
self:AddDispatcherEvt(AutoBattleManagerEvent.StateChanged, self.UpdateAutoBattle)
|
||
self:AddListenEvt(GuideEvent.ShowAutoFightBubble, self.HandleGuideBubbleTip)
|
||
self:AddListenEvt(SkillEvent.SkillUpdate, self.UpdateSkill)
|
||
end
|
||
|
||
function MainViewAutoAimMonster:InitShow()
|
||
self.isShowSweep = nil --是否顯示掃蕩按鈕
|
||
self.isSweep = false --是否勾選掃蕩
|
||
|
||
local container = self:FindGO("Container")
|
||
local wrapConfig = {
|
||
wrapObj = container,
|
||
pfbNum = 10,
|
||
cellName = "MainViewAimMonsterCell",
|
||
control = MainViewAimMonsterCell,
|
||
dir = 1,
|
||
}
|
||
self.itemWrapHelper = WrapCellHelper.new(wrapConfig)
|
||
self.itemWrapHelper:AddEventListener(MouseEvent.MouseClick, self.HandleClickItem, self)
|
||
self.itemWrapHelper:AddEventListener(MainViewAimMonsterCellEvent.ValueChange, self.HandleValueChange, self)
|
||
EventManager.Me():AddEventListener(MainViewAimMonsterCellEvent.BossCellHasSet, self.HandleBossCellHasSet, self)
|
||
|
||
self:UpdateAutoBattle()
|
||
|
||
local isProtect,isStay = false,false
|
||
self.save_str = LocalSaveProxy.Instance:GetMainViewAutoAimMonster()
|
||
local history = string.split(self.save_str, "_")
|
||
if #history == 2 then
|
||
isProtect = history[1]
|
||
-- isStay = history[2]
|
||
end
|
||
self.protectToggle.value = tonumber(isProtect) == 1
|
||
self.stayToggle.value = tonumber(isStay) == 1
|
||
|
||
self:UpdateSkill()
|
||
|
||
clickMvpStopwatch = StopwatchManager.Me():CreateStopwatch(self.ReportClickMvpInterval, self)
|
||
|
||
self:ShowView(false)
|
||
end
|
||
|
||
function MainViewAutoAimMonster:HandleValueChange(param)
|
||
local cell, value = param[1], param[2];
|
||
|
||
end
|
||
|
||
function MainViewAutoAimMonster:HandleBossCellHasSet(param)
|
||
if not self:IsShowView() then
|
||
-- Cell已設定完畢但AutoAimMonster還未顯示時,置isClickMvpStopwatchReady為true,等待ShowView(true)時開始計時
|
||
isClickMvpStopwatchReady = true
|
||
elseif not clickMvpStopwatch.isOn then
|
||
-- Cell已設定完畢,AutoAimMonster顯示,並且未正在計時時,可以開始計時
|
||
self:StartTimingClickMvpInterval()
|
||
end
|
||
end
|
||
|
||
function MainViewAutoAimMonster:OnExit()
|
||
EventManager.Me():RemoveEventListener(MainViewAimMonsterCellEvent.BossCellHasSet, self.HandleBossCellHasSet, self)
|
||
StopwatchManager.Me():ClearStopwatch(self, clickMvpStopwatch.id)
|
||
clickMvpStopwatch = nil
|
||
|
||
MainViewAutoAimMonster.super.OnExit(self)
|
||
end
|
||
|
||
local infoList = {}
|
||
function MainViewAutoAimMonster:UpdateInfo()
|
||
if not self:IsShowView() then
|
||
return
|
||
end
|
||
local functionMonster = FunctionMonster.Me()
|
||
local _, hasMvpOrMini = functionMonster:FilterMonsterStaticInfo()
|
||
if clickMvpStopwatch and not hasMvpOrMini then
|
||
clickMvpStopwatch:Clear()
|
||
end
|
||
|
||
TableUtility.ArrayClear(infoList)
|
||
TableUtility.ArrayShallowCopy(infoList, functionMonster:SortMonsterStaticInfo(true))
|
||
|
||
local all = AutoAimMonsterData.new()
|
||
all:SetId(0)
|
||
TableUtility.ArrayPushFront(infoList,all) --全部魔物
|
||
|
||
-- LogUtility.InfoFormat("MainViewAutoAimMonster : {0}",#list)
|
||
|
||
self.itemWrapHelper:UpdateInfo(infoList)
|
||
|
||
if #infoList <= 5 then
|
||
self.itemWrapHelper:ResetPosition()
|
||
end
|
||
|
||
self:UpdateAutoBattle();
|
||
|
||
local cellCtls = self.itemWrapHelper:GetCellCtls()
|
||
for i=1,#cellCtls do
|
||
local id = cellCtls[i].data and cellCtls[i].data:GetId() or 0;
|
||
if self.currentIds and self.currentIds[id] then
|
||
cellCtls[i]:SetChoose(true)
|
||
else
|
||
cellCtls[i]:SetChoose(false)
|
||
end
|
||
end
|
||
|
||
self:UpdateSweep()
|
||
self:UpdateSweepCheckmark(self.isSweep)
|
||
end
|
||
|
||
function MainViewAutoAimMonster:HandleClickItem(cellctl)
|
||
if cellctl.data then
|
||
local currentId = cellctl.data:GetId();
|
||
if currentId == 0 then
|
||
Game.AutoBattleManager:AutoBattleOn()
|
||
if not SkillProxy.Instance:HasAttackSkill(SkillProxy.Instance.equipedAutoSkills) then
|
||
--沒有攻擊技能,彈提示
|
||
MsgManager.DontAgainConfirmMsgByID(1712)
|
||
end
|
||
self:SelfClose()
|
||
else
|
||
local myself = Game.Myself
|
||
local value = cellctl:GetChooseValue();
|
||
if(value)then
|
||
myself:Client_UnSetAutoBattleLockID(currentId)
|
||
else
|
||
if myself:Client_GetFollowLeaderID() ~= 0 then
|
||
MsgManager.ShowMsgByID(1713)
|
||
else
|
||
MsgManager.FloatMsg(nil, string.format(ZhString.AutoAimMonster_Tip , cellctl.name.text))
|
||
myself:Client_SetAutoBattleLockID(currentId)
|
||
myself:Client_SetAutoBattle(true)
|
||
end
|
||
end
|
||
cellctl:SetChoose(not value);
|
||
|
||
-- 若選中mvp或mini,則暫停秒錶
|
||
local monster = Table_Monster[currentId]
|
||
if monster and (monster.Type == "MVP" or monster.Type == "MINI") then
|
||
clickMvpStopwatch:Pause()
|
||
end
|
||
end
|
||
|
||
Game.Myself:Client_SetAutoBattleProtectTeam(self.protectToggle.value)
|
||
Game.Myself:Client_SetAutoBattleStanding(self.stayToggle.value)
|
||
end
|
||
end
|
||
|
||
function MainViewAutoAimMonster:ShowView(isShow)
|
||
self.autoAimMonster:SetActive(isShow)
|
||
|
||
if isShow then
|
||
if isClickMvpStopwatchReady then
|
||
-- 此時Cell已設定完畢,可以開始計時
|
||
self:StartTimingClickMvpInterval()
|
||
else
|
||
-- 此時Cell尚未初始化,置isClickMvpStopwatchReady為true,等待Cell發送訊息再開始計時
|
||
isClickMvpStopwatchReady = true
|
||
end
|
||
|
||
self:UpdateInfo()
|
||
end
|
||
end
|
||
|
||
function MainViewAutoAimMonster:OffAutoAim()
|
||
self.currentIds = nil
|
||
end
|
||
|
||
function MainViewAutoAimMonster:IsShowView()
|
||
return self.autoAimMonster.activeSelf
|
||
end
|
||
|
||
function MainViewAutoAimMonster:SelfClose()
|
||
self:ShowView(false)
|
||
|
||
if self.currentIds and next(self.currentIds) then
|
||
for currentId,_ in pairs(self.currentIds)do
|
||
self:NotifyGuideQuestState(currentId)
|
||
end
|
||
end
|
||
self:SetBubbleTipActive(true)
|
||
|
||
local protect,stay
|
||
if self.protectToggle.value then
|
||
protect = 1
|
||
else
|
||
protect = 0
|
||
end
|
||
if self.stayToggle.value then
|
||
stay = 1
|
||
else
|
||
stay = 0
|
||
end
|
||
local str = protect.."_"..stay
|
||
if(str ~= self.save_str)then
|
||
LocalSaveProxy.Instance:SetMainViewAutoAimMonster(str)
|
||
end
|
||
|
||
--可掃蕩狀態下
|
||
if self.isShowSweep then
|
||
local _Myself = Game.Myself
|
||
if _Myself:Client_GetFollowLeaderID() == 0 then
|
||
if self.isSweep ~= _Myself:Client_GetAutoEndlessTowerSweep() then
|
||
local _AutoBattleManager = Game.AutoBattleManager
|
||
if self.isSweep then
|
||
_AutoBattleManager:AutoBattleOn()
|
||
else
|
||
_AutoBattleManager:AutoBattleOff()
|
||
end
|
||
_Myself:Client_SetAutoEndlessTowerSweep(self.isSweep)
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
function MainViewAutoAimMonster:UpdateSkill()
|
||
self.protectToggle.gameObject:SetActive( SkillProxy.Instance:HasLearnedSkill(GameConfig.AutoAimMonster.ProtectSkillId) )
|
||
self.stayToggle.gameObject:SetActive( SkillProxy.Instance:HasLearnedSkill(GameConfig.AutoAimMonster.UnmovableSkillId) )
|
||
end
|
||
|
||
function MainViewAutoAimMonster:NotifyGuideQuestState(selectId)
|
||
local questList = QuestProxy.Instance:getLockMonsterGuideByMonsterId(selectId)
|
||
if questList then
|
||
for i=1,#questList do
|
||
QuestProxy.Instance:notifyQuestState(questList[i])
|
||
end
|
||
end
|
||
end
|
||
|
||
function MainViewAutoAimMonster:UpdateAutoBattle(note)
|
||
local isAuto = Game.AutoBattleManager.on
|
||
if isAuto then
|
||
local lockids = Game.Myself:Client_GetAutoBattleLockIDs()
|
||
if not next(lockids) then
|
||
self:ShowAuto(isAuto,not isAuto)
|
||
else
|
||
self:ShowAuto(not isAuto,isAuto)
|
||
end
|
||
|
||
self.currentIds = lockids
|
||
else
|
||
self:ShowAuto(isAuto,isAuto)
|
||
self:OffAutoAim()
|
||
|
||
self.currentIds = nil;
|
||
end
|
||
self.autoFightTip.text = isAuto and ZhString.MainViewInfoPage_Cancel or ZhString.MainViewInfoPage_Auto
|
||
end
|
||
|
||
function MainViewAutoAimMonster:ShowAuto(isAutoFight,isAutoAim)
|
||
self.autoFight:SetActive(isAutoFight)
|
||
self.autoAim:SetActive(isAutoAim)
|
||
end
|
||
|
||
function MainViewAutoAimMonster:TryAutoBattleOn()
|
||
Game.AutoBattleManager:AutoBattleOn()
|
||
if(not SkillProxy.Instance:HasAttackSkill(SkillProxy.Instance.equipedAutoSkills)) then
|
||
--沒有攻擊技能,彈提示
|
||
MsgManager.DontAgainConfirmMsgByID(1712)
|
||
end
|
||
end
|
||
|
||
local anchorOffset = {0,40}
|
||
function MainViewAutoAimMonster:HandleGuideBubbleTip(note)
|
||
local data = note.body
|
||
if data then
|
||
if data.isShow then
|
||
if self.bubbleTip == nil then
|
||
self.bubbleTip = TipManager.Instance:ShowBubbleTipById(data.bubbleId, self.autoBattleBtnSps , NGUIUtil.AnchorSide.Left, anchorOffset)
|
||
self.bubbleTip:ActiveCloseButton(false)
|
||
end
|
||
else
|
||
if self.bubbleTip then
|
||
self.bubbleTip:CloseSelf()
|
||
self.bubbleTip = nil
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
function MainViewAutoAimMonster:SetBubbleTipActive(b)
|
||
if self.bubbleTip then
|
||
self.bubbleTip:SetActive(b)
|
||
end
|
||
end
|
||
|
||
function MainViewAutoAimMonster:UpdateSweep()
|
||
local isShow = Game.MapManager:IsEndlessTower()
|
||
self.isSweep = isShow
|
||
if isShow == self.isShowSweep then
|
||
return
|
||
end
|
||
|
||
self.isShowSweep = isShow
|
||
|
||
self.sweepBtn:SetActive(isShow)
|
||
if isShow then
|
||
self.bg.height = sweepBgHeight
|
||
else
|
||
self.bg.height = noSweepBgHeight
|
||
end
|
||
end
|
||
|
||
function MainViewAutoAimMonster:UpdateSweepCheckmark(isShow)
|
||
self.sweepCheckmark:SetActive(isShow)
|
||
end
|
||
|
||
function MainViewAutoAimMonster:StartTimingClickMvpInterval()
|
||
clickMvpStopwatch:Start()
|
||
-- LogUtility.Info("開始統計自動戰鬥從看到列表到點選的時間")
|
||
end
|
||
|
||
function MainViewAutoAimMonster:ReportClickMvpInterval(time, frameCount)
|
||
AntiAutoAssistManager.Me():RecordClickMvpInterval(time, frameCount)
|
||
end |