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

550 lines
14 KiB
Plaintext

autoImport("CardRandomMakeData")
autoImport("CardMakeData")
CardMakeProxy = class('CardMakeProxy', pm.Proxy)
CardMakeProxy.Instance = nil;
CardMakeProxy.NAME = "CardMakeProxy"
CardMakeProxy.MakeType = {
Random = SceneItem_pb.EEXCHANGECARDTYPE_DRAW,
Compose = SceneItem_pb.EEXCHANGECARDTYPE_COMPOSE,
Decompose = SceneItem_pb.EEXCHANGECARDTYPE_DECOMPOSE,
}
local tempList = {}
local filter = {}
local _getCardList = {}
local _getItemList = {}
local packageCheck = GameConfig.PackageMaterialCheck.exchange
local _ArrayPushBack = TableUtility.ArrayPushBack
local _ArrayClear = TableUtility.ArrayClear
function CardMakeProxy:ctor(proxyName, data)
self.proxyName = proxyName or CardMakeProxy.NAME
if(CardMakeProxy.Instance == nil) then
CardMakeProxy.Instance = self
end
if data ~= nil then
self:setData(data)
end
self:Init()
end
function CardMakeProxy:Init()
self.randomCardList = {}
self.filterRandomCardList = {}
self.chooseRandomCardList = {}
self.filterCardList = {}
self.decomposeCardList = {}
self.filterDecomposeCardList = {}
self.cardConfig = {
[self.MakeType.Random] = {name = EffectMap.Maps.Randomcard, audio = AudioMap.Maps.Randomcard, skipType = SKIPTYPE.CardRandomMake},
[self.MakeType.Compose] = {name = EffectMap.Maps.Compoundcard, audio = AudioMap.Maps.Compoundcard, skipType = SKIPTYPE.CardMake},
[self.MakeType.Decompose] = {name = EffectMap.Maps.Randomcard, audio = AudioMap.Maps.Randomcard, skipType = SKIPTYPE.CardDecompose},
}
end
function CardMakeProxy:RecvExchangeCardItemCmd(data)
self.npcid = data.npcid
local npcRole = SceneCreatureProxy.FindCreature(data.npcid)
local isSelf = data.charid == Game.Myself.data.id
local config = self.cardConfig[data.type]
--自己製作 and 跳過動畫
if isSelf then
if self:IsSkipGetEffect(config.skipType) then
self:ShowAward(data.cardid, data.items)
return
end
end
--不跳過動畫
if isSelf then
self:ShowAward(data.cardid, data.items, true)
end
if npcRole then
--找到npc
if isSelf then
self:CameraReset()
local viewPort = CameraConfig.CardMake_ViewPort
local duration = CameraConfig.NPC_Dialog_DURATION
self.cft = CameraEffectFocusTo.new(npcRole.assetRole.completeTransform, viewPort, duration)
FunctionCameraEffect.Me():Start(self.cft)
Game.Myself:Client_NoMove(true)
end
--動作
npcRole:Client_PlayAction('functional_action', nil, false)
--特效
if self.effect then
self.effect:Destroy()
self.effect = nil
end
self.effect = npcRole:PlayEffect(nil, config.name, 0, nil, nil, true)
self.effect:RegisterWeakObserver(self)
npcRole:PlayAudio(config.audio)
if isSelf then
--獲得物品界面
LeanTween.delayedCall(GameConfig.Delay.card_exchange / 1000, function ()
local id = TableUtility.ArrayPopFront(_getCardList)
if id then
self:ShowFloatAward(id)
elseif #_getItemList > 0 then
self:ShowItemPop(_getItemList)
end
self:CameraReset()
Game.Myself:Client_NoMove(false)
end)
end
else
--找不到npc,自己製作成功飄字
if isSelf then
self:ShowAward(data.cardid, data.items)
end
end
end
function CardMakeProxy:ObserverDestroyed(obj)
if obj == self.effect then
self.effect = nil
end
end
function CardMakeProxy:ShowAward(cardid, items, isDelay)
if #items > 0 then
_ArrayClear(_getItemList)
for i=1,#items do
local item = items[i]
local itemData = ItemData.new(item.guid, item.id)
itemData.num = item.count
_ArrayPushBack(_getItemList, itemData)
end
if not isDelay then
self:ShowItemPop(_getItemList)
end
else
local itemData = ItemData.new("ExchangeCard", cardid)
if isDelay then
_ArrayPushBack(_getCardList, itemData)
else
self:ShowFloatAward(itemData)
end
end
end
function CardMakeProxy:ShowFloatAward(itemData)
if BagProxy.CheckIsCardTypeItem(itemData.staticData.Type) then
FloatAwardView.addItemDatasToShow({itemData} ,function ()
local npcRole = SceneCreatureProxy.FindCreature(self.npcid)
if npcRole then
local viewdata = {
viewname = "DialogView",
dialoglist = {9},
npcinfo = npcRole,
addconfig = npcRole.data.staticData.NpcFunction,
}
FunctionNpcFunc.ShowUI(viewdata)
end
end, nil, true)
end
end
function CardMakeProxy:ShowItemPop(itemlist)
self:sendNotification(UIEvent.ShowUI, {viewname = "PopUp10View"})
self:sendNotification(SystemMsgEvent.MenuItemPop, itemlist)
end
function CardMakeProxy:CameraReset()
if self.cft ~= nil then
FunctionCameraEffect.Me():End(self.cft)
self.cft = nil
end
end
--可抽卡卡片列表
function CardMakeProxy:InitRandomCard()
_ArrayClear(self.randomCardList)
local timecheck_func = ItemUtil.CheckCardCanLotteryByTime
for i=1,#packageCheck do
local items = BagProxy.Instance:GetBagItemsByTypes(Game.Config_ItemTypeGroup[BagProxy.ItemTypeGroup.Card], packageCheck[i])
if items ~= nil then
for j=1,#items do
local bagData = items[j]
if bagData.staticData.Quality < 4 and not bagData:CheckItemCardType(Item_CardType.Raffle) then
for j=1,bagData.num do
if(timecheck_func(bagData.staticData.id))then
local data = CardRandomMakeData.new( bagData:Clone() )
_ArrayPushBack(self.randomCardList, data)
end
end
end
end
end
end
self:SortRandomCard(self.randomCardList)
end
function CardMakeProxy:GetRandomCard()
return self.randomCardList
end
--抽卡排序
function CardMakeProxy:SortRandomCard(list)
table.sort( list, CardMakeProxy._SortRandomCard)
end
function CardMakeProxy._SortRandomCard(l,r)
if l.isChoose == r.isChoose then
local staticDatal = l.itemData.staticData
local staticDatar = r.itemData.staticData
if staticDatal and staticDatar then
if staticDatal.Quality == staticDatar.Quality then
return staticDatal.id < staticDatar.id
else
return staticDatal.Quality < staticDatar.Quality
end
end
else
return l.isChoose
end
end
--根據卡片品質篩選
function CardMakeProxy:FilterRandomCard(quality)
if quality == 0 then
self:SortRandomCard(self.randomCardList)
return self.randomCardList
end
_ArrayClear(self.filterRandomCardList)
for i=1,#self.randomCardList do
local data = self.randomCardList[i]
if data.isChoose then
_ArrayPushBack(self.filterRandomCardList, data)
elseif data.itemData and data.itemData.staticData and data.itemData.staticData.Quality == quality then
_ArrayPushBack(self.filterRandomCardList, data)
end
end
self:SortRandomCard(self.filterRandomCardList)
return self.filterRandomCardList
end
function CardMakeProxy:CheckFilterRandomCardList(quality)
if quality == 0 then
return self.randomCardList
end
for i = #self.filterRandomCardList, 1, -1 do
local data = self.filterRandomCardList[i]
if not data.isChoose and data.itemData and data.itemData.staticData and data.itemData.staticData.Quality ~= quality then
table.remove(self.filterRandomCardList, i)
end
end
return self.filterRandomCardList
end
--獲得選中列表
function CardMakeProxy:GetRandomChooseList()
_ArrayClear(self.chooseRandomCardList)
local data
for i=1,#self.randomCardList do
data = self.randomCardList[i]
if data.isChoose then
_ArrayPushBack(self.chooseRandomCardList, data)
end
end
return self.chooseRandomCardList
end
--獲得選中id列表
function CardMakeProxy:GetRandomChooseIdList()
_ArrayClear(tempList)
for i=1,#self.chooseRandomCardList do
_ArrayPushBack(tempList, self.chooseRandomCardList[i].itemData.id)
end
return tempList
end
function CardMakeProxy:GetRandomCost()
local randomList = GameConfig.CardMake.RandomTip
local data
for i=1,#Table_CardRate do
_ArrayClear(tempList)
for i=1,#self.chooseRandomCardList do
_ArrayPushBack(tempList, self.chooseRandomCardList[i].itemData.staticData.Quality)
end
data = Table_CardRate[i]
for j=1,#data.quality do
TableUtility.ArrayRemove(tempList, data.quality[j])
end
if #tempList == 0 then
return data.Cost
end
end
return nil
end
function CardMakeProxy:InitRandomGetList()
local timecheck_func = ItemUtil.CheckCardCanLotteryByTime
for k,v in pairs(Table_Card) do
if(timecheck_func(v.id))then
if self:CheckType(v.Type, Item_CardType.Get) then
local data = ItemData.new("Card", v.id)
_ArrayPushBack(self.randomGetList, data)
end
end
end
table.sort(self.randomGetList, CardMakeProxy._SortRandomGet)
end
function CardMakeProxy._SortRandomGet(l,r)
local staticDatal = l.staticData
local staticDatar = r.staticData
if staticDatal and staticDatar then
if staticDatal.Quality == staticDatar.Quality then
return staticDatal.id < staticDatar.id
else
return staticDatal.Quality > staticDatar.Quality
end
end
end
function CardMakeProxy:GetRandomGetList()
if self.randomGetList == nil then
self.randomGetList = {}
self:InitRandomGetList()
end
return self.randomGetList
end
--可製作卡片列表
function CardMakeProxy:InitCard()
self.cardList = {}
for k,v in pairs(Table_Compose) do
if v.Category == 7 then
local data = CardMakeData.new(k)
_ArrayPushBack(self.cardList, data)
end
end
end
function CardMakeProxy:GetCard()
return self.cardList
end
function CardMakeProxy:SortCard(list)
table.sort( list, CardMakeProxy._SortCard)
end
function CardMakeProxy._SortCard(l,r)
local composel = Table_Compose[l.id]
local composer = Table_Compose[r.id]
local staticDatal = l.itemData.staticData
local staticDatar = r.itemData.staticData
if staticDatal and staticDatar then
if composel.IsTop == composer.IsTop then
if staticDatal.Quality == staticDatar.Quality then
return staticDatal.id < staticDatar.id
else
return staticDatal.Quality > staticDatar.Quality
end
else
return composel.IsTop == 1
end
end
end
function CardMakeProxy:FilterCard(type)
if self.cardList == nil then
self:InitCard()
end
_ArrayClear(self.filterCardList)
local timecheck_func = ItemUtil.CheckCardCanComposeByTime
if(type == 0)then
for i=1,#self.cardList do
local d = self.cardList[i];
if( timecheck_func(d.itemData.staticData.id) )then
_ArrayPushBack(self.filterCardList, d)
end
end
else
for i=1,#self.cardList do
local data = self.cardList[i]
if data.itemData and data.itemData.staticData and data.itemData.staticData.Type == type then
if( timecheck_func(data.itemData.staticData.id) )then
_ArrayPushBack(self.filterCardList, data)
end
end
end
end
self:SortCard(self.filterCardList)
return self.filterCardList
end
function CardMakeProxy:CanMake()
if self.chooseData then
return self.chooseData:CanMake()
else
return false
end
end
--篩選下拉框
function CardMakeProxy:GetFilter(filterData)
_ArrayClear(filter)
for k,v in pairs(filterData) do
table.insert(filter,k)
end
table.sort( filter, function (l,r)
return l < r
end )
return filter
end
--是否高級卡片
function CardMakeProxy:IsCostGreatCard(composeId)
local data = Table_Compose[composeId]
if data then
for i=1,#data.BeCostItem do
local itemid = data.BeCostItem[i].id
if Table_Card[itemid] ~= nil then
local staticData = Table_Item[itemid]
if staticData and staticData.Quality >= 4 then
return true
end
end
end
end
return false
end
function CardMakeProxy:CheckType(type,index)
if type == nil or index == nil then
return false
end
return type & index > 0
end
function CardMakeProxy:SetChoose(data)
self.chooseData = data
end
function CardMakeProxy:GetChoose()
return self.chooseData
end
function CardMakeProxy:CheckCanMake(materialData)
if materialData and self.chooseData then
return self.chooseData:CheckCanMake(materialData)
end
return false
end
function CardMakeProxy:IsSkipGetEffect(type)
return LocalSaveProxy.Instance:GetSkipAnimation(type)
end
function CardMakeProxy:GetItemNumByStaticID(itemid)
local _BagProxy = BagProxy.Instance
local count = 0
for i=1,#packageCheck do
count = count + _BagProxy:GetItemNumByStaticID(itemid, packageCheck[i])
end
return count
end
function CardMakeProxy:InitDecomposeCard()
_ArrayClear(self.decomposeCardList)
local _BagProxy = BagProxy.Instance
for i=1,#packageCheck do
local items = _BagProxy:GetBagItemsByTypes(Game.Config_ItemTypeGroup[BagProxy.ItemTypeGroup.Card], packageCheck[i])
if items ~= nil then
for j=1,#items do
local bagData = items[j]
if bagData.staticData.Quality <= 4 and not bagData:CheckItemCardType(Item_CardType.Decompose) then
_ArrayPushBack(self.decomposeCardList, bagData:Clone())
end
end
end
end
self:SortDecomposeCard(self.decomposeCardList)
end
function CardMakeProxy:GetDecomposeCard()
return self.decomposeCardList
end
function CardMakeProxy:FilterDecomposeCard(quality)
if quality == 0 then
self:SortDecomposeCard(self.decomposeCardList)
return self.decomposeCardList
end
_ArrayClear(self.filterDecomposeCardList)
for i=1,#self.decomposeCardList do
local data = self.decomposeCardList[i]
if data.staticData.Quality == quality then
_ArrayPushBack(self.filterDecomposeCardList, data)
end
end
self:SortDecomposeCard(self.filterDecomposeCardList)
return self.filterDecomposeCardList
end
function CardMakeProxy:SortDecomposeCard(list)
table.sort( list, CardMakeProxy._SortDecomposeCard)
end
function CardMakeProxy._SortDecomposeCard(l,r)
local staticDatal = l.staticData
local staticDatar = r.staticData
if staticDatal and staticDatar then
if staticDatal.Quality == staticDatar.Quality then
return staticDatal.id < staticDatar.id
else
return staticDatal.Quality < staticDatar.Quality
end
end
end
function CardMakeProxy:GetDecomposeMaterialItemData()
if self.decomposeMaterialItemData == nil then
self.decomposeMaterialItemData = ItemData.new("CardDecompose", GameConfig.Card.decompose_item_id)
end
return self.decomposeMaterialItemData
end