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

394 lines
11 KiB
Plaintext
Raw 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.

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