ItemUtil = {} ItemUtil.staticRewardDropsItems = {} -- { -- {id = xx,num = xx}, -- {id = xx,num = xx}, -- {id = xx,num = xx}, -- } -- return function ItemUtil.GetRewardItemIdsByTeamId(teamId) return Game.Config_RewardTeam[teamId] end function ItemUtil.getAssetPartByItemData( itemId ,parent) -- body local partIndex = ItemUtil.getItemRolePartIndex(itemId) -- LogUtility.Info(itemId) if(partIndex)then local model = Asset_RolePart.Create( partIndex, itemId); model:ResetParent(parent.transform); LogUtility.InfoFormat("getAssetPartByItemData parent.layer:{0}",LogUtility.ToString(parent.layer)) model:SetLayer( parent.layer ) return model end end -- function ItemUtil.checkIsMount( itemData ) -- -- body -- if(itemData.Type) -- end function ItemUtil.getComposeMaterialsByComposeID(id) local compData = Table_Compose[id]; local all, materials, failStay = {}, {}, {}; if(compData)then if(compData.BeCostItem)then for i=1,#compData.BeCostItem do local id = compData.BeCostItem[i].id; local num = compData.BeCostItem[i].num; local tempItem = ItemData.new("Compose", id); tempItem.num = num; table.insert(all, tempItem); end end if(compData.FailStayItem)then local indexMap = {}; for i=1,#compData.FailStayItem do local index = compData.FailStayItem[i]; if(index)then indexMap[index] = 1; end end for i=1,#all do if(indexMap[i])then table.insert(failStay, all[i]); else table.insert(materials, all[i]); end end end end return all, materials, failStay; end function ItemUtil.getItemModel( itemData , parent) local rid = ItemUtil.getResourceIdByItemData(itemData); local result; if(rid)then if(parent)then result = GameObjPool.Instance:RGet(rid,"Pool_Item", parent); else result = GameObjPool.Instance:RGet(rid,"Pool_Item"); end end return result; end function ItemUtil.checkEquipIsWeapon (type) for i=1,#Table_WeaponType do local single = Table_WeaponType[i] if(single.NameEn == type)then return true end end end function ItemUtil.checkIsFashion( itemId ) -- body local itemData = Table_Item[itemId] if(itemData)then for k,v in pairs(GameConfig.ItemFashion) do for i=1,#v.types do local single = v.types[i] if(single == itemData.Type)then return true end end end end end function ItemUtil.getEquipPos(equipId) if(Table_Item[equipId])then local type = Table_Item[equipId].Type; for k,v in pairs(GameConfig.CardComposeType)do for kk,vv in pairs(v.types)do if(vv == type)then return k; end end end end end -- 獲取時裝穿脫的預設功能 function ItemUtil.getFashionDefaultEquipFunc(data) if(data.bagtype == BagProxy.BagType.RoleFashionEquip)then return FunctionItemFunc.Me():GetFunc("GetoutFashion"); elseif(data.bagtype == BagProxy.BagType.RoleEquip)then return FunctionItemFunc.Me():GetFunc("Discharge"); elseif(data.bagtype == BagProxy.BagType.MainBag)then return FunctionItemFunc.Me():GetFunc("Dress"); end end function ItemUtil.getBufferDescById(bufferid) if(Table_Buffer[bufferid])then local bufferStr = Table_Buffer[bufferid].Dsc if(not bufferStr or bufferStr == "")then bufferStr = Table_Buffer[bufferid].BuffName..ZhString.ItemUtil_NoBufferDes; end return bufferStr; else printRed("Can not find buffer"..tostring(bufferid)); return ""; end end function ItemUtil.getBufferNameById(bufferid) if(Table_Buffer[bufferid])then local bufferName = Table_Buffer[bufferid].BuffName return bufferName; else printRed("Can not find buffer"..tostring(bufferid)); return ""; end end -- buffer描述不讀desc 前端自己拼 function ItemUtil.getBufferDescByIdNotConfigDes(bufferid) local result = ""; local config = Table_Buffer[bufferid]; if(config)then if(config.BuffEffect and config.BuffEffect.type == "AttrChange")then for key,value in pairs(config.BuffEffect)do local kprop = RolePropsContainer.config[key] if(kprop and kprop.displayName and value>0)then result = result..kprop.displayName.." [c][9fc33dff]+"..value.."[-][/c] "; end end end end return result; end function ItemUtil.getFashionItemRoleBodyPart(itemid,isMale) local equipData = Table_Equip[itemid] if(not equipData or not equipData.GroupID)then return equipData end local GroupID = equipData.GroupID local equipDatas = AdventureDataProxy.Instance.fashionGroupData[GroupID] if(not equipDatas or #equipDatas==0)then return end for i=1,#equipDatas do local single = equipDatas[i] if(isMale and single.RealShowModel == 1)then return single elseif(not isMale and single.RealShowModel == 2)then return single end end return equipDatas[1] end function ItemUtil.getItemRolePartIndex(itemid) if(Table_Mount[itemid])then return Asset_Role.PartIndex.Mount; elseif(Table_Equip[itemid])then local typeId = Table_Equip[itemid].EquipType; if(typeId == 1 or typeId == 21 )then return Asset_Role.PartIndex.RightWeapon; elseif(typeId == 8)then return Asset_Role.PartIndex.Head; elseif(typeId == 9)then return Asset_Role.PartIndex.Wing; elseif(typeId == 10)then return Asset_Role.PartIndex.Face; elseif(typeId == 11)then return Asset_Role.PartIndex.Tail; elseif(typeId == 13)then return Asset_Role.PartIndex.Mouth; elseif(Table_Equip[itemid].Body)then return Asset_Role.PartIndex.Body; else local mtype = Table_Equip[itemid].Type; if(mtype == "Head")then return Asset_Role.PartIndex.Head; elseif(mtype == "Wing")then return Asset_Role.PartIndex.Wing; end end else local itemType = Table_Item[itemid].Type; if(itemType == 823 or itemType == 824)then return Asset_Role.PartIndex.Eye; elseif(itemType == 820 or itemType == 821 or itemType == 822)then return Asset_Role.PartIndex.Hair; end end return 0; end function ItemUtil.AddItemsTrace(datas) local traceDatas = {}; for i=1,#datas do local data = datas[i]; local staticId = data.staticData.id; local cell = QuestProxy:GetTraceCell(QuestDataType.QuestDataType_ITEMTR, data.staticData.id); if(not cell)then local odata = GainWayTipProxy.Instance:GetItemOriginMonster(staticId) local itemName = odata.name; local haveNum = BagProxy.Instance:GetAllItemNumByStaticID(staticId); local origin = odata.origins and odata.origins[1] if(origin)then local traceData = { type = QuestDataType.QuestDataType_ITEMTR, questDataStepType = QuestDataStepType.QuestDataStepType_MOVE, id = staticId, map = origin.mapID, pos = origin.pos, traceTitle = ZhString.MainViewSealInfo_TraceTitle, traceInfo = string.format(ZhString.ItemUtil_ItemTraceInfo, itemName, haveNum), }; table.insert(traceDatas, traceData); else errorLog(string.format(ZhString.ItemUtil_NoMonsterDrop, staticId)); end end end if(#traceDatas>0)then QuestProxy.Instance:AddTraceCells(traceDatas); end end function ItemUtil.CancelItemTrace(data) QuestProxy.Instance:RemoveTraceCell(QuestDataType.QuestDataType_ITEMTR, data.staticData.id); end function ItemUtil.CheckItemIsSpecialInAdventureAppend( itemType ) -- body for i=1,#GameConfig.AdventureAppendSpecialItemType do local single = GameConfig.AdventureAppendSpecialItemType[i] if(single == itemType)then return true end end end function ItemUtil.GetComposeItemByBlueItem( itemData ) if(itemData and 50 == itemData.Type)then local compose = Table_Compose[itemData.id] if(compose)then return compose.Product.id end end end function ItemUtil.GetDeath_Dead_Reward( monsterId ) local tempArray = {} local tempMap = {} for k,v in pairs(Table_Deadboss) do if(v.MonsterID == monsterId)then local Dead_Reward = v.Dead_Reward for i=1,#Dead_Reward do local single = Dead_Reward[i] if(not tempMap[single])then tempArray[#tempArray+1] = single tempMap[single] = 1 end end end end tempMap = nil return tempArray end function ItemUtil.GetDeath_Drops( monsterId ) -- body if(ItemUtil.staticRewardDropsItems[monsterId])then return ItemUtil.staticRewardDropsItems[monsterId] end local tempArray = {} local staticData = Table_Monster[monsterId] if(not staticData)then return end local numLimit = false local Dead_Reward = staticData.Dead_Reward Dead_Reward = #Dead_Reward > 0 and Dead_Reward or nil if(not Dead_Reward)then Dead_Reward = ItemUtil.GetDeath_Dead_Reward(monsterId) numLimit = true end if(not Dead_Reward)then return end for i=1,#Dead_Reward do local rewardTeamID=Dead_Reward[i] local list = ItemUtil.GetRewardItemIdsByTeamId(rewardTeamID) if(list)then for j=1,#list do local single = list[j] local hasAdd = false for j=1,#tempArray do local tmp = tempArray[j] if(tmp.itemData.id == single.id)then if(not numLimit)then tmp.num = tmp.num+single.num end hasAdd = true break end end if(not hasAdd)then local data = {}; data.itemData = Table_Item[single.id] if(data.itemData)then data.num = single.num table.insert(tempArray, data); end end end end end ItemUtil.staticRewardDropsItems[monsterId] = tempArray return ItemUtil.staticRewardDropsItems[monsterId] end -- 獲取裝備附魔成功概率 function ItemUtil.GetEquipEnchantEffectSucRate(attriType) end -- 獲取裝備附魔成功概率 local useCodeItemId function ItemUtil.SetUseCodeCmd(data) useCodeItemId = data.id end function ItemUtil.HandleUseCodeCmd(data) if(useCodeItemId and data.guid == useCodeItemId)then useCodeItemId = nil local url = string.format(ZhString.KFCShareURL,Game.Myself.data.id,data.code) Application.OpenURL(url) end end local CONFIGTIME_FORMAT = "%Y-%m-%d %H:%M:%S" local getNowTimeString = function () return os.date(CONFIGTIME_FORMAT, ServerTime.CurServerTime()/1000); end function ItemUtil.CheckCardCanComposeByTime(cardId) return ItemUtil.CheckCardCanGetByTime(cardId, "TFComposeDate", "ComposeDate"); end function ItemUtil.CheckCardCanLotteryByTime(cardId) return ItemUtil.CheckCardCanGetByTime(cardId, "TFLotteryDate", "LotteryDate"); end function ItemUtil.CheckCardCanGetByTime(cardId, tfkey, releaseKey) local sData = Table_Card[cardId]; if(sData == nil)then return false; end local timeKey = nil; if(EnvChannel.IsTFBranch())then timeKey = tfkey elseif(EnvChannel.IsReleaseBranch())then timeKey = releaseKey end if(timeKey == nil)then return true; end local ct = sData[timeKey]; if(ct == nil or #ct == 0)then return true; end local nowTimeStr = getNowTimeString(); if(timeKey == "TFComposeDate")then helplog(nowTimeStr, ct[1], ct[2]); end if(#ct == 1)then -- 假如只配置了一個時間 則為開始時間 return nowTimeStr > ct[1]; elseif(#ct == 2)then return nowTimeStr > ct[1] and nowTimeStr <= ct[2]; end return false; end