505 lines
14 KiB
Plaintext
505 lines
14 KiB
Plaintext
autoImport("ItemTipBaseCell");
|
|
ItemTipComCell = class("ItemTipComCell", ItemTipBaseCell);
|
|
|
|
autoImport("ItemTipFuncCell");
|
|
autoImport("ItemSecendFuncBord");
|
|
|
|
local tempV3 = LuaVector3();
|
|
function ItemTipComCell:ctor(obj, index)
|
|
ItemTipComCell.super.ctor(self, obj);
|
|
self.index = index;
|
|
end
|
|
|
|
function ItemTipComCell:Init()
|
|
ItemTipComCell.super.Init(self);
|
|
|
|
self.bg = self:FindComponent("Bg", UISprite);
|
|
self.tips = self:FindComponent("Tips", UILabel);
|
|
|
|
self.refreshTip_GO = self:FindGO("RefreshTip");
|
|
if(self.refreshTip_GO)then
|
|
self.refreshTip = self:FindComponent("Label", UILabel, self.refreshTip_GO);
|
|
end
|
|
|
|
self.beforePanel = self:FindGO("BeforePanel");
|
|
|
|
self.func = {};
|
|
self.bottomBtns = self:FindGO("BottomButtons");
|
|
local style1, style2, style3 = {},{},{};
|
|
style1.obj = self:FindGO("Style1", self.bottomBtns);
|
|
style2.obj = self:FindGO("Style2", self.bottomBtns);
|
|
style3.obj = self:FindGO("Style3", self.bottomBtns);
|
|
style3.morebg = self:FindComponent("MoreBg", UISprite,style3.obj);
|
|
self:AddButtonEvent("FuncBtnMore");
|
|
self:InitFuncBtnStyle(1, style1);
|
|
self:InitFuncBtnStyle(2, style2);
|
|
self:InitFuncBtnStyle(5, style3);
|
|
self.func.style = {style1,style2,style3};
|
|
|
|
self.LockRoot=self:FindGO("LockRoot");
|
|
self.LockDes=self:FindComponent("LockMenuDes",UILabel);
|
|
|
|
self.showfpButton = self:FindGO("ShowFPreviewButton");
|
|
if(self.showfpButton)then
|
|
self:AddClickEvent(self.showfpButton, function (go)
|
|
self:PassEvent(ItemTipEvent.ShowFashionPreview, self);
|
|
end);
|
|
end
|
|
|
|
self.showupButton = self:FindGO("ShowUpgradeButton");
|
|
if(self.showupButton)then
|
|
self.showupButton_Symbol = self:FindComponent("Symbol", UISprite, self.showupButton);
|
|
self:AddClickEvent(self.showupButton, function ()
|
|
self:PassEvent(ItemTipEvent.ShowEquipUpgrade, self);
|
|
end);
|
|
end
|
|
end
|
|
|
|
function ItemTipComCell:InitFuncBtnStyle(num, container)
|
|
container.button = {};
|
|
for i = 1,num do
|
|
local obj = self:FindGO("FuncBtn"..i, container.obj);
|
|
container.button[i] = ItemTipFuncCell.new(obj);
|
|
container.button[i]:AddEventListener(MouseEvent.MouseClick, self.ClickTipFunc, self)
|
|
end
|
|
end
|
|
|
|
function ItemTipComCell:ClickTipFunc(cellCtl)
|
|
local data = cellCtl.data;
|
|
if(data)then
|
|
local childFunction = data.childFunction;
|
|
if(childFunction)then
|
|
self:ShowSecendFunc(childFunction, data.childFunction_Tip, self.beforePanel, cellCtl.bg);
|
|
else
|
|
if(data.type == "GotoUse")then
|
|
self:PassEvent(ItemTipEvent.ShowGotoUse, self);
|
|
return;
|
|
end
|
|
|
|
local count = self.chooseCount or 1;
|
|
local callback = data.callback;
|
|
if(callback)then
|
|
self:UpdateCountChooseBordButton();
|
|
callback(data.callbackParam, count);
|
|
else
|
|
MsgManager.FloatMsgTableParam(nil, data.type .. " Not Implement")
|
|
end
|
|
-- 使用功能當數量大於1不關閉功能提示
|
|
if(data.type == "Apply" and self.data.num>count and (not self.data.staticData.UseMode or self.data.staticData.UseMode==0))then
|
|
return;
|
|
end
|
|
if(data.noClose)then
|
|
return;
|
|
end
|
|
self:PassEvent(ItemTipEvent.ClickTipFuncEvent);
|
|
end
|
|
end
|
|
end
|
|
|
|
function ItemTipComCell:SetData(data)
|
|
self.data = data;
|
|
if(data)then
|
|
self.gameObject:SetActive(true);
|
|
|
|
ItemTipComCell.super.SetData(self, data);
|
|
|
|
self.scrollview:ResetPosition();
|
|
|
|
self.scrollview.gameObject:SetActive(false);
|
|
self.scrollview.gameObject:SetActive(true);
|
|
|
|
self:UpdateShowFpButton();
|
|
-- self:UpdateShowUpButton();
|
|
else
|
|
self.gameObject:SetActive(false);
|
|
end
|
|
end
|
|
|
|
function ItemTipComCell:UpdateShowFpButton()
|
|
local data = self.data;
|
|
local myCreatureData = Game.Myself.data
|
|
if(self.showfpButton)then
|
|
if(data:IsPic())then
|
|
local composeId = data.staticData.ComposeID;
|
|
local productId = composeId and Table_Compose[ composeId ] and Table_Compose[ composeId ].Product.id;
|
|
local product = productId and ItemData.new("Product", productId);
|
|
if(product and product:CanEquip())then
|
|
self.showfpButton:SetActive(true);
|
|
else
|
|
self.showfpButton:SetActive(false);
|
|
end
|
|
elseif(data:EyeCanEquip())then
|
|
self.showfpButton:SetActive(true);
|
|
elseif(data:HairCanEquip())then
|
|
self.showfpButton:SetActive(true);
|
|
else
|
|
if(data:IsFashion() or (data.equipInfo and (data.equipInfo:IsWeapon() or data.equipInfo:IsMount())))then
|
|
if(data:CanEquip(data.equipInfo:IsMount()))then
|
|
if not myCreatureData:IsInMagicMachine() then
|
|
self.showfpButton:SetActive(true);
|
|
else
|
|
self.showfpButton:SetActive(false);
|
|
end
|
|
else
|
|
self.showfpButton:SetActive(false);
|
|
end
|
|
else
|
|
if(data.equipInfo and data.equipInfo.equipData.Type == "Shield")then
|
|
local class = myCreatureData.userdata:Get(UDEnum.PROFESSION);
|
|
if(class == 72 or class == 73 or class == 74)then
|
|
self.showfpButton:SetActive(true);
|
|
else
|
|
self.showfpButton:SetActive(false);
|
|
end
|
|
else
|
|
self.showfpButton:SetActive(false);
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
local SpriteBlue = Color(79/255,106/255,177/255,1);
|
|
local SpriteRed = Color(255/255,0/255,0/255,1);
|
|
function ItemTipComCell:UpdateShowUpButton()
|
|
local data = self.data;
|
|
|
|
if(self.showupButton)then
|
|
if(data and data.equipInfo and data.equipInfo.upgradeData)then
|
|
self.showupButton:SetActive(true);
|
|
|
|
if(not data.equipInfo:CanUpgrade())then
|
|
self.showupButton:SetActive(false);
|
|
else
|
|
if(data.equipInfo:CheckCanUpgradeSuccess(true))then
|
|
self.showupButton_Symbol.color = SpriteBlue;
|
|
else
|
|
self.showupButton_Symbol.color = SpriteRed;
|
|
end
|
|
end
|
|
else
|
|
self.showupButton:SetActive(false);
|
|
end
|
|
end
|
|
end
|
|
|
|
function ItemTipComCell:SetDownTipText(tips)
|
|
if(tips and tips~="")then
|
|
self.tips.gameObject:SetActive(true);
|
|
self.tips.text = tips;
|
|
else
|
|
self.tips.gameObject:SetActive(false);
|
|
end
|
|
|
|
self:UpdateTipFunc({});
|
|
end
|
|
|
|
function ItemTipComCell:HideGetPath()
|
|
self:ActiveGetPath(false);
|
|
end
|
|
|
|
function ItemTipComCell:ActiveGetPath(b)
|
|
if(self.getPathBtn)then
|
|
self.getPathBtn.gameObject:SetActive(b);
|
|
end
|
|
end
|
|
|
|
function ItemTipComCell:HidePreviewButton()
|
|
if(self.showfpButton)then
|
|
self.showfpButton.gameObject:SetActive(false);
|
|
end
|
|
end
|
|
|
|
local StoreFuncKey = {
|
|
["WthdrawnRepository"] = 1,
|
|
["PersonalWthdrawnRepository"] = 1,
|
|
["PutBackBarrow"] = 1,
|
|
["DepositRepository"] = 1,
|
|
["PersonalDepositRepository"] = 1,
|
|
["PutInBarrow"] = 1,
|
|
}
|
|
|
|
function ItemTipComCell:UpdateTipFunc(config)
|
|
config = config or {};
|
|
if(#config > 0)then
|
|
self.tips.gameObject:SetActive(false);
|
|
end
|
|
local funcDatas = {};
|
|
self.hasUseFunc = false;
|
|
self.hasStroeFunc = false;
|
|
local locked = false
|
|
local UnlockPetWork = PetWorkSpaceProxy.Instance:IsFuncUnlock()
|
|
for i=1,#config do
|
|
local cfgid = config[i];
|
|
local cfgdata = GameConfig.ItemFunction[cfgid];
|
|
if(cfgdata)then
|
|
if(self.data.staticData.id==5542)then
|
|
if(not UnlockPetWork)then
|
|
locked = true
|
|
end
|
|
end
|
|
local state = FunctionItemFunc.Me():CheckFuncState(cfgdata.type, self.data);
|
|
if(state == ItemFuncState.Active or state == ItemFuncState.Grey)then
|
|
if(cfgdata.type == "Apply" or cfgdata.type == "PutFood")then
|
|
self.hasUseFunc = true;
|
|
elseif(StoreFuncKey[cfgdata.type])then
|
|
self.hasStroeFunc = true;
|
|
end
|
|
local data = {
|
|
itemData = self.data,
|
|
name = cfgdata.name,
|
|
type = cfgdata.type,
|
|
callback = FunctionItemFunc.Me():GetFuncById(cfgid),
|
|
callbackParam = self.data,
|
|
|
|
childFunction = cfgdata.childFunction,
|
|
childFunction_Tip = cfgdata.childFunction_Tip,
|
|
};
|
|
|
|
table.insert(funcDatas, data);
|
|
end
|
|
end
|
|
end
|
|
self:UpdateTipButtons(funcDatas);
|
|
|
|
local d = self.data;
|
|
if(self.hasStroeFunc)then
|
|
self:UpdateCountChooseBord(d.staticData.MaxNum);
|
|
self:SetChooseCount(d.num);
|
|
else
|
|
self:UpdateCountChooseBord();
|
|
self:SetChooseCount(1);
|
|
end
|
|
self.LockRoot:SetActive(locked)
|
|
self.LockDes.gameObject:SetActive(locked)
|
|
if(locked)then
|
|
self.LockDes.text = Table_Menu[1907].text
|
|
end
|
|
end
|
|
|
|
function ItemTipComCell:UpdateTipButtons(funcDatas)
|
|
self.funcDatas = funcDatas;
|
|
local n = #funcDatas;
|
|
self.hasFunc = n>0;
|
|
|
|
if(self.hasFunc)then
|
|
local style;
|
|
if(n == 1)then
|
|
style = self.func.style[1];
|
|
elseif(n == 2)then
|
|
style = self.func.style[2];
|
|
elseif(n>2)then
|
|
style = self.func.style[3];
|
|
style.morebg.height = 60*(n-1) + 10;
|
|
end
|
|
for i=1,3 do
|
|
self.func.style[i].obj:SetActive(style == self.func.style[i]);
|
|
end
|
|
for i=1, #style.button do
|
|
style.button[i]:SetData(funcDatas[i]);
|
|
end
|
|
else
|
|
for i=1,3 do
|
|
self.func.style[i].obj:SetActive(false);
|
|
end
|
|
end
|
|
|
|
self:UpdateBgHeight();
|
|
end
|
|
|
|
function ItemTipComCell:UpdateBgHeight()
|
|
if(self.hasFunc or self.tips.gameObject.activeInHierarchy)then
|
|
self.bg.height = 606;
|
|
else
|
|
if(self.refreshTip_GO and self.refreshTip_GO.gameObject.activeInHierarchy)then
|
|
self.bg.height = 536;
|
|
else
|
|
self.bg.height = 506;
|
|
end
|
|
end
|
|
end
|
|
|
|
function ItemTipComCell:SetDelTimeTip(isShow)
|
|
if(Slua.IsNull(self.bottomBtns))then
|
|
return;
|
|
end
|
|
|
|
if(Slua.IsNull(self.refreshTip_GO))then
|
|
self.refreshTip_GO.gameObject:SetActive(false);
|
|
TimeTickManager.Me():ClearTick(self, 1);
|
|
end
|
|
|
|
local data = self.data;
|
|
if(isShow and data and data.deltime and data.deltime * 1000 > ServerTime.CurServerTime())then
|
|
tempV3:Set(0,-255,0);
|
|
self.bottomBtns.transform.localPosition = tempV3;
|
|
self.refreshTip_GO.gameObject:SetActive(true);
|
|
TimeTickManager.Me():CreateTick(0, 1000, self.UpdateDelTimeTip, self, 1);
|
|
else
|
|
tempV3:Set(0,-240,0);
|
|
self.bottomBtns.transform.localPosition = tempV3;
|
|
self.refreshTip_GO.gameObject:SetActive(false);
|
|
TimeTickManager.Me():ClearTick(self, 1);
|
|
end
|
|
|
|
self:UpdateBgHeight();
|
|
end
|
|
|
|
function ItemTipComCell:UpdateDelTimeTip()
|
|
local data = self.data;
|
|
local deltaTime = data.deltime - ServerTime.CurServerTime()/1000;
|
|
if(deltaTime < 0)then
|
|
self:SetDelTimeTip(false);
|
|
else
|
|
if(data.bagtype == BagProxy.BagType.MainBag)then
|
|
local leftTimeTip = "";
|
|
local leftDay, leftHour, leftMin, leftSec = ClientTimeUtil.FormatTimeBySec( deltaTime )
|
|
if(deltaTime > 86400)then
|
|
leftTimeTip = string.format("%s%s%s%s",
|
|
leftDay,
|
|
ZhString.ItemTip_DelRefreshTip_Day,
|
|
leftHour,
|
|
ZhString.ItemTip_DelRefreshTip_Hour);
|
|
elseif(deltaTime > 3600 and deltaTime <= 86400)then
|
|
leftTimeTip = string.format("%s%s%s%s",
|
|
leftHour,
|
|
ZhString.ItemTip_DelRefreshTip_Hour,
|
|
leftMin,
|
|
ZhString.ItemTip_DelRefreshTip_Min);
|
|
elseif(deltaTime > 60 and deltaTime <= 3600)then
|
|
leftTimeTip = string.format("%s%s%s%s",
|
|
leftMin,
|
|
ZhString.ItemTip_DelRefreshTip_Min,
|
|
leftSec,
|
|
ZhString.ItemTip_DelRefreshTip_Sec);
|
|
elseif(deltaTime <= 60)then
|
|
leftTimeTip = string.format("%s%s",
|
|
leftSec,
|
|
ZhString.ItemTip_DelRefreshTip_Sec);
|
|
end
|
|
self.refreshTip.text = string.format(ZhString.ItemTip_DelRefreshTip, leftTimeTip);
|
|
elseif(data.bagtype == BagProxy.BagType.Temp)then
|
|
local leftDay, leftHour, leftMin, leftSec = ClientTimeUtil.FormatTimeBySec( deltaTime )
|
|
|
|
local leftTimeStr = string.format("%02d:%02d:%02d", leftDay * 24 + leftHour, leftMin, leftSec);
|
|
self.refreshTip.text = string.format(ZhString.TempPackageView_RefreshTip, leftTimeStr);
|
|
end
|
|
end
|
|
end
|
|
|
|
function ItemTipComCell:UpdateCountChooseBord(useMaxNumber)
|
|
if(self.countChooseBord == nil)then
|
|
return;
|
|
end
|
|
if(self.data == nil)then
|
|
return;
|
|
end
|
|
if(self.hasStroeFunc == true)then
|
|
self:ActiveCountChooseBord(true, useMaxNumber);
|
|
return;
|
|
end
|
|
if(self.hasUseFunc == false)then
|
|
self:ActiveCountChooseBord(false);
|
|
return;
|
|
end
|
|
if(useMaxNumber == nil)then
|
|
local typeData = Table_ItemType[ self.data.staticData.Type ];
|
|
useMaxNumber = typeData and typeData.UseNumber;
|
|
|
|
if(useMaxNumber == nil)then
|
|
local useItemData = Table_UseItem[self.data.staticData.id];
|
|
useMaxNumber = useItemData and useItemData.UseMultiple;
|
|
end
|
|
end
|
|
if(useMaxNumber and useMaxNumber > 0)then
|
|
self:ActiveCountChooseBord(true, useMaxNumber);
|
|
|
|
self:UpdateCountChooseBordButton();
|
|
else
|
|
self:ActiveCountChooseBord(false);
|
|
end
|
|
end
|
|
|
|
function ItemTipComCell:UpdateNoneItemTipCountChooseBord(useMaxNumber)
|
|
if(useMaxNumber and useMaxNumber > 0)then
|
|
self:ActiveCountChooseBord(true, useMaxNumber);
|
|
|
|
self:UpdateCountChooseBordButton();
|
|
else
|
|
self:ActiveCountChooseBord(false);
|
|
end
|
|
end
|
|
|
|
function ItemTipComCell:AddTipFunc(funcname, callback, callbackParam, noClose, inactive)
|
|
local data = {
|
|
name = funcname,
|
|
itemData = self.data,
|
|
noClose = noClose,
|
|
|
|
callback = callback,
|
|
callbackParam = callbackParam,
|
|
inactive = inactive,
|
|
};
|
|
|
|
if(self.funcDatas == nil)then
|
|
self.funcDatas = {};
|
|
end
|
|
table.insert(self.funcDatas, data);
|
|
self:UpdateTipButtons(self.funcDatas);
|
|
end
|
|
|
|
function ItemTipComCell:ShowSecendFunc(funcConfig, title, parent, widget, side, pixelOffset)
|
|
if(self.itemSecendFuncBord == nil)then
|
|
self.itemSecendFuncBord = ItemSecendFuncBord.new();
|
|
side = side or NGUIUtil.AnchorSide.TopRight;
|
|
pixelOffset = pixelOffset or {-11, 239}
|
|
self.itemSecendFuncBord:OnCreate(parent, widget, side, pixelOffset);
|
|
|
|
self.itemSecendFuncBord:AddEventListener(MouseEvent.MouseClick, self.ClickSecendFunc, self);
|
|
self.itemSecendFuncBord:AddEventListener(ItemSecendFuncEvent.Close, self.CloseSecendBord, self);
|
|
end
|
|
|
|
self.itemSecendFuncBord:SetData(funcConfig, self.data);
|
|
if(title)then
|
|
self.itemSecendFuncBord:SetTitle(title);
|
|
end
|
|
end
|
|
|
|
function ItemTipComCell:ClickSecendFunc(data)
|
|
local tipfunc = FunctionItemFunc.Me():GetFunc(data.type)
|
|
if(tipfunc)then
|
|
if(tipfunc)then
|
|
tipfunc(self.data, self.chooseCount);
|
|
end
|
|
if(data.type == "Combine")then
|
|
local maxNum, hasLeft = FunctionItemFunc._GetCombineMaxNum(self.data.staticData.id);
|
|
if(maxNum > 1 or hasLeft)then
|
|
self:CloseSecendBord();
|
|
return;
|
|
end
|
|
elseif(data.type == "CombineMultiple")then
|
|
local maxNum, hasLeft = FunctionItemFunc._GetCombineMaxNum(self.data.staticData.id);
|
|
if(hasLeft)then
|
|
self:CloseSecendBord();
|
|
return;
|
|
end
|
|
end
|
|
self:PassEvent(ItemTipEvent.ClickTipFuncEvent);
|
|
end
|
|
end
|
|
|
|
function ItemTipComCell:CloseSecendBord()
|
|
if(self.itemSecendFuncBord)then
|
|
self.itemSecendFuncBord:OnDestroy();
|
|
self.itemSecendFuncBord = nil;
|
|
end
|
|
end
|
|
|
|
function ItemTipComCell:Exit()
|
|
ItemTipComCell.super.Exit(self);
|
|
|
|
self:SetDelTimeTip(false);
|
|
|
|
self:CloseSecendBord();
|
|
end |