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

1870 lines
58 KiB
Plaintext

local BaseCell = autoImport("BaseCell");
ItemTipBaseCell = class("ItemTipBaseCell", BaseCell);
autoImport("TipLabelCell");
-- order depend on type-value
ItemTipAttriType = {
Level = 1,
EquipDecomposeTip = 2,
MonsterLevel = 3,
ItemType = 4,
EquipCollectionLv = 5,
UseLimit = 6,
GetLimit = 7,
EquipBaseAttri = 8,
RecommandReason = 8,
NextEquipLotteryAttri = 9,
EquipStrengthRefine = 10,
EquipSpecial = 11,
Pvp_EquipBaseAttri = 12,
Pvp_EquipSpecial = 13,
EquipEnchant = 14,
EquipUpInfo = 15,
EquipUpMaterial = 16,
EquipCards = 17,
EquipSuit = 18,
EquipColor = 19,
ComposeProductAttri = 20,
ComposeInfo = 21,
CardInfo = 22,
SpecialTip = 23,
UnLockInfo = 24,
NoStorage = 25,
NoMakeCard = 26,
EquipCanInfo = 27,
FoodInfo = 28,
FoodAdvInfo = 29,
PetEggInfo_Brief = 30,
PetEggInfo_Skill = 31,
PetEggInfo_Equip = 32,
EquipJobs = 33,
NoEffectTip = 34,
ObsidianSoulCrystalTip = 35,
Code = 36,
Desc = 37,
TradePrice = 38,
SellPrice = 39,
MAX_INDEX = 40,
}
local tempV3 = LuaVector3();
local AllTradeType = BoothProxy.TradeType.All
function ItemTipBaseCell:Init()
self.main = self:FindComponent("Main", UIWidget);
local cellContainer = self:FindGO("CellContainer");
if(cellContainer)then
local cellObj = self:LoadPreferb("cell/ItemCell", cellContainer);
cellObj.transform:SetParent(cellContainer.transform, true);
cellObj.transform.localPosition = LuaGeometry.Const_V3_zero;
self.itemcell = ItemCell.new(cellContainer);
self.itemcell:HideNum();
end
self.typesprite = self:FindComponent("TypeSprite", UISprite);
self.equipTip = self:FindGO("EquipEd");
self.scrollview = self:FindComponent("ScrollView", UIScrollView);
self.replaceInfo = self:FindGO("ReplaceInfo");
self.replaceLab = self:FindComponent("Label", UILabel, self.replaceInfo);
self.centerTop = self:FindGO("CenterTop");
self.centerBottom = self:FindGO("CenterBottom");
self.getPathBtn = self:FindGO("GetPathBtn");
if(self.getPathBtn)then
self:AddClickEvent(self.getPathBtn, function (go)
self:PassEvent(ItemTipEvent.ShowGetPath, self);
end);
end
self:InitAttriContext();
self:InitEvent();
self:InitCountChooseBord();
end
function ItemTipBaseCell:InitAttriContext()
self.table = self:FindComponent("AttriTable", UITable);
local upPanel = GameObjectUtil.Instance:FindCompInParents(self.gameObject, UIPanel);
local panels = self:FindComponents(UIPanel);
for i=1,#panels do
panels[i].depth = upPanel.depth+panels[i].depth;
end
self.attriCtl = UIGridListCtrl.new(self.table, TipLabelCell, "TipLabelCell");
self.contextDatas = {};
end
function ItemTipBaseCell:HideItemIcon()
if(self.itemcell)then
self.itemcell:HideIcon();
local sData = self.data and self.data.staticData;
if(sData == nil)then
return;
end
local lockDesc = Table_ItemAdvManual[sData.id] and Table_ItemAdvManual[sData.id].LockDesc;
if(lockDesc)then
local desc = self.contextDatas[ ItemTipAttriType.Desc ] or {};
local descStr = lockDesc
desc.label = ZhString.ItemTip_Desc..descStr;
desc.hideline = true;
self.contextDatas[ ItemTipAttriType.Desc ] = desc;
end
self:ResetAttriDatas();
end
end
function ItemTipBaseCell:Active_Collider_Call()
self:UpdateCountChooseBordButton();
end
function ItemTipBaseCell:InitCountChooseBord()
self.chooseCount = 1;
self.countChooseBord = self:FindGO("CountChooseBord");
if(self.countChooseBord == nil)then
return;
end
local countChoose_AddButton = self:FindGO("AddButton", self.countChooseBord);
self.countChoose_AddButton_Sp1 = countChoose_AddButton:GetComponent(UISprite);
self.countChoose_AddButton_Sp2 = self:FindComponent("Sprite", UISprite, countChoose_AddButton);
self.countChoose_AddButton_Collider = countChoose_AddButton:GetComponent(BoxCollider);
self:AddClickEvent(countChoose_AddButton, function ( go )
self:DoAddUseCount();
end);
local longPress = countChoose_AddButton:GetComponent(UILongPress)
longPress.pressEvent = function ( obj,state )
self:QuickDoAddUseCount(state);
end
local countChoose_MinusButton = self:FindGO("MinusButton", self.countChooseBord);
self.countChoose_MinusButton_Sp1 = countChoose_MinusButton:GetComponent(UISprite);
self.countChoose_MinusButton_Sp2 = self:FindComponent("Sprite", UISprite, countChoose_MinusButton);
self.countChoose_MinusButton_Collider = countChoose_MinusButton:GetComponent(BoxCollider);
self:AddClickEvent(countChoose_MinusButton, function ( go )
self:DoMinusUseCount();
end);
local longPress = countChoose_MinusButton:GetComponent(UILongPress)
longPress.pressEvent = function ( obj,state )
self:QuickMinusAddUseCount(state);
end
self.countChoose_CountInput = self:FindComponent("CountInput", UIInput, self.countChooseBord);
EventDelegate.Set(self.countChoose_CountInput.onChange,function ()
self.chooseCount = tonumber(self.countChoose_CountInput.value) or 0;
self:UpdateCountChooseBordButton();
end)
self.countChoose_Count = self:FindComponent("Count", UILabel, self.countChooseBord);
self.chooseCount = 1;
end
function ItemTipBaseCell:DoAddUseCount()
if(self.data == nil)then
return;
end
self.chooseCount = self.chooseCount + 1;
self.countChoose_CountInput.value = self.chooseCount;
self:UpdateCountChooseBordButton(true);
end
function ItemTipBaseCell:QuickDoAddUseCount(open)
if(open)then
TimeTickManager.Me():CreateTick(0, 100, function ()
self:DoAddUseCount();
end, self, 11);
else
TimeTickManager.Me():ClearTick(self, 11)
end
end
function ItemTipBaseCell:DoMinusUseCount()
if(self.data == nil)then
return;
end
self.chooseCount = self.chooseCount - 1;
self.countChoose_CountInput.value = self.chooseCount;
self:UpdateCountChooseBordButton();
end
function ItemTipBaseCell:ResetUseCount()
self.chooseCount = 1;
if(self.countChooseBord == nil)then
return;
end
self.countChoose_CountInput.value = self.chooseCount;
self:UpdateCountChooseBordButton();
end
function ItemTipBaseCell:SetChooseCount(count)
self.chooseCount = count;
if(self.countChooseBord == nil)then
return;
end
self.countChoose_CountInput.value = self.chooseCount;
self:UpdateCountChooseBordButton();
end
function ItemTipBaseCell:UpdateCountChooseBordButton(showMultipleMsg)
if(self.countChooseBord == nil)then
return;
end
if(self.data == nil)then
return;
end
local sid = self.data.staticData.id;
if(sid == nil)then
return;
end
local useMax = nil;
if(self.countChoose_maxCount == nil)then
local typeData = Table_ItemType[ self.data.staticData.Type ];
if(typeData and typeData.UseNumber)then
useMax = typeData.UseNumber;
else
useMax = self.data.staticData.MaxNum;
end
else
useMax = self.countChoose_maxCount;
end
if(useMax ~= nil)then
useMax = math.min(self.data.num, useMax);
else
useMax = self.data.num;
end
if(showMultipleMsg)then
if(self.countChoose_maxCount and self.chooseCount == self.countChoose_maxCount)then
MsgManager.ShowMsgByIDTable(1281);
end
end
if(self.chooseCount > useMax or self.chooseCount < 1)then
self.chooseCount = math.clamp(self.chooseCount, 1, useMax);
self.countChoose_CountInput.value = self.chooseCount;
end
if self.itemcell and not self.dontUpdateCellCount then
self.itemcell:UpdateNumLabel(self.chooseCount)
end
self:_helpActiveButton(self.chooseCount < useMax,
self.countChoose_AddButton_Sp1,
self.countChoose_AddButton_Sp2,
self.countChoose_AddButton_Collider);
self:_helpActiveButton(self.chooseCount > 1,
self.countChoose_MinusButton_Sp1,
self.countChoose_MinusButton_Sp2,
self.countChoose_MinusButton_Collider);
end
function ItemTipBaseCell:QuickMinusAddUseCount(open)
if(open)then
TimeTickManager.Me():CreateTick(0, 100, function ()
self:DoMinusUseCount();
end, self, 12);
else
TimeTickManager.Me():ClearTick(self, 12)
end
end
function ItemTipBaseCell:_helpActiveButton(b, sp1, sp2, collider)
if(b)then
sp1.color = ColorUtil.NGUIWhite;
sp2.color = ColorUtil.NGUIWhite;
collider.enabled = true;
else
sp1.color = ColorUtil.NGUIShaderGray;
sp2.color = ColorUtil.NGUIShaderGray;
collider.enabled = false;
end
end
function ItemTipBaseCell:SetData(data)
self.hasMonthVIP = ServiceUserEventProxy.Instance:AmIMonthlyVIP();
self.data = data;
self:UpdateTopInfo();
self:UpdateAttriContext();
end
function ItemTipBaseCell:UpdateTopInfo(data)
local data = data or self.data;
if(data)then
local qInt = data.staticData.Quality;
if(self.typesprite)then
local typeConfig = Table_ItemType[data.staticData.Type];
if(typeConfig and typeConfig.icon and typeConfig.icon~="")then
self.typesprite.gameObject:SetActive(true);
self.typesprite.spriteName = Table_ItemType[data.staticData.Type].icon;
self.typesprite:MakePixelPerfect();
else
self.typesprite.gameObject:SetActive(false);
end
end
if(self.equipTip)then
self.equipTip:SetActive(data.equiped == 1);
end
if(self.itemcell)then
--选中菜品显示Cell的数量
if data.staticData.Type == 610 and not self.dontUpdateCellCount then
self.itemcell:ShowNum()
end
self.itemcell:SetData(data);
end
if(data.equipInfo)then
local replaceValue = data.equipInfo:GetReplaceValues();
if(replaceValue > 0)then
self:SetReplaceInfo(ZhString.Itemtip_EquipScore .. replaceValue);
else
self:SetReplaceInfo();
end
else
self:SetReplaceInfo();
end
if(self.getPathBtn and data.staticData)then
local gainData = GainWayTipProxy.Instance:GetDataByStaticID(data.staticData.id)
self.getPathBtn:SetActive(gainData~=nil);
end
end
end
function ItemTipBaseCell:SetReplaceInfo(text)
if(self.replaceInfo == nil)then
tempV3:Set(0,100,0);
else
if(text == nil or text == "")then
self.replaceInfo:SetActive(false);
tempV3:Set(0,100,0);
else
self.replaceInfo:SetActive(true);
tempV3:Set(0,88,0);
self.replaceLab.text = text;
end
end
if(self.centerTop)then
self.centerTop.transform.localPosition = tempV3
if(self.main)then
self.main:UpdateAnchors();
end
end
end
function ItemTipBaseCell:FormatBufferStr(bufferId)
local str = ItemUtil.getBufferDescById(bufferId);
local result = "";
local bufferStrs = string.split(str, "\n")
for m=1,#bufferStrs do
result = result.."{uiicon=tips_icon_01} "..bufferStrs[m].."\n";
end
if(result~="")then
result = string.sub(result, 1, -2);
end
return result;
end
function ItemTipBaseCell:ActiveText(text, active)
return active and text or '[c][9c9c9c]' .. text .. "[/c]";
end
-- attri begin
function ItemTipBaseCell:UpdateAttriContext()
TableUtility.TableClear(self.contextDatas);
if(self.data)then
self:UpdateNormalItemInfo(self.data);
self:UpdateEquipAttriInfo(self.data);
self:UpdateComposeInfo(self.data);
self:UpdateCardAttriInfo(self.data);
self:UpdateFoodInfo(self.data);
self:UpdatePetEggInfo(self.data);
self:UpdateCodeInfo(self.data);
end
self:ResetAttriDatas();
end
function ItemTipBaseCell:_bHairType(type)
local hairConfig = GameConfig.HairType;
if(nil==hairConfig) then return false end
for _,v in pairs(hairConfig) do
if(type==v)then
return true;
end
end
return false;
end
local NOSHOW_GETLIMIT_IDMAP =
{
[5503] = 1,
}
function ItemTipBaseCell:UpdateNormalItemInfo(data)
local sData = data and data.staticData;
if(not sData)then
return;
end
local itemid = sData.id;
local mylv = Game.Myself.data.userdata:Get(UDEnum.ROLELEVEL)
if(sData.Level and sData.Level>0)then
local limitlevel = {};
local colorStr = mylv>=sData.Level and "[222222]" or CustomStrColor.BanRed;
limitlevel.label = string.format("[c]%s%s%s[-][/c]", colorStr, ZhString.ItemTip_LimitLv, sData.Level);
limitlevel.hideline = true;
self.contextDatas[ ItemTipAttriType.Level ] = limitlevel;
end
local iscollection = AdventureDataProxy.Instance:CheckItemIsCollection(data);
if(iscollection)then
local tipMap = GameConfig.ItemQualityDesc;
if(tipMap and tipMap[sData.Quality])then
local collectionTip = {};
collectionTip.label = string.format(ZhString.ItemTip_EquipCollectionLv, tipMap[sData.Quality]);
collectionTip.hideline = true;
self.contextDatas[ ItemTipAttriType.EquipCollectionLv ] = collectionTip;
end
end
if(nil==data.equipInfo)then
local pros = Table_UseItem[sData.id] and Table_UseItem[sData.id].Class;
if(pros ~= nil and next(pros))then
local proInfo = {};
local prostr = "";
local proban = true;
local myPro = MyselfProxy.Instance:GetMyProfession()
if(nil==pros or #pros<=0)then
proban = false;
prostr = ZhString.ItemTip_AllPro;
else
for i =1,#pros do
if(myPro == pros[i])then
proban = false;
end
if(Table_Class[pros[i]])then
prostr = prostr..Table_Class[pros[i]].NameZh;
end
if(i~=#pros)then
prostr = prostr.."/";
end
end
end
if(proban)then
proInfo.label = "[c]"..CustomStrColor.BanRed..ZhString.ItemTip_Profession..prostr.."[-][/c]";
else
proInfo.label = ZhString.ItemTip_Profession..prostr;
end
proInfo.hideline = true;
self.contextDatas[ ItemTipAttriType.EquipJobs ] = proInfo;
end
end
local typedata = Table_ItemType[sData.Type];
if(typedata)then
if(typedata.Name)then
local typeStr = {};
typeStr.label = ZhString.ItemTip_ItemType..typedata.Name;
self.contextDatas[ ItemTipAttriType.ItemType ] = typeStr;
end
end
local bHairType = self._bHairType(sData.Type);
if(not bHairType)then
local tradeSell = {};
if(data:CanTrade())then
local refinelv = self.data.equipInfo and self.data.equipInfo.refinelv
if(refinelv and refinelv <= 0)then
refinelv = nil;
end
local isOverTime = FunctionItemTrade.Me():IsRequireOverTime(self.data);
if(isOverTime)then
tradeSell.label = ZhString.ItemTip_TradePrice..ZhString.ItemTip_TradePriceWait;
self:RemoveTradeLT();
self.itemTradeLt = LeanTween.delayedCall(1, function ()
FunctionItemTrade.Me():GetTradePrice(self.data, nil, nil, AllTradeType)
self:RemoveTradeLT();
end)
else
local price = FunctionItemTrade.Me():GetTradePrice(self.data, nil, nil, AllTradeType)
if(price == 0)then
tradeSell.label = ZhString.ItemTip_TradePrice..ZhString.ItemTip_TradePriceWait;
else
tradeSell.label = ZhString.ItemTip_TradePrice.."{itemicon=100} "..StringUtil.NumThousandFormat(price);
end
end
else
tradeSell.label = ZhString.ItemTip_TradePrice..ZhString.ItemTip_NoTradeTip;
end
tradeSell.hideline = true;
self.contextDatas[ ItemTipAttriType.TradePrice ] = tradeSell;
end
if(not bHairType)then
local price = sData.SellPrice or 0;
if(price>0 and sData.NoSale~=1)then
local sell = {};
sell.label = ZhString.ItemTip_SellPrice.."{itemicon=100} "..tostring(price);
sell.hideline = true;
self.contextDatas[ ItemTipAttriType.SellPrice ] = sell;
end
end
if(sData.Desc and sData.Desc~="")then
local desc = {};
local descStr = sData.Desc
if data:IsLoveLetter() then
local time = os.date("*t", data.createtime)
descStr = string.format(descStr, data.loveLetter.name, time.year, time.month, time.day)
elseif(data:IsMarryInviteLetter())then
local weddingData = data.weddingData;
local timeStr = os.date(ZhString.ItemTip_WeddingCememony_TimeFormat, weddingData.starttime)
local lintstr = ChangeZoneProxy.Instance:ZoneNumToString(weddingData.zoneid);
lintstr = string.format(ZhString.ItemTip_Line, lintstr);
descStr = string.format(descStr, weddingData.myname, weddingData.partnername, lintstr, timeStr);
end
desc.label = ZhString.ItemTip_Desc..descStr;
desc.hideline = true;
self.contextDatas[ ItemTipAttriType.Desc ] = desc;
end
-- 获取上限
local limitCfg = sData.GetLimit;
if(NOSHOW_GETLIMIT_IDMAP[sData.id] == nil and limitCfg and limitCfg.type ~= nil)then
local getLimitData = {};
local tipStr = "";
local str;
if(limitCfg.type == 1)then
str = ZhString.ItemTip_GetLimit_Day;
elseif(limitCfg.type == 7)then
str = ZhString.ItemTip_GetLimit_Weak;
end
local limitCount = ItemData.Get_GetLimitCount(sData.id);
if(tipStr ~= "")then
tipStr = tipStr .. " "
end
tipStr = str .. " " .. 0 .. "/" .. limitCount
getLimitData.label = ZhString.ItemTip_GetLimit .. tipStr;
self.contextDatas[ ItemTipAttriType.UseLimit ] = getLimitData;
local sourceId = limitCfg.source and limitCfg.source[1] or nil;
ServiceItemProxy.Instance:CallGetCountItemCmd(itemid, nil, sourceId);
end
-- 解锁 存入属性提示
local needManualShow, inManualStr, unlockManualStr = false;
local inManual, unlockManual = false, false;
if(data:IsFashion())then
local groupId = Table_Equip[sData.id] and Table_Equip[sData.id].GroupID;
if(groupId)then
local fakeItemData = Table_Item[groupId];
needManualShow = type(fakeItemData.AdventureValue) == "number" and fakeItemData.AdventureValue ~= 0 or false;
inManualStr = AdventureDataProxy.Instance:getIntoPackageRewardStr(fakeItemData, ZhString.ItemTip_ChAnd);
unlockManualStr = AdventureDataProxy.Instance:getUnlockRewardStr(fakeItemData, ZhString.ItemTip_ChAnd);
inManual = AdventureDataProxy.Instance:IsFashionStored( groupId )
unlockManual = AdventureDataProxy.Instance:IsFashionUnlock( groupId )
else
needManualShow = type(sData.AdventureValue) == "number" and sData.AdventureValue ~= 0 or false;
inManualStr = AdventureDataProxy.Instance:getIntoPackageRewardStr(sData, ZhString.ItemTip_ChAnd);
unlockManualStr = AdventureDataProxy.Instance:getUnlockRewardStr(sData, ZhString.ItemTip_ChAnd);
inManual = AdventureDataProxy.Instance:IsFashionStored( sData.id )
unlockManual = AdventureDataProxy.Instance:IsFashionUnlock( sData.id )
end
elseif(data:IsPic())then
local pCData = sData.ComposeID and Table_Compose[sData.ComposeID];
if(pCData)then
picToId = pCData.Product.id;
local psData = Table_Item[picToId];
local groupId = Table_Equip[psData.id] and Table_Equip[psData.id].GroupID;
if(groupId)then
local fakeItemData = Table_Item[groupId];
needManualShow = type(fakeItemData.AdventureValue) == "number" and fakeItemData.AdventureValue ~= 0 or false;
inManualStr = AdventureDataProxy.Instance:getIntoPackageRewardStr(fakeItemData, ZhString.ItemTip_ChAnd);
unlockManualStr = AdventureDataProxy.Instance:getUnlockRewardStr(fakeItemData, ZhString.ItemTip_ChAnd);
inManual = AdventureDataProxy.Instance:IsFashionStored( groupId )
unlockManual = AdventureDataProxy.Instance:IsFashionUnlock( groupId )
else
needManualShow = type(psData.AdventureValue) == "number" and psData.AdventureValue ~= 0 or false;
inManualStr = AdventureDataProxy.Instance:getIntoPackageRewardStr(Table_Item[picToId], ZhString.ItemTip_ChAnd);
unlockManualStr = AdventureDataProxy.Instance:getUnlockRewardStr(Table_Item[picToId], ZhString.ItemTip_ChAnd);
inManual = AdventureDataProxy.Instance:IsFashionStored( picToId )
unlockManual = AdventureDataProxy.Instance:IsFashionUnlock( picToId )
end
end
elseif(data:IsCard())then
needManualShow = true;
inManualStr = AdventureDataProxy.Instance:getIntoPackageRewardStr(sData, ZhString.ItemTip_ChAnd);
unlockManualStr = AdventureDataProxy.Instance:getUnlockRewardStr(sData, ZhString.ItemTip_ChAnd);
inManual = AdventureDataProxy.Instance:IsCardStored( sData.id )
unlockManual = AdventureDataProxy.Instance:IsCardUnlock( sData.id )
end
if(needManualShow)then
local manual = {label = {}};
if(inManualStr == nil or inManualStr == "")then
inManualStr = ZhString.ItemTip_None;
end
table.insert(manual.label, self:ActiveText(ZhString.ItemTip_ManualInTip .. inManualStr, inManual));
if(unlockManualStr == nil or unlockManualStr == "")then
unlockManualStr = ZhString.ItemTip_None;
end
table.insert(manual.label, self:ActiveText(ZhString.ItemTip_ManualUnlockTip .. unlockManualStr, unlockManual));
self.contextDatas[ ItemTipAttriType.UnLockInfo ] = manual;
end
-- 解锁 存入属性提示
-- 结婚信息 begin
local weddingData = self.data.weddingData;
if((data:IsMarriageCertificate() or data:IsMarriageRing()) and weddingData)then
local weddingDesc = {};
weddingDesc.label = {};
weddingDesc.label[1] = sData.Desc;
local partnername = weddingData.partnername or ""
local formattime = os.date("%Y/%m/%d", weddingData.weddingtime or 0);
local lintstr = ChangeZoneProxy.Instance:ZoneNumToString(weddingData.zoneid);
weddingDesc.label[2] = string.format(ZhString.ItemTip_WeddingTip,
weddingData.myname,
partnername,
formattime,
lintstr);
self.contextDatas[ ItemTipAttriType.Desc ] = weddingDesc;
end
-- 结婚信息 end
if(sData.NoStorage and sData.NoStorage > 0)then
local noStroage = {};
local storgeDesc = "";
local index = 0;
if(not data:CanStorage(BagProxy.BagType.Storage))then
storgeDesc = storgeDesc .. ZhString.ItemTip_CommonStorage;
index = index + 1;
end
if(not data:CanStorage(BagProxy.BagType.PersonalStorage))then
if(index > 0)then
storgeDesc = storgeDesc .. "/";
end
storgeDesc = storgeDesc .. ZhString.ItemTip_PersonStorage;
index = index + 1;
end
if(not data:CanStorage(BagProxy.BagType.Barrow))then
if(index > 0)then
storgeDesc = storgeDesc .. "/";
end
storgeDesc = storgeDesc .. ZhString.ItemTip_BarrowStorage;
index = index + 1;
end
noStroage.label = string.format(ZhString.ItemTip_NoStorage, storgeDesc);
self.contextDatas[ ItemTipAttriType.NoStorage ] = noStroage;
end
local useItemData = Table_UseItem[itemid];
if(useItemData)then
-- 使用次数限制
if(useItemData.WeekLimit)then
local limitData = {};
limitData.label = string.format(ZhString.ItemTip_UseTimeLimit, 0, useItemData.WeekLimit);
self.contextDatas[ ItemTipAttriType.UseLimit ] = limitData;
local itemid = self.data.staticData.id;
ServiceItemProxy.Instance:CallUseCountItemCmd(itemid);
end
local tipInfo = useItemData.TipsInfo;
if(tipInfo) then
for i=1,#tipInfo do
if(tipInfo[i] == 1)then
local catchMap = Game.Myself.data.userdata:Get(UDEnum.SAVEMAP);
local catchData = Table_Map[catchMap];
if(catchMap and catchData)then
local recordPos = {};
recordPos.label = {};
local posStr = ZhString.ItemTip_Position..catchData.NameZh;
table.insert(recordPos.label, posStr);
self.contextDatas[ ItemTipAttriType.SpecialTip ] = recordPos;
end
end
end
end
end
if (itemid == 5650) then
local soulCrystalTip = {}
local deadLv = Game.Myself.data.userdata:Get(UDEnum.DEADLV)
local deadCoin = Game.Myself.data.userdata:Get(UDEnum.DEADCOIN)
local todayGet = MyselfProxy.Instance:getVarValueByType(Var_pb.EVARTYPE_DEAD_COIN) or 0
soulCrystalTip.label = {
string.format(ZhString.ItemTip_DeadLv, deadLv),
string.format(ZhString.ItemTip_DeadCoinNum, deadCoin, GameConfig.Dead.max_deadcoin),
string.format(ZhString.ItemTip_TodayGet, todayGet)}
self.contextDatas[ ItemTipAttriType.ObsidianSoulCrystalTip ] = soulCrystalTip;
end
end
function ItemTipBaseCell:RemoveTradeLT()
if(self.itemTradeLt)then
self.itemTradeLt:cancel();
self.itemTradeLt = nil;
end
end
local EquipUpgrade_EquipLevel_SpriteMap = {
[1] = {Active = "tips_icon_1", InActive = "tips_icon_1b"},
[2] = {Active = "tips_icon_2", InActive = "tips_icon_2b"},
[3] = {Active = "tips_icon_3", InActive = "tips_icon_3b"},
}
local EquipUpgrade_EquipLevel_Product_Sprite = {
Active = "tips_icon_end",
InActive = "tips_icon_end2",
}
function ItemTipBaseCell.EffectSort(a,b)
return a[1] < b[1]
end
function ItemTipBaseCell:UpdateEquipAttriInfo(data)
local equipInfo = data.equipInfo;
local isfashion = data:IsFashion();
local ismount = data:IsMount();
local propMap = Game.Config_PropName;
local isMyItem = BagProxy.Instance:GetItemByGuid(data.id) ~= nil;
if(equipInfo)then
local decomposeId = equipInfo.equipData.DecomposeID;
if(decomposeId)then
local decompseData = Table_EquipDecompose[decomposeId];
local decompseTip = {};
decompseTip.label = string.format(ZhString.ItemTip_DecomposeLv, decompseData.NameZh);
self.contextDatas[ ItemTipAttriType.EquipDecomposeTip ] = decompseTip
end
if(not ismount and not isfashion)then
local effect = equipInfo.equipData.Effect
local baseEffect = {};
for k,v in pairs(effect)do
if(propMap[k])then
local vstr = propMap[k].IsPercent==1 and v * 100 .. "%" or v;
local iconname = GameConfig.PropIcon[propMap[k].VarName] and string.format('{uiicon=%s}', GameConfig.PropIcon[propMap[k].VarName]) or '{uiicon=tips_icon_01}';
local templab = iconname..propMap[k].PropName.."+"..vstr;
table.insert(baseEffect, { propMap[k].id, templab });
end
end
local lotterData, nextlotteryData = LotteryProxy.Instance:GetEquipLotteryShowDatas(data.staticData.id);
if(lotterData)then
for k,v in pairs(lotterData.Attr)do
if(propMap[k])then
local vstr = propMap[k].IsPercent==1 and v * 100 .. "%" or v;
local iconname = '{uiicon=tips_icon_01}';
local templab = iconname..propMap[k].PropName.."+"..vstr;
table.insert(baseEffect, { propMap[k].id, templab });
end
end
end
if(#baseEffect > 0)then
table.sort(baseEffect, ItemTipBaseCell.EffectSort);
local base = { label = '' };
for i=1,#baseEffect do
if(base.label ~= '')then
base.label = base.label .. "\n"
end
base.label = base.label .. baseEffect[i][2];
end
if(base.label ~= '')then
self.contextDatas[ ItemTipAttriType.EquipBaseAttri ] = base;
end
end
local pvpeffect = equipInfo.equipData.PVPEffect
if(pvpeffect)then
local pvpBaseEffect = {};
for k,v in pairs(pvpeffect)do
if(propMap[k])then
local vstr = propMap[k].IsPercent==1 and v * 100 .. "%" or v;
local iconname = GameConfig.PropIcon[propMap[k].VarName] and string.format('{uiicon=%s}', GameConfig.PropIcon[propMap[k].VarName]) or '{uiicon=tips_icon_01}';
local templab = iconname..propMap[k].PropName.."+"..vstr;
table.insert(pvpBaseEffect, { propMap[k].id, templab });
end
end
local pvp_uniqueEffect = equipInfo:GetPvpUniqueEffect();
if(#pvpBaseEffect > 0 or (pvp_uniqueEffect and #pvp_uniqueEffect > 0))then
local isActive = Game.MapManager:IsPVPMode() or Game.MapManager:IsPVPMode_GVGDetailed();
table.sort(pvpBaseEffect, ItemTipBaseCell.EffectSort);
local pvpBase = {};
pvpBase.label = { ZhString.ItemTip_PvpEquipTip };
local baseStr = "";
for i=1,#pvpBaseEffect do
if(isActive)then
baseStr = baseStr .. pvpBaseEffect[i][2];
else
baseStr = baseStr ..'[c][9c9c9c]' .. pvpBaseEffect[i][2] .. "[/c]";
end
if(i<#pvpBaseEffect)then
baseStr = baseStr .. "\n";
end
end
table.insert(pvpBase.label, baseStr)
if(pvp_uniqueEffect and #pvp_uniqueEffect > 0)then
local pvpspecial = {};
pvpspecial.label = {};
local label = "";
for i=1,#pvp_uniqueEffect do
local id = pvp_uniqueEffect[i].id;
if(isActive)then
label = label..self:FormatBufferStr(id).."\n";
else
label = label..'[c][9c9c9c]' .. self:FormatBufferStr(id).."[/c]\n";
end
end
if(label~="")then
label = string.sub(label, 1, -2);
table.insert(pvpBase.label, label);
end
end
self.contextDatas[ ItemTipAttriType.Pvp_EquipBaseAttri ] = pvpBase;
end
end
if(nextlotteryData)then
local nlotteryEffect = {};
for k,v in pairs(nextlotteryData.Attr)do
if(propMap[k])then
local vstr = propMap[k].IsPercent==1 and v * 100 .. "%" or v;
local iconname = '{uiicon=tips_icon_01}';
local templab = iconname..propMap[k].PropName.."+"..vstr;
table.insert(nlotteryEffect, { propMap[k].id, templab });
end
end
if(#nlotteryEffect > 0)then
table.sort(nlotteryEffect, ItemTipBaseCell.EffectSort);
local nextlottery = {};
nextlottery.label = { string.format(ZhString.ItemTip_EquipLotteryTip, nextlotteryData.Level[1]) };
local nextStr = "";
for i=1,#nlotteryEffect do
if(nextStr ~= '')then
nextStr = nextStr .. "\n"
end
nextStr = nextStr .. nlotteryEffect[i][2];
end
nextlottery.label[2] = nextStr;
self.contextDatas[ ItemTipAttriType.NextEquipLotteryAttri ] = nextlottery;
end
elseif(lotterData)then
local nextlottery = {};
nextlottery.label = ZhString.ItemTip_LotteryMaxTip;
self.contextDatas[ ItemTipAttriType.NextEquipLotteryAttri ] = nextlottery;
end
end
local strengRefine = {label=""};
local strenglab, strengthlab2, refinelab, hrefinelab = "","","","";
if(equipInfo.strengthlv>0)then
local tiplabel;
if(isMyItem)then
local maxlv = BlackSmithProxy.Instance:MaxStrengthLevel(self.data);
tiplabel = string.format(ZhString.ItemTip_StrengthLv, equipInfo.strengthlv, maxlv)
else
tiplabel = string.format(ZhString.ItemTip_StrengthLv_NoMax, equipInfo.strengthlv)
end
strenglab = tiplabel..equipInfo:StrengthInfo(nil, false);
end
if(equipInfo.strengthlv2>0)then
local additionalAttrs = ItemFun.calcStrengthAttr(data.staticData.Quality,
equipInfo.equipData.EquipType,
equipInfo.strengthlv2);
local effects = {}
for k,v in pairs(additionalAttrs) do
local data ={}
data.name = Table_RoleData[k].VarName
data.value = v
table.insert(effects,data)
end
strengthlab2 = string.format(ZhString.ItemTip_StrengthLv2,
equipInfo.strengthlv2,
PropUtil.FormatEffects(effects, 1, " +"));
end
if(equipInfo.refinelv>0)then
local maxlv = self.data.equipInfo.equipData.RefineMaxlv or 0;
local tiplabel, refineTxt = string.format(ZhString.ItemTip_RefineLv, equipInfo.refinelv, maxlv), "";
local refineEffect = equipInfo.equipData.RefineEffect;
local effectName, effectAddValue = next(refineEffect);
if(effectName and effectAddValue)then
local proName = GameConfig.EquipEffect[effectName], effectAddValue * equipInfo.refinelv;
local pro, isPercent = RolePropsContainer.config[effectName], false
if(pro)then
isPercent = pro.isPercent
end
if(isPercent)then
refineTxt = string.format("%s+%s%%", proName, effectAddValue * equipInfo.refinelv * 100);
else
refineTxt = string.format("%s+%s", proName, effectAddValue * equipInfo.refinelv);
end
end
refinelab = tiplabel..refineTxt;
end
if(data.equiped == 1)then
local siteConfig = GameConfig.EquipType[ equipInfo.equipData.EquipType ];
local site = siteConfig and siteConfig.site[1];
local hrEffects = BlackSmithProxy.Instance:GetMyHRefineEffects(site, nil, equipInfo.refinelv);
if(hrEffects and hrEffects[1])then
local proKey, proValue = hrEffects[1][1], hrEffects[1][2];
local nowEN_Str = GameConfig.EquipEffect[proKey] or proKey .. " No Find";
local nowEV_Str = "";
local PropNameConfig = Game.Config_PropName
local config = PropNameConfig[ proKey ];
if(config.IsPercent == 1)then
nowEV_Str = proValue * 100 .. "%";
else
nowEV_Str = proValue
end
if(proValue > 0)then
nowEV_Str = "+" .. nowEV_Str;
end
hrefinelab = ZhString.ItemTip_HRefineAddEffect..nowEN_Str..nowEV_Str;
end
end
strengRefine.label = "";
if(strenglab ~= "")then
strengRefine.label = strenglab;
end
if(strengthlab2 ~= "")then
if(strengRefine.label ~= "")then
strengRefine.label = strengRefine.label .. "\n" .. strengthlab2
else
strengRefine.label = strengthlab2
end
end
if(refinelab ~= "")then
if(strengRefine.label ~= "")then
strengRefine.label = strengRefine.label .. "\n" .. refinelab
else
strengRefine.label = refinelab
end
end
if(hrefinelab ~= "")then
if(strengRefine.label ~= "")then
strengRefine.label = strengRefine.label .. "\n" .. hrefinelab
else
strengRefine.label = hrefinelab
end
end
if(strengRefine.label ~= "")then
self.contextDatas[ ItemTipAttriType.EquipStrengthRefine ] = strengRefine;
end
local uniqueEffect = equipInfo:GetUniqueEffect();
if(uniqueEffect and #uniqueEffect>0)then
local special = {};
special.label = {};
local label = "";
for i=1,#uniqueEffect do
local id = uniqueEffect[i].id;
label = label..self:FormatBufferStr(id).."\n";
end
if(label~="")then
label = string.sub(label, 1, -2);
table.insert(special.label, label);
self.contextDatas[ ItemTipAttriType.EquipSpecial ] = special;
end
end
if(data.enchantInfo)then
local attri = data.enchantInfo:GetEnchantAttrs();
if(#attri>0)then
local enchant = {};
enchant.label = ZhString.ItemTip_Enchant.."\n";
for i=1,#attri do
local enchantStr = "";
if(attri[i].propVO.isPercent)then
enchantStr = string.format("%s [c][1B5EB1]+%s%%[-][/c]", tostring(attri[i].name), tostring(attri[i].value))
else
enchantStr = string.format("%s [c][1B5EB1]+%s[-][/c]", tostring(attri[i].name), tostring(attri[i].value))
end
enchant.label = enchant.label..enchantStr;
if(i<#attri)then
enchant.label = enchant.label.."\n";
end
end
local combineEffects = data.enchantInfo:GetCombineEffects()
for i=1,#combineEffects do
local combineEffect = combineEffects[i];
local buffData = combineEffect and combineEffect.buffData;
if(buffData)then
enchant.label = enchant.label.."\n";
if(combineEffect.isWork)then
enchant.label = enchant.label..string.format("[c][222222]%s:%s[-][/c]",
tostring(buffData.BuffName), tostring(buffData.BuffDesc));
else
enchant.label = enchant.label..string.format("[c][9c9c9c]%s:%s(%s)[-][/c]",
tostring(buffData.BuffName), tostring(buffData.BuffDesc), tostring(combineEffect.WorkTip));
end
end
end
self.contextDatas[ ItemTipAttriType.EquipEnchant ] = enchant;
end
end
local cardSlotNum, replaceCount = data.cardSlotNum, data.replaceCount or 0;
if((cardSlotNum and cardSlotNum>0) or replaceCount and replaceCount>0)then
local card = {};
local equipCards = data.equipedCardInfo or {};
card.label = {};
for i=1,cardSlotNum do
local cardTip = "";
if(equipCards[i])then
local iconStr = string.format("{uiicon=card_icon_%02d} ", equipCards[i].staticData.Quality);
cardTip = iconStr..ColorUtil.TipLightColor..equipCards[i].staticData.NameZh.."[-]".."\n";
local bufferIds = equipCards[i].cardInfo.BuffEffect.buff;
for j=1,#bufferIds do
cardTip = cardTip..self:FormatBufferStr(bufferIds[j]).."\n";
end
cardTip = string.sub(cardTip, 1, -2);
else
cardTip = string.format("{uiicon=card_icon_0} %s%s[-]", ColorUtil.TipDarkColor, ZhString.ItemTip_EmptyCardSlot);
end
table.insert(card.label, cardTip)
end
for i=1,replaceCount do
local replaceTip = string.format("{uiicon=card_icon_lock} %s%s[-]", ColorUtil.TipDarkColor, ZhString.ItemTip_LockCardSlot);
table.insert(card.label, replaceTip)
end
self.contextDatas[ ItemTipAttriType.EquipCards ] = card;
end
-- if(not isfashion)then
local proinfo = {};
local proban = true; --CustomStrColor.BanRed;
local prostr = "";
local pros = self.data.equipInfo.equipData.CanEquip;
local myPro = MyselfProxy.Instance:GetMyProfession()
for i =1,#pros do
if(pros[i] == 0)then
proban = false;
prostr = ZhString.ItemTip_AllPro;
break;
else
if(myPro == pros[i])then
proban = false;
end
if(Table_Class[pros[i]])then
prostr = prostr..Table_Class[pros[i]].NameZh;
end
if(i~=#pros)then
prostr = prostr.."/";
end
end
end
if(proban)then
proinfo.label = "[c]"..CustomStrColor.BanRed..ZhString.ItemTip_Profession..prostr.."[-][/c]";
else
proinfo.label = ZhString.ItemTip_Profession..prostr;
end
proinfo.hideline = true;
self.contextDatas[ ItemTipAttriType.EquipJobs ] = proinfo;
-- end
-- 装备升级信息
local upgradeData = data.equipInfo.upgradeData;
if(upgradeData)then
local equiplv = data.equipInfo.equiplv;
local maxUplv = data.equipInfo.upgrade_MaxLv;
if(maxUplv>0)then
local myClass = Game.Myself.data.userdata:Get(UDEnum.PROFESSION);
local classDepth = ProfessionProxy.Instance:GetDepthByClassId(myClass);
local upgradeInfo = {};
upgradeInfo.label = { ZhString.ItemTip_UpgradeTip };
local hasUnlocklv;
for i=1,maxUplv do
local buffid = equipInfo:GetUpgradeBuffIdByEquipLv(i);
if(buffid)then
local text = Table_Buffer[buffid] and Table_Buffer[buffid].Dsc or buffid .. " No Buff Dsc"; --ItemUtil.getBufferDescById(buffid)
local spriteText;
if(i > equiplv)then
local sprite_InActive = "tips_icon_" .. i .. "b";
spriteText = string.format("{uiicon=%s} ", sprite_InActive);
-- spriteText = string.format("{uiicon=%s} ", EquipUpgrade_EquipLevel_SpriteMap[i].InActive);
text = "[c][9d9d9d]" .. text .. "[-][/c]";
local canUpgrade, lv = equipInfo:CanUpgrade_ByClassDepth(classDepth, i);
if(not canUpgrade)then
hasUnlocklv = true;
table.insert( upgradeInfo.label, string.format(ZhString.ItemTip_NoUpgradeTip, ZhString.ChinaNumber[lv]) );
break;
end
else
local sprite_Active = "tips_icon_" .. i;
spriteText = string.format("{uiicon=%s} ", sprite_Active);
local isEffect, lv = equipInfo:CanUpgrade_ByClassDepth(classDepth, i);
if(not isEffect)then
text = text .. string.format(ZhString.ItemTip_NoUpgradeInfoEffectTip, ZhString.ChinaNumber[lv]);
end
-- = "[c][9d9d9d](%s转之后有效)[-][/c]",
-- spriteText = string.format("{uiicon=%s} ", EquipUpgrade_EquipLevel_SpriteMap[i].Active);
end
table.insert(upgradeInfo.label, spriteText .. text);
end
end
if(not hasUnlocklv)then
local canUpgrade, lv = equipInfo:CanUpgrade_ByClassDepth(classDepth, maxUplv + 1);
if(not canUpgrade)then
hasUnlocklv = true;
table.insert( upgradeInfo.label, string.format(ZhString.ItemTip_NoUpgradeTip, ZhString.ChinaNumber[lv]) );
end
end
if(not hasUnlocklv and upgradeData.Product)then
local productData = Table_Item[upgradeData.Product];
local productText = "[c][9d9d9d]" .. string.format(ZhString.ItemTip_UpgradeFinalTip, productData.NameZh) .. "[-][/c]";
local spriteText = string.format("{uiicon=%s} ", EquipUpgrade_EquipLevel_Product_Sprite.InActive);
table.insert(upgradeInfo.label, spriteText .. productText);
local endBuff = equipInfo:GetUpgradeBuffIdByEquipLv(maxUplv + 1);
if(endBuff)then
local endBuffDsc = Table_Buffer[endBuff] and Table_Buffer[endBuff].Dsc or endBuff .. ": No Buff Data";
local text = string.format(ZhString.ItemTip_UpEndBuffTip, productData.NameZh, tostring(endBuffDsc));
table.insert(upgradeInfo.label, "[c][9d9d9d]"..text.."[-][/c]");
end
end
self.contextDatas[ ItemTipAttriType.EquipUpInfo ] = upgradeInfo;
-- 装备升级下一级材料信息
if(equiplv < maxUplv or (equiplv == maxUplv and upgradeData.Product))then
local upgradeMaterial = {};
local shortcutID = upgradeData.ShortcutID;
local umtext = {};
if(shortcutID)then
if(shortcutID)then
local shortData = Table_ShortcutPower[shortcutID];
local mapid, npcid = shortData.Event.mapid, shortData.Event.npcid;
local mapName = mapid and Table_Map[mapid].CallZh
local npcName = npcid and Table_Npc[npcid].NameZh;
table.insert(umtext, string.format(ZhString.ItemTip_UpgradeNpcTip, mapName, npcName));
end
end
table.insert(umtext, string.format(ZhString.ItemTip_UpMaterialTip));
local bagtype = BagProxy.Instance:Get_PackageMaterialCheck_BagTypes(BagProxy.MaterialCheckBag_Type.Upgrade);
local materials = equipInfo:GetUpgradeMagerialsByEquipLv(equiplv + 1);
for i=1,#materials do
local material = materials[i];
local msdata = Table_Item[material.id];
if(material.id~=100 and msdata)then
local nownum = BagProxy.Instance:GetItemNumByStaticID(material.id,bagtype);
local neednum = material.num;
local celllab = msdata.NameZh .. ZhString.ItemTip_CHSpace .. nownum .. "/" .. neednum;
table.insert(umtext, celllab);
end
end
upgradeMaterial.label = umtext;
self.contextDatas[ ItemTipAttriType.EquipUpMaterial ] = upgradeMaterial;
end
end
end
-- 装备是否可以强化,精炼,附魔
local canStrength, canRefine, canEnchant = equipInfo:CanStrength(), equipInfo:CanRefine(), equipInfo:CanEnchant();
local str = "";
if(not canStrength)then
if(str ~= "")then
str = str .. "/"
end
str = str .. ZhString.ItemTip_NoStrength;
end
if(not canRefine)then
if(str ~= "")then
str = str .. "/"
end
str = str .. ZhString.ItemTip_NoRefine;
end
if(not canEnchant)then
if(str ~= "")then
str = str .. "/"
end
str = str .. ZhString.ItemTip_NoEnchant;
end
if(str ~= "")then
str = "[c]" .. CustomStrColor.BanRed .. ZhString.ItemTip_EquipCanTip .. str .. "[-][/c]";
local canInfo = {};
canInfo.label = str;
canInfo.hideline = true;
self.contextDatas[ ItemTipAttriType.EquipCanInfo ] = canInfo;
end
end
-- 装备套装属性
local suitInfo = data.suitInfo;
if(suitInfo)then
local equipSuitDatas = suitInfo:GetEquipSuitDatas();
if(#equipSuitDatas>0)then
local suit = {label = {}};
for k=1,#equipSuitDatas do
local equipSuitData = equipSuitDatas[k];
table.insert(suit.label, string.format(ZhString.ItemTip_SuitInfo, k));
table.insert(suit.label, equipSuitData:GetSuitName());
local effectStr;
if(data.equiped == 1 and equipSuitData:CheckIsActive())then
effectStr = string.format(ZhString.ItemTip_SuitInfoTip, equipSuitData:GetSuitNum())..tostring(equipSuitData:GetEffectDesc());
else
effectStr = '[c][9d9d9d]' .. string.format(ZhString.ItemTip_SuitInfoTip, equipSuitData:GetSuitNum())..tostring(equipSuitData:GetEffectDesc()).."[-][/c]"
end
table.insert(suit.label, effectStr);
end
self.contextDatas[ ItemTipAttriType.EquipSuit ] = suit;
end
end
end
function ItemTipBaseCell:UpdateComposeInfo(data)
local sData = data.staticData;
if(not sData)then
return;
end
local composeData = Table_Compose[sData.ComposeID];
local productId = composeData and composeData.Product.id;
if(productId)then
local isPic = data:IsPic();
-- 图纸显示合成道具的特色属性
if(isPic)then
local itemData = ItemData.new("Fashion", productId);
local uniqueEffect = itemData.equipInfo:GetUniqueEffect();
if(uniqueEffect and #uniqueEffect>0)then
local picSpecial = {};
picSpecial.label = {};
local label = "";
for i=1,#uniqueEffect do
local id = uniqueEffect[i].id;
label = label..self:FormatBufferStr(id).."\n";
end
if(label~="")then
label = string.sub(label, 1, -2);
-- table.insert(picSpecial.label, ZhString.ItemTip_PicSpecialAttri);
table.insert(picSpecial.label, label);
self.contextDatas[ ItemTipAttriType.ComposeProductAttri ] = picSpecial;
end
end
end
-- 合成信息(如果是图纸 显示为:所需材料; 如果是卡片碎片 显示为合成卡片+碎片) 成品不显示合成信息
if(productId ~= sData.id)then
local compose = {};
compose.label = {};
local tiplabel = "";
-- 图纸
if(isPic)then
tiplabel = ZhString.ItemTip_PicMake;
else
local product = Table_Item[composeData.Product.id];
tiplabel = string.format(ZhString.ItemTip_Compose, product.NameZh);
end
if(tiplabel~="")then
table.insert(compose.label, tiplabel);
local failIndexMap = {}
if(composeData.FailStayItem)then
for i=1,#composeData.FailStayItem do
local index = composeData.FailStayItem[i];
if(index)then
failIndexMap[index] = 1;
end
end
end
local bagtype = BagProxy.Instance:Get_PackageMaterialCheck_BagTypes(BagProxy.MaterialCheckBag_Type.Produce);
for i = 1,#composeData.BeCostItem do
if(not failIndexMap[i])then
local material = composeData.BeCostItem[i];
local msdata = Table_Item[material.id];
if(msdata)then
local nownum = BagProxy.Instance:GetItemNumByStaticID(material.id,bagtype);
local neednum = material.num;
local colorStr = nownum>=neednum and ColorUtil.TipLightColor or ColorUtil.TipDarkColor;
local celllab = string.format("%s%s %d/%d[-]", colorStr, msdata.NameZh, nownum, neednum);
table.insert(compose.label, celllab);
end
end
end
end
self.contextDatas[ ItemTipAttriType.ComposeInfo ] = compose;
end
end
end
function ItemTipBaseCell:UpdateCardAttriInfo(data)
-- 卡片道具信息
if(data.cardInfo)then
-- 卡片特色属性
local special = {};
special.label = {};
local bufferIds = data.cardInfo.BuffEffect.buff;
if(bufferIds)then
for i=1,#bufferIds do
local str = ItemUtil.getBufferDescById(bufferIds[i]);
local bufferStrs = string.split(str, "\n")
-- 每条buffer的描述根据"\n" 分为多条buffer
for j=1,#bufferStrs do
local cardTip = "{uiicon=tips_icon_01} "..bufferStrs[j];
table.insert(special.label, cardTip);
end
end
end
self.contextDatas[ ItemTipAttriType.CardInfo ] = special;
-- 卡片不可制作
if(data:CheckItemCardType(Item_CardType.Raffle))then
local noMakeCard = {};
noMakeCard.label = ZhString.ItemTip_NoMakeCard;
noMakeCard.hideline = true;
self.contextDatas[ ItemTipAttriType.NoMakeCard ] = noMakeCard;
end
end
end
function ItemTipBaseCell:UpdateFoodInfo(data)
if(data:IsFood())then
-- update FoodInfo
local tipFoodInfo = {};
tipFoodInfo.label = {};
local food_Sdata = data:GetFoodSData();
local desc;
-- 营养价值
desc = data:GetFoodEffectDesc();
if(desc ~= nil)then
table.insert(tipFoodInfo.label, ZhString.ItemTip_Food_EffectTip .. desc);
end
-- 持续时间
if(food_Sdata.Duration)then
desc = string.format(ZhString.ItemTip_Food_FullProgressTip, math.floor(food_Sdata.Duration/60))
table.insert(tipFoodInfo.label, desc);
end
-- 存储热量
desc = nil;
local hpStr, spStr;
if(food_Sdata.SaveHP)then
hpStr = string.format(ZhString.ItemTip_SavePower_Desc, "Hp", food_Sdata.SaveHP);
end
if(food_Sdata.SaveSP)then
spStr = string.format(ZhString.ItemTip_SavePower_Desc, "Sp", food_Sdata.SaveSP);
end
if(hpStr and spStr)then
desc = hpStr .. ZhString.ItemTip_SavePower_And .. spStr;
else
desc = hpStr and hpStr or spStr;
end
if(desc ~= nil)then
table.insert(tipFoodInfo.label, ZhString.Itemtip_SavePower .. ZhString.ItemTip_SavePower_Add .. desc);
end
-- 饱腹感
-- if(food_Sdata.FullProgress)then
-- desc = ZhString.ItemTip_Food_FullProgressTip .. "+" .. food_Sdata.FullProgress
-- table.insert(tipFoodInfo.label, desc);
-- end
-- 料理难度
local cookHard = food_Sdata.CookHard;
if(cookHard)then
desc = "";
local starNum = math.floor(cookHard/2);
for i=1,starNum do
desc = desc .. "{uiicon=food_icon_08}";
end
if(cookHard%2==1)then
desc = desc .. "{uiicon=food_icon_09}";
end
if(desc ~= "")then
table.insert(tipFoodInfo.label, ZhString.ItemTip_Food_CookHardTip .. desc);
end
end
-- 增高变矮
local height = food_Sdata.Height;
if(height)then
desc = nil;
if(height > 0)then
desc = ZhString.ItemTip_Food_HeightTip_Add;
elseif(height < 0)then
desc = ZhString.ItemTip_Food_HeightTip_Minus
end
if(desc)then
for i=1,math.abs(height) do
desc = desc .. "{uiicon=food_icon_10}"
end
end
table.insert(tipFoodInfo.label, desc);
end
-- 变胖变瘦
local weight = food_Sdata.Weight;
if(weight)then
desc = nil;
if(weight > 0)then
desc = ZhString.ItemTip_Food_WeightTip_Add;
elseif(weight < 0)then
desc = ZhString.ItemTip_Food_WeightTip_Minus;
end
if(desc)then
for i=1,math.abs(weight) do
desc = desc .. "{uiicon=food_icon_10}"
end
end
table.insert(tipFoodInfo.label, desc);
end
self.contextDatas[ ItemTipAttriType.FoodInfo ] = tipFoodInfo;
-- local prop = Game.Config_PropName[ k]
-- food_Sdata
local userdata = Game.Myself.data.userdata;
local foodAdvInfo = { label = {} }
local maxCooklv = GameConfig.Food.MaxCookFoodLv;
local cookInfo = FoodProxy.Instance:Get_FoodCookExpInfo(data.staticData.id)
local cookerlv = cookInfo and cookInfo.level or 0;
local cooklvAttr = food_Sdata.CookLvAttr;
for k,v in pairs(cooklvAttr)do
local prop = Game.Config_PropName[ k]
local str = string.format(ZhString.ItemTip_FoodCookTip, maxCooklv, prop.PropName, v);
str = self:ActiveText(str, cookerlv >= maxCooklv);
table.insert(foodAdvInfo.label, str);
end
local tasterlvAttr = food_Sdata.TasteLvAttr;
local maxTasterlv = GameConfig.Food.MaxTasterFoodLv;
local tasteInfo = FoodProxy.Instance:Get_FoodEatExpInfo(data.staticData.id)
local tasterlv = tasteInfo and tasteInfo.level or 0;
for k,v in pairs(tasterlvAttr)do
local prop = Game.Config_PropName[ k]
local str = string.format(ZhString.ItemTip_FoodTasteTip, maxTasterlv, prop.PropName, v);
str = self:ActiveText(str, tasterlv >= maxTasterlv);
table.insert(foodAdvInfo.label, str);
end
self.contextDatas[ ItemTipAttriType.FoodAdvInfo ] = foodAdvInfo;
end
end
function ItemTipBaseCell:UpdatePetEggInfo(data)
local petEggInfo = data.petEggInfo;
if(petEggInfo)then
local briefInfo = {};
briefInfo.label = {};
if(petEggInfo.petid)then
local monsterName = Table_Monster[petEggInfo.petid] and Table_Monster[petEggInfo.petid].NameZh or "UnKnown";
table.insert(briefInfo.label, string.format(ZhString.ItemTip_PetEgg_MonsterName, monsterName));
end
if(petEggInfo.lv)then
table.insert(briefInfo.label, string.format(ZhString.ItemTip_PetEgg_Level, petEggInfo.lv));
end
if(petEggInfo.friendlv)then
table.insert(briefInfo.label, string.format(ZhString.ItemTip_PetEgg_Friendly, petEggInfo.friendlv));
end
local skillInfo;
local skillids = petEggInfo.skillids;
if(skillids and #skillids>0)then
skillInfo = {};
skillInfo.label = { ZhString.ItemTip_PetEgg_Skill };
for i=1,#skillids do
local skillConfig = Table_Skill[skillids[i]];
if(skillConfig)then
table.insert(skillInfo.label, skillConfig.NameZh .. " Lv." .. skillConfig.Level);
end
end
end
local equipInfo;
local equips = petEggInfo.equips;
if(equips and #equips>0)then
equipInfo = {};
equipInfo.label = { ZhString.ItemTip_PetEgg_Equip };
for i=1,#equips do
table.insert(equipInfo.label, equips[i].staticData.NameZh);
end
end
local lastInfo = briefInfo;
self.contextDatas[ ItemTipAttriType.PetEggInfo_Brief ] = briefInfo;
if(skillInfo ~= nil)then
briefInfo.hideline = true;
lastInfo = skillInfo;
self.contextDatas[ ItemTipAttriType.PetEggInfo_Skill ] = skillInfo;
end
if(equipInfo ~= nil)then
if(skillInfo~=nil)then
skillInfo.hideline = true;
elseif(briefInfo~=nil)then
briefInfo.hideline = true;
end
lastInfo = equipInfo;
self.contextDatas[ ItemTipAttriType.PetEggInfo_Equip ] = equipInfo;
end
-- if(not data:CanTrade())then
-- table.insert(lastInfo.label, ZhString.ItemTip_PetEgg_Exchange_NotCan);
-- end
end
end
function ItemTipBaseCell:UpdateCodeInfo(data)
if(data == nil)then
return;
end
local codeData = data.CodeData;
if(codeData and codeData.code and codeData.code ~= "")then
local code = data.code;
local codeDesc = {};
codeDesc.label = string.format(ZhString.ItemTip_Code_Desc, codeData.code);
self.contextDatas[ ItemTipAttriType.Code ] = codeDesc;
else
-- KFC活动
if(self.data.staticData.id == 6081)then
ServiceItemProxy.Instance:CallUseCodItemCmd(data.id);
end
end
end
function ItemTipBaseCell:UpdateRecommandReasonInfo( )
if(self.data == nil)then
return;
end
local recommandDesc = {};
local recommandReasonData = Table_recommend_reason[self.data.staticData.id]
if recommandReasonData then
recommandDesc.label = string.format(ZhString.ItemTip_Recommend, recommandReasonData.reason);
self.contextDatas[ ItemTipAttriType.RecommandReason ] = recommandDesc;
self:ResetAttriDatas();
end
end
function ItemTipBaseCell:ResetAttriDatas(resetPos)
local maxIndex = ItemTipAttriType.MAX_INDEX;
if(not self.listDatas)then
self.listDatas = {};
else
TableUtility.ArrayClear(self.listDatas);
end
for i=1,ItemTipAttriType.MAX_INDEX do
if(self.contextDatas[i])then
table.insert(self.listDatas, self.contextDatas[i]);
end
end
if(resetPos == nil)then
resetPos = true;
end
self.attriCtl:ResetDatas(self.listDatas, true, resetPos);
if(self.main and resetPos)then
self.main:UpdateAnchors();
end
end
-- attri end
function ItemTipBaseCell:UpdateTradePrice(evt)
if(Slua.IsNull(self.gameObject))then
self:Exit();
return;
end
local data = evt.data;
if(self.data)then
local key = FunctionItemTrade.Me():CombineItemKey(self.data)
local id, price = data.id, data.price;
if(id == key)then
local tradeData = self.contextDatas[ ItemTipAttriType.TradePrice ];
if(tradeData)then
if(price == 0)then
tradeData.label = ZhString.ItemTip_TradePrice..ZhString.ItemTip_TradePriceWait;
else
tradeData.label = ZhString.ItemTip_TradePrice.."{itemicon=100} "..StringUtil.NumThousandFormat(price);
end
end
self:ResetAttriDatas(false);
end
end
end
function ItemTipBaseCell:HideEquipedSymbol()
self.equipTip:SetActive(false);
end
function ItemTipBaseCell:SetNoEffectTip(active)
local noEffectTip = self.contextDatas[ItemTipAttriType.NoEffectTip];
if(active)then
if(noEffectTip == nil)then
local noEffectTip = {};
noEffectTip.label = "[c]" .. CustomStrColor.BanRed .. ZhString.ItemTip_NoEffectTip .. "[-][/c]";
self.contextDatas[ItemTipAttriType.NoEffectTip] = noEffectTip
self:ResetAttriDatas();
end
else
self.contextDatas[ItemTipAttriType.NoEffectTip] = nil;
self:ResetAttriDatas();
end
end
function ItemTipBaseCell:AddOtherTip(index, labels, hideline, refresh)
local otherTip = {};
otherTip.label = labels;
otherTip.hideline = hideline;
self.contextDatas[ index ] = otherTip;
if(refresh)then
self:ResetAttriDatas();
end
end
function ItemTipBaseCell:ActiveCountChooseBord(b, countChoose_maxCount)
if(self.countChooseBord == nil)then
return;
end
if(b)then
self.countChoose_maxCount = countChoose_maxCount;
self.countChooseBord:SetActive(true);
tempV3:Set(0, -90, 0);
self.centerBottom.transform.localPosition = tempV3;
self.countChoose_CountInput.value = self.chooseCount;
-- self.countChoose_Count.text = self.chooseCount;
else
self.countChooseBord:SetActive(false);
tempV3:Set(0, -145, 0);
self.centerBottom.transform.localPosition = tempV3;
end
-- CountChooseBord
end
function ItemTipBaseCell:Exit()
TimeTickManager.Me():ClearTick(self, 11)
TimeTickManager.Me():ClearTick(self, 12)
end
function ItemTipBaseCell:InitEvent()
self:AddGameObjectComp();
if(self.isEvent_Add == true)then
return;
end
self.isEvent_Add = true;
EventManager.Me():AddEventListener(ItemTradeEvent.TradePriceChange, self.UpdateTradePrice, self);
EventManager.Me():AddEventListener(ServiceEvent.ItemUseCountItemCmd, self.UpdateUseLimit, self);
EventManager.Me():AddEventListener(ServiceEvent.ItemGetCountItemCmd, self.UpdateGetLimit, self);
EventManager.Me():AddEventListener(ServiceEvent.ItemUseCodItemCmd, self.UpdateGetCodItem, self);
end
function ItemTipBaseCell:UpdateTradePrice(evt)
if(Slua.IsNull(self.gameObject))then
self:Exit();
return;
end
local data = evt.data;
if(self.data)then
local key = FunctionItemTrade.Me():CombineItemKey(self.data)
local id, price = data.id, data.price;
if(id == key)then
local tradeData = self.contextDatas[ ItemTipAttriType.TradePrice ];
if(tradeData)then
if(price == 0)then
tradeData.label = ZhString.ItemTip_TradePrice..ZhString.ItemTip_TradePriceWait;
else
tradeData.label = ZhString.ItemTip_TradePrice.."{itemicon=100} "..StringUtil.NumThousandFormat(price);
end
end
self:ResetAttriDatas(false);
end
end
end
function ItemTipBaseCell:UpdateUseLimit(evt)
local data = evt.data;
local itemid,count = data.itemid, data.count;
if(self.data and self.data.staticData.id ~= itemid)then
return;
end
local useData = Table_UseItem[itemid];
local useLimitData = self.contextDatas[ ItemTipAttriType.UseLimit ];
if(useLimitData and useData and useData.WeekLimit)then
local maxTime = useData.WeekLimit
if(self.hasMonthVIP)then
useLimitData.label = ZhString.ItemTip_MonthNoLimit;
else
useLimitData.label = string.format(ZhString.ItemTip_UseTimeLimit, count, maxTime);
end
self:ResetAttriDatas();
end
end
function ItemTipBaseCell:UpdateGetLimit(evt)
local data = evt.data;
local itemid,count = data.itemid, data.count;
if(self.data == nil or self.data.staticData.id ~= itemid)then
return;
end
local sData = self.data.staticData;
local mylv = Game.Myself.data.userdata:Get(UDEnum.ROLELEVEL)
local getLimitData = self.contextDatas[ ItemTipAttriType.UseLimit ];
if(getLimitData)then
local tipStr = "";
local limitCfg = sData.GetLimit;
local str;
if(limitCfg.type == 1)then
str = ZhString.ItemTip_GetLimit_Day;
elseif(limitCfg.type == 7)then
str = ZhString.ItemTip_GetLimit_Weak;
end
local limitCount = ItemData.Get_GetLimitCount(sData.id);
if(tipStr ~= "")then
tipStr = tipStr .. " "
end
tipStr = str .. " " .. count .. "/" .. limitCount
getLimitData.label = ZhString.ItemTip_GetLimit .. tipStr;
self:ResetAttriDatas();
end
end
function ItemTipBaseCell:UpdateGetCodItem(data)
if(self.data == nil)then
return;
end
if(self.data.id == data.guid)then
return;
end
local code = data.code;
local codeDesc = {};
codeDesc.label = string.format(ZhString.ItemTip_Code_Desc, code);
self.contextDatas[ ItemTipAttriType.Code ] = codeDesc;
self:ResetAttriDatas();
end
function ItemTipBaseCell:OnDestroy()
self:RemoveEvent();
end
function ItemTipBaseCell:RemoveEvent()
self:RemoveTradeLT();
if(self.isEvent_Add ~= true)then
return;
end
self.isEvent_Add = false;
EventManager.Me():RemoveEventListener(ItemTradeEvent.TradePriceChange, self.UpdateTradePrice, self)
EventManager.Me():RemoveEventListener(ServiceEvent.ItemUseCountItemCmd, self.UpdateUseLimit, self);
EventManager.Me():RemoveEventListener(ServiceEvent.ItemGetCountItemCmd, self.UpdateGetLimit, self);
EventManager.Me():RemoveEventListener(ServiceEvent.ItemUseCodItemCmd, self.UpdateGetCodItem, self);
end
function ItemTipBaseCell:OnDisable()
end
function ItemTipBaseCell:ShowMonsterlvTip()
if self.data and self.data.staticData and self.data.staticData.MonsterLevel then
local data = {};
data.label = string.format(ZhString.ItemTip_MonsterLVTip,self.data.staticData.MonsterLevel);
self.contextDatas[ItemTipAttriType.MonsterLevel] = data
self:ResetAttriDatas()
end
end