323 lines
9.0 KiB
Plaintext
323 lines
9.0 KiB
Plaintext
RuneDeComposeView = class("RuneDeComposeView",BaseView)
|
||
|
||
autoImport("ItemData");
|
||
autoImport("EquipChooseBord");
|
||
autoImport("DecomposeItemCell");
|
||
|
||
RuneDeComposeView.ViewType = UIViewType.NormalLayer
|
||
|
||
local ACTION_DECOMPOSE = "functional_action"
|
||
|
||
local tempV3 = LuaVector3();
|
||
function RuneDeComposeView:Init()
|
||
local viewdata = self.viewdata.viewdata;
|
||
self.npcguid = viewdata and viewdata.npcdata and viewdata.npcdata.data.id;
|
||
|
||
self:InitUI();
|
||
self:MapEvent();
|
||
end
|
||
|
||
function RuneDeComposeView:InitUI()
|
||
self.decomposeBord = self:FindGO("DecomposeBord");
|
||
self.targetBtn = self:FindGO("TargetCell", self.decomposeBord);
|
||
self.targetCell = BaseItemCell.new(self.targetBtn);
|
||
self.targetCell:AddEventListener(MouseEvent.MouseClick, self.clickTargetCell, self);
|
||
|
||
self.tiplabel = self:FindComponent("TipLabel2", UILabel);
|
||
self.resultGrid = self:FindComponent("ResultGrid", UIGrid);
|
||
self.resultCtl = UIGridListCtrl.new(self.resultGrid, DecomposeItemCell, "DecomposeItemCell");
|
||
self.resultCtl:AddEventListener(MouseEvent.MouseClick, self.clickResultCell, self);
|
||
|
||
self.businessTip = self:FindGO("BusinessTip");
|
||
self.businessTip_1 = self:FindComponent("Tip1", UILabel);
|
||
self.businessTip_2 = self:FindComponent("Tip2", UILabel);
|
||
|
||
self.cost = self:FindComponent("Cost", UILabel);
|
||
|
||
local coins = self:FindChild("TopCoins");
|
||
self.userRob = self:FindChild("Silver", coins);
|
||
self.robLabel = self:FindComponent("Label", UILabel, self.userRob);
|
||
|
||
self.bg = self:FindComponent("Bg", UISprite);
|
||
|
||
self.decomoposeTip = self:FindGO("DecomposeTip");
|
||
self.decomoposeTip:SetActive(false);
|
||
|
||
self.waittingSymbol = self:FindGO("WaittingSymbol");
|
||
|
||
self.TIPLabel = self:FindComponent("TIPLabel", UILabel);
|
||
self.TIPLabel.text = "分解符文后可獲得"
|
||
|
||
self.TipLabel = self:FindComponent("TipLabel", UILabel);
|
||
self.TipLabel.text = "請點選「+」選擇所需分解的符文"
|
||
|
||
local chooseContaienr = self:FindGO("ChooseContainer");
|
||
local chooseBordDataFunc = function ()
|
||
return self:GetDecomposeEquips()
|
||
end
|
||
self.chooseBord = EquipChooseBord.new(chooseContaienr, chooseBordDataFunc);
|
||
self.chooseBord:AddEventListener(EquipChooseBord.ChooseItem, self.ChooseItem, self)
|
||
self.chooseBord:Hide();
|
||
|
||
self.addbord = self:FindGO("AddBord");
|
||
self.addItemButton = self:FindGO("AddItemButton", self.addbord);
|
||
self:AddClickEvent(self.addItemButton, function (go)
|
||
self:clickTargetCell();
|
||
end);
|
||
|
||
self.colliderMask = self:FindGO("ColliderMask");
|
||
self:AddButtonEvent("StartButton", function (go)
|
||
if(self.nowdata)then
|
||
self:DoDeCompose();
|
||
else
|
||
MsgManager.ShowMsgByIDTable(400);
|
||
end
|
||
end);
|
||
self:AddButtonEvent("CloseChoose", function (go)
|
||
self.chooseBord:SetActive(false);
|
||
end);
|
||
end
|
||
|
||
function RuneDeComposeView:OnEnter()
|
||
RuneDeComposeView.super.OnEnter(self);
|
||
local npcinfo = self:GetCurNpc();
|
||
if(npcinfo)then
|
||
local npcRootTrans = npcinfo.assetRole.completeTransform;
|
||
if(npcRootTrans)then
|
||
self:CameraFocusOnNpc(npcRootTrans);
|
||
end
|
||
end
|
||
self:UpdateCoins();
|
||
end
|
||
|
||
function RuneDeComposeView:OnExit()
|
||
self:CameraReset();
|
||
RuneDeComposeView.super.OnExit(self);
|
||
end
|
||
|
||
function RuneDeComposeView:GetCurNpc()
|
||
if(self.npcguid)then
|
||
return NSceneNpcProxy.Instance:Find(self.npcguid);
|
||
end
|
||
return nil;
|
||
end
|
||
|
||
function RuneDeComposeView:DoDeCompose()
|
||
if(not self.nowdata)then
|
||
return;
|
||
end
|
||
|
||
FunctionSecurity.Me():NormalOperation(function ()
|
||
local npcinfo = self:GetCurNpc();
|
||
if(npcinfo)then
|
||
npcinfo:Client_PlayAction(ACTION_DECOMPOSE, nil, false);
|
||
end
|
||
ServiceItemProxy.Instance:CallEquipDecompose(self.nowdata.id)
|
||
end, {itemData = nowData});
|
||
|
||
end
|
||
|
||
local _isEquipClean;
|
||
function RuneDeComposeView:GetDecomposeEquips()
|
||
local bagEquips = {};
|
||
|
||
--符文資訊
|
||
local bagRunes = BagProxy.Instance:GetBagItemsByTypes({550,560},BagProxy.BagType.Rune)
|
||
TableUtil.InsertArray(bagEquips, bagRunes)
|
||
|
||
-- 可還原裝備型別:強化>0的裝備的裝備
|
||
local result = {};
|
||
for i=1,#bagEquips do
|
||
local equip = bagEquips[i];
|
||
if(equip.equipInfo == nil)then
|
||
error("EquipInfo is nil " .. equip.staticData.NameZh);
|
||
end
|
||
if(equip.equipInfo.equipData.DecomposeID~=nil)then
|
||
table.insert(result, equip);
|
||
end
|
||
end
|
||
|
||
-- if(_isEquipClean == nil)then
|
||
-- _isEquipClean = BagProxy.CheckEquipIsClean
|
||
-- end
|
||
table.sort(result, function (a,b)
|
||
local aQuality = a.staticData.Quality;
|
||
local bQuality = b.staticData.Quality;
|
||
return aQuality < bQuality;
|
||
end);
|
||
return result;
|
||
end
|
||
|
||
function RuneDeComposeView:clickTargetCell()
|
||
local equipdatas = self:GetDecomposeEquips();
|
||
if(#equipdatas>0)then
|
||
self.chooseBord:ResetDatas(equipdatas, true)
|
||
self.chooseBord:Show(false,
|
||
nil,
|
||
nil,
|
||
RuneDeComposeView.checkValidEquipFunc,
|
||
nil,
|
||
ZhString.RuneDeComposeView_InvalidTip);
|
||
else
|
||
MsgManager.ShowMsgByIDTable(409);
|
||
self.chooseBord:Hide();
|
||
end
|
||
end
|
||
|
||
function RuneDeComposeView.checkValidEquipFunc(param, data)
|
||
-- if(not _isEquipClean(data, true))then
|
||
-- return false, ZhString.RuneDeComposeView_InvalidTip;
|
||
-- end
|
||
return true;
|
||
end
|
||
|
||
function RuneDeComposeView:clickResultCell(cell)
|
||
if(not self.ShowTip)then
|
||
local callback = function ()
|
||
self.ShowTip = false;
|
||
end;
|
||
local sdata = {
|
||
itemdata = cell.data,
|
||
ignoreBounds = cell.gameObject,
|
||
callback = callback,
|
||
};
|
||
self:ShowItemTip(sdata, self.bg, NGUIUtil.AnchorSide.Left, {-180,0});
|
||
else
|
||
self:ShowItemTip();
|
||
end
|
||
self.ShowTip = not self.ShowTip;
|
||
end
|
||
|
||
function RuneDeComposeView:ChooseItem(itemData)
|
||
self.nowdata = itemData;
|
||
self.targetCell:SetData(itemData);
|
||
self.resultCtl:ResetDatas({});
|
||
|
||
if(itemData)then
|
||
self.targetBtn:SetActive(true);
|
||
self.waittingSymbol:SetActive(true);
|
||
|
||
local decomposeID = itemData.equipInfo.equipData.DecomposeID;
|
||
local decomposeData = decomposeID and Table_EquipDecompose[decomposeID]
|
||
if(decomposeData)then
|
||
local myRob = Game.Myself.data.userdata:Get(UDEnum.SILVER);
|
||
local decomposeCost = decomposeData.Cost or 0;
|
||
if(myRob < decomposeCost)then
|
||
self.cost.text = "[c]" .. CustomStrColor.BanRed .. tostring(decomposeData.Cost) .. "[-][/c]";
|
||
else
|
||
self.cost.text = tostring(decomposeData.Cost);
|
||
end
|
||
else
|
||
self.cost.text = 0;
|
||
end
|
||
|
||
-- queryInfo
|
||
ServiceItemProxy.Instance:CallQueryDecomposeResultItemCmd(itemData.id);
|
||
|
||
self.decomposeBord:SetActive(true);
|
||
self.addbord:SetActive(false);
|
||
else
|
||
self.cost.text = 0;
|
||
|
||
self.decomposeBord:SetActive(false);
|
||
self.addbord:SetActive(true);
|
||
end
|
||
self.chooseBord:Hide();
|
||
end
|
||
|
||
function RuneDeComposeView:UpdateCoins()
|
||
self.robLabel.text = StringUtil.NumThousandFormat(MyselfProxy.Instance:GetROB());
|
||
end
|
||
|
||
function RuneDeComposeView:MapEvent()
|
||
self:AddListenEvt(ServiceEvent.ItemEquipDecompose ,self.HandleEquipCompose);
|
||
self:AddListenEvt(MyselfEvent.MyDataChange,self.UpdateCoins);
|
||
|
||
self:AddListenEvt(ServiceEvent.ItemQueryDecomposeResultItemCmd, self.HandleItemQueryDecomposeResult);
|
||
end
|
||
|
||
function RuneDeComposeView:HandleItemQueryDecomposeResult(note)
|
||
self.waittingSymbol:SetActive(false);
|
||
|
||
local results = note.body.results
|
||
|
||
if(self.resultData == nil)then
|
||
self.resultData = {};
|
||
else
|
||
TableUtility.ArrayClear(self.resultData);
|
||
end
|
||
for i=1,#results do
|
||
local single = results[i];
|
||
local iteminfo = single.item;
|
||
local itemData = ItemData.new("Decompose", iteminfo.id);
|
||
itemData:ParseFromServerData({base = iteminfo});
|
||
|
||
itemData.minrate = single.min_count/1000;
|
||
itemData.rate = single.rate/1000;
|
||
itemData.maxrate = single.max_count/1000;
|
||
|
||
table.insert(self.resultData, itemData);
|
||
end
|
||
self.resultCtl:ResetDatas(self.resultData);
|
||
|
||
if(CommonFun.calcOrideconResearch)then
|
||
local pct = CommonFun.calcOrideconResearch(Game.Myself.data) or 0;
|
||
if(pct == 0)then
|
||
self:SetBusinessTip(false);
|
||
else
|
||
pct = math.floor(pct * 1000) / 10;
|
||
self:SetBusinessTip(true, pct);
|
||
end
|
||
else
|
||
self:SetBusinessTip(false);
|
||
end
|
||
end
|
||
|
||
function RuneDeComposeView:SetBusinessTip(active, pct)
|
||
if(active)then
|
||
tempV3:Set(0,5,0);
|
||
self.resultGrid.transform.localPosition = tempV3;
|
||
|
||
self.businessTip:SetActive(true);
|
||
self.businessTip_1.text = ZhString.RuneDeComposeView_BusinessTip1;
|
||
self.businessTip_2.text = string.format(ZhString.RuneDeComposeView_BusinessTip2, pct);
|
||
else
|
||
tempV3:Set(0,-10,0);
|
||
self.resultGrid.transform.localPosition = tempV3;
|
||
self.businessTip:SetActive(false);
|
||
end
|
||
end
|
||
|
||
local EFFECTMAP_DECOMPOSE_RESULT =
|
||
{
|
||
[SceneItem_pb.EDECOMPOSERESULT_FAIL] = "equip_tex_01",
|
||
[SceneItem_pb.EDECOMPOSERESULT_SUCCESS] = "equip_tex_02",
|
||
[SceneItem_pb.EDECOMPOSERESULT_SUCCESS_BIG] = "equip_tex_03",
|
||
[SceneItem_pb.EDECOMPOSERESULT_SUCCESS_SBIG] = "equip_tex_04",
|
||
[SceneItem_pb.EDECOMPOSERESULT_SUCCESS_FANTASY] = "equip_tex_05",
|
||
}
|
||
function RuneDeComposeView:HandleEquipCompose(note)
|
||
-- local body = note.body;
|
||
-- if(body)then
|
||
-- local result = body.result;
|
||
-- local effectIndex = 1;
|
||
-- if(result == SceneItem_pb.EDECOMPOSERESULT_FAIL)then
|
||
-- effectIndex = 2;
|
||
-- end
|
||
-- local viewdata = {
|
||
-- icon = EFFECTMAP_DECOMPOSE_RESULT[result],
|
||
-- datas = self.resultData,
|
||
-- effectIndex = effectIndex,
|
||
-- };
|
||
-- helplog("RuneDeComposeView --> HandleEquipCompose");
|
||
-- self:sendNotification(UIEvent.JumpPanel, {view = PanelConfig.PopUpItemView, viewdata});
|
||
-- end
|
||
|
||
self.nowdata = nil;
|
||
self.targetCell:SetData(self.nowdata);
|
||
|
||
self.resultCtl:ResetDatas({});
|
||
|
||
self:ChooseItem();
|
||
end
|