155 lines
4.1 KiB
Plaintext
155 lines
4.1 KiB
Plaintext
autoImport("AutoAimMonsterData")
|
||
|
||
FunctionMonster = class("FunctionMonster")
|
||
|
||
FunctionMonster.Priority = {
|
||
["MVP"] = 1,
|
||
["MINI"] = 2,
|
||
["Monster"] = 3,
|
||
}
|
||
|
||
function FunctionMonster.Me()
|
||
if nil == FunctionMonster.me then
|
||
FunctionMonster.me = FunctionMonster.new()
|
||
end
|
||
return FunctionMonster.me
|
||
end
|
||
|
||
function FunctionMonster:ctor()
|
||
self.monsterList = {}
|
||
self.monsterStaticInfoMap = {}
|
||
self.monsterStaticInfoList = {}
|
||
end
|
||
|
||
function FunctionMonster:FilterMonster(ignoreSkill)
|
||
TableUtility.ArrayClear(self.monsterList)
|
||
|
||
local userMap = NSceneNpcProxy.Instance.userMap
|
||
|
||
local hasLearnMvp,hasLearnMini = true, true;
|
||
if(ignoreSkill ~= true)then
|
||
hasLearnMvp = SkillProxy.Instance:HasLearnedSkill(GameConfig.Expression_SearchSkill.searchmvpskill)
|
||
hasLearnMini = SkillProxy.Instance:HasLearnedSkill(GameConfig.Expression_SearchSkill.searchminiskill)
|
||
end
|
||
|
||
for _,monster in pairs(userMap)do
|
||
if monster.data and monster.data:IsMonster() then
|
||
if(monster.data.staticData.Type == "MVP")then
|
||
if(hasLearnMvp)then
|
||
table.insert(self.monsterList, monster.data.id)
|
||
end
|
||
elseif(monster.data.staticData.Type == "MINI")then
|
||
if(hasLearnMini)then
|
||
table.insert(self.monsterList, monster.data.id)
|
||
end
|
||
else
|
||
table.insert(self.monsterList, monster.data.id)
|
||
end
|
||
end
|
||
end
|
||
|
||
return self.monsterList
|
||
end
|
||
|
||
function FunctionMonster:FilterMonsterStaticInfo()
|
||
TableUtility.TableClear(self.monsterStaticInfoMap)
|
||
local npcMap = NSceneNpcProxy.Instance.npcMap
|
||
|
||
local hasLearnMvp = SkillProxy.Instance:HasLearnedSkill(GameConfig.Expression_SearchSkill.searchmvpskill)
|
||
local hasLearnMini= SkillProxy.Instance:HasLearnedSkill(GameConfig.Expression_SearchSkill.searchminiskill)
|
||
|
||
local hasMvpOrMini = false
|
||
for npcID,npcList in pairs(npcMap) do
|
||
if npcList and #npcList > 0 then
|
||
local monster = npcList[1]
|
||
if monster.data and monster.data:IsMonster() then
|
||
if self:CanSearchMonster(monster,hasLearnMvp,hasLearnMini) then
|
||
if self.monsterStaticInfoMap[npcID] == nil then
|
||
local data = AutoAimMonsterData.new()
|
||
data:SetId(npcID)
|
||
data:SetLevel(monster.data:GetBaseLv())
|
||
self.monsterStaticInfoMap[npcID] = data
|
||
|
||
if monster.data:IsBoss() or monster.data:IsMini() then
|
||
hasMvpOrMini = true
|
||
end
|
||
end
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
return self.monsterStaticInfoMap, hasMvpOrMini
|
||
end
|
||
|
||
function FunctionMonster:SortMonsterStaticInfo(needShuffleMvp)
|
||
TableUtility.ArrayClear(self.monsterStaticInfoList)
|
||
for k,v in pairs(self.monsterStaticInfoMap) do
|
||
table.insert(self.monsterStaticInfoList , v)
|
||
end
|
||
|
||
table.sort( self.monsterStaticInfoList, function (l,r)
|
||
local ldata = Table_Monster[l:GetId()]
|
||
local rdata = Table_Monster[r:GetId()]
|
||
|
||
if ldata and rdata then
|
||
if ldata.Type ~= rdata.Type then
|
||
return self.Priority[ldata.Type] < self.Priority[rdata.Type]
|
||
else
|
||
return l:GetLevel() < r:GetLevel()
|
||
end
|
||
else
|
||
return false
|
||
end
|
||
end )
|
||
|
||
if needShuffleMvp and needShuffleMvp == true then
|
||
-- 統計怪物列表前四位(不足四位則為全體)中MVP和MINI的個數
|
||
local monsterList = self.monsterStaticInfoList
|
||
local mvpMiniCount = 0
|
||
local firstPageItemCount = math.min(#monsterList, 4)
|
||
for i=firstPageItemCount,1,-1 do
|
||
local priority = self.Priority[Table_Monster[monsterList[i]:GetId()].Type]
|
||
if priority < self.Priority["Monster"] then
|
||
mvpMiniCount = i
|
||
break
|
||
end
|
||
end
|
||
-- 將MVP和MINI隨機插入前四位(不足四位則為全體列表)中的非MVP部分的前、中或後部
|
||
for i=1,mvpMiniCount do
|
||
local insertHeadIndex = mvpMiniCount + 1 - i
|
||
if insertHeadIndex > firstPageItemCount then
|
||
break
|
||
end
|
||
local j = math.random(insertHeadIndex, firstPageItemCount)
|
||
local mvpTemp = monsterList[1]
|
||
for k=1,j-1 do
|
||
monsterList[k] = monsterList[k + 1]
|
||
end
|
||
monsterList[j] = mvpTemp
|
||
end
|
||
end
|
||
|
||
return self.monsterStaticInfoList
|
||
end
|
||
|
||
function FunctionMonster:CanSearchMonster(monster,hasLearnMvp,hasLearnMini)
|
||
local sdata = monster.data.staticData
|
||
local can = false
|
||
|
||
if sdata.Type == "MVP" then
|
||
if hasLearnMvp then
|
||
can = true
|
||
end
|
||
|
||
elseif sdata.Type == "MINI" then
|
||
if hasLearnMini then
|
||
can = true
|
||
end
|
||
|
||
else
|
||
can = true
|
||
end
|
||
|
||
return can
|
||
end |