416 lines
14 KiB
Plaintext
416 lines
14 KiB
Plaintext
local ItemHandleCommand = class("ItemHandleCommand",pm.SimpleCommand)
|
|
|
|
function ItemHandleCommand:execute(note)
|
|
if(note~=nil)then
|
|
self.cdRefreshcmd = FunctionCDCommand.Me():GetAssiRemoveProxy(BagProxy.Instance)
|
|
self.equipBag = BagProxy.Instance.bagMap[SceneItem_pb.EPACKTYPE_EQUIP]
|
|
self.equipItems = nil
|
|
self.profess = Game.Myself.data.userdata:Get(UDEnum.PROFESSION)
|
|
-- print(note.name)
|
|
if(note.name == ServiceEvent.ItemPackageItem) then
|
|
self:ReInit(note)
|
|
elseif(note.name == ServiceEvent.ItemPackageUpdate)then
|
|
self:Update(note)
|
|
elseif(note.name == ServiceEvent.ItemPackageSort)then
|
|
self:ReArrange(note)
|
|
end
|
|
end
|
|
end
|
|
|
|
function ItemHandleCommand:ReInit(note)
|
|
local PackageItem = note.body
|
|
local bagData = BagProxy.Instance.bagMap[PackageItem.type]
|
|
if(bagData ~=nil) then
|
|
local t = os.clock()
|
|
-- bagData:Reset()
|
|
bagData:UpdateItems(PackageItem.data)
|
|
bagData:SetUplimit(PackageItem.maxslot);
|
|
self:ForEachInitItems(bagData,PackageItem.data)
|
|
|
|
|
|
--測試使用符文揹包填充著揹包物品
|
|
if(PackageItem.type == SceneItem_pb.EPACKTYPE_MAIN) then
|
|
local RuneBagData = BagProxy.Instance.bagMap[SceneItem_pb.EPACKTYPE_RUNE]
|
|
if(RuneBagData ~=nil) then
|
|
-- bagData:Reset()
|
|
local serverData = PackageItem.data
|
|
local runeDatas = {}
|
|
for i=1,#serverData do
|
|
if(serverData[i].base.type == 550 or serverData[i].base.type == 560) then
|
|
table.insert(runeDatas,serverData[i])
|
|
end
|
|
end
|
|
if(#runeDatas>0) then
|
|
RuneBagData:UpdateItems(runeDatas)
|
|
RuneBagData:SetUplimit(PackageItem.maxslot);
|
|
self:ForEachInitItems(RuneBagData,runeDatas)
|
|
end
|
|
|
|
|
|
end
|
|
end
|
|
|
|
--print("remove nums.."..#PackageItem.delItems)
|
|
-- print("update nums.."..#PackageItem.data)
|
|
if(PackageItem.type == SceneItem_pb.EPACKTYPE_MAIN) then
|
|
self.facade:sendNotification(ItemEvent.ItemUpdate)
|
|
self.facade:sendNotification(ItemEvent.RuneUpdate)
|
|
EventManager.Me():PassEvent(ItemEvent.RuneUpdate)
|
|
elseif(PackageItem.type == SceneItem_pb.EPACKTYPE_STORE) then
|
|
-- 在最後一個揹包初始化的時候更新套裝資訊(倉庫揹包)
|
|
self.facade:sendNotification(ItemEvent.ItemUpdate)
|
|
elseif(PackageItem.type == SceneItem_pb.EPACKTYPE_PERSONAL_STORE) then
|
|
-- 在最後一個揹包初始化的時候更新套裝資訊(倉庫揹包)
|
|
self.facade:sendNotification(ItemEvent.ItemUpdate)
|
|
elseif(PackageItem.type == SceneItem_pb.EPACKTYPE_EQUIP)then
|
|
self.facade:sendNotification(ItemEvent.EquipUpdate)
|
|
elseif(PackageItem.type == SceneItem_pb.EPACKTYPE_FASHIONEQUIP)then
|
|
self.facade:sendNotification(ItemEvent.EquipUpdate)
|
|
elseif(PackageItem.type == SceneItem_pb.EPACKTYPE_FASHION) then
|
|
self.facade:sendNotification(ItemEvent.FashionUpdate)
|
|
elseif(PackageItem.type == SceneItem_pb.EPACKTYPE_CARD) then
|
|
self.facade:sendNotification(ItemEvent.CardBagUpdate)
|
|
elseif(PackageItem.type == SceneItem_pb.EPACKTYPE_TEMP_MAIN) then
|
|
self.facade:sendNotification(ItemEvent.TempBagUpdate)
|
|
elseif(PackageItem.type == SceneItem_pb.EPACKTYPE_BARROW) then
|
|
self.facade:sendNotification(ItemEvent.BarrowUpdate)
|
|
elseif(PackageItem.type == SceneItem_pb.EPACKTYPE_QUEST)then
|
|
self.facade:sendNotification(ItemEvent.QuestUpdate)
|
|
EventManager.Me():PassEvent(ItemEvent.QuestUpdate)
|
|
elseif(PackageItem.type == SceneItem_pb.EPACKTYPE_FOOD)then
|
|
self.facade:sendNotification(ItemEvent.FoodUpdate)
|
|
EventManager.Me():PassEvent(ItemEvent.FoodUpdate)
|
|
elseif(PackageItem.type == SceneItem_pb.EPACKTYPE_PET)then
|
|
self.facade:sendNotification(ItemEvent.PetUpdate)
|
|
EventManager.Me():PassEvent(ItemEvent.PetUpdate)
|
|
elseif(PackageItem.type == SceneItem_pb.EPACKTYPE_RUNE)then
|
|
self.facade:sendNotification(ItemEvent.RuneUpdate)
|
|
EventManager.Me():PassEvent(ItemEvent.RuneUpdate)
|
|
end
|
|
|
|
if(self.betterEquipChanged) then
|
|
self.facade:sendNotification(ItemEvent.BetterEquipAdd)
|
|
end
|
|
end
|
|
end
|
|
|
|
function ItemHandleCommand:Update(note)
|
|
local PackageItem = note.body
|
|
local bagData = BagProxy.Instance.bagMap[PackageItem.type]
|
|
-- print("揹包型別:"..PackageItem.type.." !!!")
|
|
if(bagData ~=nil) then
|
|
--處理移除cd
|
|
self:ForEachRemoveItems(bagData,PackageItem.delItems)
|
|
bagData:RemoveItems(PackageItem.delItems)
|
|
bagData:UpdateItems(PackageItem.updateItems)
|
|
self:ForEachAddItems(bagData,PackageItem.updateItems)
|
|
-- print("remove nums.."..#PackageItem.delItems)
|
|
-- print("update nums.."..#PackageItem.updateItems)
|
|
|
|
--測試使用符文揹包填充著揹包物品
|
|
if(PackageItem.type == SceneItem_pb.EPACKTYPE_MAIN) then
|
|
local RuneBagData = BagProxy.Instance.bagMap[SceneItem_pb.EPACKTYPE_RUNE]
|
|
if(RuneBagData ~=nil) then
|
|
self:ForEachRemoveItems(RuneBagData,PackageItem.delItems)
|
|
RuneBagData:RemoveItems(PackageItem.delItems)
|
|
--RuneBagData:UpdateItems(PackageItem.updateItems)
|
|
--self:ForEachAddItems(RuneBagData,PackageItem.updateItems)
|
|
|
|
|
|
--local deleData = PackageItem.delItems
|
|
--local runeDeleDatas = {}
|
|
--for i=1,#deleData do
|
|
-- if(deleData[i].base.type == 550 or deleData[i].base.type == 560) then
|
|
-- table.insert(runeDeleDatas,deleData[i])
|
|
-- end
|
|
--end
|
|
--if(#runeDeleDatas>0) then
|
|
-- self:ForEachRemoveItems(RuneBagData,runeDeleDatas)
|
|
-- RuneBagData:RemoveItems(runeDeleDatas)
|
|
--
|
|
--
|
|
--end
|
|
|
|
local updateItems = PackageItem.updateItems
|
|
local newUpdateItems = {}
|
|
for i=1,#updateItems do
|
|
if(updateItems[i].base.type == 550 or updateItems[i].base.type == 560) then
|
|
table.insert(newUpdateItems,updateItems[i])
|
|
end
|
|
end
|
|
RuneBagData:UpdateItems(newUpdateItems)
|
|
self:ForEachAddItems(RuneBagData,newUpdateItems)
|
|
end
|
|
end
|
|
|
|
if(PackageItem.type == SceneItem_pb.EPACKTYPE_MAIN) then
|
|
self.facade:sendNotification(ItemEvent.ItemUpdate)
|
|
EventManager.Me():PassEvent(ItemEvent.ItemUpdate)
|
|
|
|
self.facade:sendNotification(ItemEvent.RuneUpdate)
|
|
EventManager.Me():PassEvent(ItemEvent.RuneUpdate)
|
|
-- self:CheckForShortCut(PackageItem.delItems,PackageItem.updateItems)
|
|
elseif(PackageItem.type == SceneItem_pb.EPACKTYPE_STORE) then
|
|
self.facade:sendNotification(ItemEvent.ItemUpdate)
|
|
elseif(PackageItem.type == SceneItem_pb.EPACKTYPE_PERSONAL_STORE) then
|
|
EventManager.Me():PassEvent(ItemEvent.ItemUpdate)
|
|
self.facade:sendNotification(ItemEvent.ItemUpdate)
|
|
elseif(PackageItem.type == SceneItem_pb.EPACKTYPE_EQUIP) then
|
|
-- 序號在裝備揹包之後的揹包可能會更新不及時
|
|
self.facade:sendNotification(ItemEvent.EquipUpdate)
|
|
elseif(PackageItem.type == SceneItem_pb.EPACKTYPE_FASHIONEQUIP)then
|
|
self.facade:sendNotification(ItemEvent.EquipUpdate)
|
|
elseif(PackageItem.type == SceneItem_pb.EPACKTYPE_FASHION) then
|
|
self.facade:sendNotification(ItemEvent.FashionUpdate)
|
|
elseif(PackageItem.type == SceneItem_pb.EPACKTYPE_CARD) then
|
|
self.facade:sendNotification(ItemEvent.CardBagUpdate)
|
|
elseif(PackageItem.type == SceneItem_pb.EPACKTYPE_TEMP_MAIN) then
|
|
self.facade:sendNotification(ItemEvent.TempBagUpdate)
|
|
elseif(PackageItem.type == SceneItem_pb.EPACKTYPE_BARROW) then
|
|
self.facade:sendNotification(ItemEvent.BarrowUpdate)
|
|
EventManager.Me():PassEvent(ItemEvent.ItemUpdate)
|
|
elseif(PackageItem.type == SceneItem_pb.EPACKTYPE_QUEST)then
|
|
self.facade:sendNotification(ItemEvent.QuestUpdate)
|
|
elseif(PackageItem.type == SceneItem_pb.EPACKTYPE_FOOD)then
|
|
self.facade:sendNotification(ItemEvent.FoodUpdate)
|
|
EventManager.Me():PassEvent(ItemEvent.FoodUpdate)
|
|
elseif(PackageItem.type == SceneItem_pb.EPACKTYPE_PET)then
|
|
self.facade:sendNotification(ItemEvent.PetUpdate)
|
|
EventManager.Me():PassEvent(ItemEvent.PetUpdate)
|
|
elseif(PackageItem.type == SceneItem_pb.EPACKTYPE_RUNE)then
|
|
self.facade:sendNotification(ItemEvent.RuneUpdate)
|
|
EventManager.Me():PassEvent(ItemEvent.RuneUpdate)
|
|
end
|
|
if(self.betterEquipChanged) then
|
|
self.facade:sendNotification(ItemEvent.BetterEquipAdd)
|
|
end
|
|
end
|
|
end
|
|
|
|
--初始化新增時,遍歷操作本次初始化的道具
|
|
function ItemHandleCommand:ForEachInitItems(bagData,list)
|
|
self:ForEachItems(bagData,list,self.InitItemHandle)
|
|
end
|
|
|
|
--重新整理時,遍歷操作本次重新整理/新增的道具
|
|
function ItemHandleCommand:ForEachAddItems(bagData,list)
|
|
self.equipItems = self.equipBag.siteMap
|
|
self:ForEachItems(bagData,list,self.AddItemHandle)
|
|
end
|
|
|
|
--初始化單個道具的處理
|
|
function ItemHandleCommand:InitItemHandle(bagData,item )
|
|
self:TryAddCD(item)
|
|
self:TryAddCompare(bagData,item)
|
|
self:TryAddReviveItem(bagData, item);
|
|
self:AddTempItemDelCheck(bagData,item);
|
|
|
|
item.bagtype = bagData.type;
|
|
end
|
|
|
|
--更新單個道具的處理
|
|
function ItemHandleCommand:AddItemHandle(bagData,item,sItem)
|
|
self:TryAddCD(item)
|
|
self:TryAddCompare(bagData,item,sItem)
|
|
self:TryAddReviveItem(bagData, item);
|
|
self:AddTempItemDelCheck(bagData,item);
|
|
|
|
item.bagtype = bagData.type;
|
|
end
|
|
|
|
function ItemHandleCommand:ForEachRemoveItems(bagData,list)
|
|
self:ForEachItems(bagData,list,self.RemoveItemHandle)
|
|
end
|
|
|
|
function ItemHandleCommand:RemoveItemHandle( bagData,item,sItem)
|
|
self:TryRemoveCD(item)
|
|
self:TryRemoveCompare(bagData,item,sItem)
|
|
self:TryRemoveReviveItem(bagData, item);
|
|
self:RemoveTempItemDelCheck(bagData,item);
|
|
end
|
|
|
|
function ItemHandleCommand:ForEachItems(bagData,list,func)
|
|
for i=1,#list do
|
|
local sItem = list[i]
|
|
local item = bagData:GetItemByGuid(sItem.base.guid)
|
|
if(item) then
|
|
func(self,bagData,item,sItem)
|
|
end
|
|
end
|
|
if(bagData.type == BagProxy.BagType.RoleEquip)then
|
|
FunctionBuff.Me():UpdateBreakEquipBuff();
|
|
end
|
|
end
|
|
|
|
function ItemHandleCommand:TryRemoveCD(item)
|
|
if(item) then
|
|
self.cdRefreshcmd:Remove(item)
|
|
end
|
|
end
|
|
|
|
function ItemHandleCommand:TryAddCD(item)
|
|
if(item and item.cdTime >0) then
|
|
self.cdRefreshcmd:Add(item)
|
|
end
|
|
end
|
|
|
|
function ItemHandleCommand:TryAddCompare(bagData,item,sItem)
|
|
if(bagData.type == BagProxy.BagType.MainBag or bagData.type == BagProxy.BagType.Temp) then
|
|
-- print(string.format("%s 來源:%s 是否新的:%s",item.staticData.NameZh,sItem.base.source,tostring(item:IsNew())))
|
|
-- if(sItem.base.source~= ProtoCommon_pb.ESOURCE_EQUIP or sItem.base.source== ProtoCommon_pb.ESOURCE_NORMAL) then
|
|
self:NewAddCompare(item,sItem)
|
|
-- else
|
|
-- self:UpdateCompare(item,sItem)
|
|
-- end
|
|
end
|
|
end
|
|
|
|
function ItemHandleCommand:TryAddReviveItem(bagData, item)
|
|
if(bagData.type == BagProxy.BagType.MainBag) then
|
|
-- CheckReviveItemChange
|
|
local playerRelive = GameConfig.PlayerRelive;
|
|
if(playerRelive)then
|
|
local leafreviveId = playerRelive.deathcost[1].id;
|
|
local skillItemId = playerRelive.Skillcost[1].id;
|
|
if(item.staticData.id == leafreviveId or item.staticData.id == skillItemId)then
|
|
self.facade:sendNotification(ItemEvent.ReviveItemAdd, item)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function ItemHandleCommand:AddTempItemDelCheck(bagData, item)
|
|
if(bagData.type == BagProxy.BagType.Temp)then
|
|
if(item and item.staticData and item.staticData.NoSale ~= 1)then
|
|
FunctionTempItem.Me():AddTempItemDelCheck(item.id, item.deltime)
|
|
end
|
|
end
|
|
end
|
|
|
|
function ItemHandleCommand:NewAddCompare(item,sItem)
|
|
if(FunctionItemCompare.Me():CompareItem(item)) then
|
|
self.betterEquipChanged = true
|
|
end
|
|
end
|
|
|
|
function ItemHandleCommand:UpdateCompare(item,sItem)
|
|
if(item:IsFashion()) then
|
|
if(not item:IsNew()) then
|
|
if(QuickUseProxy.Instance:RemoveNeverEquipedFashion(item.staticData.id,true)) then
|
|
self.betterEquipChanged = true
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function ItemHandleCommand:TryRemoveCompare(bagData,item,sItem)
|
|
if(bagData.type == BagProxy.BagType.MainBag) then
|
|
if(FunctionItemCompare.Me():TryRemove(item)) then
|
|
self.betterEquipChanged = true
|
|
end
|
|
end
|
|
end
|
|
|
|
function ItemHandleCommand:TryRemoveReviveItem(bagData, item)
|
|
if(bagData.type == BagProxy.BagType.MainBag)then
|
|
-- CheckReviveItemChange
|
|
local playerRelive = GameConfig.PlayerRelive;
|
|
if(playerRelive)then
|
|
local leafreviveId = playerRelive.deathcost[1].id;
|
|
local skillItemId = playerRelive.Skillcost[1].id;
|
|
if(item.staticData.id == leafreviveId or item.staticData.id == skillItemId)then
|
|
self.facade:sendNotification(ItemEvent.ReviveItemRemove, item)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function ItemHandleCommand:RemoveTempItemDelCheck(bagData, item)
|
|
if(bagData.type == BagProxy.BagType.Temp)then
|
|
FunctionTempItem.Me():RemoveTempItemDelCheck(item.id)
|
|
end
|
|
end
|
|
|
|
-- function ItemHandleCommand:CheckForShortCut(delItems,updateItems)
|
|
-- if(self:CheckHasType(updateItems,40) or self:CheckHasType(updateItems,42)) then
|
|
-- ShortCutProxy.Instance:AutoFillShortCut()
|
|
-- end
|
|
-- end
|
|
|
|
function ItemHandleCommand:CheckHasType(items,typeID)
|
|
local item
|
|
if(items~=nil) then
|
|
for i=1,#items do
|
|
item = Table_Item[items[i].base.id]
|
|
if(item ~= nil and item.Type == typeID) then
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function ItemHandleCommand:CheckHasGUID(items,guid)
|
|
if(items~=nil) then
|
|
for i=1,#items do
|
|
if(items[i].base.guid == guid) then
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function ItemHandleCommand:CheckHasID(items,id)
|
|
if(items~=nil) then
|
|
for i=1,#items do
|
|
if(items[i].base.id == id) then
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function ItemHandleCommand:ReArrange(note)
|
|
local bagType = note.body.type or SceneItem_pb.EPACKTYPE_MAIN
|
|
local bagData = BagProxy.Instance.bagMap[bagType]
|
|
bagData.wholeTab:ReArrange(note.body.item)
|
|
-- print("after ReArrange and get cost---"..(os.clock()-t))
|
|
-- self:TestOutPut(bagData)
|
|
self.facade:sendNotification(ItemEvent.ItemReArrage, bagType)
|
|
end
|
|
|
|
function ItemHandleCommand:TestRemove(bagData,datas)
|
|
local removes = {}
|
|
local t = os.clock()
|
|
for i=2,5 do
|
|
-- print("removing ..."..datas[i].base.guid)
|
|
table.insert( removes, datas[i].base.guid )
|
|
end
|
|
bagData:RemoveItemsByGuid(removes)
|
|
print("after remove cost---"..(os.clock()-t))
|
|
end
|
|
|
|
function ItemHandleCommand:TestAddNew(bagData,datas)
|
|
local newAdd = {}
|
|
local count = #datas
|
|
for i=1,8 do
|
|
datas[i].base.guid = "TestAddnew_"..i
|
|
datas[i].base.count = math.random(10,50)
|
|
datas[i].base.index = count + i
|
|
table.insert( newAdd, datas[i] )
|
|
end
|
|
bagData:UpdateItems(newAdd)
|
|
end
|
|
|
|
function ItemHandleCommand:TestAddSame(bagData,datas)
|
|
local newAdd = {}
|
|
for i=1,8 do
|
|
datas[i].base.count = math.random(10,50)
|
|
table.insert( newAdd, datas[i] )
|
|
end
|
|
bagData:UpdateItems(newAdd)
|
|
end
|
|
|
|
return ItemHandleCommand |