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

1005 lines
24 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("BagData")
autoImport("FashionBagData")
autoImport("RoleEquipBagData")
autoImport("CardBagData")
autoImport("Table_ItemBeTransformedWay")
autoImport('ItemFun')
local BagProxy = class('BagProxy', pm.Proxy)
BagProxy.Instance = nil;
BagProxy.NAME = "BagProxy"
BagProxy.BagType = {
--主揹包
MainBag = SceneItem_pb.EPACKTYPE_MAIN,
--人物身上裝備揹包
RoleEquip = SceneItem_pb.EPACKTYPE_EQUIP,
--人物身上時裝揹包
RoleFashionEquip = SceneItem_pb.EPACKTYPE_FASHIONEQUIP,
--倉庫揹包
Storage = SceneItem_pb.EPACKTYPE_STORE,
--卡片揹包
Card = SceneItem_pb.EPACKTYPE_CARD,
--時裝揹包
Fashion = SceneItem_pb.EPACKTYPE_FASHION,
--個人倉庫揹包
PersonalStorage = SceneItem_pb.EPACKTYPE_PERSONAL_STORE or 7,
--臨時揹包
Temp = SceneItem_pb.EPACKTYPE_TEMP_MAIN or 8,
--手推車揹包
Barrow = SceneItem_pb.EPACKTYPE_BARROW or 9,
--任務揹包
Quest = SceneItem_pb.EPACKTYPE_QUEST or 10,
--料理揹包
Food = SceneItem_pb.EPACKTYPE_FOOD or 11,
--寵物蛋揹包
Pet = SceneItem_pb.EPACKTYPE_PET or 12,
--符文揹包
Rune = SceneItem_pb.EPACKTYPE_RUNE or 13,
}
BagProxy.ItemTypeGroup = {
Card = 2
}
BagProxy.EquipUpgrade_RefreshBagType =
{
[1] = 1,
[2] = 1,
};
--玩家揹包數據管理
function BagProxy:ctor(proxyName, data)
self.proxyName = proxyName or BagProxy.NAME
if(BagProxy.Instance == nil) then
BagProxy.Instance = self
end
if data ~= nil then
self:setData(data)
end
self:InitItemKind()
self.bagData = BagData.new({
{data = GameConfig.ItemPage[1],class = BagEquipTab},
{data = GameConfig.ItemPage[2]},
{data = GameConfig.ItemPage[3]},
{data = GameConfig.ItemPage[4]}
},nil,BagProxy.BagType.MainBag)
self:InitFashionBag()
self.repositoryBag=BagData.new({
{data = GameConfig.ItemPage[1],class = BagEquipTab},
{data = GameConfig.ItemPage[2]},
{data = GameConfig.ItemPage[3]},
{data = GameConfig.ItemPage[4]}
},nil,BagProxy.BagType.Storage)
self.personalRepositoryBag=BagData.new({
{data = GameConfig.ItemPage[1],class = BagEquipTab},
{data = GameConfig.ItemPage[2]},
{data = GameConfig.ItemPage[3]},
{data = GameConfig.ItemPage[4]}
},nil,BagProxy.BagType.PersonalStorage)
self.barrowBag = BagData.new({
{data = GameConfig.ItemPage[1],class = BagEquipTab},
{data = GameConfig.ItemPage[2]},
{data = GameConfig.ItemPage[3]},
{data = GameConfig.ItemPage[4]}
},nil,BagProxy.BagType.Barrow);
self.tempBagData = BagData.new(nil,nil,BagProxy.BagType.Temp)
self.questBagData = BagData.new(nil,nil,BagProxy.BagType.Quest);
self.petBagData = BagData.new(nil,nil,BagProxy.BagType.Pet);
local FoodPackPage = GameConfig.FoodPackPage;
if(FoodPackPage)then
self.foodBagData = BagData.new({
{data = FoodPackPage[1]},
{data = FoodPackPage[2]},
},nil,BagProxy.BagType.Food);
end
--符文揹包
local RunePackPage = GameConfig.RunePackPage;
if(RunePackPage)then
self.RuneBagData = BagData.new({
{data = RunePackPage[1]},
{data = RunePackPage[2]},
},nil,BagProxy.BagType.Rune);
end
self.bagMap = {}
self.bagMap[BagProxy.BagType.MainBag] = self.bagData
self.bagMap[BagProxy.BagType.RoleEquip] = self.roleEquip
self.bagMap[BagProxy.BagType.RoleFashionEquip] = self.fashionEquipBag
self.bagMap[BagProxy.BagType.Storage]=self.repositoryBag
self.bagMap[BagProxy.BagType.PersonalStorage]=self.personalRepositoryBag
self.bagMap[BagProxy.BagType.Temp]=self.tempBagData
self.bagMap[BagProxy.BagType.Fashion] = self.fashionBag
self.bagMap[BagProxy.BagType.Card]=self.cardBag
self.bagMap[BagProxy.BagType.Barrow]=self.barrowBag
self.bagMap[BagProxy.BagType.Quest]=self.questBagData
self.bagMap[BagProxy.BagType.Food]=self.foodBagData
self.bagMap[BagProxy.BagType.Pet]=self.petBagData
self.bagMap[BagProxy.BagType.Rune]=self.RuneBagData
FunctionCDCommand.Me():StartCDProxy(BagCDRefresher,33)
FunctionCDCommand.Me():StartCDProxy(AssociateRemoveFunctionCD,16,self)
--貨幣
self._moneyGet = {}
self._moneyGet[GameConfig.MoneyId.Zeny] = function ()
return MyselfProxy.Instance:GetROB()
end
end
function BagProxy:InitFashionBag()
local tabs = {}
for i=1,#GameConfig.ItemFashion do
tabs[#tabs+1] = {data = GameConfig.ItemFashion[i]}
end
self.fashionBag = FashionBagData.new(tabs,BagFashionTab,BagProxy.BagType.Fashion)
self.fashionEquipBag = RoleEquipBagData.new(nil,nil,BagProxy.BagType.RoleFashionEquip);
self.roleEquip = RoleEquipBagData.new(nil,nil,BagProxy.BagType.RoleEquip)
tabs = {}
for i=1,#GameConfig.CardPage do
tabs[#tabs+1] = {data = GameConfig.CardPage[i]}
end
self.cardBag = CardBagData.new(tabs,nil,BagProxy.BagType.Card)
end
function BagProxy:InitItemKind()
BagProxy.fashionType = {}
local types = nil
for i=1,#GameConfig.ItemFashion do
types = GameConfig.ItemFashion[i].types
for k,v in pairs(types) do
BagProxy.fashionType[v] = true
end
end
end
function BagProxy:onRegister()
end
function BagProxy:onRemove()
end
function BagProxy:SetIsNewFlag(package,value)
local bag = self.bagMap[package]
local items = bag:GetItems()
for i=1,#items do
items[i].isNew = value
end
end
function BagProxy:GetBagByType(t)
return self.bagMap[t]
end
function BagProxy:GetBagUseTab()
return self.bagData:GetTab(GameConfig.ItemPage[4])
end
function BagProxy:GetBagEquipTab()
return self.bagData:GetTab(GameConfig.ItemPage[1])
end
function BagProxy:GetBagEquipItems()
local items = self.bagData:GetItems();
if(self.equips == nil)then
self.equips = {};
else
TableUtility.ArrayClear(self.equips);
end
for i=1,#items do
if(items[i].equipInfo)then
table.insert(self.equips, items[i]);
end
end
return self.equips;
end
function BagProxy:GetBagChipTab()
return self.bagData:GetTab(GameConfig.ItemPage[3])
end
function BagProxy:GetMainBag()
return self.bagData
end
function BagProxy:GetRepositoryBagData()
return self.repositoryBag
end
function BagProxy:GetPersonalRepositoryBagData()
return self.personalRepositoryBag
end
function BagProxy:GetRoleEquipBag()
return self.roleEquip
end
-- 根據某一型別返回揹包中的道具
function BagProxy:GetBagItemsByType(type, bagType)
local bagData = self:GetBagByType(bagType) or self.bagData;
local bagItems = bagData:GetItems();
local result = {};
for _,item in pairs(bagItems)do
if(item.staticData and item.staticData.Type == type)then
table.insert(result, item);
end
end
return result;
end
-- 根據某一型別返回揹包中的道具
local tmpTypes = {}
function BagProxy:GetBagItemsByTypes(types, bagType)
if(types == nil or type(types)~='table') then
return nil
end
bagType = bagType or BagProxy.BagType.MainBag
local bagItems = self.bagMap[bagType]:GetItems();
local result = {};
TableUtility.TableClear(tmpTypes)
for k,v in pairs(types) do
tmpTypes[v] = 1
end
for _,item in pairs(bagItems)do
if(item.staticData and tmpTypes[item.staticData.Type] ~=nil)then
table.insert(result, item);
end
end
return result;
end
--獲取卡片揹包中某一ID物品的數量
function BagProxy:GetItemNumByStaticIDInCard(staticID)
return self:GetItemNumByStaticID(staticID,BagProxy.BagType.Card)
end
-- 獲取揹包+倉庫里的道具數量
function BagProxy:GetAllItemNumByStaticID(staticID)
local itemInMain = self:GetItemNumByStaticID(staticID);
local itemInStore = self:GetItemNumByStaticID(staticID, BagProxy.BagType.Storage);
local itemInPersonalStore = self:GetItemNumByStaticID(staticID, BagProxy.BagType.PersonalStorage)
return itemInMain + itemInStore + itemInPersonalStore
end
function BagProxy:GetItemByGuid(guid, bagType)
local type_bagType = type(bagType);
if(type_bagType == "number")then
local bagData = self.bagMap[bagType];
return bagData and bagData:GetItemByGuid(guid);
elseif(type_bagType == "table")then
for i=1,#bagType do
local item = self:GetItemByGuid(guid, bagType[i]);
if(item ~= nil)then
return item;
end
end
else
for _,bagData in pairs(self.bagMap)do
local item = bagData:GetItemByGuid(guid);
if(item)then
return item;
end
end
end
end
--通用獲取某揹包型別的揹包中某靜態id物品的數量 bagType可以為table
function BagProxy:GetItemNumByStaticID(staticID,bagType)
local func = self._moneyGet[staticID]
if(func~=nil) then
return func()
end
local staticData = Table_Item[staticID]
local v_type = type(bagType);
if(v_type== "nil")then
bagType = BagProxy.BagType.MainBag;
elseif(v_type== "table")then
local count = 0;
for i=1,#bagType do
count = count + self:GetItemNumByStaticID( staticID, bagType[i]);
end
return count;
end
local bag = self.bagMap[bagType]
if(staticData) then
local tab = bag.itemMapTab[staticData.Type] or bag.wholeTab
return tab:GetItemNumByStaticID(staticID)
end
return 0
end
--通用獲取某揹包型別的揹包中某靜態id物品的數量
function BagProxy:GetItemsByStaticID(staticID,bagType)
local staticData = Table_Item[staticID]
bagType = bagType or BagProxy.BagType.MainBag
local bag = self.bagMap[bagType]
if(staticData) then
local tab = bag.itemMapTab[staticData.Type] or bag.wholeTab
return tab:GetItemsByStaticID(staticID)
end
return nil
end
-- 根據靜態ID 獲取揹包中最新的道具
function BagProxy:GetNewestItemByStaticID(staticID, bagType)
local items = self:GetItemsByStaticID(staticID, bagType);
local resultItem;
if(items)then
local maxtime = 0;
for i=1,#items do
if(items[i].createtime > maxtime)then
maxtime = items[i].createtime;
resultItem = items[i];
end
end
end
return resultItem;
end
function BagProxy:GetItemNumByStaticIDs(staticIDs,page)
local tab = self.bagData:GetTab(page)
if(tab) then
return tab:GetItemNumByStaticIDs(staticIDs)
end
return nil
end
--篩選能夠裝備卡片的裝備
-- Type 道具型別item 表 Type
-- cardType 卡片型別(區別不同等級,同一型別卡片)
function BagProxy:FilterEquipedCardItems(Type)
local filterItems = {}
self:FilterEquipedCardItemsByBagType(BagProxy.BagType.RoleEquip,Type,filterItems)
self:FilterEquipedCardItemsByBagType(BagProxy.BagType.MainBag,Type,filterItems)
return filterItems
end
function BagProxy:FilterEquipedCardItemsByBagType( bagType,Type,filterItems )
-- body
local items = self.bagMap[bagType]:GetItems()
local item
for i=1,#items do
item = items[i]
-- print("Type:"..Type.." staticData.type"..item.staticData.Type.." cardSlotNum:"..item.cardSlotNum.."")
if(self.CheckEquipTypeInCardComposeType(Type,item.staticData.Type) and item.cardSlotNum ~= nil and item.cardSlotNum > 0 )then
filterItems[#filterItems+1] = item
end
end
end
function BagProxy.CheckIsCoinTypeItem( type)
-- body
local tb = Table_ItemType[type]
if(tb and tb.EffectShow)then
return tb.EffectShow & 2 > 0;
else
printRed("can't find itemType data by type:"..(type or 0))
end
end
function BagProxy.CheckIs3DTypeItem( type)
-- body
local tb = Table_ItemType[type]
if(tb and tb.EffectShow)then
return tb.EffectShow & 1 > 0;
else
printRed("can't find itemType data by type:"..(type or 0))
end
end
function BagProxy.CheckIsCardTypeItem(type)
--body
local tb = Table_ItemType[type]
if(tb and tb.EffectShow)then
return tb.EffectShow & 4 > 0;
else
printRed("can't find itemType data by type:"..(type or 0))
end
end
function BagProxy.CheckIsFoodTypeItem(type)
--body
local tb = Table_ItemType[type]
if(tb and tb.EffectShow)then
return tb.EffectShow & 8 > 0;
else
printRed("can't find itemType data by type:"..(type or 0))
end
end
function BagProxy.CheckEquipTypeInCardComposeType( type ,equipType)
local types = GameConfig.CardComposeType[type].types
for i=1,#types do
if(types[i] == equipType)then
return true
end
end
end
function BagProxy:GetItemByStaticID(staticID, bagType)
local staticData = Table_Item[staticID]
if(staticData) then
bagType = bagType or BagProxy.BagType.MainBag;
local bagData = self.bagMap[bagType];
local tab = bagData.itemMapTab[staticData.Type]
tab = tab or bagData.wholeTab;
return tab:GetItemByStaticID(staticID)
end
return nil
end
function BagProxy:GetItemByStaticIDWithoutCard(staticID)
local staticData = Table_Item[staticID]
if(staticData) then
local tab = self.bagData.itemMapTab[staticData.Type]
if(tab)then
local items = tab:GetItemsByStaticID(staticID)
if(items and #items>0)then
for i=1,#items do
local noEquipCard = not items[i]:HasEquipedCard()
local noStrengthlv = true
local equipInfo = items[i].equipInfo
if(equipInfo)then
noStrengthlv = equipInfo.strengthlv == 0
end
if(noEquipCard and noStrengthlv)then
return items[i]
end
end
end
end
end
return nil
end
function BagProxy:SetProToEquipTab( pro )
self:GetBagEquipTab():SetProfess(pro)
end
function BagProxy:SetToEquipPos(pos)
self.ToEquipPos = pos;
end
function BagProxy:GetToEquipPos()
return self.ToEquipPos;
end
function BagProxy:GetNowActiveItem()
return self.bagData:GetActiveItem();
end
function BagProxy.CheckEquipIsClean(item, expRefine)
local equipInfo = item.equipInfo;
local enchantInfo = item.enchantInfo;
local nocards = not item:HasEquipedCard();
if(equipInfo)then
if(equipInfo.strengthlv <= 0
and equipInfo.strengthlv2 <= 0
and equipInfo.equiplv <= 0
and (nocards)
and (not enchantInfo or not enchantInfo:HasAttri()))then
if(expRefine == true)then
return true;
else
return equipInfo.refinelv <= 0;
end
end
end
return false;
end
function BagProxy:CheckCanReplace(staticID, material_checkFunc, filter_guid)
local composeId = Table_Equip[staticID] and Table_Equip[staticID].SubstituteID;
if(composeId)then
local composeData = Table_Compose[composeId];
if(composeData)then
return true, composeData.Product.id;
end
end
return false;
end
function BagProxy:ServerSetBagUpLimit(bagType, limit)
if(not bagType)then
return;
end
local bagData = self.bagMap[bagType];
if(bagData)then
local msgId;
if(bagType == BagProxy.BagType.MainBag)then
msgId = 3103;
elseif(bagType == BagProxy.BagType.PersonalStorage)then
msgId = 3109;
end
if(msgId)then
local oldlimit = bagData:GetUplimit();
if(oldlimit~=0 and limit > oldlimit)then
MsgManager.ShowMsgByIDTable(msgId , { limit - oldlimit });
end
end
bagData:SetUplimit(limit)
end
end
function BagProxy:GetBagUpLimit(bagType)
if(not bagType)then
return;
end
local bagData = self.bagMap[bagType];
if(bagData)then
return bagData:GetUplimit();
end
end
function BagProxy:CheckBagIsFull(bagType)
bagType = bagType or BagProxy.BagType.MainBag;
local bagData = self.bagMap[bagType];
if(bagData)then
return bagData:IsFull();
end
return false;
end
function BagProxy:GetItemFreeSpaceByStaticId(bagType, itemid)
bagType = bagType or BagProxy.BagType.MainBag;
local bagData = self.bagMap[bagType];
if(bagData)then
return bagData:GetItemFreeSpaceByStaticId(itemid);
end
return 0;
end
-- moneyType always can putinBag
function BagProxy:CheckItemCanPutIn(bagType, itemid, num, withTip, tipId)
local itype = itemid and Table_Item[itemid] and Table_Item[itemid].Type;
local moneyTypeValues = ProtoCommon_pb.EMONEYTYPE.values;
for i=1,#moneyTypeValues do
local value = moneyTypeValues[i] and moneyTypeValues[i].number;
if(itype == value)then
return true;
end
end
local spaceNum = self:GetItemFreeSpaceByStaticId(bagType, itemid);
num = num or 1;
local can = spaceNum >= num;
if(not can and withTip)then
tipId = tipId or 3101;
MsgManager.ShowMsgByIDTable(tipId);
end
return can;
end
local tempEggs = {};
local PACKAGE_CHECK = GameConfig.PackageMaterialCheck.pet_workspace
function BagProxy:GetMyPetEggs()
TableUtility.ArrayClear(tempEggs)
for i=1,#PACKAGE_CHECK do
local bagData = self.bagMap[PACKAGE_CHECK[i]];
if(bagData)then
local items = bagData:GetItems();
for i=1,#items do
if(items[i].petEggInfo and (items[i].petEggInfo.name~=nil and items[i].petEggInfo.name~=""))then
table.insert(tempEggs, items[i]);
end
end
end
end
return tempEggs
end
local initEquipUpdate = false;
local initEquipReplace = false;
local upgradeProductKeyMap = {};
local replaceProductKeyMap = {};
local suitIdsMap = {};
function BagProxy.GetSuitIds(itemid)
local ids = suitIdsMap[itemid];
if(ids ~= nil)then
return ids;
end
ids = {};
suitIdsMap[itemid] = ids;
local s1 = Table_Equip[itemid] and Table_Equip[itemid].SuitID;
for i=1,#s1 do
table.insert(ids, s1[i]);
end
local surEquips = BagProxy.Instance:GetSurceEquipIds(itemid);
for i=1,#surEquips do
local equipId = surEquips[i];
local suitids = BagProxy.GetSuitIds(equipId);
for i=1,#suitids do
if(TableUtility.ArrayFindIndex(ids, suitids[i]) == 0)then
table.insert(ids, suitids[i]);
end
end
end
return ids;
end
function BagProxy:GetSurceEquipIds(equipId)
if(self.upgradeProductKeyMap == nil or self.replaceProductKeyMap == nil)then
self.upgradeProductKeyMap = {};
for upgradeid, upgradeData in pairs(Table_EquipUpgrade)do
local productId = upgradeData.Product;
if(productId)then
if(self.upgradeProductKeyMap[productId] == nil)then
self.upgradeProductKeyMap[productId] = {};
end
table.insert(self.upgradeProductKeyMap[productId], upgradeData);
end
end
self.replaceProductKeyMap = {};
for id, equipData in pairs(Table_Equip)do
if(equipData.SubstituteID)then
local composeData = Table_Compose[equipData.SubstituteID];
local productId = composeData and composeData.Product.id;
if(productId == nil)then
error(string.format("ComposeData:%s not Find ProductId", equipData.SubstituteID));
return;
end
if(self.replaceProductKeyMap[productId] == nil)then
self.replaceProductKeyMap[productId] = {};
end
table.insert(self.replaceProductKeyMap[productId], composeData);
end
end
self.sourceEquipMap = {};
end
local equipIds = self.sourceEquipMap[equipId];
if(equipIds == nil)then
equipIds = {};
self.sourceEquipMap[equipId] = equipIds;
local upgradeDatas = self.upgradeProductKeyMap[equipId];
if(upgradeDatas)then
for i=1,#upgradeDatas do
local baseid = upgradeDatas[i].id;
if(TableUtility.ArrayFindIndex(equipIds, baseid) == 0)then
table.insert(equipIds, baseid)
end
local surIds = BagProxy.Instance:GetSurceEquipIds(baseid);
if(surIds)then
for j=1,#surIds do
if(TableUtility.ArrayFindIndex(equipIds, surIds[j]) == 0)then
table.insert(equipIds, surIds[j]);
end
end
end
end
end
local replaceDatas = self.replaceProductKeyMap[ equipId ];
if(replaceDatas)then
for i=1,#replaceDatas do
local baseid = replaceDatas[i].BeCostItem[1].id;
if(TableUtility.ArrayFindIndex(equipIds, baseid) == 0)then
table.insert(equipIds, baseid)
end
local surIds = BagProxy.Instance:GetSurceEquipIds(baseid);
if(surIds)then
for j=1,#surIds do
if(TableUtility.ArrayFindIndex(equipIds, surIds[j]) == 0)then
table.insert(equipIds, surIds[j]);
end
end
end
end
end
end
return equipIds;
end
local suitEquipMap = {};
function BagProxy:MatchEquipSuitBySuitId(suitId)
local suitData = Table_EquipSuit[suitId];
if(suitData == nil)then
return 0;
end
local suitEquips = suitData.Suitid;
for i=1,#suitEquips do
suitEquipMap[ suitEquips[i] ] = 0;
end
local items = self.roleEquip:GetItems();
for i=1,#items do
local itemid = items[i].staticData.id;
local find = false;
if(suitEquipMap[itemid])then
find = true;
suitEquipMap[itemid] = suitEquipMap[itemid] + 1;
end
if(not find)then
local surEquips = self:GetSurceEquipIds(itemid);
if(surEquips)then
for j=1,#surEquips do
local surId = surEquips[j];
if( suitEquipMap[surId])then
find = true;
suitEquipMap[surId] = suitEquipMap[surId] + 1;
break;
end
end
end
end
end
local matchCount = 0;
for k,v in pairs(suitEquipMap)do
if(v > 0)then
matchCount = matchCount + 1;
end
end
TableUtility.TableClear(suitEquipMap);
return matchCount;
end
local initUnlockSpace;
function BagProxy:GetBagUnlockSpaceData()
if(not initUnlockSpace)then
initUnlockSpace = true;
self.unloceSpaceLvs = {};
for id,data in pairs(Table_UnlockSpace)do
table.insert(self.unloceSpaceLvs, data.id);
end
table.sort(self.unloceSpaceLvs, function (ida, idb)
return ida < idb;
end)
end
local mylv = MyselfProxy.Instance:RoleLevel();
local index = 0;
for i=1,#self.unloceSpaceLvs do
if(mylv < self.unloceSpaceLvs[i])then
index = i;
break;
end
end
return Table_UnlockSpace[ self.unloceSpaceLvs[index] ];
end
function BagProxy:CheckFashionCanMake(itemid)
local cid = Table_ItemBeTransformedWay[itemid] and Table_ItemBeTransformedWay[itemid].composeWay;
if(cid == nil)then
-- error(tostring(cid) .. " not Fashion");
return false;
end
local costData = Table_Compose[cid]
if(costdata)then
for i=1,#costdata.BeCostItem do
local hasNum = self:GetItemByStaticID(costdata.BeCostItem[i].id);
if(hasNum < costdata.BeCostItem[i].num)then
return false;
end
end
return true;
end
end
function BagProxy:GetMaterialItems_ByItemId(itemid, bagTypes, matchCall, matchCallParam)
if(bagTypes == nil)then
return self:GetItemsByStaticID(itemid);
else
local result = {};
local bagData, mItems;
for i=1, #bagTypes do
mItems = self:GetItemsByStaticID(itemid, bagTypes[i]);
if(mItems)then
for j=1,#mItems do
if(matchCall)then
matchCall(matchCallParam, mItems[j]);
end
table.insert(result, mItems[j])
end
end
end
return result;
end
end
local upgrade_checkbagtypes_map;
function BagProxy:RefreshUpgradeCheckInfo(bagData)
if(bagData == nil)then
return;
end
if(upgrade_checkbagtypes_map == nil)then
upgrade_checkbagtypes_map = {};
local upgradeCheckTypes = EquipInfo.GetEquipCheckTypes();
for i=1,#upgradeCheckTypes do
upgrade_checkbagtypes_map[ upgradeCheckTypes[i] ] = 1;
end
end
if(upgrade_checkbagtypes_map[bagData.type] == nil)then
return;
end
local bagData, bagTab, items;
for bagType,v in pairs(self.EquipUpgrade_RefreshBagType)do
bagData = self.bagMap[bagType];
bagTab = bagData:GetTab(GameConfig.ItemPage[1]) or bagData.wholeTab;
items = bagTab:GetItems();
for j=1,#items do
if(items[j].equipInfo)then
items[j].equipInfo:SetUpgradeCheckDirty();
end
end
end
end
BagProxy.MaterialCheckBag_Type =
{
Produce = "produce",
Upgrade = "upgrade",
Equipexchange = "equipexchange",
Exchange = "exchange",
Refine = "refine",
Repair = "repair",
Enchant = "enchant",
Guilddonate = "guilddonate",
Restore = "restore",
Shop = "shop",
adventureProduce = "adventureProduce",
}
function BagProxy:Get_PackageMaterialCheck_BagTypes(key)
local packageMaterialCheck = GameConfig.PackageMaterialCheck;
if(packageMaterialCheck == nil)then
return;
end
if(packageMaterialCheck[key] == nil)then
return packageMaterialCheck.default;
end
return packageMaterialCheck[key];
end
function BagProxy:GetMarryInviteLetters()
local result = {};
local mainBag = self:GetBagByType(BagProxy.BagType.MainBag);
local items = mainBag:GetItems();
for i=1,#items do
if(items[i]:IsMarryInviteLetter())then
table.insert(result, items[i]);
end
end
return result;
end
function BagProxy:NeedShowEnchantTip()
FunctionUnLockFunc.Me():CheckCanOpenByPanelId(305, withTip, unlockType)
end
-- 一鍵存入
local t_srched = {};
function BagProxy:CollectQuickStorageItems(ref_recv)
if(ref_recv == nil)then
error("ref_recv is nil");
end
local items = self.personalRepositoryBag:GetItems();
if(items == nil)then
return;
end
for i=1, #items do
local sid = items[i].staticData.id;
if(items[i]:CanStack())then
if(t_srched[sid] == nil)then
t_srched[sid] = 1;
local bitems = self.bagData.wholeTab:GetItemsByStaticID(sid, BagProxy.BagType.MainBag);
if(bitems)then
for k,bitem in pairs(bitems)do
if(bitem:CanStack())then
table.insert(ref_recv, bitem);
end
end
end
end
end
end
TableUtility.TableClear(t_srched);
end
-- 一键出售
function BagProxy:CollectQuickSaleItems(ref_recv)
if(ref_recv == nil)then
error("ref_recv is nil");
end
local items = self.bagData:GetItems();
if(items == nil)then
return;
end
local item, sData;
for i=1,#items do
item = items[i];
if(self:CanQuickSell(item))then
table.insert(ref_recv, item);
end
end
end
function BagProxy:CanQuickSell(item)
if(item == nil)then
return false;
end
if(item.equipInfo == nil)then
return false;
end
local sData = item.staticData;
if(not ItemFun.canQuickSell(sData.id))then
return false;
end
if(item.equipInfo.refinelv >= 5)then
return false;
end
local equipedCards = item.equipedCardInfo;
if(equipedCards ~= nil)then
for i=1,item.cardSlotNum do
if(equipedCards[i])then
return false;
end
end
end
if(item.equipInfo.strengthlv > 0)then
return false;
end
local enchantInfo = item.enchantInfo;
local enchantAttrs = enchantInfo and enchantInfo:GetEnchantAttrs();
if(enchantAttrs and #enchantAttrs > 0)then
return false;
end
return true;
end
return BagProxy