1005 lines
24 KiB
Plaintext
1005 lines
24 KiB
Plaintext
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 |