533 lines
16 KiB
Plaintext
533 lines
16 KiB
Plaintext
EnchantView = class("EnchantView",BaseView)
|
|
|
|
EnchantView.ViewType = UIViewType.NormalLayer
|
|
|
|
autoImport("EquipChooseBord");
|
|
autoImport("EnchantAttrInfoCell");
|
|
autoImport("EnchantEffectCell");
|
|
|
|
EnchantEffectType = {
|
|
Combine = "EnchantEffectType_combine",
|
|
Enchant = "EnchantEffectType_Enchant",
|
|
}
|
|
|
|
|
|
EnchantView.ButtonLabText = {
|
|
[EnchantType.Primary] = ZhString.EnchantView_PrimaryEnchant,
|
|
[EnchantType.Medium] = ZhString.EnchantView_MediumEnchant,
|
|
[EnchantType.Senior] = ZhString.EnchantView_SeniorEnchant,
|
|
}
|
|
|
|
EnchantView.EnchantAction = "use_magic";
|
|
|
|
local DEFAULT_MATERIAL_SEARCH_BAGTYPES;
|
|
local Enchant_MATERIAL_SEARCH_BAGTYPES;
|
|
|
|
function EnchantView:Init()
|
|
local pacakgeCheck = GameConfig.PackageMaterialCheck;
|
|
DEFAULT_MATERIAL_SEARCH_BAGTYPES = pacakgeCheck and pacakgeCheck.default or {1,9};
|
|
Enchant_MATERIAL_SEARCH_BAGTYPES = pacakgeCheck and pacakgeCheck.enchant or DEFAULT_MATERIAL_SEARCH_BAGTYPES;
|
|
|
|
local viewdata = self.viewdata and self.viewdata.viewdata;
|
|
self.npcdata = viewdata and viewdata.npcdata;
|
|
self.enchantType = viewdata and viewdata.enchantType or 1;
|
|
|
|
self:InitUI();
|
|
self:MapEvent();
|
|
end
|
|
|
|
function EnchantView:InitUI()
|
|
self.enchantTipBord = self:FindGO("EnchantTipBrod");
|
|
self.enchantEffectBord = self:FindGO("EnchantEffectBord");
|
|
self.enchantInfoBord = self:FindGO("EnchantInfoBord");
|
|
|
|
self.addItemButton = self:FindGO("AddItemButton");
|
|
self:AddClickEvent(self.addItemButton, function (go)
|
|
self:clickTargetItem();
|
|
end);
|
|
self.targetGo = self:FindGO("TargetCell");
|
|
self.targetItemCell = BaseItemCell.new(self.targetGo);
|
|
self.targetItemCell:AddEventListener(MouseEvent.MouseClick, self.clickTargetItem, self);
|
|
self.effectBg = self:FindComponent("EffectBg", ChangeRqByTex);
|
|
|
|
local enchantEffectGrid = self:FindComponent("EnchantEffectGrid", UIGrid, self.enchantEffectBord);
|
|
self.enchantEffectCtl = UIGridListCtrl.new(enchantEffectGrid, EnchantEffectCell, "EnchantEffectCell");
|
|
self.noEquipEnchantTip = self:FindGO("NoEnchantTip", self.enchantEffectBord);
|
|
|
|
local coins = self:FindGO("TopCoins");
|
|
self.usermrb = self:FindGO("MRB", coins);
|
|
self.mrbLabel = self:FindComponent("Label", UILabel, self.usergold);
|
|
self.mrbSymbol = self:FindComponent("symbol", UISprite, self.usermrb);
|
|
self.userRob = self:FindGO("Silver", coins);
|
|
self.robLabel = self:FindComponent("Label", UILabel, self.userRob);
|
|
|
|
local chooseContaienr = self:FindGO("ChooseContainer");
|
|
local chooseBordDataFunc = function ()
|
|
return self:GetEnchantEquips();
|
|
end
|
|
self.chooseBord = EquipChooseBord.new(chooseContaienr, chooseBordDataFunc);
|
|
self.chooseBord:AddEventListener(EquipChooseBord.ChooseItem, self.ChooseItem, self)
|
|
self.chooseBord:Hide();
|
|
|
|
self.enchantButton = self:FindGO("EnchantButton");
|
|
local buttonLab = self:FindComponent("Label", UILabel, self.enchantButton);
|
|
buttonLab.text = EnchantView.ButtonLabText[self.enchantType];
|
|
self:AddClickEvent(self.enchantButton, function (go) self:TryEnchant() end);
|
|
|
|
self.enchantTipLab = self:FindComponent("TipLabel", UILabel, self.enchantTipBord);
|
|
self.costGrid = self:FindComponent("CostGrid", UIGrid);
|
|
self.enchantMrbLab = self:FindComponent("MRB", UILabel, self.enchantTipBord);
|
|
self.encahntMrbSymbol = self:FindComponent("Sprite", UISprite, self.enchantMrbLab.gameObject);
|
|
|
|
self.enchantSliverLab = self:FindComponent("Sliver", UILabel, self.enchantTipBord);
|
|
self.enchantTipChoose = self:FindGO("ChooseState", self.enchantTipBord);
|
|
self.enchantTipUnChoose = self:FindGO("UnChooseState", self.enchantTipBord);
|
|
local enchantInfoButton = self:FindGO("EnchantInfoButton");
|
|
self:AddClickEvent(enchantInfoButton, function (go)
|
|
self.enchantInfoBord:SetActive(true);
|
|
end);
|
|
|
|
self.enchantInfoTitle = self:FindComponent("Title", UILabel, self.enchantInfoBord);
|
|
local enchantInfoTable = self:FindComponent("EnchantInfoTable", UITable);
|
|
self.enchantInfoCtl = UIGridListCtrl.new(enchantInfoTable , EnchantAttrInfoCell, "EnchantAttrInfoCell");
|
|
local infoCloseButton = self:FindGO("InfoCloseButton", self.enchantInfoBord);
|
|
self:AddClickEvent(infoCloseButton, function (go)
|
|
self.enchantInfoBord:SetActive(false);
|
|
end);
|
|
|
|
self.compareButton = self:FindGO("CompareButton");
|
|
self.saveAttriButton = self:FindGO("SaveAttriButton");
|
|
self:AddPressEvent(self.compareButton, function(go, isPress)
|
|
if(isPress)then
|
|
self:UpdateEquipEffect(false, true);
|
|
else
|
|
self:UpdateEquipEffect(true);
|
|
end
|
|
end);
|
|
self:AddClickEvent(self.saveAttriButton, function (go)
|
|
if(self.nowItemData and self.hasUnSaveAttri)then
|
|
ServiceItemProxy.Instance:CallProcessEnchantItemCmd(true, self.nowItemData.id);
|
|
end
|
|
end);
|
|
|
|
self:UpdateCoins();
|
|
self:UpdateEnchantTip();
|
|
end
|
|
|
|
function EnchantView:GetEnchantEquips()
|
|
local equipEquips = BagProxy.Instance.roleEquip:GetItems() or {};
|
|
local bagEquips = BagProxy.Instance:GetBagEquipItems()
|
|
local result = {};
|
|
for i=1,#equipEquips do
|
|
local staticData = equipEquips[i] and equipEquips[i].staticData;
|
|
local equipInfo = equipEquips[i] and equipEquips[i].equipInfo;
|
|
if(equipInfo and equipInfo:CanEnchant() and staticData.Type ~= 550 and staticData.Type ~= 560)then
|
|
table.insert(result, equipEquips[i]);
|
|
end
|
|
end
|
|
for i=1,#bagEquips do
|
|
local equipInfo = bagEquips[i] and bagEquips[i].equipInfo;
|
|
if(equipInfo and equipInfo:CanEnchant())then
|
|
table.insert(result, bagEquips[i]);
|
|
end
|
|
end
|
|
return result;
|
|
end
|
|
|
|
function EnchantView:clickTargetItem(cellCtl)
|
|
self.chooseBord:Show(true);
|
|
self.enchantInfoBord:SetActive(false);
|
|
self.chooseBord:SetChoose(self.nowItemData);
|
|
end
|
|
|
|
function EnchantView:ChooseItem(itemData)
|
|
self.nowItemData = itemData;
|
|
if(self.nowItemData)then
|
|
self.addItemButton:SetActive(false);
|
|
self.targetGo:SetActive(true);
|
|
else
|
|
self.addItemButton:SetActive(true);
|
|
self.targetGo:SetActive(false);
|
|
end
|
|
|
|
self.targetItemCell:SetData(self.nowItemData);
|
|
self.targetItemCell:UpdateMyselfInfo(self.nowItemData);
|
|
|
|
self:UpdateEquipEffect();
|
|
self:UpdateEnchantTip();
|
|
self.chooseBord:Hide();
|
|
end
|
|
|
|
function EnchantView:GetCost()
|
|
local itemType;
|
|
if(self.nowItemData)then
|
|
itemType = self.nowItemData.staticData.Type;
|
|
end
|
|
return BlackSmithProxy.Instance:GetEnchantCost(self.enchantType, itemType)
|
|
end
|
|
|
|
function EnchantView:GetMrb()
|
|
local itemCost,zenyCost = self:GetCost();
|
|
itemCost = itemCost and itemCost[1];
|
|
local itemid = itemCost and itemCost.itemid or 135;
|
|
local items = BagProxy.Instance:GetMaterialItems_ByItemId(itemid, Enchant_MATERIAL_SEARCH_BAGTYPES);
|
|
local searchNum = 0;
|
|
for i=1,#items do
|
|
searchNum = searchNum + items[i].num;
|
|
end
|
|
return searchNum;
|
|
end
|
|
|
|
function EnchantView:GetEnchantItemNum(itemid)
|
|
local items = BagProxy.Instance:GetMaterialItems_ByItemId(itemid, Enchant_MATERIAL_SEARCH_BAGTYPES);
|
|
|
|
local searchNum = 0;
|
|
for i=1,#items do
|
|
searchNum = searchNum + items[i].num;
|
|
end
|
|
return searchNum;
|
|
end
|
|
|
|
function EnchantView:UpdateCoins()
|
|
self.robLabel.text = StringUtil.NumThousandFormat(MyselfProxy.Instance:GetROB())
|
|
self.mrbLabel.text = StringUtil.NumThousandFormat(self:GetMrb())
|
|
end
|
|
|
|
function EnchantView:UpdateEquipEffect(withGoodTip, showOriginal)
|
|
local nowData = self.nowItemData;
|
|
if(nowData)then
|
|
self.enchantEffectBord:SetActive(true);
|
|
local resultEffect = {};
|
|
self.hasUnSaveAttri, enchantAttrs = nowData.enchantInfo:HasUnSaveAttri();
|
|
if(not showOriginal and self.hasUnSaveAttri)then
|
|
enchantAttrs = nowData.enchantInfo:GetCacheEnchantAttrs();
|
|
else
|
|
enchantAttrs = nowData.enchantInfo:GetEnchantAttrs();
|
|
end
|
|
self.hasNewGoodAttri = nowData.enchantInfo:HasNewGoodAttri();
|
|
for i=1,#enchantAttrs do
|
|
local temp = {};
|
|
temp.type = EnchantEffectType.Enchant;
|
|
temp.showline = true;
|
|
temp.withGoodTip = true;
|
|
temp.enchantAttri = enchantAttrs[i];
|
|
table.insert(resultEffect, temp)
|
|
end
|
|
local combineEffects;
|
|
if(not showOriginal and self.hasUnSaveAttri)then
|
|
combineEffects = nowData.enchantInfo:GetCacheCombineEffects();
|
|
else
|
|
combineEffects = nowData.enchantInfo:GetCombineEffects();
|
|
end
|
|
if(combineEffects)then
|
|
for i=1,#combineEffects do
|
|
local combineEffect = combineEffects[i];
|
|
if(combineEffect)then
|
|
local temp = {};
|
|
temp.type = EnchantEffectType.Combine;
|
|
temp.isWork = combineEffect.isWork;
|
|
if(temp.isWork)then
|
|
temp.combineTip = string.format("%s:%s", combineEffect.buffData.BuffName ,combineEffect.buffData.BuffDesc);
|
|
else
|
|
temp.combineTip = string.format("%s:%s(%s)", tostring(combineEffect.buffData.BuffName),
|
|
tostring(combineEffect.buffData.BuffDesc), tostring(combineEffect.WorkTip));
|
|
end
|
|
table.insert(resultEffect, temp);
|
|
end
|
|
end
|
|
end
|
|
|
|
self.enchantEffectCtl:ResetDatas(resultEffect);
|
|
self.noEquipEnchantTip:SetActive(#resultEffect==0);
|
|
self.saveAttriButton:SetActive(self.hasUnSaveAttri);
|
|
self.compareButton:SetActive(self.hasUnSaveAttri);
|
|
else
|
|
self.enchantEffectBord:SetActive(false);
|
|
self.hasUnSaveAttri = false;
|
|
self.hasNewGoodAttri = false;
|
|
end
|
|
end
|
|
|
|
function EnchantView:UpdateEnchantTip()
|
|
|
|
self.material_enough = false;
|
|
|
|
if(self.nowItemData)then
|
|
self.enchantTipChoose:SetActive(true);
|
|
self.enchantTipUnChoose:SetActive(false);
|
|
|
|
self.material_enough = true;
|
|
|
|
local itemCost,zenyCost = self:GetCost();
|
|
itemCost = itemCost and itemCost[1];
|
|
|
|
-- temp
|
|
if(itemCost and itemCost.num and itemCost.num > 0)then
|
|
local havNum = self:GetEnchantItemNum( itemCost.itemid );
|
|
self.enchantMrbLab.gameObject:SetActive(true);
|
|
|
|
if(havNum < itemCost.num)then
|
|
self.material_enough = false
|
|
self.enchantMrbLab.text = string.format("[c][FF3B0D]%s[-][/c]", "x"..tostring(itemCost.num));
|
|
else
|
|
self.enchantMrbLab.text = "x"..tostring(itemCost.num);
|
|
end
|
|
IconManager:SetItemIcon(Table_Item[itemCost.itemid].Icon, self.mrbSymbol)
|
|
IconManager:SetItemIcon(Table_Item[itemCost.itemid].Icon, self.encahntMrbSymbol)
|
|
else
|
|
IconManager:SetItemIcon(Table_Item[135].Icon, self.mrbSymbol)
|
|
self.enchantMrbLab.gameObject:SetActive(false);
|
|
end
|
|
if(zenyCost and zenyCost>0)then
|
|
self.enchantSliverLab.gameObject:SetActive(true);
|
|
|
|
if(MyselfProxy.Instance:GetROB() < zenyCost)then
|
|
self.material_enough = false
|
|
self.enchantSliverLab.text = string.format("[c][FF3B0D]%s[-][/c]", "x"..tostring(zenyCost));
|
|
else
|
|
self.enchantSliverLab.text = "x"..tostring(zenyCost);
|
|
end
|
|
else
|
|
self.enchantSliverLab.gameObject:SetActive(false);
|
|
end
|
|
self.costGrid.gameObject:SetActive(true);
|
|
self.costGrid:Reposition();
|
|
|
|
self.enchantTipLab.text = string.format(ZhString.EnchantView_EnchantTip,
|
|
self.nowItemData.staticData.NameZh, EnchantView.ButtonLabText[self.enchantType]);
|
|
|
|
self:UpdateEnchantInfo();
|
|
|
|
self:UpdateCoins();
|
|
else
|
|
self.costGrid.gameObject:SetActive(false);
|
|
|
|
self.enchantTipChoose:SetActive(false);
|
|
self.enchantTipUnChoose:SetActive(true);
|
|
end
|
|
end
|
|
|
|
function EnchantView:UpdateEnchantInfo()
|
|
if(self.nowItemData)then
|
|
local enchantDatas = self:CombineEnchantInfoDatas();
|
|
self.enchantInfoTitle.text = EnchantView.ButtonLabText[self.enchantType]..ZhString.EnchantView_Attri;
|
|
self.enchantInfoCtl:ResetDatas(enchantDatas);
|
|
else
|
|
errorLog("Not Select Item");
|
|
end
|
|
end
|
|
|
|
function EnchantView:CombineEnchantInfoDatas()
|
|
local enchantType = self.enchantType;
|
|
local enchantDatas = EnchantEquipUtil.Instance:GetEnchantDatasByEnchantType(enchantType);
|
|
|
|
local result = {};
|
|
local equipType = self.nowItemData.staticData.Type;
|
|
for attriType, data in pairs(enchantDatas)do
|
|
local attriMenuType, pos = EnchantEquipUtil.Instance:GetMenuType(attriType);
|
|
local infoData = result[attriMenuType]
|
|
if(not infoData)then
|
|
infoData = {};
|
|
infoData.attriMenuType = attriMenuType;
|
|
infoData.attris = {};
|
|
result[attriMenuType] = infoData;
|
|
end
|
|
|
|
local cbdata = {};
|
|
cbdata.attriMenuType = attriMenuType;
|
|
cbdata.equipType = equipType;
|
|
cbdata.enchantType = enchantType;
|
|
cbdata.enchantData, cbdata.canGet = data:Get(equipType);
|
|
cbdata.pos = pos;
|
|
table.insert(infoData.attris, cbdata);
|
|
end
|
|
local combineEffects = EnchantEquipUtil.Instance:GetCombineEffects(enchantType);
|
|
local hasValue = next(combineEffects);
|
|
if(hasValue)then
|
|
local infoData = {};
|
|
infoData.attriMenuType = EnchantMenuType.CombineAttri;
|
|
infoData.attris = {};
|
|
table.insert(result, infoData);
|
|
|
|
local enchantEquipUtil = EnchantEquipUtil.Instance;
|
|
|
|
local nameKeysMap,attris = {}, infoData.attris;
|
|
for _,data in pairs(combineEffects)do
|
|
if(nameKeysMap[ data.Name ] == nil)then
|
|
local cbdata = {};
|
|
cbdata.attriMenuType = EnchantMenuType.CombineAttri;
|
|
cbdata.equipType = equipType;
|
|
cbdata.enchantType = enchantType;
|
|
cbdata.enchantData = data;
|
|
cbdata.pos = data.id;
|
|
cbdata.canGet = enchantEquipUtil:CanGetCombineEffect(data, equipType)
|
|
table.insert(attris, cbdata);
|
|
nameKeysMap[ data.Name ] = #attris;
|
|
else
|
|
local canGet = enchantEquipUtil:CanGetCombineEffect(data, equipType)
|
|
if(canGet)then
|
|
local cbdata = attris[ nameKeysMap[data.Name] ];
|
|
cbdata.enchantData = data;
|
|
cbdata.pos = data.id;
|
|
cbdata.canGet = true;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return result;
|
|
end
|
|
|
|
function EnchantView:TryEnchant()
|
|
if(self.waitRecv)then
|
|
return;
|
|
end
|
|
|
|
if(self.nowItemData)then
|
|
local hasNewGoodAttri = self.nowItemData.enchantInfo:HasNewGoodAttri();
|
|
if(hasNewGoodAttri)then
|
|
MsgManager.ConfirmMsgByID(3060,function ()
|
|
-- ServiceItemProxy.Instance:CallProcessEnchantItemCmd(false, self.nowItemData.id);
|
|
self:DoEnchant();
|
|
end , nil , nil)
|
|
return;
|
|
end
|
|
self:DoEnchant();
|
|
else
|
|
printRed("No Choosem Item");
|
|
end
|
|
end
|
|
|
|
function EnchantView:DoEnchant()
|
|
FunctionSecurity.Me():EnchantingEquip(self.ExcuteEnchant, self);
|
|
end
|
|
|
|
function EnchantView:ExcuteEnchant()
|
|
if(self.nowItemData)then
|
|
if(not self:HasErrorEnchantInfo(self.nowItemData))then
|
|
if(not self.material_enough)then
|
|
MsgManager.ShowMsgByIDTable(8);
|
|
return;
|
|
end
|
|
end
|
|
|
|
if(not self.material_enough)then
|
|
MsgManager.ShowMsgByIDTable(8);
|
|
return;
|
|
end
|
|
|
|
if(self.npcdata)then
|
|
self.npcdata:Client_PlayAction(EnchantView.EnchantAction, nil, false);
|
|
end
|
|
|
|
self.waitRecv = true;
|
|
ServiceItemProxy.Instance:CallEnchantEquip(self.enchantType, self.nowItemData.id)
|
|
end
|
|
end
|
|
|
|
function EnchantView:HasErrorEnchantInfo(itemData)
|
|
local enchantInfo = itemData.enchantInfo;
|
|
if(enchantInfo)then
|
|
local attris = enchantInfo:GetEnchantAttrs();
|
|
local combineEffect = enchantInfo:GetCombineEffects();
|
|
if(#combineEffect == 0)then
|
|
|
|
local temp = {
|
|
["MaxSpPer"] = 0,
|
|
["MAtk"] = 0,
|
|
["EquipASPD"] = 0,
|
|
["DamIncrease"] = 0,
|
|
};
|
|
|
|
for i=1,#attris do
|
|
if(temp[ attris[i].type ] == 0)then
|
|
temp[ attris[i].type ] = 1;
|
|
end
|
|
end
|
|
|
|
if(temp["MaxSpPer"] == 1 and temp["MAtk"] == 1)then
|
|
return true;
|
|
elseif(temp["DamIncrease"] or temp["EquipASPD"] == 1)then
|
|
return true;
|
|
end
|
|
end
|
|
end
|
|
return false;
|
|
end
|
|
|
|
function EnchantView:MapEvent()
|
|
self:AddListenEvt(ServiceEvent.ItemEnchantEquip, self.HandleEnchantEnd);
|
|
self:AddListenEvt(ItemEvent.ItemUpdate, self.HandleEnchantItemUpdate);
|
|
self:AddListenEvt(ItemEvent.EquipUpdate, self.HandleEnchantItemUpdate);
|
|
self:AddListenEvt(MyselfEvent.MyDataChange, self.HandleMyDataChange)
|
|
end
|
|
|
|
function EnchantView:HandleMyDataChange(note)
|
|
self:UpdateCoins();
|
|
self:UpdateEnchantTip();
|
|
end
|
|
|
|
function EnchantView:HandleEnchantEnd(note)
|
|
self.waitRecv = false;
|
|
|
|
self:UpdateEquipEffect(true);
|
|
self:UpdateEnchantTip();
|
|
|
|
self:PlayCommonSound(AudioMap.Maps.Refinesuccess);
|
|
self:PlayUIEffect(EffectMap.UI.upgrade_surprised,
|
|
self.effectBg.gameObject,
|
|
true,
|
|
EnchantView.UpgradeEffectHandle,
|
|
self);
|
|
end
|
|
|
|
function EnchantView.UpgradeEffectHandle(effectHandle, owner)
|
|
if(owner)then
|
|
owner.effectBg:AddChild(effectHandle.gameObject);
|
|
end
|
|
end
|
|
|
|
function EnchantView:HandleEnchantItemUpdate()
|
|
self:UpdateEquipEffect(true);
|
|
self:UpdateEnchantTip();
|
|
end
|
|
|
|
function EnchantView:OnEnter()
|
|
EnchantView.super.OnEnter(self);
|
|
|
|
if(self.npcdata)then
|
|
local npcTrans = self.npcdata.assetRole.completeTransform;
|
|
if(npcTrans)then
|
|
local viewPort = CameraConfig.HappyShop_ViewPort
|
|
local rotation = CameraConfig.HappyShop_Rotation
|
|
self:CameraFaceTo(npcTrans,viewPort,rotation)
|
|
end
|
|
end
|
|
|
|
self.waitRecv = false;
|
|
end
|
|
|
|
function EnchantView:OnExit()
|
|
self:CameraReset();
|
|
EnchantView.super.OnExit(self);
|
|
end
|
|
|
|
function EnchantView:CloseSelf()
|
|
if( self.nowItemData)then
|
|
if(self.hasNewGoodAttri)then
|
|
MsgManager.ConfirmMsgByID(3060,function ()
|
|
ServiceItemProxy.Instance:CallProcessEnchantItemCmd(false, self.nowItemData.id);
|
|
EnchantView.super.CloseSelf(self);
|
|
end , nil, nil)
|
|
return;
|
|
elseif(self.hasUnSaveAttri)then
|
|
ServiceItemProxy.Instance:CallProcessEnchantItemCmd(false, self.nowItemData.id);
|
|
end
|
|
end
|
|
EnchantView.super.CloseSelf(self);
|
|
end
|
|
|
|
|
|
|
|
|
|
|