370 lines
9.8 KiB
Plaintext
370 lines
9.8 KiB
Plaintext
NpcRefinePanel = class("NpcRefinePanel", ContainerView)
|
|
|
|
NpcRefinePanel.ViewType = UIViewType.NormalLayer
|
|
|
|
NpcRefinePanel.PfbPath = "part/EquipRefineBord";
|
|
|
|
autoImport("EquipRefineBord");
|
|
autoImport("EquipChooseBord");
|
|
|
|
NpcRefineAction = {
|
|
Refine = "functional_action";
|
|
}
|
|
|
|
local blackSmith;
|
|
|
|
function NpcRefinePanel:Init()
|
|
blackSmith = BlackSmithProxy.Instance;
|
|
|
|
self:InitView();
|
|
self:MapEvent();
|
|
end
|
|
|
|
function NpcRefinePanel:InitView()
|
|
local chooseContaienr = self:FindGO("ChooseContainer");
|
|
self.chooseBord = EquipChooseBord.new(chooseContaienr);
|
|
self.chooseBord:Hide();
|
|
|
|
self.bord = self:FindGO("RefineParent");
|
|
|
|
-- coins
|
|
local coins = self:FindChild("TopCoins");
|
|
local usergold = self:FindGO("Gold", coins);
|
|
self.goldLabel = self:FindComponent("Label", UILabel, usergold);
|
|
local userRob = self:FindGO("Silver", coins);
|
|
self.robLabel = self:FindComponent("Label", UILabel, userRob);
|
|
-- coins
|
|
|
|
|
|
-- bord control
|
|
self:LoadPreferb(self.PfbPath, self.bord, true);
|
|
self.bord_Control = EquipRefineBord.new(self.bord);
|
|
self.bord_Control:SetEmptyStyle(2);
|
|
self.bord_Control:ActiveTitle(true);
|
|
|
|
self.bord_Control:AddEventListener(EquipRefineBord_Event.ClickAddEquipButton, self.ClickAddEquipButtonCall, self);
|
|
self.bord_Control:AddEventListener(EquipRefineBord_Event.ClickTargetCell, self.ClickAddEquipButtonCall, self);
|
|
self.bord_Control:AddEventListener(EquipRefineBord_Event.DoRefine, self.DoRefineCall, self);
|
|
self.bord_Control:AddEventListener(EquipRefineBord_Event.DoRepair, self.DoRepairCall, self);
|
|
-- bord control
|
|
|
|
|
|
-- leftTip Bord
|
|
self.leftTipBord = self:FindGO("LeftTipBord");
|
|
self.leftTipBord_tip = self:FindComponent("RefineTip", UILabel, self.leftTipBord);
|
|
self.leftTipBord_ShareButton = self:FindGO("ShareButton", self.leftTipBord);
|
|
|
|
self.leftTipBord_ShareButton:SetActive(false);
|
|
self:AddClickEvent(self.leftTipBord_ShareButton, function ()
|
|
local nowData = self.bord_Control:GetNowItemData();
|
|
FloatAwardView.ShowRefineShareView(nowData)
|
|
|
|
self.leftTipBord_ShareButton:SetActive(false);
|
|
end);
|
|
-- leftTip Bord
|
|
|
|
self.colliderMask = self:FindGO("ColliderMask");
|
|
|
|
self.effectBg = self:FindComponent("EffectBg", ChangeRqByTex, self.refineBord);
|
|
end
|
|
|
|
function NpcRefinePanel:ClickAddEquipButtonCall(control)
|
|
local datas = blackSmith:GetRefineEquips(self.refine_equiptype_map, self.isfashion);
|
|
self.chooseBord:ResetDatas(datas, true);
|
|
self.chooseBord:Show(nil, function (self, data)
|
|
self:SetTargetItem(data);
|
|
self.chooseBord:Hide();
|
|
end, self);
|
|
|
|
local nowData = self.bord_Control:GetNowItemData();
|
|
if(nowData)then
|
|
self.chooseBord:SetChoose(nowData);
|
|
end
|
|
|
|
self.chooseBord:SetBordTitle(ZhString.NpcRefinePanel_ChooseEquip);
|
|
end
|
|
|
|
function NpcRefinePanel:SetTargetItem(data)
|
|
self.bord_Control:SetTargetItem(data);
|
|
|
|
self:UpdateLeftTipBord(data);
|
|
end
|
|
|
|
function NpcRefinePanel:UpdateLeftTipBord(data)
|
|
if(data and data.equipInfo)then
|
|
self.leftTipBord:SetActive(true);
|
|
|
|
if(data.equipInfo.damage)then
|
|
self.leftTipBord_tip.text = ZhString.NpcRefinePanel_RepairTip;
|
|
else
|
|
local maxRefineLv = blackSmith:MaxRefineLevelByData(data.staticData)
|
|
if(self.isfashion)then
|
|
self.leftTipBord_tip.text = string.format(ZhString.NpcRefinePanel_FashionRefineTip);
|
|
else
|
|
self.leftTipBord_tip.text = string.format(ZhString.NpcRefinePanel_RefineTip, maxRefineLv);
|
|
end
|
|
end
|
|
else
|
|
self.leftTipBord:SetActive(false);
|
|
end
|
|
end
|
|
|
|
function NpcRefinePanel:RemoveLeanTween()
|
|
if(self.lt)then
|
|
self.lt:cancel();
|
|
end
|
|
self.lt = nil;
|
|
end
|
|
|
|
function NpcRefinePanel:DoRefineCall(control)
|
|
-- 延時2s做精煉結果表現
|
|
self:RemoveLeanTween();
|
|
|
|
self:ActiveLock(true);
|
|
|
|
self.wait_refresh = true;
|
|
|
|
local delayTime = GameConfig.EquipRefine.delay_time;
|
|
self.lt = LeanTween.delayedCall(delayTime/1000, function()
|
|
self.wait_refresh = false;
|
|
|
|
self:RefineEnd();
|
|
end);
|
|
|
|
local ncpinfo = self:GetCurNpc();
|
|
if(ncpinfo)then
|
|
ncpinfo:Client_PlayAction(NpcRefineAction.Refine, nil, false);
|
|
end
|
|
|
|
self.chooseBord:Hide();
|
|
end
|
|
|
|
function NpcRefinePanel:DoRepairCall(control)
|
|
-- 延時2s做精煉結果表現
|
|
self:ActiveLock(true);
|
|
|
|
self:RemoveLeanTween();
|
|
|
|
self.wait_refresh = true;
|
|
|
|
self.lt = LeanTween.delayedCall(2, function ()
|
|
self.wait_refresh = false;
|
|
|
|
self:RepairEnd();
|
|
end);
|
|
|
|
local ncpinfo = self:GetCurNpc();
|
|
if(ncpinfo)then
|
|
ncpinfo:Client_PlayAction(NpcRefineAction.Refine, nil, false);
|
|
end
|
|
|
|
self.chooseBord:Hide();
|
|
end
|
|
|
|
function NpcRefinePanel:UpdateCoins()
|
|
self.robLabel.text = StringUtil.NumThousandFormat(MyselfProxy.Instance:GetROB())
|
|
end
|
|
|
|
function NpcRefinePanel:ActiveLock(b)
|
|
self.colliderMask:SetActive(b);
|
|
end
|
|
|
|
function NpcRefinePanel:RefineEnd()
|
|
local needShare = false;
|
|
if(self.result == SceneItem_pb.EREFINERESULT_SUCCESS)then
|
|
needShare = true;
|
|
AudioUtil.Play2DRandomSound(AudioMap.Maps.Refinesuccess);
|
|
AudioUtil.Play2DRandomSound(AudioMap.Maps.Refinesuccess_Npc)
|
|
MsgManager.ShowMsgByIDTable(229)
|
|
else
|
|
AudioUtil.Play2DRandomSound(AudioMap.Maps.Refinefail);
|
|
AudioUtil.Play2DRandomSound(AudioMap.Maps.Refinefail_Npc)
|
|
-- MsgManager.ShowMsgByIDTable(228)
|
|
end
|
|
self:PlayUIEffect(EffectMap.UI.ForgingSuccess,
|
|
self.effectBg.gameObject,
|
|
true,
|
|
self.ForgingSuccessEffectHandle,
|
|
self);
|
|
|
|
local socialShareConfig = AppBundleConfig.GetSocialShareInfo()
|
|
if socialShareConfig == nil then
|
|
needShare = false;
|
|
end
|
|
if BackwardCompatibilityUtil.CompatibilityMode(BackwardCompatibilityUtil.V9) then
|
|
needShare = false;
|
|
end
|
|
|
|
self.result = nil;
|
|
|
|
self:RemoveLeanTween();
|
|
|
|
self.lt = LeanTween.delayedCall(self.gameObject, 1, function ()
|
|
self:ActiveLock(false);
|
|
|
|
self.bord_Control:Refresh();
|
|
|
|
self:UpdateLeftTipBord(self.bord_Control:GetNowItemData());
|
|
|
|
-- 裝備損壞提示
|
|
local nowData = self.bord_Control:GetNowItemData();
|
|
if(nowData and nowData.equipInfo.damage)then
|
|
MsgManager.ShowMsgByIDTable(230)
|
|
end
|
|
|
|
-- refine END
|
|
local maxRefineLv = blackSmith:MaxRefineLevelByData(nowData.staticData)
|
|
if(needShare)then
|
|
local refinelv = nowData.equipInfo.refinelv;
|
|
if(refinelv == maxRefineLv)then
|
|
FloatAwardView.ShowRefineShareView(nowData)
|
|
self.leftTipBord_ShareButton:SetActive(false);
|
|
elseif(refinelv >= 9)then
|
|
self.leftTipBord_ShareButton:SetActive(true);
|
|
else
|
|
self.leftTipBord_ShareButton:SetActive(false);
|
|
end
|
|
else
|
|
self.leftTipBord_ShareButton:SetActive(false);
|
|
end
|
|
|
|
self:RemoveLeanTween();
|
|
end):setDestroyOnComplete(true);
|
|
|
|
end
|
|
|
|
function NpcRefinePanel.ForgingSuccessEffectHandle(effectHandle, owner)
|
|
if(owner)then
|
|
owner.effectBg:AddChild(effectHandle.gameObject);
|
|
end
|
|
end
|
|
------------------装备修复逻辑------------------------
|
|
function NpcRefinePanel:RepairEnd()
|
|
local nowData = self.bord_Control:GetNowItemData();
|
|
MsgManager.ShowMsgByIDTable(221,{ nowData.staticData.NameZh})
|
|
|
|
self:PlayUIEffect(EffectMap.UI.ForgingSuccess,
|
|
self.effectBg.gameObject,
|
|
true,
|
|
self.ForgingSuccessEffectHandle,
|
|
self)
|
|
|
|
local assetRole = Game.Myself.assetRole;
|
|
assetRole:PlayEffectOneShotOn(EffectMap.Maps.ForgingSuccess, RoleDefines_EP.Top);
|
|
|
|
self:RemoveLeanTween();
|
|
|
|
self.lt = LeanTween.delayedCall(self.gameObject, 1, function ()
|
|
self:ActiveLock(false);
|
|
self.bord_Control:Refresh();
|
|
|
|
self:UpdateLeftTipBord(self.bord_Control:GetNowItemData());
|
|
|
|
self:RemoveLeanTween();
|
|
end):setDestroyOnComplete(true);
|
|
|
|
AudioUtil.Play2DRandomSound(AudioMap.Maps.Refinesuccess)
|
|
end
|
|
|
|
function NpcRefinePanel:MapEvent()
|
|
self:AddListenEvt(MyselfEvent.ZenyChange, self.UpdateCoins)
|
|
self:AddListenEvt(ServiceEvent.ItemEquipRefine, self.RecvUpdateRefineInfo)
|
|
self:AddListenEvt(ServiceEvent.ItemEquipRepair,self.RecvUpdateRefineInfo)
|
|
|
|
self:AddListenEvt(ItemEvent.ItemUpdate,self.RecvUpdateRefineInfo)
|
|
self:AddListenEvt(ItemEvent.EquipUpdate,self.RecvUpdateRefineInfo)
|
|
|
|
self:AddListenEvt(ServiceEvent.ItemEquipRefine, self.RecvRefineResult)
|
|
end
|
|
|
|
function NpcRefinePanel:RecvUpdateRefineInfo(note)
|
|
if(self.wait_refresh == true)then
|
|
return;
|
|
end
|
|
|
|
self.bord_Control:Refresh();
|
|
end
|
|
|
|
function NpcRefinePanel:RecvRefineResult(note)
|
|
if(self.bord_Control == nil)then
|
|
return;
|
|
end
|
|
|
|
local nowItem = self.bord_Control:GetNowItemData();
|
|
if(nowItem == nil)then
|
|
return;
|
|
end
|
|
|
|
self.result = note.body.eresult;
|
|
end
|
|
|
|
function NpcRefinePanel:GetCurNpc()
|
|
if(self.npcguid)then
|
|
return NSceneNpcProxy.Instance:Find(self.npcguid);
|
|
end
|
|
return nil
|
|
end
|
|
|
|
function NpcRefinePanel:InitValidRefineEquipType()
|
|
self.refine_equiptype_map = {};
|
|
|
|
self.isfashion = self.viewdata.viewdata and self.viewdata.viewdata.isfashion;
|
|
|
|
if(self.isfashion)then
|
|
local buildingData = GuildBuildingProxy.Instance:GetBuildingDataByType(GuildBuildingProxy.Type.EGUILDBUILDING_MAGIC_SEWING);
|
|
if(buildingData)then
|
|
local unlockParam = buildingData.staticData and buildingData.staticData.UnlockParam;
|
|
|
|
local equipConfig = unlockParam.equip;
|
|
if(equipConfig and equipConfig.refine_type)then
|
|
for i=1,#equipConfig.refine_type do
|
|
self.refine_equiptype_map[ equipConfig.refine_type[i] ] = 1;
|
|
end
|
|
self.bord_Control:SetMaxRefineLv(equipConfig.refinemaxlv);
|
|
end
|
|
end
|
|
|
|
self.leftTipBord_tip.text = string.format(ZhString.NpcRefinePanel_FashionRefineTip);
|
|
else
|
|
for k, v in pairs(GameConfig.EquipType)do
|
|
if(k ~= 8 and k ~= 9 and k ~= 10 and k ~= 11 and k ~= 13)then
|
|
self.refine_equiptype_map[ k ] = 1;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function NpcRefinePanel:OnEnter()
|
|
NpcRefinePanel.super.OnEnter(self);
|
|
|
|
self:InitValidRefineEquipType();
|
|
|
|
local npcInfo = self.viewdata.viewdata.npcdata;
|
|
self.npcguid = npcInfo and npcInfo.data.id;
|
|
self.bord_Control:SetNpcguid(self.npcguid);
|
|
|
|
if(npcInfo)then
|
|
local rootTrans = npcInfo.assetRole.completeTransform;
|
|
if(self.isfashion)then
|
|
self:CameraFocusAndRotateTo(rootTrans, CameraConfig.SwingMachine_ViewPort, CameraConfig.SwingMachine_Rotation);
|
|
else
|
|
self:CameraFocusOnNpc(rootTrans);
|
|
end
|
|
else
|
|
self:CameraRotateToMe();
|
|
end
|
|
|
|
self:UpdateCoins();
|
|
|
|
self:SetTargetItem(nil);
|
|
end
|
|
|
|
function NpcRefinePanel:OnExit()
|
|
NpcRefinePanel.super.OnExit(self);
|
|
|
|
self.wait_refresh = false;
|
|
|
|
self:RemoveLeanTween();
|
|
|
|
self:CameraReset()
|
|
end |