testdangky123
10-06-12, 11:49 PM
Anh em ai có 2 cái này chưa nhỉ :-o
mình kiểm tra server long hổ tranh bá đã update 2 thứ này => <b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
ở client họ có update thêm phần => client\ui\script\window\fightpower.lua và zhenyuan.lua
là zhenyuan.lua
-----------------------------------------------------
--ÎļþÃû £º zhenyuan.lua
--´´½¨Õß £º zhoupengfeng
--´´½¨Ê±¼ä £º 2010-06-28
--¹¦ÄÜÃèÊö £º Õ½¶·Á¦
------------------------------------------------------
local uiZhenYuan = Ui:GetClass("zhenyuan");
local tbObject = Ui.tbLogic.tbObject;
local tbMouse = Ui.tbLogic.tbMouse;
uiZhenYuan.BTN_CLOSE = "BtnClose";
uiZhenYuan.BTN_OK = "BtnOk";
uiZhenYuan.BTN_CANSEL = "BtnCansel";
uiZhenYuan.OBJ_REFINE = "ObjRefine";
uiZhenYuan.OBJ_EXP = "ObjExp";
uiZhenYuan.OBJ_EXPBOOK = "ObjExpBook";
uiZhenYuan.TXT_TIP = "TxtTip";
uiZhenYuan.TXT_TIPEXP = "TxtTipExp";
uiZhenYuan.TXT_BALANCEEXP = "TxtExpBalance"
uiZhenYuan.LST_ATTR = "LstAttr";
uiZhenYuan.IMG_EFFECT = "ImgEffect";
uiZhenYuan.BTNLEVEL1 = "BtnLevel1";
uiZhenYuan.BTNLEVEL10 = "BtnLevel10";
uiZhenYuan.BTNLEVELALL = "BtnLevelAll";
uiZhenYuan.BTN_LEVEL = "BtnLevel";
uiZhenYuan.BTN_APPLYUNBIND = "BtnApplyUnBind";
uiZhenYuan.BTN_BIND = "BtnBind";
uiZhenYuan.BTN_UNBIND = "BtnUnBind";
uiZhenYuan.TXT_ZHENYUANINTRODUCE = "TxtZhenYuanInfo";
uiZhenYuan.PAGE_SET = "PageSet";
-- Ò³Ãæ
uiZhenYuan.tbPAGES =
{
{szBtn = "BtnPageExperience", szPage = "PageExperience", },
{szBtn = "BtnPageRefine", szPage = "PageRefine", },
{szBtn = "BtnPageMain", szPage = "PageMain", },
}
local nPos1 = 0;
local nPos2 = 1;
local nPos3 = 2;
--local tbRefineCont1 = { nOffsetX = nPos1, bUse = 0, nRoom = Item.ROOM_ZHENYUAN_REFINE, bSendToGift = 1};
--local tbRefineCont2 = { nOffsetX = nPOs2, bUse = 0, nRoom = Item.ROOM_ZHENYUAN_REFINE, bSendToGift = 1};
--local tbRefineCont3 = { nOffsetX = nPos3, bUse = 0, nRoom = Item.ROOM_ZHENYUAN_REFINE, bSendToGift = 1};
local tbRefineCont1 = { bUse = 0, nRoom = Item.ROOM_ZHENYUAN_REFINE_MAIN, bSendToGift = 1};
local tbRefineCont2 = { bUse = 0, nRoom = Item.ROOM_ZHENYUAN_REFINE_CONSUME, bSendToGift = 1};
local tbRefineCont3 = { bUse = 0, nRoom = Item.ROOM_ZHENYUAN_REFINE_RESULT, bSendToGift = 1};
local tbXiuLianCont = { bUse = 0, nRoom = Item.ROOM_ZHENYUAN_XIULIAN_ZHENYUAN, bSendToGift = 1};
local tbBookCont = { bUse = 0, nRoom = Item.ROOM_ZHENYUAN_XIULIAN_ITEM, bSendToGift = 1};
-- Á¶»¯
function tbRefineCont1:CheckSwitchItem(pDrop, pPick, nX, nY)
if (pDrop) then
if Ui(Ui.UI_ZHENYUAN).nRefineResult == 1 then
Ui(Ui.UI_ZHENYUAN).nRefineResult = 0;
Ui(Ui.UI_ZHENYUAN).tbObjRefine3:ClearRoom(nil, 0, 0);
end
local ret = Item.tbZhenYuan:CheckRefineItem(pDrop, 1);
if (1 ~= ret) then
me.Msg(ret);
return 0;
end
-- todo delete
--[[
if (3 == nX) then
return 0; -- Á¶»¯ºóÕæÔª¸ñ ²»ÄÜ·ÅÕæÔª
end
if (pDrop.szClass ~= "zhenyuan") then
me.Msg("Ö»ÄÜ·ÅÖÃÕæÔª£¡");
return 0;
end
if(2 == nX) then
if (1 == Item.tbZhenYuan:GetEquiped(pDrop)) then
me.Msg("Ö»ÄÜ·ÅÖÃ令ÌåµÄÕæÔª£¡");
return 0;
end
elseif(1 == nX) then
if(1 == Ui(Ui.UI_ZHENYUAN):IsPrefect(pDrop)) then
me.Msg("¸ÃÕæÔªËùÓÐ×ÊÖÊÒÑÂú£¬²»ÐèÒ ªÁ¶»¯£¡");
return 0;
end
end
--]]
end
Ui(Ui.UI_ZHENYUAN):PlaceZhenYuanRefine(1, pDrop);
return 1;
end
function tbRefineCont2:CheckSwitchItem(pDrop, pPick, nX, nY)
if (pDrop) then
if Ui(Ui.UI_ZHENYUAN).nRefineResult == 1 then
Ui(Ui.UI_ZHENYUAN).nRefineResult = 0;
Ui(Ui.UI_ZHENYUAN).tbObjRefine3:ClearRoom(nil, 0, 0);
end
local ret = Item.tbZhenYuan:CheckRefineItem(pDrop, 2);
if (1 ~= ret) then
me.Msg(ret);
return 0;
end
-- todo delete
--[[
if (3 == nX) then
return 0; -- Á¶»¯ºóÕæÔª¸ñ ²»ÄÜ·ÅÕæÔª
end
if (pDrop.szClass ~= "zhenyuan") then
me.Msg("Ö»ÄÜ·ÅÖÃÕæÔª£¡");
return 0;
end
if(2 == nX) then
if (1 == Item.tbZhenYuan:GetEquiped(pDrop)) then
me.Msg("Ö»ÄÜ·ÅÖÃ令ÌåµÄÕæÔª£¡");
return 0;
end
elseif(1 == nX) then
if(1 == Ui(Ui.UI_ZHENYUAN):IsPrefect(pDrop)) then
me.Msg("¸ÃÕæÔªËùÓÐ×ÊÖÊÒÑÂú£¬²»ÐèÒ ªÁ¶»¯£¡");
return 0;
end
end
--]]
end
Ui(Ui.UI_ZHENYUAN):PlaceZhenYuanRefine(2, pDrop);
return 1;
end
function tbRefineCont3:CheckSwitchItem(pDrop, pPick, nX, nY)
-- ʼÖÕÄÜÄóöÀ´
if pPick then
Ui(Ui.UI_ZHENYUAN).nRefineResult = 0;
return 1;
end
-- ²»ÄÜ·ÅÈë
return 0;
end
-- ÐÞÁ¶
function tbXiuLianCont:CheckSwitchItem(pDrop, pPick, nX, nY)
if (pDrop) then
if (pDrop.szClass ~= "zhenyuan") then
me.Msg("Chỉ có thể bỏ vào chân nguyên!");
return 0;
end
if (Item.tbZhenYuan:GetLevel(pDrop) == 120) then
me.Msg("Chân nguyên này đã đạt tối đa, không cần tu luyện!");
return 0;
end
end
Ui(Ui.UI_ZHENYUAN):PlaceZhenYuanXiuLian(pDrop);
return 1;
end
function tbBookCont:CheckSwitchItem(pDrop, pPick, nX, nY)
if (pDrop) then
if (pDrop.szClass ~= "partnerexpbook") then
me.Msg("Chỉ có thể bỏ vào Sách kinh nghiệm đồng hành!");
return 0;
end
-- todo ÊÇ·ñÌí¼Ó¼ì²â¹ý¶à¾ÑéÊé
end
return Ui(Ui.UI_ZHENYUAN):PlaceExpBook(pDrop, pPick, nX, nY);
end
-- ÅжÏÕæÔªËùÓÐ×ÊÖÊÊÇ·ñÒÑÂú
function uiZhenYuan:IsPrefect(pItem)
local nAttrMax = 20;
if (nAttrMax == Item.tbZhenYuan:GetAttribPotential1(pItem)
and nAttrMax == Item.tbZhenYuan:GetAttribPotential2(pItem)
and nAttrMax == Item.tbZhenYuan:GetAttribPotential3(pItem)
and nAttrMax == Item.tbZhenYuan:GetAttribPotential4(pItem)
) then
return 1;
end
return 0;
end
--uiZhenYuan.szTipRefine = "ÇëÔÚÉÏ·½·ÅÈëÕæÔª£¬Á¶»¯ºó<color=orange>¸±ÕæÔª½«Ïûʧ<color>£¡ÒÑ»¤ÌåÕæÔªÖ»ÄÜ×÷ΪÖ÷ÕæÔ ªÁ¶»¯¡£<enter>ÇëÑ¡ÔñÁ¶»¯";
uiZhenYuan.tbTip =
{
{
"Hãy bỏ vào chân nguyên, sau khi luyện hóa <color=orange>chân nguyên phụ sẽ biến mất<color>!<enter>Chân nguyên đã hộ thể chỉ có thể xem như luyện hóa chân nguyên chính.",
"Hãy chọn thuộc tính luyện hóa (<color=red>cần %s Bạc<color>):<enter>",
}, -- Á¶»¯
{
"★ Trước khi dùng sách exp, chân nguyên hãy đánh quái lên cấp",
"★ Dùng sách exp sẽ lên cấp nhanh (không hạn chế số sách)",
}, -- ÐÞÁ¶
}
local nPXIULIAN = 1;
local nPREFINE = 2;
local nPGMAIN = 3;
local nExpBookMaxNum = 18;
function uiZhenYuan:CanOpenWnd()
if Item.tbZhenYuan.bOpen and Item.tbZhenYuan.bOpen == 1 then
return 1;
end
Ui:ServerCall("UI_TASKTIPS", "Begin", "Hệ thống chân nguyên chưa mở, xin hãy đợi");
return 0;
end
function uiZhenYuan:Init()
self.nCurPageIndex = nPREFINE;
self.nRefineResult = 0;
end
function uiZhenYuan:OnCreate()
self:CreateObjContainer();
end
-- Ïú»ÙOBJÈÝÆ÷
function uiZhenYuan:OnDestroy()
tbObject:UnregContainer(self.tbObjRefine1);
tbObject:UnregContainer(self.tbObjRefine2);
tbObject:UnregContainer(self.tbObjRefine3);
tbObject:UnregContainer(self.tbObjXiuLianZhenYuan) ;
tbObject:UnregContainer(self.tbObjExpBook);
end
function uiZhenYuan:CreateObjContainer()
-- Á¶»¯¸ñ×Ó
self.tbObjRefine = {};
for i = 1, 3 do
--local tbCont = tbRefineCont;
--tbCont.nOffsetX = i;
--self.tbObjRefine[i].CheckSwitchItem = self.CheckSwitchItem;
end
self.tbObjRefine1 = tbObject:RegisterContainer(
self.UIGROUP,
(self.OBJ_REFINE..1),
1, 1,
tbRefineCont1,
"itemroom"
);
self.tbObjRefine2 = tbObject:RegisterContainer(
self.UIGROUP,
(self.OBJ_REFINE..2),
1, 1,
(tbRefineCont2),
"itemroom"
);
self.tbObjRefine3 = tbObject:RegisterContainer(
self.UIGROUP,
(self.OBJ_REFINE..3),
1, 1,
(tbRefineCont3),
"itemroom"
);
-- ÐÞÁ¶ ÕæÔª¸ñ×Ó
self.tbObjXiuLianZhenYuan = tbObject:RegisterContainer(
self.UIGROUP,
(self.OBJ_EXP),
1, 1,
tbXiuLianCont,
"itemroom"
);
-- ÐÞÁ¶ ¾ÑéÊé¸ñ×Ó
self.tbObjExpBook = tbObject:RegisterContainer(
self.UIGROUP,
(self.OBJ_EXPBOOK),
6, 3,
tbBookCont,
"itemroom"
);
end
function uiZhenYuan:OnOpen()
me.ApplyZhenYuanEnhance(Item.tbZhenYuan.emZHENYUAN _ENHANCE_OPENWINDOW);
if (self.bFirstOpen) then -- µÚÒ»´Î´ò¿ª
self.bFirstOpen = 1;
self:CreateObjContainer();
end
self.nCurPageIndex = nPXIULIAN; --1.Á¶»¯·ÖÒ³£¬2.ÐÞÁ¶·ÖÒ³
self:UpdatePage(self.nCurPageIndex);
self:UpdateObjCont();
--UiManager:OpenWindow(Ui.UI_ITEMBOX);
end
function uiZhenYuan:OnClose()
me.ApplyZhenYuanEnhance(Item.tbZhenYuan.emZHENYUAN _ENHANCE_NONE);
if (self.nCurPageIndex == nPREFINE) then
self:RefineCansel();
UiManager:ReleaseUiState(UiManager.UIS_ZHENYUAN_RE FINE);
else
self:XiuLianCansel();
UiManager:ReleaseUiState(UiManager.UIS_ZHENYUAN_XI ULIAN);
end
end
function uiZhenYuan:OnButtonClick(szWnd, nParam)
local nPage = self.nCurPageIndex;
if (szWnd == self.BTN_CLOSE) then
UiManager:CloseWindow(self.UIGROUP);
elseif (szWnd == self.BTN_OK) then
if (nPREFINE == nPage) then
self:ClickRefine();
else
self:ClickXiuLian();
end
elseif (szWnd == self.BTN_CANSEL) then
UiManager:CloseWindow(self.UIGROUP);
--[[
elseif szWnd == self.BTNLEVEL1 then
self:ApplyLiLianExp(1);
elseif szWnd == self.BTNLEVEL10 then
self:ApplyLiLianExp(2);
elseif szWnd == self.BTNLEVELALL then
self:ApplyLiLianExp(3);
--]]
elseif szWnd == self.BTN_LEVEL then
-- TODO
UiManager:CloseWindow(self.UIGROUP);
me.CallServerScript({ "ZhenYuanCmd", "ApplyUseLilianTime"});
elseif szWnd == self.BTN_UNBIND then
me.CallServerScript({ "ZhenYuanCmd", "SwitchBind", me.nId, Item.SWITCHBIND_UNBIND});
elseif szWnd == self.BTN_BIND then
me.CallServerScript({ "ZhenYuanCmd", "SwitchBind", me.nId, Item.SWITCHBIND_BIND});
elseif szWnd == self.BTN_APPLYUNBIND then
me.CallServerScript({ "ZhenYuanCmd", "ApplyUnBind", me.nId});
end
for i = 1,3 do
if (szWnd == self.tbPAGES[i].szBtn) then
self.nCurPageIndex = i;
self:UpdatePage(self.nCurPageIndex);
return;
end
end
end
function uiZhenYuan:UpdatePage(nPage)
PgSet_ActivePage(self.UIGROUP, self.PAGE_SET, self.tbPAGES[nPage].szPage);
Wnd_SetVisible(self.UIGROUP, self.BTN_OK, 1);
Wnd_SetVisible(self.UIGROUP, self.BTN_CANSEL, 1);
if (nPREFINE == nPage) then -- Á¶»¯
self:XiuLianCansel();
Btn_SetTxt(self.UIGROUP, self.BTN_OK, "Luyện hóa");
UiManager:ReleaseUiState(UiManager.UIS_ZHENYUAN_XI ULIAN);
UiManager:SetUiState(UiManager.UIS_ZHENYUAN_REFINE );
self:UpdateTips(1);
elseif (nPXIULIAN == nPage) then -- ÐÞÁ¶
self:RefineCansel();
self:UpdateLiLianInfo();
Btn_SetTxt(self.UIGROUP, self.BTN_OK, "Tu luyện");
UiManager:ReleaseUiState(UiManager.UIS_ZHENYUAN_RE FINE);
UiManager:SetUiState(UiManager.UIS_ZHENYUAN_XIULIA N);
self:UpdateTips(1);
elseif (nPGMAIN == nPage) then
Wnd_Hide(self.UIGROUP, self.BTN_OK);
Wnd_Hide(self.UIGROUP, self.BTN_CANSEL);
UiManager:ReleaseUiState(UiManager.UIS_ZHENYUAN_RE FINE);
UiManager:ReleaseUiState(UiManager.UIS_ZHENYUAN_XI ULIAN);
self:XiuLianCansel();
self:RefineCansel();
self:UpdateHelpPage();
end
end
function uiZhenYuan:UpdateHelpPage()
local nApplyTime = me.GetTask(Item.tbZhenYuan.TASK_GID_UNBIND, Item.tbZhenYuan.TASK_SUBID_UNBIND);
if nApplyTime == 0 or GetTime() - nApplyTime < 0 or GetTime() - nApplyTime > Item.tbZhenYuan.UNBIND_MAX_TIME then
Btn_SetTxt(self.UIGROUP, self.BTN_APPLYUNBIND, "Xin mở");
Wnd_SetEnable(self.UIGROUP, self.BTN_UNBIND, 0);
else
Btn_SetTxt(self.UIGROUP, self.BTN_APPLYUNBIND, "Hủy mở");
if (GetTime() - nApplyTime < Item.tbZhenYuan.UNBIND_MIN_TIME) then
Wnd_SetEnable(self.UIGROUP,self.BTN_UNBIND, 0);
else
Wnd_SetEnable(self.UIGROUP, self.BTN_UNBIND, 1);
end
end
local szText = [[ Chân nguyên được ngưng tụ từ đồng hành cấp 1, chỉ có 1 bộ phận đồng hành có thể ngưng tụ thành chân nguyên, được thể hiện rõ trong giao diện đồng hành.
<color=green>1. Thuộc tính chân nguyên<color><enter> Mỗi chân nguyên có 4 dòng thuộc tính, trị thuộc tính thể hiện đẳng cấp của thuộc tính đó, cấp thuộc tính càng cao hiệu quả càng ưu việt.
<color=green>2. Cấp sao tư chất thuộc tính chân nguyên<color><enter> Cấp sao bên dưới mỗi dòng thuộc tính thể hiện tư chất của thuộc tính đó. Cấp sao càng cao, trị thuộc tính tăng càng nhiều sau khi thăng cấp chân nguyên.
<color=green>3. Tu luyện chân nguyên<color><enter> Tu luyện là chỉ sự thăng cấp chân nguyên, thăng cấp mới có thể nâng cao những thuộc tính khác.
<color=green>4. Luyện hóa chân nguyên<color><enter> Việc thăng cấp tư chất thuộc tính chân nguyên được gọi là luyện hóa chân nguyên.
<color=green>5. Giá trị của chân nguyên<color><enter> Cấp tư chất thuộc tính quyết định giá trị của chân nguyên, giá trị càng cao, xếp hạng chân nguyên càng cao, sau khi trang bị vào người, sức chiến đấu cộng thêm cũng nhiều hơn.
<color=green>6. Khóa và mở khóa chân nguyên<color><enter> Có thể khóa chân nguyên thông qua nút chức năng bên dưới, đương nhiên cũng có thể mở khóa. Để mở khóa cần phải xin phép, thời gian xin mở khóa là 3 ngày!
<color=green>7. Kinh nghiệm chuyển thành thời gian luyện tập<color><enter> Các vị hiệp sĩ có thể dùng tu vi bản thân để tiến hành tu luyện, dùng kinh nghiệm chuyển thành kinh nghiệm luyện tập của chân nguyên.
<color=orange>Thông tin chi tiết hãy xem trong Cẩm nang trợ giúp F12 - Chi tiết - Chân nguyên<color>]];
Txt_SetTxt(self.UIGROUP, self.TXT_ZHENYUANINTRODUCE, szText);
end
function uiZhenYuan:OnAnimationOver(szWnd)
if (szWnd == self.IMG_EFFECT) then
Wnd_Hide(self.UIGROUP, self.IMG_EFFECT); -- ²¥·ÅÍê±Ï£¬Òþ²ØͼÏñ
end
end
function uiZhenYuan:OnListSel(szWnd, nParam)
if szWnd == self.LST_ATTR then
local nKey = Lst_GetCurKey(self.UIGROUP, self.LST_ATTR);
self.nSelect = nKey;
local pItem = me.GetItem(Item.ROOM_ZHENYUAN_REFINE_CONSUME, 0, 0);
if not pItem then
Txt_SetTxt(self.UIGROUP, self.TXT_TIP, "Hãy bỏ vào chân nguyên phụ!");
return;
end
self:UpdateTips(2, self.tbAttrList[nKey].szTip);
if (self.nCurPageIndex == nPREFINE) then
self:UpdateRefine();
end
end
end
-- ¸üÐÂÒ³ÃæÕýÖеÄÌáʾÎÄ×Ö
function uiZhenYuan:UpdateTips(nTipId, szTipEx, szTipEx2)
local nPage = self.nCurPageIndex;
if (nPREFINE == nPage) then
local szTip = self.tbTip[1][nTipId];
if (szTipEx) then
szTip = szTip .. szTipEx;
end
Txt_SetTxt(self.UIGROUP, self.TXT_TIP, szTip);
else
local szTip = self.tbTip[2][1];
if (szTipEx) then
szTip = szTip .. szTipEx;
end
szTip = szTip .. "<enter>";
szTip = szTip .. self.tbTip[2][2];
if (szTipEx2) then
szTip = szTip .. szTipEx2;
end
Txt_SetTxt(self.UIGROUP, self.TXT_TIPEXP, szTip);
end
end
-- Á¶»¯Ãæ°å£º·ÅÈëÕæÔª nType = 1 Ö÷ÕæÔª or = 2 ¸±ÕæÔª or = 0 Çå¿Õ
function uiZhenYuan:PlaceZhenYuanRefine(nType, pItem)
self:UpdateTips(1);
if (not nType or 0 == nType) then
self.tbAttrList = nil;
self:UpdateAttrList();
return;
end
local pLocItem1 = nil;
local pLocItem2 = nil;
if (1 == nType) then
pLocItem1 = pItem;
pLocItem2 = self:GetZhenYuanRefine2();
end
if (2 == nType) then
pLocItem1 = self:GetZhenYuanRefine1();
pLocItem2 = pItem;
end
if (pLocItem1) then -- Ö÷ÕæÔª
self:UpdateTips(1);
self.tbAttrList = {};
local tbAttrName = {};
for i = 1, 4 do
local nAttrMagicId = Item.tbZhenYuan:GetAttribMagicId(pLocItem1, i);
local szAttrName = Item.tbZhenYuan:GetAttribTipName(nAttrMagicId);
tbAttrName[i] = szAttrName;
end
local tbAttrVal = {};
tbAttrVal[1] = Item.tbZhenYuan:GetAttribPotential1(pLocItem1);
tbAttrVal[2] = Item.tbZhenYuan:GetAttribPotential2(pLocItem1);
tbAttrVal[3] = Item.tbZhenYuan:GetAttribPotential3(pLocItem1);
tbAttrVal[4] = Item.tbZhenYuan:GetAttribPotential4(pLocItem1);
for i = 1, 4 do
local szAttrStar = Item.tbZhenYuan:GetAttribStar(tbAttrVal[i]);
self.tbAttrList[i] = {string.format("%s£º ", tbAttrName[i]), string.format("<color=gold>%s<color>", szAttrStar), "", color = nil, szTip = nil};
end
if (pLocItem2) then -- ¸±ÕæÔª
if (not self.tbAttrList) then
print("[zhenyuan]:self.tbAttrList is nil");
return;
end
local tbResult = Item.tbZhenYuan:GetAttribRefineInfo(pLocItem1, pLocItem2);
if (tbResult) then
for i = 1, 4 do
if (tbResult[i]) then
--self.tbAttrList[i].color = "green";
local nAddedMin = tbResult[i][1][1];
local szStarAddedMin = Item.tbZhenYuan:GetAttribStar(nAddedMin);
local nMinProb = tbResult[i][1][2];
local nAddedMax = tbResult[i][2][1];
local szStarAddedMax = Item.tbZhenYuan:GetAttribStar(nAddedMax);
local nMaxProb = tbResult[i][2][2];
self.tbAttrList[i][1] = string.format("<color=green>%s<color>", self.tbAttrList[i][1]);
self.tbAttrList[i][3] = string.format("<color=green>Ôö¼Ó<color> <color=gold>%s<color>", szStarAddedMin);
--self.tbAttrList[i].szTip = string.format("<color=orange> %d%%¸ÅÂÊÔö¼Ó <color><color=gold>%s<color>", nMinProb, szStarAddedMin); -- ÌáʾÓï¾ä
self.tbAttrList[i].szTip = string.format("<color=orange>%d%% tỉ lệ vượt mức tăng <color> <color=gold>%s<color>", (100-nMinProb), "¡î");
end
end
end
self:UpdateTips(2);
end
else
self.tbAttrList = nil;
end
self:UpdateAttrList(self.tbAttrList);
end
function uiZhenYuan:GetStarStr(dwValue)
local szStar = "";
local nFloor = math.floor(dwValue);
for i = 1, nFloor do
szStar = szStar .. "★";
end
if (dwValue ~= nFloor) then
szStar = szStar .. "☆";
end
return szStar;
end
--[[
-- Á¶»¯µÄÕæÔª£¬ nPos = 1->3 ¶ÔÓ¦ Ö÷ÕæÔª¡¢¸±ÕæÔª¡¢Á¶»¯ºóÕæÔ ª
function uiZhenYuan:GetZhenYuanRefine(nPos)
-- todo change
if (nPos1 == nPos) then
--
return self.pItem1;
else
--return me.GetItem(Item.ROOM_ZHENYUAN_REFINE_CONSUME, 0, 0);
return self.pItem2;
end
end
--]]
-- Á¶»¯Ö÷ÕæÔª
function uiZhenYuan:GetZhenYuanRefine1()
return me.GetItem(Item.ROOM_ZHENYUAN_REFINE_MAIN, 0, 0);
end
-- Á¶»¯¸±ÕæÔª
function uiZhenYuan:GetZhenYuanRefine2()
return me.GetItem(Item.ROOM_ZHENYUAN_REFINE_CONSUME, 0, 0);
end
-- ÐÞÁ¶µÄÕæÔª
function uiZhenYuan:GetZhenYuanXiuLian()
local pItem = me.GetItem(Item.ROOM_ZHENYUAN_XIULIAN_ZHENYUAN, 0, 0);
return pItem;
end
-- ¸ñ×ÓÖеľÑéÊé nX¡¢nY³ýÍâ
function uiZhenYuan:GetExpBookTab(pDrop, pPick, nX, nY)
local tbExpBook = {};
local nCnt = 1;
-- ¾ÑéÊé¸ñ×ÓΪ 3*6 ¹²18¸ö
for i = 0, 5 do
for j = 0, 2 do
local pItem = me.GetItem(Item.ROOM_ZHENYUAN_XIULIAN_ITEM, i, j);
if (pItem and (i ~= nX or j ~= nY)) then
tbExpBook[nCnt] = pItem;
nCnt = nCnt + 1;
end
end
end
if (pDrop) then
--tbExpBook[nY * 6 + nX] = pDrop;
tbExpBook[nCnt] = pDrop;
end
return tbExpBook;
end
-- ¸üÐÂÕæÔªÊôÐÔÁбí
function uiZhenYuan:UpdateAttrList(tbAttrList)
Lst_Clear(self.UIGROUP, self.LST_ATTR);
if (not tbAttrList) then
return ;
end
for i = 1, #tbAttrList do
local szCell1 = tbAttrList[i][1];
local szCell2 = tbAttrList[i][2];
local szCell3 = tbAttrList[i][3];
local szColor = tbAttrList[i].color;
if (szColor and string.len(szColor) > 0) then
szCell1 = string.format("<color=%s>%s<color>", szColor, tbAttrList[i][1]);
szCell2 = string.format("<color=%s>%s<color>", szColor, tbAttrList[i][2]);
szCell3 = string.format("<color=%s>%s<color>", szColor, tbAttrList[i][3]);
end
Lst_SetCell(self.UIGROUP, self.LST_ATTR, i, 1, szCell1);
Lst_SetCell(self.UIGROUP, self.LST_ATTR, i, 2, szCell2);
Lst_SetCell(self.UIGROUP, self.LST_ATTR, i, 3, szCell3);
end
end
-- µã»÷°´Å¥ Á¶»¯
function uiZhenYuan:ClickRefine()
local pItemRefine = self:GetZhenYuanRefine1(); -- Ö÷ÕæÔª
local pItemSub = self:GetZhenYuanRefine2(); -- ¸±ÕæÔª
if ((not pItemRefine) or (not pItemSub)) then
me.Msg("Hãy đặt vào Chân nguyên chính-phụ muốn luyện hóa!");
return;
end
local nSelectAttrId = Lst_GetCurKey(self.UIGROUP, self.LST_ATTR);
if not nSelectAttrId or nSelectAttrId <= 0 or nSelectAttrId > Item.tbZhenYuan.ATTRIB_COUNT then
me.Msg("Xin chọn các thuộc tính muốn luyện hóa để tiến hành!");
return;
end
local nAttrMagicId = Item.tbZhenYuan:GetAttribMagicId(pItemRefine, nSelectAttrId);
--local szSubZhenYuan = pItemSub.szName;
-- Á¶»¯
local nRet = Item.tbZhenYuan:ApplyRefine(pItemRefine, pItemSub, nAttrMagicId);
end
-- Êó±êÂÓ¹ýÁбí
function uiZhenYuan:OnListOver(szWnd, nItemIndex)
local nAttrId = Lst_GetCurKey(self.UIGROUP, self.LST_ATTR) + 1;
if (szWnd == self.LIST_MEMBER) and nItemIndex >= 0 then
nAttrId = nItemIndex + 1;
--self.szTipSelected = self.tbAttrList[nAttrId].szTip;
end
--self:UpdateTips(2, self.tbAttrList[nAttrId].szTip);
end
-- È¡ÏûÁ¶»¯
function uiZhenYuan:RefineCansel()
-- todo
for i = 1, 3 do
--self.tbObjRefine[i]:ClearRoom();
end
self.tbObjRefine1:ClearRoom();
self.tbObjRefine2:ClearRoom();
self.tbObjRefine3:ClearRoom();
self:PlaceZhenYuanRefine();
end
-- µã»÷°´Å¥ ÐÞÁ¶
function uiZhenYuan:ClickXiuLian()
me.ApplyZhenYuanEnhance(Item.tbZhenYuan.emZHENYUAN _ENHANCE_XIULIAN)
end
-- todo ´íÎó·´À¡
-- È¡ÏûÐÞÁ¶
function uiZhenYuan:XiuLianCansel()
-- todoo
self.tbObjXiuLianZhenYuan:ClearRoom();
self.tbObjExpBook:ClearRoom();
self:PlaceZhenYuanXiuLian();
end
-- ·ÅÈëÕæÔª ÐÞÁ¶
function uiZhenYuan:PlaceZhenYuanXiuLian(pItem)
self:UpdateTips(1);
if (not pItem) then
--self:UpdateTips(1);
return;
end
local tbExpBook = self:GetExpBookTab();
self:UpdateXiuLianTip(pItem, tbExpBook);
end
function uiZhenYuan:PlaceExpBook(pDrop, pPick, nX, nY)
local tbExpBook = self:GetExpBookTab(pDrop, pPick, nX, nY);
local pZhenYuan = self:GetZhenYuanXiuLian();
if (not pZhenYuan) then
me.Msg("Hãy bỏ vào chân nguyên cần tu luyện!");
return 0;
end
--[[
if (pDrop) then
table.insert(tbExpBook, pDrop);
end--]]
return self:UpdateXiuLianTip(pZhenYuan, tbExpBook);
end
function uiZhenYuan:UpdateXiuLianTip(pItem, tbExpBook)
local szTipEx1 = "";
local szTipEx2 = "";
if (not pItem) then
self:UpdateTips(1, "", "");
return 0;
end
local nLevelOld = Item.tbZhenYuan:GetLevel(pItem);
if (tbExpBook and Lib:CountTB(tbExpBook) >= 1) then
local bOver, nLevelNew, nExpRemain = Item.tbZhenYuan:GetExpAdded(pItem, tbExpBook);
if (1 == bOver) then
me.Msg("Bạn đã bỏ quá nhiều Sách kinh nghiệm đồng hành!");
return 0;
end
szTipEx2 = string.format(" Chân nguyên cấp: %0.2f <color=gold>→ %0.2f<color><enter>", nLevelOld, nLevelNew);
end
local nLiLianTime = me.GetTask(Item.tbZhenYuan.EXPSTORE_TASK_MAIN, Item.tbZhenYuan.EXPSTORE_TASK_SUB);
if (0 < nLiLianTime) then
local nLevelUp = Item.tbZhenYuan:CalExpFromTime(pItem, nLiLianTime);
if (0 < math.floor(nLevelUp)) then
szTipEx1 = string.format(" Kinh nghiệm luyện tập hiện tại có thể làm cho chân nguyên này tăng đến <color=gold>cấp %d<color>!", (nLevelOld + nLevelUp));
end
end
self:UpdateTips(1, szTipEx1, szTipEx2);
return 1;
end
function uiZhenYuan:UpdateRefine()
for i = 1, 3 do
--Lib:ShowTB(self.tbObjRefine[i]);
--self.tbObjRefine[i]:UpdateRoom();
end
end
function uiZhenYuan:UpdateXiuLian()
self:UpdateLiLianInfo();
--self.tbObjXiuLianZhenYuan:UpdateRoom();
--self.tbObjExpBook:UpdateRoom();
end
function uiZhenYuan:UpdateLiLianInfo()
local nLiLianTime = me.GetTask(Item.tbZhenYuan.EXPSTORE_TASK_MAIN, Item.tbZhenYuan.EXPSTORE_TASK_SUB);
local tbEnable = {0, 0, 0};
local pItem = me.GetItem(Item.ROOM_ZHENYUAN_XIULIAN_ZHENYUAN, 0, 0);
if pItem and nLiLianTime > 0 then
local nLevelUp = Item.tbZhenYuan:CalExpFromTime(pItem, nLiLianTime);
if nLevelUp >= 1 then
tbEnable[1] = 1;
end
if nLevelUp >= 10 then
tbEnable[2] = 1;
end
end
if nLiLianTime > 0 then
tbEnable[3] = 1;
Wnd_SetEnable(self.UIGROUP, self.BTN_LEVEL, 1);
else
Wnd_SetEnable(self.UIGROUP, self.BTN_LEVEL, 0);
end
--[[
Wnd_SetEnable(self.UIGROUP, self.BTNLEVEL1, tbEnable[1]);
Wnd_SetEnable(self.UIGROUP, self.BTNLEVEL10, tbEnable[2]);
Wnd_SetEnable(self.UIGROUP, self.BTNLEVELALL, tbEnable[3]);
--]]
local szTime = "Kinh nghiệm<enter>";
szTime = szTime..string.format("%dh%dphút", math.floor(nLiLianTime/60), nLiLianTime%60);
Txt_SetTxt(self.UIGROUP, self.TXT_BALANCEEXP, szTime);
end
function uiZhenYuan:OnSyncItem(nRoom, nX, nY)
self:UpdateObjCont();
end
function uiZhenYuan:UpdateObjCont()
local nPage = self.nCurPageIndex;
if (nPREFINE == nPage) then
self:UpdateRefine();
else
self:UpdateXiuLian();
end
end
-- ×¢²áʼþ¸üлص÷
function uiZhenYuan:RegisterEvent()
local tbRegEvent =
{
{ UiNotify.emCOREEVENT_SYNC_ITEM, self.OnSyncItem},
{ UiNotify.emCOREEVENT_ENHANCE_ZHENYUAN_RESULT, self.OnResult },
{ UiNotify.emUIEVENT_OBJ_STATE_USE, self.StateRecvUse},
};
for i = 1, 3 do
--tbRegEvent = Lib:MergeTable(tbRegEvent, self.tbObjRefine[i]:RegisterEvent());
end
tbRegEvent = Lib:MergeTable(tbRegEvent, self.tbObjRefine1:RegisterEvent());
tbRegEvent = Lib:MergeTable(tbRegEvent, self.tbObjRefine2:RegisterEvent());
tbRegEvent = Lib:MergeTable(tbRegEvent, self.tbObjRefine3:RegisterEvent());
tbRegEvent = Lib:MergeTable(tbRegEvent, self.tbObjXiuLianZhenYuan:RegisterEvent());
tbRegEvent = Lib:MergeTable(tbRegEvent, self.tbObjExpBook:RegisterEvent());
return tbRegEvent;
end
-- ×¢²á¼¼ÄܽçÃæOBJµÄÏûÏ¢»Øµ÷
function uiZhenYuan:RegisterMessage()
local tbRegMsg = {};
for i = 1, 3 do
--tbRegMsg = Lib:MergeTable(tbRegMsg, self.tbObjRefine[i]:RegisterMessage());
end
tbRegMsg = Lib:MergeTable(tbRegMsg, self.tbObjRefine1:RegisterMessage());
tbRegMsg = Lib:MergeTable(tbRegMsg, self.tbObjRefine2:RegisterMessage());
tbRegMsg = Lib:MergeTable(tbRegMsg, self.tbObjRefine3:RegisterMessage());
tbRegMsg = Lib:MergeTable(tbRegMsg, self.tbObjXiuLianZhenYuan:RegisterMessage());
tbRegMsg = Lib:MergeTable(tbRegMsg, self.tbObjExpBook:RegisterMessage());
return tbRegMsg;
end
function uiZhenYuan:OnResult(nMode, nResult)
if (Item.tbZhenYuan.emZHENYUAN_ENHANCE_REFINE == nMode) then
if (nResult == 1) then
Item.tbZhenYuan:RefineResult(self.tbObjRefine1, self.tbObjRefine3);
-- ²¥·ÅÌØЧ
Wnd_Show(self.UIGROUP, self.IMG_EFFECT);
Img_PlayAnimation(self.UIGROUP, self.IMG_EFFECT);
-- Á¶»¯³É¹¦Ö®ºó£¬½á¹û¸ñ×ÓÖÐÓ Ð¶«Î÷£¬ÔÚÏ´Î×ö²Ù×÷µÄʱºò Òª½«Õâ¸ö¸ñ×ÓÀïµÄ¶«Î÷µ¯³ö
self.nRefineResult = 1;
local pItemRefine = self:GetZhenYuanRefine1(); -- Ö÷ÕæÔª
local pItemSub = self:GetZhenYuanRefine2(); -- ¸±ÕæÔª
if (not pItemRefine or not pItemSub) then
return;
end
else
me.Msg("Chân nguyên không thể luyện hóa!");
end
self:UpdateTips(1);
elseif(Item.tbZhenYuan.emZHENYUAN_ENHANCE_XIULIAN == nMode) then
--self.tbObjXiuLianZhenYuan:ClearRoom();
self.tbObjExpBook:ClearRoom();
self:UpdateLiLianInfo();
self:UpdateXiuLianTip();
end
end
function uiZhenYuan:ApplyLiLianExp(nType)
local pItem = me.GetItem(Item.ROOM_ZHENYUAN_XIULIAN_ZHENYUAN, 0, 0);
if pItem then
me.CallServerScript({ "ZhenYuanCmd", "ApplyUseLilianTime", pItem.dwId, nType});
else
me.Msg("Hãy bỏ vào chân nguyên cần tăng kinh nghiệm!");
end
end
function uiZhenYuan:OnMouseEnter(szWnd)
local szTip = "";
if szWnd == self.BTNLEVELALL or szWnd == self.BTNLEVEL1 or szWnd == self.BTNLEVEL10 then
szTip = "Dùng kinh nghiệm luyện tập thăng cấp chân nguyên, có thể chọn mật độ thăng cấp<enter>Nếu cấp chân nguyên đã đầy, kinh nghiệm luyện tập còn dư có thể tích lũy và sử dụng";
end
if szWnd == self.BTN_LEVEL then
szTip = "Dùng kinh nghiệm luyện hóa thăng cấp chân nguyên, có thể đặt vào nhiều chân nguyên!";
end
if szTip ~= "" then
Wnd_ShowMouseHoverInfo(self.UIGROUP, szWnd, "", szTip);
end
end
function uiZhenYuan:StateRecvUse(szUiGroup)
if szUiGroup == self.szUiGroup then
return;
end
if (UiManager:WindowVisible(self.UIGROUP) ~= 1) then
return;
end
if self.nCurPageIndex ~= nPXIULIAN then
return;
end
local tbObj = tbMouse:GetObj();
if not tbObj then
return;
end
local pItem = me.GetItem(tbObj.nRoom, tbObj.nX, tbObj.nY);
if (pItem.IsEquip() == 1) then
self.tbObjXiuLianZhenYuan:ClearRoom();
self.tbObjXiuLianZhenYuan:SpecialStateRecvUse();
else
self.tbObjExpBook:SpecialStateRecvUse();
end
end
fightpower.lua
local uiFightPower = Ui:GetClass("fightpower");
local MAX_ENHTIMES = 16;
uiFightPower.BTN_CLOSE = "BtnClose"; -- 关闭按钮
uiFightPower.PAGE_SET_MAIN = "PageSetMain"; -- 分页集
uiFightPower.PAGE_MAIN =
{ -- 页按钮 页名
{ "BtnPageTotal", "PageTotal", },
{ "BtnPageEquip", "PageEquip", },
};
uiFightPower.TXT_INSTRUCTION = "TxtInstruction"; -- 简要说明
uiFightPower.TXT_TOTAL_POWER = "TxtTotalPower"; -- 总战斗力值
uiFightPower.TXT_RANK = "TxtTotalPowerRank"; -- 排名
uiFightPower.BTN_LADDER = "BtnLadder"; -- 排行榜
uiFightPower.OUTLOOK_TOTAL_POWER = "OutLookTotalPower"; -- 展开面板
uiFightPower.SCROLL_EQUIP = "ScrollEquip"; -- 滑动面板
uiFightPower.PAGE_SET_EQUIP = "PageSetEquip"; -- 装备详情分页集
uiFightPower.PAGE_EQUIP =
{ -- 页按钮 页名
{ "BtnPageUsedEquip", "PageUsedEquip", },
{ "BtnPageReservedEquip", "PageReservedEquip", },
{ "BtnPageExpandEquip", "PageExpandedEquip", },
};
uiFightPower.WND_EQUIP_LIST_RE =
{ -- 装备类名 强化战斗力
{ "TxtHatR", "ProgHatR", "TxtProgHatR", nPos = Item.EQUIPEXPOS_HEAD, },
{ "TxtBodyR", "ProgBodyR", "TxtProgBodyR", nPos = Item.EQUIPEXPOS_BODY, },
{ "TxtBeltR", "ProgBeltR", "TxtProgBeltR", nPos = Item.EQUIPEXPOS_BELT, },
{ "TxtBracerR", "ProgBracerR", "TxtProgBracerR", nPos = Item.EQUIPEXPOS_CUFF, },
{ "TxtShoeR", "ProgShoeR", "TxtProgShoeR", nPos = Item.EQUIPEXPOS_FOOT, },
{ "TxtWeaponR", "ProgWeaponR", "TxtProgWeaponR", nPos = Item.EQUIPEXPOS_WEAPON, },
{ "TxtNecklaceR", "ProgNecklaceR", "TxtProgNecklaceR", nPos = Item.EQUIPEXPOS_NECKLACE, },
{ "TxtRingR", "ProgRingR", "TxtProgRingR", nPos = Item.EQUIPEXPOS_RING, },
{ "TxtPendantR", "ProgPendantR", "TxtProgPendantR", nPos = Item.EQUIPEXPOS_PENDANT, },
{ "TxtAmuletR", "ProgAmuletR", "TxtProgAmuletR", nPos = Item.EQUIPEXPOS_AMULET, },
};
uiFightPower.WND_EQUIP_LIST_EX =
{ -- 装备类名 强化战斗力
{ "TxtHatE", "ProgHatE", "TxtProgHatE", nPos = Item.EQUIPEXPOS_HEAD, },
{ "TxtBodyE", "ProgBodyE", "TxtProgBodyE", nPos = Item.EQUIPEXPOS_BODY, },
{ "TxtBeltE", "ProgBeltE", "TxtProgBeltE", nPos = Item.EQUIPEXPOS_BELT, },
{ "TxtBracerE", "ProgBracerE", "TxtProgBracerE", nPos = Item.EQUIPEXPOS_CUFF, },
{ "TxtShoeE", "ProgShoeE", "TxtProgShoeE", nPos = Item.EQUIPEXPOS_FOOT, },
{ "TxtWeaponE", "ProgWeaponE", "TxtProgWeaponE", nPos = Item.EQUIPEXPOS_WEAPON, },
{ "TxtNecklaceE", "ProgNecklaceE", "TxtProgNecklaceE", nPos = Item.EQUIPEXPOS_NECKLACE, },
{ "TxtRingE", "ProgRingE", "TxtProgRingE", nPos = Item.EQUIPEXPOS_RING, },
{ "TxtPendantE", "ProgPendantE", "TxtProgPendantE", nPos = Item.EQUIPEXPOS_PENDANT, },
{ "TxtAmuletE", "ProgAmuletE", "TxtProgAmuletE", nPos = Item.EQUIPEXPOS_AMULET, },
};
uiFightPower.WND_EQUIP_LIST_USED =
{-- 装备类名 装备战斗力 炼化战斗力 强化战斗力进度 进度条文字
{ "TxtHat", "TxtBasePowerHat", "TxtRefinePowerHat", "ProgHat", "TxtProgHat", nPos = Item.EQUIPPOS_HEAD, },
{ "TxtBody", "TxtBasePowerBody", "TxtRefinePowerBody", "ProgBody", "TxtProgBody", nPos = Item.EQUIPPOS_BODY, },
{ "TxtBelt", "TxtBasePowerBelt", "TxtRefinePowerBelt", "ProgBelt", "TxtProgBelt", nPos = Item.EQUIPPOS_BELT, },
{ "TxtBracer", "TxtBasePowerBracer", "TxtRefinePowerBracer", "ProgBracer", "TxtProgBracer", nPos = Item.EQUIPPOS_CUFF, },
{ "TxtShoe", "TxtBasePowerShoe", "TxtRefinePowerShoe", "ProgShoe", "TxtProgShoe", nPos = Item.EQUIPPOS_FOOT, },
{ "TxtWeapon", "TxtBasePowerWeapon", "TxtRefinePowerWeapon", "ProgWeapon", "TxtProgWeapon", nPos = Item.EQUIPPOS_WEAPON, },
{ "TxtNecklace","TxtBasePowerNecklace", "TxtRefinePowerNecklace", "ProgNecklace", "TxtProgNecklace", nPos = Item.EQUIPPOS_NECKLACE, },
{ "TxtRing", "TxtBasePowerRing", "TxtRefinePowerRing", "ProgRing", "TxtProgRing", nPos = Item.EQUIPPOS_RING, },
{ "TxtPendant", "TxtBasePowerPendant", "TxtRefinePowerPendant", "ProgPendant", "TxtProgPendant", nPos = Item.EQUIPPOS_PENDANT, },
{ "TxtAmulet", "TxtBasePowerAmulet", "TxtRefinePowerAmulet", "ProgAmulet", "TxtProgAmulet", nPos = Item.EQUIPPOS_AMULET, },
{ "TxtMantle", "TxtBasePowerMantle", nPos = Item.EQUIPPOS_MANTLE, }, -- 披风
{ "TxtSignet", "TxtBasePowerSignet", nPos = Item.EQUIPPOS_SIGNET, }, -- 印鉴-五行印
{ "TxtMiJi", "TxtBasePowerMiJi", nPos = Item.EQUIPPOS_BOOK, }, -- 秘籍
{ "TxtZhenFa", "TxtBasePowerZhenFa", nPos = Item.EQUIPPOS_ZHEN, }, -- 阵法
{ "TxtChop", "TxtBasePowerChop", nPos = Item.EQUIPPOS_CHOP, }, -- 官印
}
uiFightPower.TXT_EXPAND_EQUIP =
{ -- 强化战斗力系数
}
function uiFightPower:Init()
self.m_nPageNum = 2; -- 页面总数
self.m_nCurPageIndex = 1; -- 当前页
self.tbEquipRoomInfo = -- 用来获取装备战斗力
{ -- 装备类型 道具容器号
{ szSuitName = "Hiện tại", nRoomId = Item.ROOM_EQUIP, tbSuit = self.WND_EQUIP_LIST_USED, },
{ szSuitName = "Đồ dự phòng", nRoomId = Item.ROOM_EQUIPEX, tbSuit = self.WND_EQUIP_LIST_RE, },
{ szSuitName = "Chiến hồn", nRoomId = Item.ROOM_EQUIPEX2, tbSuit = self.WND_EQUIP_LIST_EX, },
}
self.tbInstruction =
{
tbTotal = {"Chân nguyên", "Trang bị", "Đồng hành", "Thành tựu", "Cấp"},
tbEquip = {},
}
end
function uiFightPower:OnOpen()
self:LoadInstructionText();
if (not self.bLoadInstruction) then
self.bLoadInstruction = 1;
end
self.m_nCurPageIndex = 1;
self:UpdatePageMain();
end
function uiFightPower:UpdatePageMain()
if (1 == self.m_nCurPageIndex) then
self:UpdatePageTotalPower();
elseif 2 == self.m_nCurPageIndex then
self.nEquipCurPageIndex = 1;
self:UpdatePageEquip();
end
PgSet_ActivePage(self.UIGROUP, self.PAGE_SET_MAIN, self.PAGE_MAIN[self.m_nCurPageIndex][2]);
end
function uiFightPower:UpdatePageTotalPower()
self:ShowOutlookWnd();
Txt_SetTxt(self.UIGROUP, self.TXT_TOTAL_POWER, self:FormatValue(self.nTotalFightPower));
local nRank = Player.tbFightPower:GetRank(me);
local szRank = ((0 ~= nRank) and ("Hạng "..nRank..".") or "Chưa xếp hạng");
Txt_SetTxt(self.UIGROUP, self.TXT_RANK, szRank);
Txt_SetTxt(self.UIGROUP, self.TXT_INSTRUCTION, self.tbInstruction[1][0]);
end
function uiFightPower:OnOutLookItemSelected(szWndName, nGroupIndex, nItemIndex)
self.nCurGroupId = nGroupIndex;
if (not self.tbInstruction) then
return;
end
Txt_SetTxt(self.UIGROUP, self.TXT_INSTRUCTION, self.tbInstruction[1][nGroupIndex+1]);
end
function uiFightPower:ShowOutlookWnd()
OutLookPanelClearAll(self.UIGROUP, self.OUTLOOK_TOTAL_POWER);
AddOutLookPanelColumnHeader(self.UIGROUP, self.OUTLOOK_TOTAL_POWER, "");
AddOutLookPanelColumnHeader(self.UIGROUP, self.OUTLOOK_TOTAL_POWER, "");
AddOutLookPanelColumnHeader(self.UIGROUP, self.OUTLOOK_TOTAL_POWER, "");
SetOutLookHeaderWidth(self.UIGROUP, self.OUTLOOK_TOTAL_POWER, 0, 120);
SetOutLookHeaderWidth(self.UIGROUP, self.OUTLOOK_TOTAL_POWER, 1, 120);
SetOutLookHeaderWidth(self.UIGROUP, self.OUTLOOK_TOTAL_POWER, 2, 50);
local tbSet = self:GetTotalFightPowerInfo();
if (not tbSet) then
return;
end
for i = 1, #tbSet do
AddOutLookGroup(self.UIGROUP, self.OUTLOOK_TOTAL_POWER, tbSet[i].szName);
local tbContent = tbSet[i].tbContent;
if tbContent then
for j = 1, #tbContent do
local nRet = AddOutLookItem(self.UIGROUP, self.OUTLOOK_TOTAL_POWER, i - 1, tbContent[j]);
end
if i ~= 1 then
SetGroupCollapseState(self.UIGROUP, self.OUTLOOK_TOTAL_POWER, i - 1, 0);
end
end
end
end
function uiFightPower:GetTotalFightPowerInfo()
local tbInfo = {};
self.nTotalFightPower = 0;
for i = 1, 5 do
local tbGroup = {};
if (1 == i) then
local nTotalSum = 0;
nTotalSum, tbGroup.tbContent = self:GetZhenyuanInfo();
local szSum = self:FormatValue(nTotalSum);
tbGroup.szName = self:GetFormatString("Chân nguyên", szSum, "");
self.nTotalFightPower = self.nTotalFightPower + nTotalSum;
elseif (2 == i) then
local nTotalSum = 0;
nTotalSum, tbGroup.tbContent = self:GetEquipFightPowerSum();
local szSum = self:FormatValue(nTotalSum);
tbGroup.szName = self:GetFormatString("Trang bị", szSum, "");
self.nTotalFightPower = self.nTotalFightPower + nTotalSum;
elseif (3 == i) then
local nTotalSum = 0;
nTotalSum, tbGroup.tbContent = self:GetPartnerInfo();
local szSum = self:FormatValue(nTotalSum);
tbGroup.szName = self:GetFormatString("Đồng hành", szSum, "");
self.nTotalFightPower = self.nTotalFightPower + nTotalSum;
elseif (4 == i) then
local nAchievPower = Player.tbFightPower:GetPlayerAchievementPoint(me);
local nAchievRank = Player.tbFightPower:GetAchievementRank(me); --todo
local szAchievRank = ((0 == nAchievRank) and "Chưa xếp hạng") or ("Hạng "..nAchievRank..".");
local szResult = self:FormatValue(nAchievPower);
tbGroup.szName = self:GetFormatString("Thành tựu", szResult, "");
tbGroup.tbContent = {};
tbGroup.tbContent[1]= {"Thành tựu", "+"..nAchievPower, szAchievRank};
self.nTotalFightPower = self.nTotalFightPower + nAchievPower;
elseif (5 == i) then
local nLevelPower = Player.tbFightPower:GetPlayerLevelPoint(me);
local nLevelRank = Player.tbFightPower:GetLevelRank(me); --todo
local szLevelRank = ((0 == nLevelRank) and "Chưa xếp hạng") or ("Hạng "..nLevelRank..".");
local szResult = self:FormatValue(nLevelPower);
tbGroup.szName = self:GetFormatString("Cấp", szResult, "");
tbGroup.tbContent = {};
tbGroup.tbContent[1]= {"Cấp", "+"..nLevelPower, szLevelRank};
self.nTotalFightPower = self.nTotalFightPower + nLevelPower;
end
tbInfo[i] = tbGroup;
end
return tbInfo;
end
function uiFightPower:GetFormatString(szPre, szMid, szSuf)
local nSize = 30;
local szResult = " "..szPre;
local nPreLen = #szResult;
for i = 1, 21 - nPreLen do
szResult = szResult.." ";
end
local nMidLen = #szMid;
szResult = szResult..szMid;
for i = 1, 20 - nMidLen do
szResult = szResult.." ";
end
szResult = szResult..szSuf;
local nSufLen = #szResult;
for i = 1, 55 - nSufLen do
szResult = szResult.." ";
end
return szResult;
end
function uiFightPower:GetZhenyuanInfo()
local nTotalPower = 0;
local tbZhenyuanInfo = nil;
local tbFind = {};
tbFind = me.FindClassItem(Item.ROOM_EQUIP, "zhenyuan"); -- 装备栏
for _, tbFind in pairs(tbFind) do
if (not tbZhenyuanInfo) then
tbZhenyuanInfo = {};
end
local pItem = tbFind.pItem;
local szName = pItem.szName;
local nFightPower = Item.tbZhenYuan:GetFightPower(pItem); -- 取战斗力
local nRank = Item.tbZhenYuan:GetRank(pItem); -- 取排名
local szFightPower = string.format("%d", nFightPower);
local szRank;
if nRank == 0 then
szRank = "Chưa xếp hạng";
else
szRank = string.format("Hạng %d", nRank);
end
local tbItem = {szName, szFightPower, szRank};
table.insert(tbZhenyuanInfo, tbItem);
nTotalPower = nTotalPower + nFightPower;
end
tbFind = me.FindClassItemOnPlayer("zhenyuan"); -- 背包,仓库
for _, tbFind in pairs(tbFind) do
if (not tbZhenyuanInfo) then
tbZhenyuanInfo = {};
end
local pItem = tbFind.pItem;
local szName = pItem.szName;
local nRank = Item.tbZhenYuan:GetRank(pItem); -- 取排名
local szRank = string.format("Hạng %d", nRank);
if nRank == 0 then
szRank = "Chưa xếp hạng";
else
szRank = string.format("Hạng %d", nRank);
end
local tbItem = {szName, "Chưa trang bị", szRank};
table.insert(tbZhenyuanInfo, tbItem);
end
if (not tbZhenyuanInfo) then
tbZhenyuanInfo = {{"Hiện tại bạn không có chân nguyên", "", ""}};
end
return nTotalPower,tbZhenyuanInfo;
end
function uiFightPower:GetEquipFightPowerSum()
if (not self.tbEquipRoomInfo) then
return {};
end
local tbEquipFightPowerSum = {};--{ {"Hiện tại", "+26", ""} };
local nTotalSum = 0;
for i = 1, #self.tbEquipRoomInfo do
local tbEquipInfo = {};
local nCumulateFightPower = 0;
local nRoomIndex = self.tbEquipRoomInfo[i].nRoomId;
local tbSuit = self.tbEquipRoomInfo[i].tbSuit;
for j = 1, #tbSuit do
local pItem = me.GetItem(nRoomIndex, tbSuit[j].nPos, 0);
if pItem then
nCumulateFightPower = nCumulateFightPower + self:GetSingleFightPower(pItem, i, j);
end
end
tbEquipInfo[1] = self.tbEquipRoomInfo[i].szSuitName; -- 装备套名称
tbEquipInfo[2] = self:FormatValue(nCumulateFightPower); -- 对应装备套的总战斗
tbEquipInfo[3] = "";
tbEquipFightPowerSum[i] = tbEquipInfo;
nTotalSum = nTotalSum + nCumulateFightPower;
end
return nTotalSum, tbEquipFightPowerSum;
end
function uiFightPower:GetSingleFightPower(pItem, nEquipType, nEquipId)
if (not pItem) then
return nil;
end
local nValue;
if (2 == nEquipType) then -- 备用装备
nValue = pItem.CalcExtraFightPower(pItem.nEnhTimes, 0);
elseif (3 == nEquipType) then -- 战魂装备
nValue = pItem.CalcExtraFightPower(pItem.nEnhTimes, 0) / 2;
else -- 当前装备
if (11 > nEquipId) then
nValue = pItem.CalcFightPower();
else
nValue = self:GetSpecEquipPower(nEquipId);
end
end
return nValue;
end
function uiFightPower:GetPartnerInfo()
local tbAllPartner = { };
local tbPartnerFightPower = {};
local nTotalPower = 0;
local nActivePower = 0;
for i = 1, me.nPartnerCount do
local nPartnerId = i - 1;
local tbPartnerInfo = {};
local pPartner = me.GetPartner(nPartnerId);
if not pPartner then
print("Failed to find partner: me.GetPartner("..(nPartnerId)..")");
break;
end
local nFightPower = Player.tbFightPower:GetPartnerFightPower(pPartner, me);
if (nPartnerId == me.nActivePartner) then
nFightPower = nFightPower;
end
table.insert(tbPartnerFightPower, {nFightPower, i});
tbPartnerInfo[1] = pPartner.szName;
tbPartnerInfo[2] = self:FormatValue(nFightPower);
tbPartnerInfo[3] = ((nPartnerId == me.nActivePartner) and "Ra tay") or "Chưa làm";
tbAllPartner[i] = tbPartnerInfo;
end
table.sort(tbPartnerFightPower, function(a, b) return a[1] > b[1] end);
for i, tbInfo in pairs(tbPartnerFightPower) do
local nPower = tbInfo[1];
local nIndex = tbInfo[2];
if (i <= Partner.VALUE_CALC_MAX_NUM) then
nTotalPower = nTotalPower + nPower;
else
tbAllPartner[nIndex][2] = self:FormatValue(0);
tbAllPartner[nIndex][3] = "Không cộng dồn";
end
end
if (0 == #tbAllPartner) then
tbAllPartner[1] = {"Hiện tại bạn không có đồng hành", "", ""};
end
return nTotalPower, tbAllPartner;
end
function uiFightPower:UpdatePageEquip()
if 1 == self.nEquipCurPageIndex then
self:UpdatePageEquipUsed();
elseif 2 == self.nEquipCurPageIndex then
self:UpdatePageEquipReserved();
elseif 3 == self.nEquipCurPageIndex then
self:UpdatePageEquipExpand();
end
PgSet_ActivePage(self.UIGROUP, self.PAGE_SET_EQUIP, self.PAGE_EQUIP[self.nEquipCurPageIndex][2]);
end
function uiFightPower:UpdatePageEquipUsed()
local tbData = self:GetUsedEquipData();
local tbWnd = self.WND_EQUIP_LIST_USED;
for i = 1, #tbWnd do
Wnd_SetTip(self.UIGROUP, tbWnd[i][1], tbData[i][1]); -- Tips显示装备的名称
Txt_SetTxt(self.UIGROUP, tbWnd[i][2], tbData[i][2]); -- 装备的基本战斗力
if (11 > i) then
Txt_SetTxt(self.UIGROUP, tbWnd[i][3], tbData[i][3]); -- 装备的炼化战斗力
Prg_SetPos(self.UIGROUP, tbWnd[i][4], tbData[i][4]); -- 进度条
Txt_SetTxt(self.UIGROUP, tbWnd[i][5], tbData[i][5]); -- 进度条文字
Wnd_SetTip(self.UIGROUP, tbWnd[i][5], tbData[i][6]); -- Tips强化
end
end
Txt_SetTxt(self.UIGROUP, self.TXT_INSTRUCTION, self.tbInstruction[2][1]);
end
function uiFightPower:GetUsedEquipData()
local tbData = {};
for i = 1, #self.WND_EQUIP_LIST_USED do
local tbCloth = {};
local pItem = me.GetItem(Item.ROOM_EQUIP, self.WND_EQUIP_LIST_USED[i].nPos, 0);
if (not pItem) then
end
tbCloth[1] = (pItem and pItem.szName) or ("Chưa trang bị");
if (11 > i) then
tbCloth[2] = (pItem and (self:FormatValue(pItem.nFightPower))) or "--";
tbCloth[3] = (pItem and (self:FormatValue(pItem.CalcExtraFightPower(0, pItem.nRefineLevel)))) or "--";
local nCurEnhPower = 0;
local nMaxEnhPower = 0;
local nNxtEnhPower = nil;
local nNxtEnhTimes = nil;
local szEnhTip = "";
if pItem then
local nEnhaceMaxTimes = Item:CalcMaxEnhanceTimes(pItem); -- 最高强化次数
nCurEnhPower = pItem.CalcExtraFightPower(pItem.nEnhTimes, 0);
nMaxEnhPower = pItem.CalcExtraFightPower(nEnhaceMaxTimes, 0);
nNxtEnhTimes = pItem.nEnhTimes + 1;
if (nEnhaceMaxTimes == nNxtEnhTimes) then
nNxtEnhTimes = nEnhaceMaxTimes;
nNxtEnhPower = nMaxEnhPower;
else
nNxtEnhTimes, nNxtEnhPower = self:GetNextEnhancPowerLevel(pItem, pItem.nEnhTimes, nCurEnhPower);
end
szEnhTip = "[Hiện tại]<enter>".."Cường hóa+"..pItem.nEnhTimes.."Hiệu quả: sức chiến đấu"..self:FormatValue(nCurEnhPower);
local bMaxEnhPower = nCurEnhPower >= nMaxEnhPower;
if (1 ~= pItem.IsWhite()) then
if not bMaxEnhPower then
if (nNxtEnhTimes and pItem.nEnhTimes ~= nEnhaceMaxTimes) then
szEnhTip = (szEnhTip.."<color=green><enter>[Cấp kế]<enter>Cường hóa+"..(nNxtEnhTimes).."Hiệu quả: sức chiến đấu"..self:FormatValue(nNxtEnhPower).."<color>");
end
szEnhTip = szEnhTip.."<color=red><enter><enter>[Cao nhất]<enter>Cường hóa+"..nEnhaceMaxTimes.."Hiệu quả: sức chiến đấu"..self:FormatValue(nMaxEnhPower).."<color>";
end
else
nMaxEnhPower = 0;
bMaxEnhPower = true;
end
if bMaxEnhPower then
szEnhTip = szEnhTip.."<enter><color=red>Đã đạt điểm cao nhất<color>";
end
if nEnhaceMaxTimes ~= MAX_ENHTIMES then
szEnhTip = szEnhTip.."<enter><enter><color=green>Cấp cao có thể dùng trang bị +16, sức chiến đấu +"..pItem.CalcExtraFightPower(MAX_ENHTIMES, 0).."<color>";
end
end
tbCloth[4] = (pItem and (nCurEnhPower/nMaxEnhPower * 1000)) or 0;
tbCloth[5] = (pItem and (self:FormatValue(nCurEnhPower, nMaxEnhPower))) or "--/--";
tbCloth[6] = (pItem and szEnhTip) or "Chưa trang bị";
else
local szValue = "--";
if (pItem) then
szValue = self:FormatValue((self:GetSpecEquipPower(i)));
end
tbCloth[2] = szValue;
end
tbData[i] = tbCloth;
end
return tbData;
end
function uiFightPower:GetNextEnhancPowerLevel(pItem, nNowEnhanceTimes, nNowEnhanceFightPower)
if (not pItem) then
return nil, nil;
end
local nEnhaceMaxTimes = Item:CalcMaxEnhanceTimes(pItem); -- 最高强化次数
if (nNowEnhanceTimes > nEnhaceMaxTimes) then
return nil, nil;
end
local nEnhTimes = nNowEnhanceTimes;
local nEnhFightPower = nNowEnhanceFightPower;
local nFactor = Item.tbEnhanceOfEquipPos[pItem.nEquipPos] or 1;
for i = (nNowEnhanceTimes + 1), nEnhaceMaxTimes do
nEnhTimes = i;
nEnhFightPower = Item.tbEnhanceFightPower[nEnhTimes] * nFactor;
if (nEnhFightPower > nNowEnhanceFightPower) then
return nEnhTimes, nEnhFightPower;
end
end
return nil,nil;
end
function uiFightPower:GetSpecEquipPower(nEquipId)
local nValue = nil;
if (11 == nEquipId) then -- 披风
nValue = Player.tbFightPower:GetPiFengPower(me);
elseif(12 == nEquipId) then -- 五行印
nValue = Player.tbFightPower:Get5XingYinPower(me);
elseif(13 == nEquipId) then -- 秘籍
nValue = Player.tbFightPower:GetMiJiPower(me);
elseif(14 == nEquipId) then -- 阵法
nValue = Player.tbFightPower:GetZhenFaPower(me);
elseif(15 == nEquipId) then -- 官印
nValue = Player.tbFightPower:GetGuanYinPower(me);
end
return nValue;
end
function uiFightPower:UpdatePageEquipReserved()
self.tbCurWndList = self.WND_EQUIP_LIST_RE;
self:UpdatePageEquipEx(Item.ROOM_EQUIPEX, self.WND_EQUIP_LIST_RE, 1);
Txt_SetTxt(self.UIGROUP, self.TXT_INSTRUCTION, self.tbInstruction[2][2]);
end
function uiFightPower:UpdatePageEquipEx(nRoomId, tbWndList, nParam)
local tbData = self:GetEquipDataEx(nRoomId, tbWndList, nParam);
local tbWnd = self.tbCurWndList;
for i = 1, #tbWnd do
Wnd_SetTip(self.UIGROUP, tbWnd[i][1], tbData[i][1]); -- Tips显示装备的名称
Prg_SetPos(self.UIGROUP, tbWnd[i][2], tbData[i][2]); -- 进度条
Txt_SetTxt(self.UIGROUP, tbWnd[i][3], tbData[i][3]); -- 进度条文字
Wnd_SetTip(self.UIGROUP, tbWnd[i][3], tbData[i][4]); -- Tips强化
end
end
function uiFightPower:GetEquipDataEx(nRoomId, tbWndList, nParam)
local tbData = {};
for i = 1, #self.tbCurWndList do
local tbCloth = {};
local pItem = me.GetItem(nRoomId, tbWndList[i].nPos, 0);
if (not pItem) then
end
tbCloth[1] = (pItem and pItem.szName) or "Chưa trang bị";
local nCurEnhPower = 0;
local nMaxEnhPower = 0;
local nNxtEnhPower = nil;
local nNxtEnhTimes = nil;
local szEnhTip = "";
if pItem then
local nEnhaceMaxTimes = Item:CalcMaxEnhanceTimes(pItem); -- 最高强化次数
nCurEnhPower = pItem.CalcExtraFightPower(pItem.nEnhTimes, 0) / nParam;
nMaxEnhPower = pItem.CalcExtraFightPower(nEnhaceMaxTimes, 0) / nParam;
nNxtEnhTimes = pItem.nEnhTimes + 1;
if (nEnhaceMaxTimes == nNxtEnhTimes) then
nNxtEnhTimes = nEnhaceMaxTimes;
nNxtEnhPower = nMaxEnhPower;
elseif (pItem.nEnhTimes == nEnhaceMaxTimes) then
nNxtEnhTimes = nil;
nNxtEnhPower = nil;
else
nNxtEnhTimes, nNxtEnhPower = self:GetNextEnhancPowerLevel(pItem, pItem.nEnhTimes, nCurEnhPower * nParam);
if (nNxtEnhPower) then
nNxtEnhPower = nNxtEnhPower / nParam;
end
end
szEnhTip = "[Hiện tại]<enter>".."Cường hóa+"..pItem.nEnhTimes.."Hiệu quả: sức chiến đấu"..self:FormatValue(nCurEnhPower);
local bMaxEnhPower = nCurEnhPower >= nMaxEnhPower;
if (1 ~= pItem.IsWhite()) then
if not bMaxEnhPower then
if (nNxtEnhTimes and pItem.nEnhTimes ~= nEnhaceMaxTimes) then
szEnhTip = (szEnhTip.."<color=green><enter>[Cấp kế]<enter>Cường hóa+"..(nNxtEnhTimes).."Hiệu quả: sức chiến đấu"..self:FormatValue(nNxtEnhPower).."<color>");
end
szEnhTip = szEnhTip.."<color=red><enter><enter>[Cao nhất]<enter>Cường hóa+"..nEnhaceMaxTimes.."Hiệu quả: sức chiến đấu"..self:FormatValue(nMaxEnhPower).."<color>";
end
else
nMaxEnhPower = 0;
bMaxEnhPower = true;
end
if bMaxEnhPower then
szEnhTip = szEnhTip.."<enter><color=red>Đã đạt điểm cao nhất<color>";
end
if nEnhaceMaxTimes ~= MAX_ENHTIMES then
szEnhTip = szEnhTip.."<enter><enter><color=green>Cấp cao có thể dùng trang bị +"..MAX_ENHTIMES..", sức chiến đấu +"..(pItem.CalcExtraFightPower(MAX_ENHTIMES, 0) / nParam).."<color>";
end
end
tbCloth[2] = (pItem and (nCurEnhPower/nMaxEnhPower * 1000)) or 0;
tbCloth[3] = (pItem and (self:FormatValue(nCurEnhPower, nMaxEnhPower))) or "--/--";
tbCloth[4] = (pItem and szEnhTip) or "Chưa trang bị";
tbData[i] = tbCloth;
end
return tbData;
end
function uiFightPower:UpdatePageEquipExpand()
self.tbCurWndList = self.WND_EQUIP_LIST_EX;
self:UpdatePageEquipEx(Item.ROOM_EQUIPEX2, self.WND_EQUIP_LIST_EX, 2); -- 以后加上
Txt_SetTxt(self.UIGROUP, self.TXT_INSTRUCTION, self.tbInstruction[2][3]);
end
function uiFightPower:OnButtonClick(szWnd, nParam)
if (szWnd == self.BTN_CLOSE) then
UiManager:CloseWindow(self.UIGROUP);
elseif (szWnd == self.BTN_LADDER) then
local nSelGroupId, nSelItemId = GetOutLookCurSelItemIdx(self.UIGROUP, self.OUTLOOK_TOTAL_POWER);
local nGen = 1;
if (nSelGroupId) then
if (0 == nSelGroupId) then
nGen = 3;
elseif(3 == nSelGroupId) then
nGen = 2;
elseif(4 == nSelGroupId) then
nGen = 4;
else
nGen = 1;
end
end
UiManager:SwitchWindow(Ui.UI_LADDER, 7, nGen);
end
for i = 1,2 do
if (szWnd == self.PAGE_MAIN[i][1]) then
self.m_nCurPageIndex = i;
self:UpdatePageMain();
return;
end
end
for i = 1,3 do
if (szWnd == self.PAGE_EQUIP[i][1]) then
self.nEquipCurPageIndex = i;
self:UpdatePageEquip();
return;
end
end
end
function uiFightPower:LoadInstructionText()
local tbFile = Lib:LoadTabFile("\\setting\\fightpower\\instruction.txt");
if (not tbFile) then
print("[fightpower]Failed to load file instruction.txt!");
else
local tbInfo = {};
for _, tbRow in ipairs(tbFile) do
local nMainId = tonumber(tbRow.mainid);
local nSubId = tonumber(tbRow.subid);
local strText = tostring(tbRow.text);
if (not tbInfo[nMainId]) then
tbInfo[nMainId] = {};
end
if (not tbInfo[nMainId][nSubId]) then
tbInfo[nMainId][nSubId] = {};
end
tbInfo[nMainId][nSubId] = strText;
end
self.tbInstruction = tbInfo;
end
local tbCheck = {{0,5}, {1,3}};
for i = 1, #tbCheck do
for j = tbCheck[i][1], tbCheck[i][2] do
if (not self.tbInstruction[i][j]) then
self.tbInstruction[i][j] = "";
end
end
end
end
function uiFightPower:FormatValue(nLValue, nRValue)
local szResult = "";
if (nLValue) then
nLValue = math.floor(nLValue * 100) / 100;
szResult = ((nLValue == math.floor(nLValue)) and ("+"..nLValue)) or (string.format("+%0.2f", nLValue));
end
if (nRValue) then
nRValue = math.floor(nRValue * 100) / 100;
szResult= szResult .. (((math.floor(nLValue) == nLValue) and ("/"..nRValue)) or (string.format("/%0.2f", nRValue)));
end
return szResult;
end
tất nhiên là còn nhiều cái nữa
Đây là folder pak của họ mà mình đã unpak ra
anh em cùng nghiên cứu và search trên mạng tìm thêm ở trên server nữa :">
đây là client thì có rồi :)>-
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
hoặc pro nào biết thì lên share cách sử dụng hoặc cách làm sao để có naòooo :">
mình kiểm tra server long hổ tranh bá đã update 2 thứ này => <b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
ở client họ có update thêm phần => client\ui\script\window\fightpower.lua và zhenyuan.lua
là zhenyuan.lua
-----------------------------------------------------
--ÎļþÃû £º zhenyuan.lua
--´´½¨Õß £º zhoupengfeng
--´´½¨Ê±¼ä £º 2010-06-28
--¹¦ÄÜÃèÊö £º Õ½¶·Á¦
------------------------------------------------------
local uiZhenYuan = Ui:GetClass("zhenyuan");
local tbObject = Ui.tbLogic.tbObject;
local tbMouse = Ui.tbLogic.tbMouse;
uiZhenYuan.BTN_CLOSE = "BtnClose";
uiZhenYuan.BTN_OK = "BtnOk";
uiZhenYuan.BTN_CANSEL = "BtnCansel";
uiZhenYuan.OBJ_REFINE = "ObjRefine";
uiZhenYuan.OBJ_EXP = "ObjExp";
uiZhenYuan.OBJ_EXPBOOK = "ObjExpBook";
uiZhenYuan.TXT_TIP = "TxtTip";
uiZhenYuan.TXT_TIPEXP = "TxtTipExp";
uiZhenYuan.TXT_BALANCEEXP = "TxtExpBalance"
uiZhenYuan.LST_ATTR = "LstAttr";
uiZhenYuan.IMG_EFFECT = "ImgEffect";
uiZhenYuan.BTNLEVEL1 = "BtnLevel1";
uiZhenYuan.BTNLEVEL10 = "BtnLevel10";
uiZhenYuan.BTNLEVELALL = "BtnLevelAll";
uiZhenYuan.BTN_LEVEL = "BtnLevel";
uiZhenYuan.BTN_APPLYUNBIND = "BtnApplyUnBind";
uiZhenYuan.BTN_BIND = "BtnBind";
uiZhenYuan.BTN_UNBIND = "BtnUnBind";
uiZhenYuan.TXT_ZHENYUANINTRODUCE = "TxtZhenYuanInfo";
uiZhenYuan.PAGE_SET = "PageSet";
-- Ò³Ãæ
uiZhenYuan.tbPAGES =
{
{szBtn = "BtnPageExperience", szPage = "PageExperience", },
{szBtn = "BtnPageRefine", szPage = "PageRefine", },
{szBtn = "BtnPageMain", szPage = "PageMain", },
}
local nPos1 = 0;
local nPos2 = 1;
local nPos3 = 2;
--local tbRefineCont1 = { nOffsetX = nPos1, bUse = 0, nRoom = Item.ROOM_ZHENYUAN_REFINE, bSendToGift = 1};
--local tbRefineCont2 = { nOffsetX = nPOs2, bUse = 0, nRoom = Item.ROOM_ZHENYUAN_REFINE, bSendToGift = 1};
--local tbRefineCont3 = { nOffsetX = nPos3, bUse = 0, nRoom = Item.ROOM_ZHENYUAN_REFINE, bSendToGift = 1};
local tbRefineCont1 = { bUse = 0, nRoom = Item.ROOM_ZHENYUAN_REFINE_MAIN, bSendToGift = 1};
local tbRefineCont2 = { bUse = 0, nRoom = Item.ROOM_ZHENYUAN_REFINE_CONSUME, bSendToGift = 1};
local tbRefineCont3 = { bUse = 0, nRoom = Item.ROOM_ZHENYUAN_REFINE_RESULT, bSendToGift = 1};
local tbXiuLianCont = { bUse = 0, nRoom = Item.ROOM_ZHENYUAN_XIULIAN_ZHENYUAN, bSendToGift = 1};
local tbBookCont = { bUse = 0, nRoom = Item.ROOM_ZHENYUAN_XIULIAN_ITEM, bSendToGift = 1};
-- Á¶»¯
function tbRefineCont1:CheckSwitchItem(pDrop, pPick, nX, nY)
if (pDrop) then
if Ui(Ui.UI_ZHENYUAN).nRefineResult == 1 then
Ui(Ui.UI_ZHENYUAN).nRefineResult = 0;
Ui(Ui.UI_ZHENYUAN).tbObjRefine3:ClearRoom(nil, 0, 0);
end
local ret = Item.tbZhenYuan:CheckRefineItem(pDrop, 1);
if (1 ~= ret) then
me.Msg(ret);
return 0;
end
-- todo delete
--[[
if (3 == nX) then
return 0; -- Á¶»¯ºóÕæÔª¸ñ ²»ÄÜ·ÅÕæÔª
end
if (pDrop.szClass ~= "zhenyuan") then
me.Msg("Ö»ÄÜ·ÅÖÃÕæÔª£¡");
return 0;
end
if(2 == nX) then
if (1 == Item.tbZhenYuan:GetEquiped(pDrop)) then
me.Msg("Ö»ÄÜ·ÅÖÃ令ÌåµÄÕæÔª£¡");
return 0;
end
elseif(1 == nX) then
if(1 == Ui(Ui.UI_ZHENYUAN):IsPrefect(pDrop)) then
me.Msg("¸ÃÕæÔªËùÓÐ×ÊÖÊÒÑÂú£¬²»ÐèÒ ªÁ¶»¯£¡");
return 0;
end
end
--]]
end
Ui(Ui.UI_ZHENYUAN):PlaceZhenYuanRefine(1, pDrop);
return 1;
end
function tbRefineCont2:CheckSwitchItem(pDrop, pPick, nX, nY)
if (pDrop) then
if Ui(Ui.UI_ZHENYUAN).nRefineResult == 1 then
Ui(Ui.UI_ZHENYUAN).nRefineResult = 0;
Ui(Ui.UI_ZHENYUAN).tbObjRefine3:ClearRoom(nil, 0, 0);
end
local ret = Item.tbZhenYuan:CheckRefineItem(pDrop, 2);
if (1 ~= ret) then
me.Msg(ret);
return 0;
end
-- todo delete
--[[
if (3 == nX) then
return 0; -- Á¶»¯ºóÕæÔª¸ñ ²»ÄÜ·ÅÕæÔª
end
if (pDrop.szClass ~= "zhenyuan") then
me.Msg("Ö»ÄÜ·ÅÖÃÕæÔª£¡");
return 0;
end
if(2 == nX) then
if (1 == Item.tbZhenYuan:GetEquiped(pDrop)) then
me.Msg("Ö»ÄÜ·ÅÖÃ令ÌåµÄÕæÔª£¡");
return 0;
end
elseif(1 == nX) then
if(1 == Ui(Ui.UI_ZHENYUAN):IsPrefect(pDrop)) then
me.Msg("¸ÃÕæÔªËùÓÐ×ÊÖÊÒÑÂú£¬²»ÐèÒ ªÁ¶»¯£¡");
return 0;
end
end
--]]
end
Ui(Ui.UI_ZHENYUAN):PlaceZhenYuanRefine(2, pDrop);
return 1;
end
function tbRefineCont3:CheckSwitchItem(pDrop, pPick, nX, nY)
-- ʼÖÕÄÜÄóöÀ´
if pPick then
Ui(Ui.UI_ZHENYUAN).nRefineResult = 0;
return 1;
end
-- ²»ÄÜ·ÅÈë
return 0;
end
-- ÐÞÁ¶
function tbXiuLianCont:CheckSwitchItem(pDrop, pPick, nX, nY)
if (pDrop) then
if (pDrop.szClass ~= "zhenyuan") then
me.Msg("Chỉ có thể bỏ vào chân nguyên!");
return 0;
end
if (Item.tbZhenYuan:GetLevel(pDrop) == 120) then
me.Msg("Chân nguyên này đã đạt tối đa, không cần tu luyện!");
return 0;
end
end
Ui(Ui.UI_ZHENYUAN):PlaceZhenYuanXiuLian(pDrop);
return 1;
end
function tbBookCont:CheckSwitchItem(pDrop, pPick, nX, nY)
if (pDrop) then
if (pDrop.szClass ~= "partnerexpbook") then
me.Msg("Chỉ có thể bỏ vào Sách kinh nghiệm đồng hành!");
return 0;
end
-- todo ÊÇ·ñÌí¼Ó¼ì²â¹ý¶à¾ÑéÊé
end
return Ui(Ui.UI_ZHENYUAN):PlaceExpBook(pDrop, pPick, nX, nY);
end
-- ÅжÏÕæÔªËùÓÐ×ÊÖÊÊÇ·ñÒÑÂú
function uiZhenYuan:IsPrefect(pItem)
local nAttrMax = 20;
if (nAttrMax == Item.tbZhenYuan:GetAttribPotential1(pItem)
and nAttrMax == Item.tbZhenYuan:GetAttribPotential2(pItem)
and nAttrMax == Item.tbZhenYuan:GetAttribPotential3(pItem)
and nAttrMax == Item.tbZhenYuan:GetAttribPotential4(pItem)
) then
return 1;
end
return 0;
end
--uiZhenYuan.szTipRefine = "ÇëÔÚÉÏ·½·ÅÈëÕæÔª£¬Á¶»¯ºó<color=orange>¸±ÕæÔª½«Ïûʧ<color>£¡ÒÑ»¤ÌåÕæÔªÖ»ÄÜ×÷ΪÖ÷ÕæÔ ªÁ¶»¯¡£<enter>ÇëÑ¡ÔñÁ¶»¯";
uiZhenYuan.tbTip =
{
{
"Hãy bỏ vào chân nguyên, sau khi luyện hóa <color=orange>chân nguyên phụ sẽ biến mất<color>!<enter>Chân nguyên đã hộ thể chỉ có thể xem như luyện hóa chân nguyên chính.",
"Hãy chọn thuộc tính luyện hóa (<color=red>cần %s Bạc<color>):<enter>",
}, -- Á¶»¯
{
"★ Trước khi dùng sách exp, chân nguyên hãy đánh quái lên cấp",
"★ Dùng sách exp sẽ lên cấp nhanh (không hạn chế số sách)",
}, -- ÐÞÁ¶
}
local nPXIULIAN = 1;
local nPREFINE = 2;
local nPGMAIN = 3;
local nExpBookMaxNum = 18;
function uiZhenYuan:CanOpenWnd()
if Item.tbZhenYuan.bOpen and Item.tbZhenYuan.bOpen == 1 then
return 1;
end
Ui:ServerCall("UI_TASKTIPS", "Begin", "Hệ thống chân nguyên chưa mở, xin hãy đợi");
return 0;
end
function uiZhenYuan:Init()
self.nCurPageIndex = nPREFINE;
self.nRefineResult = 0;
end
function uiZhenYuan:OnCreate()
self:CreateObjContainer();
end
-- Ïú»ÙOBJÈÝÆ÷
function uiZhenYuan:OnDestroy()
tbObject:UnregContainer(self.tbObjRefine1);
tbObject:UnregContainer(self.tbObjRefine2);
tbObject:UnregContainer(self.tbObjRefine3);
tbObject:UnregContainer(self.tbObjXiuLianZhenYuan) ;
tbObject:UnregContainer(self.tbObjExpBook);
end
function uiZhenYuan:CreateObjContainer()
-- Á¶»¯¸ñ×Ó
self.tbObjRefine = {};
for i = 1, 3 do
--local tbCont = tbRefineCont;
--tbCont.nOffsetX = i;
--self.tbObjRefine[i].CheckSwitchItem = self.CheckSwitchItem;
end
self.tbObjRefine1 = tbObject:RegisterContainer(
self.UIGROUP,
(self.OBJ_REFINE..1),
1, 1,
tbRefineCont1,
"itemroom"
);
self.tbObjRefine2 = tbObject:RegisterContainer(
self.UIGROUP,
(self.OBJ_REFINE..2),
1, 1,
(tbRefineCont2),
"itemroom"
);
self.tbObjRefine3 = tbObject:RegisterContainer(
self.UIGROUP,
(self.OBJ_REFINE..3),
1, 1,
(tbRefineCont3),
"itemroom"
);
-- ÐÞÁ¶ ÕæÔª¸ñ×Ó
self.tbObjXiuLianZhenYuan = tbObject:RegisterContainer(
self.UIGROUP,
(self.OBJ_EXP),
1, 1,
tbXiuLianCont,
"itemroom"
);
-- ÐÞÁ¶ ¾ÑéÊé¸ñ×Ó
self.tbObjExpBook = tbObject:RegisterContainer(
self.UIGROUP,
(self.OBJ_EXPBOOK),
6, 3,
tbBookCont,
"itemroom"
);
end
function uiZhenYuan:OnOpen()
me.ApplyZhenYuanEnhance(Item.tbZhenYuan.emZHENYUAN _ENHANCE_OPENWINDOW);
if (self.bFirstOpen) then -- µÚÒ»´Î´ò¿ª
self.bFirstOpen = 1;
self:CreateObjContainer();
end
self.nCurPageIndex = nPXIULIAN; --1.Á¶»¯·ÖÒ³£¬2.ÐÞÁ¶·ÖÒ³
self:UpdatePage(self.nCurPageIndex);
self:UpdateObjCont();
--UiManager:OpenWindow(Ui.UI_ITEMBOX);
end
function uiZhenYuan:OnClose()
me.ApplyZhenYuanEnhance(Item.tbZhenYuan.emZHENYUAN _ENHANCE_NONE);
if (self.nCurPageIndex == nPREFINE) then
self:RefineCansel();
UiManager:ReleaseUiState(UiManager.UIS_ZHENYUAN_RE FINE);
else
self:XiuLianCansel();
UiManager:ReleaseUiState(UiManager.UIS_ZHENYUAN_XI ULIAN);
end
end
function uiZhenYuan:OnButtonClick(szWnd, nParam)
local nPage = self.nCurPageIndex;
if (szWnd == self.BTN_CLOSE) then
UiManager:CloseWindow(self.UIGROUP);
elseif (szWnd == self.BTN_OK) then
if (nPREFINE == nPage) then
self:ClickRefine();
else
self:ClickXiuLian();
end
elseif (szWnd == self.BTN_CANSEL) then
UiManager:CloseWindow(self.UIGROUP);
--[[
elseif szWnd == self.BTNLEVEL1 then
self:ApplyLiLianExp(1);
elseif szWnd == self.BTNLEVEL10 then
self:ApplyLiLianExp(2);
elseif szWnd == self.BTNLEVELALL then
self:ApplyLiLianExp(3);
--]]
elseif szWnd == self.BTN_LEVEL then
-- TODO
UiManager:CloseWindow(self.UIGROUP);
me.CallServerScript({ "ZhenYuanCmd", "ApplyUseLilianTime"});
elseif szWnd == self.BTN_UNBIND then
me.CallServerScript({ "ZhenYuanCmd", "SwitchBind", me.nId, Item.SWITCHBIND_UNBIND});
elseif szWnd == self.BTN_BIND then
me.CallServerScript({ "ZhenYuanCmd", "SwitchBind", me.nId, Item.SWITCHBIND_BIND});
elseif szWnd == self.BTN_APPLYUNBIND then
me.CallServerScript({ "ZhenYuanCmd", "ApplyUnBind", me.nId});
end
for i = 1,3 do
if (szWnd == self.tbPAGES[i].szBtn) then
self.nCurPageIndex = i;
self:UpdatePage(self.nCurPageIndex);
return;
end
end
end
function uiZhenYuan:UpdatePage(nPage)
PgSet_ActivePage(self.UIGROUP, self.PAGE_SET, self.tbPAGES[nPage].szPage);
Wnd_SetVisible(self.UIGROUP, self.BTN_OK, 1);
Wnd_SetVisible(self.UIGROUP, self.BTN_CANSEL, 1);
if (nPREFINE == nPage) then -- Á¶»¯
self:XiuLianCansel();
Btn_SetTxt(self.UIGROUP, self.BTN_OK, "Luyện hóa");
UiManager:ReleaseUiState(UiManager.UIS_ZHENYUAN_XI ULIAN);
UiManager:SetUiState(UiManager.UIS_ZHENYUAN_REFINE );
self:UpdateTips(1);
elseif (nPXIULIAN == nPage) then -- ÐÞÁ¶
self:RefineCansel();
self:UpdateLiLianInfo();
Btn_SetTxt(self.UIGROUP, self.BTN_OK, "Tu luyện");
UiManager:ReleaseUiState(UiManager.UIS_ZHENYUAN_RE FINE);
UiManager:SetUiState(UiManager.UIS_ZHENYUAN_XIULIA N);
self:UpdateTips(1);
elseif (nPGMAIN == nPage) then
Wnd_Hide(self.UIGROUP, self.BTN_OK);
Wnd_Hide(self.UIGROUP, self.BTN_CANSEL);
UiManager:ReleaseUiState(UiManager.UIS_ZHENYUAN_RE FINE);
UiManager:ReleaseUiState(UiManager.UIS_ZHENYUAN_XI ULIAN);
self:XiuLianCansel();
self:RefineCansel();
self:UpdateHelpPage();
end
end
function uiZhenYuan:UpdateHelpPage()
local nApplyTime = me.GetTask(Item.tbZhenYuan.TASK_GID_UNBIND, Item.tbZhenYuan.TASK_SUBID_UNBIND);
if nApplyTime == 0 or GetTime() - nApplyTime < 0 or GetTime() - nApplyTime > Item.tbZhenYuan.UNBIND_MAX_TIME then
Btn_SetTxt(self.UIGROUP, self.BTN_APPLYUNBIND, "Xin mở");
Wnd_SetEnable(self.UIGROUP, self.BTN_UNBIND, 0);
else
Btn_SetTxt(self.UIGROUP, self.BTN_APPLYUNBIND, "Hủy mở");
if (GetTime() - nApplyTime < Item.tbZhenYuan.UNBIND_MIN_TIME) then
Wnd_SetEnable(self.UIGROUP,self.BTN_UNBIND, 0);
else
Wnd_SetEnable(self.UIGROUP, self.BTN_UNBIND, 1);
end
end
local szText = [[ Chân nguyên được ngưng tụ từ đồng hành cấp 1, chỉ có 1 bộ phận đồng hành có thể ngưng tụ thành chân nguyên, được thể hiện rõ trong giao diện đồng hành.
<color=green>1. Thuộc tính chân nguyên<color><enter> Mỗi chân nguyên có 4 dòng thuộc tính, trị thuộc tính thể hiện đẳng cấp của thuộc tính đó, cấp thuộc tính càng cao hiệu quả càng ưu việt.
<color=green>2. Cấp sao tư chất thuộc tính chân nguyên<color><enter> Cấp sao bên dưới mỗi dòng thuộc tính thể hiện tư chất của thuộc tính đó. Cấp sao càng cao, trị thuộc tính tăng càng nhiều sau khi thăng cấp chân nguyên.
<color=green>3. Tu luyện chân nguyên<color><enter> Tu luyện là chỉ sự thăng cấp chân nguyên, thăng cấp mới có thể nâng cao những thuộc tính khác.
<color=green>4. Luyện hóa chân nguyên<color><enter> Việc thăng cấp tư chất thuộc tính chân nguyên được gọi là luyện hóa chân nguyên.
<color=green>5. Giá trị của chân nguyên<color><enter> Cấp tư chất thuộc tính quyết định giá trị của chân nguyên, giá trị càng cao, xếp hạng chân nguyên càng cao, sau khi trang bị vào người, sức chiến đấu cộng thêm cũng nhiều hơn.
<color=green>6. Khóa và mở khóa chân nguyên<color><enter> Có thể khóa chân nguyên thông qua nút chức năng bên dưới, đương nhiên cũng có thể mở khóa. Để mở khóa cần phải xin phép, thời gian xin mở khóa là 3 ngày!
<color=green>7. Kinh nghiệm chuyển thành thời gian luyện tập<color><enter> Các vị hiệp sĩ có thể dùng tu vi bản thân để tiến hành tu luyện, dùng kinh nghiệm chuyển thành kinh nghiệm luyện tập của chân nguyên.
<color=orange>Thông tin chi tiết hãy xem trong Cẩm nang trợ giúp F12 - Chi tiết - Chân nguyên<color>]];
Txt_SetTxt(self.UIGROUP, self.TXT_ZHENYUANINTRODUCE, szText);
end
function uiZhenYuan:OnAnimationOver(szWnd)
if (szWnd == self.IMG_EFFECT) then
Wnd_Hide(self.UIGROUP, self.IMG_EFFECT); -- ²¥·ÅÍê±Ï£¬Òþ²ØͼÏñ
end
end
function uiZhenYuan:OnListSel(szWnd, nParam)
if szWnd == self.LST_ATTR then
local nKey = Lst_GetCurKey(self.UIGROUP, self.LST_ATTR);
self.nSelect = nKey;
local pItem = me.GetItem(Item.ROOM_ZHENYUAN_REFINE_CONSUME, 0, 0);
if not pItem then
Txt_SetTxt(self.UIGROUP, self.TXT_TIP, "Hãy bỏ vào chân nguyên phụ!");
return;
end
self:UpdateTips(2, self.tbAttrList[nKey].szTip);
if (self.nCurPageIndex == nPREFINE) then
self:UpdateRefine();
end
end
end
-- ¸üÐÂÒ³ÃæÕýÖеÄÌáʾÎÄ×Ö
function uiZhenYuan:UpdateTips(nTipId, szTipEx, szTipEx2)
local nPage = self.nCurPageIndex;
if (nPREFINE == nPage) then
local szTip = self.tbTip[1][nTipId];
if (szTipEx) then
szTip = szTip .. szTipEx;
end
Txt_SetTxt(self.UIGROUP, self.TXT_TIP, szTip);
else
local szTip = self.tbTip[2][1];
if (szTipEx) then
szTip = szTip .. szTipEx;
end
szTip = szTip .. "<enter>";
szTip = szTip .. self.tbTip[2][2];
if (szTipEx2) then
szTip = szTip .. szTipEx2;
end
Txt_SetTxt(self.UIGROUP, self.TXT_TIPEXP, szTip);
end
end
-- Á¶»¯Ãæ°å£º·ÅÈëÕæÔª nType = 1 Ö÷ÕæÔª or = 2 ¸±ÕæÔª or = 0 Çå¿Õ
function uiZhenYuan:PlaceZhenYuanRefine(nType, pItem)
self:UpdateTips(1);
if (not nType or 0 == nType) then
self.tbAttrList = nil;
self:UpdateAttrList();
return;
end
local pLocItem1 = nil;
local pLocItem2 = nil;
if (1 == nType) then
pLocItem1 = pItem;
pLocItem2 = self:GetZhenYuanRefine2();
end
if (2 == nType) then
pLocItem1 = self:GetZhenYuanRefine1();
pLocItem2 = pItem;
end
if (pLocItem1) then -- Ö÷ÕæÔª
self:UpdateTips(1);
self.tbAttrList = {};
local tbAttrName = {};
for i = 1, 4 do
local nAttrMagicId = Item.tbZhenYuan:GetAttribMagicId(pLocItem1, i);
local szAttrName = Item.tbZhenYuan:GetAttribTipName(nAttrMagicId);
tbAttrName[i] = szAttrName;
end
local tbAttrVal = {};
tbAttrVal[1] = Item.tbZhenYuan:GetAttribPotential1(pLocItem1);
tbAttrVal[2] = Item.tbZhenYuan:GetAttribPotential2(pLocItem1);
tbAttrVal[3] = Item.tbZhenYuan:GetAttribPotential3(pLocItem1);
tbAttrVal[4] = Item.tbZhenYuan:GetAttribPotential4(pLocItem1);
for i = 1, 4 do
local szAttrStar = Item.tbZhenYuan:GetAttribStar(tbAttrVal[i]);
self.tbAttrList[i] = {string.format("%s£º ", tbAttrName[i]), string.format("<color=gold>%s<color>", szAttrStar), "", color = nil, szTip = nil};
end
if (pLocItem2) then -- ¸±ÕæÔª
if (not self.tbAttrList) then
print("[zhenyuan]:self.tbAttrList is nil");
return;
end
local tbResult = Item.tbZhenYuan:GetAttribRefineInfo(pLocItem1, pLocItem2);
if (tbResult) then
for i = 1, 4 do
if (tbResult[i]) then
--self.tbAttrList[i].color = "green";
local nAddedMin = tbResult[i][1][1];
local szStarAddedMin = Item.tbZhenYuan:GetAttribStar(nAddedMin);
local nMinProb = tbResult[i][1][2];
local nAddedMax = tbResult[i][2][1];
local szStarAddedMax = Item.tbZhenYuan:GetAttribStar(nAddedMax);
local nMaxProb = tbResult[i][2][2];
self.tbAttrList[i][1] = string.format("<color=green>%s<color>", self.tbAttrList[i][1]);
self.tbAttrList[i][3] = string.format("<color=green>Ôö¼Ó<color> <color=gold>%s<color>", szStarAddedMin);
--self.tbAttrList[i].szTip = string.format("<color=orange> %d%%¸ÅÂÊÔö¼Ó <color><color=gold>%s<color>", nMinProb, szStarAddedMin); -- ÌáʾÓï¾ä
self.tbAttrList[i].szTip = string.format("<color=orange>%d%% tỉ lệ vượt mức tăng <color> <color=gold>%s<color>", (100-nMinProb), "¡î");
end
end
end
self:UpdateTips(2);
end
else
self.tbAttrList = nil;
end
self:UpdateAttrList(self.tbAttrList);
end
function uiZhenYuan:GetStarStr(dwValue)
local szStar = "";
local nFloor = math.floor(dwValue);
for i = 1, nFloor do
szStar = szStar .. "★";
end
if (dwValue ~= nFloor) then
szStar = szStar .. "☆";
end
return szStar;
end
--[[
-- Á¶»¯µÄÕæÔª£¬ nPos = 1->3 ¶ÔÓ¦ Ö÷ÕæÔª¡¢¸±ÕæÔª¡¢Á¶»¯ºóÕæÔ ª
function uiZhenYuan:GetZhenYuanRefine(nPos)
-- todo change
if (nPos1 == nPos) then
--
return self.pItem1;
else
--return me.GetItem(Item.ROOM_ZHENYUAN_REFINE_CONSUME, 0, 0);
return self.pItem2;
end
end
--]]
-- Á¶»¯Ö÷ÕæÔª
function uiZhenYuan:GetZhenYuanRefine1()
return me.GetItem(Item.ROOM_ZHENYUAN_REFINE_MAIN, 0, 0);
end
-- Á¶»¯¸±ÕæÔª
function uiZhenYuan:GetZhenYuanRefine2()
return me.GetItem(Item.ROOM_ZHENYUAN_REFINE_CONSUME, 0, 0);
end
-- ÐÞÁ¶µÄÕæÔª
function uiZhenYuan:GetZhenYuanXiuLian()
local pItem = me.GetItem(Item.ROOM_ZHENYUAN_XIULIAN_ZHENYUAN, 0, 0);
return pItem;
end
-- ¸ñ×ÓÖеľÑéÊé nX¡¢nY³ýÍâ
function uiZhenYuan:GetExpBookTab(pDrop, pPick, nX, nY)
local tbExpBook = {};
local nCnt = 1;
-- ¾ÑéÊé¸ñ×ÓΪ 3*6 ¹²18¸ö
for i = 0, 5 do
for j = 0, 2 do
local pItem = me.GetItem(Item.ROOM_ZHENYUAN_XIULIAN_ITEM, i, j);
if (pItem and (i ~= nX or j ~= nY)) then
tbExpBook[nCnt] = pItem;
nCnt = nCnt + 1;
end
end
end
if (pDrop) then
--tbExpBook[nY * 6 + nX] = pDrop;
tbExpBook[nCnt] = pDrop;
end
return tbExpBook;
end
-- ¸üÐÂÕæÔªÊôÐÔÁбí
function uiZhenYuan:UpdateAttrList(tbAttrList)
Lst_Clear(self.UIGROUP, self.LST_ATTR);
if (not tbAttrList) then
return ;
end
for i = 1, #tbAttrList do
local szCell1 = tbAttrList[i][1];
local szCell2 = tbAttrList[i][2];
local szCell3 = tbAttrList[i][3];
local szColor = tbAttrList[i].color;
if (szColor and string.len(szColor) > 0) then
szCell1 = string.format("<color=%s>%s<color>", szColor, tbAttrList[i][1]);
szCell2 = string.format("<color=%s>%s<color>", szColor, tbAttrList[i][2]);
szCell3 = string.format("<color=%s>%s<color>", szColor, tbAttrList[i][3]);
end
Lst_SetCell(self.UIGROUP, self.LST_ATTR, i, 1, szCell1);
Lst_SetCell(self.UIGROUP, self.LST_ATTR, i, 2, szCell2);
Lst_SetCell(self.UIGROUP, self.LST_ATTR, i, 3, szCell3);
end
end
-- µã»÷°´Å¥ Á¶»¯
function uiZhenYuan:ClickRefine()
local pItemRefine = self:GetZhenYuanRefine1(); -- Ö÷ÕæÔª
local pItemSub = self:GetZhenYuanRefine2(); -- ¸±ÕæÔª
if ((not pItemRefine) or (not pItemSub)) then
me.Msg("Hãy đặt vào Chân nguyên chính-phụ muốn luyện hóa!");
return;
end
local nSelectAttrId = Lst_GetCurKey(self.UIGROUP, self.LST_ATTR);
if not nSelectAttrId or nSelectAttrId <= 0 or nSelectAttrId > Item.tbZhenYuan.ATTRIB_COUNT then
me.Msg("Xin chọn các thuộc tính muốn luyện hóa để tiến hành!");
return;
end
local nAttrMagicId = Item.tbZhenYuan:GetAttribMagicId(pItemRefine, nSelectAttrId);
--local szSubZhenYuan = pItemSub.szName;
-- Á¶»¯
local nRet = Item.tbZhenYuan:ApplyRefine(pItemRefine, pItemSub, nAttrMagicId);
end
-- Êó±êÂÓ¹ýÁбí
function uiZhenYuan:OnListOver(szWnd, nItemIndex)
local nAttrId = Lst_GetCurKey(self.UIGROUP, self.LST_ATTR) + 1;
if (szWnd == self.LIST_MEMBER) and nItemIndex >= 0 then
nAttrId = nItemIndex + 1;
--self.szTipSelected = self.tbAttrList[nAttrId].szTip;
end
--self:UpdateTips(2, self.tbAttrList[nAttrId].szTip);
end
-- È¡ÏûÁ¶»¯
function uiZhenYuan:RefineCansel()
-- todo
for i = 1, 3 do
--self.tbObjRefine[i]:ClearRoom();
end
self.tbObjRefine1:ClearRoom();
self.tbObjRefine2:ClearRoom();
self.tbObjRefine3:ClearRoom();
self:PlaceZhenYuanRefine();
end
-- µã»÷°´Å¥ ÐÞÁ¶
function uiZhenYuan:ClickXiuLian()
me.ApplyZhenYuanEnhance(Item.tbZhenYuan.emZHENYUAN _ENHANCE_XIULIAN)
end
-- todo ´íÎó·´À¡
-- È¡ÏûÐÞÁ¶
function uiZhenYuan:XiuLianCansel()
-- todoo
self.tbObjXiuLianZhenYuan:ClearRoom();
self.tbObjExpBook:ClearRoom();
self:PlaceZhenYuanXiuLian();
end
-- ·ÅÈëÕæÔª ÐÞÁ¶
function uiZhenYuan:PlaceZhenYuanXiuLian(pItem)
self:UpdateTips(1);
if (not pItem) then
--self:UpdateTips(1);
return;
end
local tbExpBook = self:GetExpBookTab();
self:UpdateXiuLianTip(pItem, tbExpBook);
end
function uiZhenYuan:PlaceExpBook(pDrop, pPick, nX, nY)
local tbExpBook = self:GetExpBookTab(pDrop, pPick, nX, nY);
local pZhenYuan = self:GetZhenYuanXiuLian();
if (not pZhenYuan) then
me.Msg("Hãy bỏ vào chân nguyên cần tu luyện!");
return 0;
end
--[[
if (pDrop) then
table.insert(tbExpBook, pDrop);
end--]]
return self:UpdateXiuLianTip(pZhenYuan, tbExpBook);
end
function uiZhenYuan:UpdateXiuLianTip(pItem, tbExpBook)
local szTipEx1 = "";
local szTipEx2 = "";
if (not pItem) then
self:UpdateTips(1, "", "");
return 0;
end
local nLevelOld = Item.tbZhenYuan:GetLevel(pItem);
if (tbExpBook and Lib:CountTB(tbExpBook) >= 1) then
local bOver, nLevelNew, nExpRemain = Item.tbZhenYuan:GetExpAdded(pItem, tbExpBook);
if (1 == bOver) then
me.Msg("Bạn đã bỏ quá nhiều Sách kinh nghiệm đồng hành!");
return 0;
end
szTipEx2 = string.format(" Chân nguyên cấp: %0.2f <color=gold>→ %0.2f<color><enter>", nLevelOld, nLevelNew);
end
local nLiLianTime = me.GetTask(Item.tbZhenYuan.EXPSTORE_TASK_MAIN, Item.tbZhenYuan.EXPSTORE_TASK_SUB);
if (0 < nLiLianTime) then
local nLevelUp = Item.tbZhenYuan:CalExpFromTime(pItem, nLiLianTime);
if (0 < math.floor(nLevelUp)) then
szTipEx1 = string.format(" Kinh nghiệm luyện tập hiện tại có thể làm cho chân nguyên này tăng đến <color=gold>cấp %d<color>!", (nLevelOld + nLevelUp));
end
end
self:UpdateTips(1, szTipEx1, szTipEx2);
return 1;
end
function uiZhenYuan:UpdateRefine()
for i = 1, 3 do
--Lib:ShowTB(self.tbObjRefine[i]);
--self.tbObjRefine[i]:UpdateRoom();
end
end
function uiZhenYuan:UpdateXiuLian()
self:UpdateLiLianInfo();
--self.tbObjXiuLianZhenYuan:UpdateRoom();
--self.tbObjExpBook:UpdateRoom();
end
function uiZhenYuan:UpdateLiLianInfo()
local nLiLianTime = me.GetTask(Item.tbZhenYuan.EXPSTORE_TASK_MAIN, Item.tbZhenYuan.EXPSTORE_TASK_SUB);
local tbEnable = {0, 0, 0};
local pItem = me.GetItem(Item.ROOM_ZHENYUAN_XIULIAN_ZHENYUAN, 0, 0);
if pItem and nLiLianTime > 0 then
local nLevelUp = Item.tbZhenYuan:CalExpFromTime(pItem, nLiLianTime);
if nLevelUp >= 1 then
tbEnable[1] = 1;
end
if nLevelUp >= 10 then
tbEnable[2] = 1;
end
end
if nLiLianTime > 0 then
tbEnable[3] = 1;
Wnd_SetEnable(self.UIGROUP, self.BTN_LEVEL, 1);
else
Wnd_SetEnable(self.UIGROUP, self.BTN_LEVEL, 0);
end
--[[
Wnd_SetEnable(self.UIGROUP, self.BTNLEVEL1, tbEnable[1]);
Wnd_SetEnable(self.UIGROUP, self.BTNLEVEL10, tbEnable[2]);
Wnd_SetEnable(self.UIGROUP, self.BTNLEVELALL, tbEnable[3]);
--]]
local szTime = "Kinh nghiệm<enter>";
szTime = szTime..string.format("%dh%dphút", math.floor(nLiLianTime/60), nLiLianTime%60);
Txt_SetTxt(self.UIGROUP, self.TXT_BALANCEEXP, szTime);
end
function uiZhenYuan:OnSyncItem(nRoom, nX, nY)
self:UpdateObjCont();
end
function uiZhenYuan:UpdateObjCont()
local nPage = self.nCurPageIndex;
if (nPREFINE == nPage) then
self:UpdateRefine();
else
self:UpdateXiuLian();
end
end
-- ×¢²áʼþ¸üлص÷
function uiZhenYuan:RegisterEvent()
local tbRegEvent =
{
{ UiNotify.emCOREEVENT_SYNC_ITEM, self.OnSyncItem},
{ UiNotify.emCOREEVENT_ENHANCE_ZHENYUAN_RESULT, self.OnResult },
{ UiNotify.emUIEVENT_OBJ_STATE_USE, self.StateRecvUse},
};
for i = 1, 3 do
--tbRegEvent = Lib:MergeTable(tbRegEvent, self.tbObjRefine[i]:RegisterEvent());
end
tbRegEvent = Lib:MergeTable(tbRegEvent, self.tbObjRefine1:RegisterEvent());
tbRegEvent = Lib:MergeTable(tbRegEvent, self.tbObjRefine2:RegisterEvent());
tbRegEvent = Lib:MergeTable(tbRegEvent, self.tbObjRefine3:RegisterEvent());
tbRegEvent = Lib:MergeTable(tbRegEvent, self.tbObjXiuLianZhenYuan:RegisterEvent());
tbRegEvent = Lib:MergeTable(tbRegEvent, self.tbObjExpBook:RegisterEvent());
return tbRegEvent;
end
-- ×¢²á¼¼ÄܽçÃæOBJµÄÏûÏ¢»Øµ÷
function uiZhenYuan:RegisterMessage()
local tbRegMsg = {};
for i = 1, 3 do
--tbRegMsg = Lib:MergeTable(tbRegMsg, self.tbObjRefine[i]:RegisterMessage());
end
tbRegMsg = Lib:MergeTable(tbRegMsg, self.tbObjRefine1:RegisterMessage());
tbRegMsg = Lib:MergeTable(tbRegMsg, self.tbObjRefine2:RegisterMessage());
tbRegMsg = Lib:MergeTable(tbRegMsg, self.tbObjRefine3:RegisterMessage());
tbRegMsg = Lib:MergeTable(tbRegMsg, self.tbObjXiuLianZhenYuan:RegisterMessage());
tbRegMsg = Lib:MergeTable(tbRegMsg, self.tbObjExpBook:RegisterMessage());
return tbRegMsg;
end
function uiZhenYuan:OnResult(nMode, nResult)
if (Item.tbZhenYuan.emZHENYUAN_ENHANCE_REFINE == nMode) then
if (nResult == 1) then
Item.tbZhenYuan:RefineResult(self.tbObjRefine1, self.tbObjRefine3);
-- ²¥·ÅÌØЧ
Wnd_Show(self.UIGROUP, self.IMG_EFFECT);
Img_PlayAnimation(self.UIGROUP, self.IMG_EFFECT);
-- Á¶»¯³É¹¦Ö®ºó£¬½á¹û¸ñ×ÓÖÐÓ Ð¶«Î÷£¬ÔÚÏ´Î×ö²Ù×÷µÄʱºò Òª½«Õâ¸ö¸ñ×ÓÀïµÄ¶«Î÷µ¯³ö
self.nRefineResult = 1;
local pItemRefine = self:GetZhenYuanRefine1(); -- Ö÷ÕæÔª
local pItemSub = self:GetZhenYuanRefine2(); -- ¸±ÕæÔª
if (not pItemRefine or not pItemSub) then
return;
end
else
me.Msg("Chân nguyên không thể luyện hóa!");
end
self:UpdateTips(1);
elseif(Item.tbZhenYuan.emZHENYUAN_ENHANCE_XIULIAN == nMode) then
--self.tbObjXiuLianZhenYuan:ClearRoom();
self.tbObjExpBook:ClearRoom();
self:UpdateLiLianInfo();
self:UpdateXiuLianTip();
end
end
function uiZhenYuan:ApplyLiLianExp(nType)
local pItem = me.GetItem(Item.ROOM_ZHENYUAN_XIULIAN_ZHENYUAN, 0, 0);
if pItem then
me.CallServerScript({ "ZhenYuanCmd", "ApplyUseLilianTime", pItem.dwId, nType});
else
me.Msg("Hãy bỏ vào chân nguyên cần tăng kinh nghiệm!");
end
end
function uiZhenYuan:OnMouseEnter(szWnd)
local szTip = "";
if szWnd == self.BTNLEVELALL or szWnd == self.BTNLEVEL1 or szWnd == self.BTNLEVEL10 then
szTip = "Dùng kinh nghiệm luyện tập thăng cấp chân nguyên, có thể chọn mật độ thăng cấp<enter>Nếu cấp chân nguyên đã đầy, kinh nghiệm luyện tập còn dư có thể tích lũy và sử dụng";
end
if szWnd == self.BTN_LEVEL then
szTip = "Dùng kinh nghiệm luyện hóa thăng cấp chân nguyên, có thể đặt vào nhiều chân nguyên!";
end
if szTip ~= "" then
Wnd_ShowMouseHoverInfo(self.UIGROUP, szWnd, "", szTip);
end
end
function uiZhenYuan:StateRecvUse(szUiGroup)
if szUiGroup == self.szUiGroup then
return;
end
if (UiManager:WindowVisible(self.UIGROUP) ~= 1) then
return;
end
if self.nCurPageIndex ~= nPXIULIAN then
return;
end
local tbObj = tbMouse:GetObj();
if not tbObj then
return;
end
local pItem = me.GetItem(tbObj.nRoom, tbObj.nX, tbObj.nY);
if (pItem.IsEquip() == 1) then
self.tbObjXiuLianZhenYuan:ClearRoom();
self.tbObjXiuLianZhenYuan:SpecialStateRecvUse();
else
self.tbObjExpBook:SpecialStateRecvUse();
end
end
fightpower.lua
local uiFightPower = Ui:GetClass("fightpower");
local MAX_ENHTIMES = 16;
uiFightPower.BTN_CLOSE = "BtnClose"; -- 关闭按钮
uiFightPower.PAGE_SET_MAIN = "PageSetMain"; -- 分页集
uiFightPower.PAGE_MAIN =
{ -- 页按钮 页名
{ "BtnPageTotal", "PageTotal", },
{ "BtnPageEquip", "PageEquip", },
};
uiFightPower.TXT_INSTRUCTION = "TxtInstruction"; -- 简要说明
uiFightPower.TXT_TOTAL_POWER = "TxtTotalPower"; -- 总战斗力值
uiFightPower.TXT_RANK = "TxtTotalPowerRank"; -- 排名
uiFightPower.BTN_LADDER = "BtnLadder"; -- 排行榜
uiFightPower.OUTLOOK_TOTAL_POWER = "OutLookTotalPower"; -- 展开面板
uiFightPower.SCROLL_EQUIP = "ScrollEquip"; -- 滑动面板
uiFightPower.PAGE_SET_EQUIP = "PageSetEquip"; -- 装备详情分页集
uiFightPower.PAGE_EQUIP =
{ -- 页按钮 页名
{ "BtnPageUsedEquip", "PageUsedEquip", },
{ "BtnPageReservedEquip", "PageReservedEquip", },
{ "BtnPageExpandEquip", "PageExpandedEquip", },
};
uiFightPower.WND_EQUIP_LIST_RE =
{ -- 装备类名 强化战斗力
{ "TxtHatR", "ProgHatR", "TxtProgHatR", nPos = Item.EQUIPEXPOS_HEAD, },
{ "TxtBodyR", "ProgBodyR", "TxtProgBodyR", nPos = Item.EQUIPEXPOS_BODY, },
{ "TxtBeltR", "ProgBeltR", "TxtProgBeltR", nPos = Item.EQUIPEXPOS_BELT, },
{ "TxtBracerR", "ProgBracerR", "TxtProgBracerR", nPos = Item.EQUIPEXPOS_CUFF, },
{ "TxtShoeR", "ProgShoeR", "TxtProgShoeR", nPos = Item.EQUIPEXPOS_FOOT, },
{ "TxtWeaponR", "ProgWeaponR", "TxtProgWeaponR", nPos = Item.EQUIPEXPOS_WEAPON, },
{ "TxtNecklaceR", "ProgNecklaceR", "TxtProgNecklaceR", nPos = Item.EQUIPEXPOS_NECKLACE, },
{ "TxtRingR", "ProgRingR", "TxtProgRingR", nPos = Item.EQUIPEXPOS_RING, },
{ "TxtPendantR", "ProgPendantR", "TxtProgPendantR", nPos = Item.EQUIPEXPOS_PENDANT, },
{ "TxtAmuletR", "ProgAmuletR", "TxtProgAmuletR", nPos = Item.EQUIPEXPOS_AMULET, },
};
uiFightPower.WND_EQUIP_LIST_EX =
{ -- 装备类名 强化战斗力
{ "TxtHatE", "ProgHatE", "TxtProgHatE", nPos = Item.EQUIPEXPOS_HEAD, },
{ "TxtBodyE", "ProgBodyE", "TxtProgBodyE", nPos = Item.EQUIPEXPOS_BODY, },
{ "TxtBeltE", "ProgBeltE", "TxtProgBeltE", nPos = Item.EQUIPEXPOS_BELT, },
{ "TxtBracerE", "ProgBracerE", "TxtProgBracerE", nPos = Item.EQUIPEXPOS_CUFF, },
{ "TxtShoeE", "ProgShoeE", "TxtProgShoeE", nPos = Item.EQUIPEXPOS_FOOT, },
{ "TxtWeaponE", "ProgWeaponE", "TxtProgWeaponE", nPos = Item.EQUIPEXPOS_WEAPON, },
{ "TxtNecklaceE", "ProgNecklaceE", "TxtProgNecklaceE", nPos = Item.EQUIPEXPOS_NECKLACE, },
{ "TxtRingE", "ProgRingE", "TxtProgRingE", nPos = Item.EQUIPEXPOS_RING, },
{ "TxtPendantE", "ProgPendantE", "TxtProgPendantE", nPos = Item.EQUIPEXPOS_PENDANT, },
{ "TxtAmuletE", "ProgAmuletE", "TxtProgAmuletE", nPos = Item.EQUIPEXPOS_AMULET, },
};
uiFightPower.WND_EQUIP_LIST_USED =
{-- 装备类名 装备战斗力 炼化战斗力 强化战斗力进度 进度条文字
{ "TxtHat", "TxtBasePowerHat", "TxtRefinePowerHat", "ProgHat", "TxtProgHat", nPos = Item.EQUIPPOS_HEAD, },
{ "TxtBody", "TxtBasePowerBody", "TxtRefinePowerBody", "ProgBody", "TxtProgBody", nPos = Item.EQUIPPOS_BODY, },
{ "TxtBelt", "TxtBasePowerBelt", "TxtRefinePowerBelt", "ProgBelt", "TxtProgBelt", nPos = Item.EQUIPPOS_BELT, },
{ "TxtBracer", "TxtBasePowerBracer", "TxtRefinePowerBracer", "ProgBracer", "TxtProgBracer", nPos = Item.EQUIPPOS_CUFF, },
{ "TxtShoe", "TxtBasePowerShoe", "TxtRefinePowerShoe", "ProgShoe", "TxtProgShoe", nPos = Item.EQUIPPOS_FOOT, },
{ "TxtWeapon", "TxtBasePowerWeapon", "TxtRefinePowerWeapon", "ProgWeapon", "TxtProgWeapon", nPos = Item.EQUIPPOS_WEAPON, },
{ "TxtNecklace","TxtBasePowerNecklace", "TxtRefinePowerNecklace", "ProgNecklace", "TxtProgNecklace", nPos = Item.EQUIPPOS_NECKLACE, },
{ "TxtRing", "TxtBasePowerRing", "TxtRefinePowerRing", "ProgRing", "TxtProgRing", nPos = Item.EQUIPPOS_RING, },
{ "TxtPendant", "TxtBasePowerPendant", "TxtRefinePowerPendant", "ProgPendant", "TxtProgPendant", nPos = Item.EQUIPPOS_PENDANT, },
{ "TxtAmulet", "TxtBasePowerAmulet", "TxtRefinePowerAmulet", "ProgAmulet", "TxtProgAmulet", nPos = Item.EQUIPPOS_AMULET, },
{ "TxtMantle", "TxtBasePowerMantle", nPos = Item.EQUIPPOS_MANTLE, }, -- 披风
{ "TxtSignet", "TxtBasePowerSignet", nPos = Item.EQUIPPOS_SIGNET, }, -- 印鉴-五行印
{ "TxtMiJi", "TxtBasePowerMiJi", nPos = Item.EQUIPPOS_BOOK, }, -- 秘籍
{ "TxtZhenFa", "TxtBasePowerZhenFa", nPos = Item.EQUIPPOS_ZHEN, }, -- 阵法
{ "TxtChop", "TxtBasePowerChop", nPos = Item.EQUIPPOS_CHOP, }, -- 官印
}
uiFightPower.TXT_EXPAND_EQUIP =
{ -- 强化战斗力系数
}
function uiFightPower:Init()
self.m_nPageNum = 2; -- 页面总数
self.m_nCurPageIndex = 1; -- 当前页
self.tbEquipRoomInfo = -- 用来获取装备战斗力
{ -- 装备类型 道具容器号
{ szSuitName = "Hiện tại", nRoomId = Item.ROOM_EQUIP, tbSuit = self.WND_EQUIP_LIST_USED, },
{ szSuitName = "Đồ dự phòng", nRoomId = Item.ROOM_EQUIPEX, tbSuit = self.WND_EQUIP_LIST_RE, },
{ szSuitName = "Chiến hồn", nRoomId = Item.ROOM_EQUIPEX2, tbSuit = self.WND_EQUIP_LIST_EX, },
}
self.tbInstruction =
{
tbTotal = {"Chân nguyên", "Trang bị", "Đồng hành", "Thành tựu", "Cấp"},
tbEquip = {},
}
end
function uiFightPower:OnOpen()
self:LoadInstructionText();
if (not self.bLoadInstruction) then
self.bLoadInstruction = 1;
end
self.m_nCurPageIndex = 1;
self:UpdatePageMain();
end
function uiFightPower:UpdatePageMain()
if (1 == self.m_nCurPageIndex) then
self:UpdatePageTotalPower();
elseif 2 == self.m_nCurPageIndex then
self.nEquipCurPageIndex = 1;
self:UpdatePageEquip();
end
PgSet_ActivePage(self.UIGROUP, self.PAGE_SET_MAIN, self.PAGE_MAIN[self.m_nCurPageIndex][2]);
end
function uiFightPower:UpdatePageTotalPower()
self:ShowOutlookWnd();
Txt_SetTxt(self.UIGROUP, self.TXT_TOTAL_POWER, self:FormatValue(self.nTotalFightPower));
local nRank = Player.tbFightPower:GetRank(me);
local szRank = ((0 ~= nRank) and ("Hạng "..nRank..".") or "Chưa xếp hạng");
Txt_SetTxt(self.UIGROUP, self.TXT_RANK, szRank);
Txt_SetTxt(self.UIGROUP, self.TXT_INSTRUCTION, self.tbInstruction[1][0]);
end
function uiFightPower:OnOutLookItemSelected(szWndName, nGroupIndex, nItemIndex)
self.nCurGroupId = nGroupIndex;
if (not self.tbInstruction) then
return;
end
Txt_SetTxt(self.UIGROUP, self.TXT_INSTRUCTION, self.tbInstruction[1][nGroupIndex+1]);
end
function uiFightPower:ShowOutlookWnd()
OutLookPanelClearAll(self.UIGROUP, self.OUTLOOK_TOTAL_POWER);
AddOutLookPanelColumnHeader(self.UIGROUP, self.OUTLOOK_TOTAL_POWER, "");
AddOutLookPanelColumnHeader(self.UIGROUP, self.OUTLOOK_TOTAL_POWER, "");
AddOutLookPanelColumnHeader(self.UIGROUP, self.OUTLOOK_TOTAL_POWER, "");
SetOutLookHeaderWidth(self.UIGROUP, self.OUTLOOK_TOTAL_POWER, 0, 120);
SetOutLookHeaderWidth(self.UIGROUP, self.OUTLOOK_TOTAL_POWER, 1, 120);
SetOutLookHeaderWidth(self.UIGROUP, self.OUTLOOK_TOTAL_POWER, 2, 50);
local tbSet = self:GetTotalFightPowerInfo();
if (not tbSet) then
return;
end
for i = 1, #tbSet do
AddOutLookGroup(self.UIGROUP, self.OUTLOOK_TOTAL_POWER, tbSet[i].szName);
local tbContent = tbSet[i].tbContent;
if tbContent then
for j = 1, #tbContent do
local nRet = AddOutLookItem(self.UIGROUP, self.OUTLOOK_TOTAL_POWER, i - 1, tbContent[j]);
end
if i ~= 1 then
SetGroupCollapseState(self.UIGROUP, self.OUTLOOK_TOTAL_POWER, i - 1, 0);
end
end
end
end
function uiFightPower:GetTotalFightPowerInfo()
local tbInfo = {};
self.nTotalFightPower = 0;
for i = 1, 5 do
local tbGroup = {};
if (1 == i) then
local nTotalSum = 0;
nTotalSum, tbGroup.tbContent = self:GetZhenyuanInfo();
local szSum = self:FormatValue(nTotalSum);
tbGroup.szName = self:GetFormatString("Chân nguyên", szSum, "");
self.nTotalFightPower = self.nTotalFightPower + nTotalSum;
elseif (2 == i) then
local nTotalSum = 0;
nTotalSum, tbGroup.tbContent = self:GetEquipFightPowerSum();
local szSum = self:FormatValue(nTotalSum);
tbGroup.szName = self:GetFormatString("Trang bị", szSum, "");
self.nTotalFightPower = self.nTotalFightPower + nTotalSum;
elseif (3 == i) then
local nTotalSum = 0;
nTotalSum, tbGroup.tbContent = self:GetPartnerInfo();
local szSum = self:FormatValue(nTotalSum);
tbGroup.szName = self:GetFormatString("Đồng hành", szSum, "");
self.nTotalFightPower = self.nTotalFightPower + nTotalSum;
elseif (4 == i) then
local nAchievPower = Player.tbFightPower:GetPlayerAchievementPoint(me);
local nAchievRank = Player.tbFightPower:GetAchievementRank(me); --todo
local szAchievRank = ((0 == nAchievRank) and "Chưa xếp hạng") or ("Hạng "..nAchievRank..".");
local szResult = self:FormatValue(nAchievPower);
tbGroup.szName = self:GetFormatString("Thành tựu", szResult, "");
tbGroup.tbContent = {};
tbGroup.tbContent[1]= {"Thành tựu", "+"..nAchievPower, szAchievRank};
self.nTotalFightPower = self.nTotalFightPower + nAchievPower;
elseif (5 == i) then
local nLevelPower = Player.tbFightPower:GetPlayerLevelPoint(me);
local nLevelRank = Player.tbFightPower:GetLevelRank(me); --todo
local szLevelRank = ((0 == nLevelRank) and "Chưa xếp hạng") or ("Hạng "..nLevelRank..".");
local szResult = self:FormatValue(nLevelPower);
tbGroup.szName = self:GetFormatString("Cấp", szResult, "");
tbGroup.tbContent = {};
tbGroup.tbContent[1]= {"Cấp", "+"..nLevelPower, szLevelRank};
self.nTotalFightPower = self.nTotalFightPower + nLevelPower;
end
tbInfo[i] = tbGroup;
end
return tbInfo;
end
function uiFightPower:GetFormatString(szPre, szMid, szSuf)
local nSize = 30;
local szResult = " "..szPre;
local nPreLen = #szResult;
for i = 1, 21 - nPreLen do
szResult = szResult.." ";
end
local nMidLen = #szMid;
szResult = szResult..szMid;
for i = 1, 20 - nMidLen do
szResult = szResult.." ";
end
szResult = szResult..szSuf;
local nSufLen = #szResult;
for i = 1, 55 - nSufLen do
szResult = szResult.." ";
end
return szResult;
end
function uiFightPower:GetZhenyuanInfo()
local nTotalPower = 0;
local tbZhenyuanInfo = nil;
local tbFind = {};
tbFind = me.FindClassItem(Item.ROOM_EQUIP, "zhenyuan"); -- 装备栏
for _, tbFind in pairs(tbFind) do
if (not tbZhenyuanInfo) then
tbZhenyuanInfo = {};
end
local pItem = tbFind.pItem;
local szName = pItem.szName;
local nFightPower = Item.tbZhenYuan:GetFightPower(pItem); -- 取战斗力
local nRank = Item.tbZhenYuan:GetRank(pItem); -- 取排名
local szFightPower = string.format("%d", nFightPower);
local szRank;
if nRank == 0 then
szRank = "Chưa xếp hạng";
else
szRank = string.format("Hạng %d", nRank);
end
local tbItem = {szName, szFightPower, szRank};
table.insert(tbZhenyuanInfo, tbItem);
nTotalPower = nTotalPower + nFightPower;
end
tbFind = me.FindClassItemOnPlayer("zhenyuan"); -- 背包,仓库
for _, tbFind in pairs(tbFind) do
if (not tbZhenyuanInfo) then
tbZhenyuanInfo = {};
end
local pItem = tbFind.pItem;
local szName = pItem.szName;
local nRank = Item.tbZhenYuan:GetRank(pItem); -- 取排名
local szRank = string.format("Hạng %d", nRank);
if nRank == 0 then
szRank = "Chưa xếp hạng";
else
szRank = string.format("Hạng %d", nRank);
end
local tbItem = {szName, "Chưa trang bị", szRank};
table.insert(tbZhenyuanInfo, tbItem);
end
if (not tbZhenyuanInfo) then
tbZhenyuanInfo = {{"Hiện tại bạn không có chân nguyên", "", ""}};
end
return nTotalPower,tbZhenyuanInfo;
end
function uiFightPower:GetEquipFightPowerSum()
if (not self.tbEquipRoomInfo) then
return {};
end
local tbEquipFightPowerSum = {};--{ {"Hiện tại", "+26", ""} };
local nTotalSum = 0;
for i = 1, #self.tbEquipRoomInfo do
local tbEquipInfo = {};
local nCumulateFightPower = 0;
local nRoomIndex = self.tbEquipRoomInfo[i].nRoomId;
local tbSuit = self.tbEquipRoomInfo[i].tbSuit;
for j = 1, #tbSuit do
local pItem = me.GetItem(nRoomIndex, tbSuit[j].nPos, 0);
if pItem then
nCumulateFightPower = nCumulateFightPower + self:GetSingleFightPower(pItem, i, j);
end
end
tbEquipInfo[1] = self.tbEquipRoomInfo[i].szSuitName; -- 装备套名称
tbEquipInfo[2] = self:FormatValue(nCumulateFightPower); -- 对应装备套的总战斗
tbEquipInfo[3] = "";
tbEquipFightPowerSum[i] = tbEquipInfo;
nTotalSum = nTotalSum + nCumulateFightPower;
end
return nTotalSum, tbEquipFightPowerSum;
end
function uiFightPower:GetSingleFightPower(pItem, nEquipType, nEquipId)
if (not pItem) then
return nil;
end
local nValue;
if (2 == nEquipType) then -- 备用装备
nValue = pItem.CalcExtraFightPower(pItem.nEnhTimes, 0);
elseif (3 == nEquipType) then -- 战魂装备
nValue = pItem.CalcExtraFightPower(pItem.nEnhTimes, 0) / 2;
else -- 当前装备
if (11 > nEquipId) then
nValue = pItem.CalcFightPower();
else
nValue = self:GetSpecEquipPower(nEquipId);
end
end
return nValue;
end
function uiFightPower:GetPartnerInfo()
local tbAllPartner = { };
local tbPartnerFightPower = {};
local nTotalPower = 0;
local nActivePower = 0;
for i = 1, me.nPartnerCount do
local nPartnerId = i - 1;
local tbPartnerInfo = {};
local pPartner = me.GetPartner(nPartnerId);
if not pPartner then
print("Failed to find partner: me.GetPartner("..(nPartnerId)..")");
break;
end
local nFightPower = Player.tbFightPower:GetPartnerFightPower(pPartner, me);
if (nPartnerId == me.nActivePartner) then
nFightPower = nFightPower;
end
table.insert(tbPartnerFightPower, {nFightPower, i});
tbPartnerInfo[1] = pPartner.szName;
tbPartnerInfo[2] = self:FormatValue(nFightPower);
tbPartnerInfo[3] = ((nPartnerId == me.nActivePartner) and "Ra tay") or "Chưa làm";
tbAllPartner[i] = tbPartnerInfo;
end
table.sort(tbPartnerFightPower, function(a, b) return a[1] > b[1] end);
for i, tbInfo in pairs(tbPartnerFightPower) do
local nPower = tbInfo[1];
local nIndex = tbInfo[2];
if (i <= Partner.VALUE_CALC_MAX_NUM) then
nTotalPower = nTotalPower + nPower;
else
tbAllPartner[nIndex][2] = self:FormatValue(0);
tbAllPartner[nIndex][3] = "Không cộng dồn";
end
end
if (0 == #tbAllPartner) then
tbAllPartner[1] = {"Hiện tại bạn không có đồng hành", "", ""};
end
return nTotalPower, tbAllPartner;
end
function uiFightPower:UpdatePageEquip()
if 1 == self.nEquipCurPageIndex then
self:UpdatePageEquipUsed();
elseif 2 == self.nEquipCurPageIndex then
self:UpdatePageEquipReserved();
elseif 3 == self.nEquipCurPageIndex then
self:UpdatePageEquipExpand();
end
PgSet_ActivePage(self.UIGROUP, self.PAGE_SET_EQUIP, self.PAGE_EQUIP[self.nEquipCurPageIndex][2]);
end
function uiFightPower:UpdatePageEquipUsed()
local tbData = self:GetUsedEquipData();
local tbWnd = self.WND_EQUIP_LIST_USED;
for i = 1, #tbWnd do
Wnd_SetTip(self.UIGROUP, tbWnd[i][1], tbData[i][1]); -- Tips显示装备的名称
Txt_SetTxt(self.UIGROUP, tbWnd[i][2], tbData[i][2]); -- 装备的基本战斗力
if (11 > i) then
Txt_SetTxt(self.UIGROUP, tbWnd[i][3], tbData[i][3]); -- 装备的炼化战斗力
Prg_SetPos(self.UIGROUP, tbWnd[i][4], tbData[i][4]); -- 进度条
Txt_SetTxt(self.UIGROUP, tbWnd[i][5], tbData[i][5]); -- 进度条文字
Wnd_SetTip(self.UIGROUP, tbWnd[i][5], tbData[i][6]); -- Tips强化
end
end
Txt_SetTxt(self.UIGROUP, self.TXT_INSTRUCTION, self.tbInstruction[2][1]);
end
function uiFightPower:GetUsedEquipData()
local tbData = {};
for i = 1, #self.WND_EQUIP_LIST_USED do
local tbCloth = {};
local pItem = me.GetItem(Item.ROOM_EQUIP, self.WND_EQUIP_LIST_USED[i].nPos, 0);
if (not pItem) then
end
tbCloth[1] = (pItem and pItem.szName) or ("Chưa trang bị");
if (11 > i) then
tbCloth[2] = (pItem and (self:FormatValue(pItem.nFightPower))) or "--";
tbCloth[3] = (pItem and (self:FormatValue(pItem.CalcExtraFightPower(0, pItem.nRefineLevel)))) or "--";
local nCurEnhPower = 0;
local nMaxEnhPower = 0;
local nNxtEnhPower = nil;
local nNxtEnhTimes = nil;
local szEnhTip = "";
if pItem then
local nEnhaceMaxTimes = Item:CalcMaxEnhanceTimes(pItem); -- 最高强化次数
nCurEnhPower = pItem.CalcExtraFightPower(pItem.nEnhTimes, 0);
nMaxEnhPower = pItem.CalcExtraFightPower(nEnhaceMaxTimes, 0);
nNxtEnhTimes = pItem.nEnhTimes + 1;
if (nEnhaceMaxTimes == nNxtEnhTimes) then
nNxtEnhTimes = nEnhaceMaxTimes;
nNxtEnhPower = nMaxEnhPower;
else
nNxtEnhTimes, nNxtEnhPower = self:GetNextEnhancPowerLevel(pItem, pItem.nEnhTimes, nCurEnhPower);
end
szEnhTip = "[Hiện tại]<enter>".."Cường hóa+"..pItem.nEnhTimes.."Hiệu quả: sức chiến đấu"..self:FormatValue(nCurEnhPower);
local bMaxEnhPower = nCurEnhPower >= nMaxEnhPower;
if (1 ~= pItem.IsWhite()) then
if not bMaxEnhPower then
if (nNxtEnhTimes and pItem.nEnhTimes ~= nEnhaceMaxTimes) then
szEnhTip = (szEnhTip.."<color=green><enter>[Cấp kế]<enter>Cường hóa+"..(nNxtEnhTimes).."Hiệu quả: sức chiến đấu"..self:FormatValue(nNxtEnhPower).."<color>");
end
szEnhTip = szEnhTip.."<color=red><enter><enter>[Cao nhất]<enter>Cường hóa+"..nEnhaceMaxTimes.."Hiệu quả: sức chiến đấu"..self:FormatValue(nMaxEnhPower).."<color>";
end
else
nMaxEnhPower = 0;
bMaxEnhPower = true;
end
if bMaxEnhPower then
szEnhTip = szEnhTip.."<enter><color=red>Đã đạt điểm cao nhất<color>";
end
if nEnhaceMaxTimes ~= MAX_ENHTIMES then
szEnhTip = szEnhTip.."<enter><enter><color=green>Cấp cao có thể dùng trang bị +16, sức chiến đấu +"..pItem.CalcExtraFightPower(MAX_ENHTIMES, 0).."<color>";
end
end
tbCloth[4] = (pItem and (nCurEnhPower/nMaxEnhPower * 1000)) or 0;
tbCloth[5] = (pItem and (self:FormatValue(nCurEnhPower, nMaxEnhPower))) or "--/--";
tbCloth[6] = (pItem and szEnhTip) or "Chưa trang bị";
else
local szValue = "--";
if (pItem) then
szValue = self:FormatValue((self:GetSpecEquipPower(i)));
end
tbCloth[2] = szValue;
end
tbData[i] = tbCloth;
end
return tbData;
end
function uiFightPower:GetNextEnhancPowerLevel(pItem, nNowEnhanceTimes, nNowEnhanceFightPower)
if (not pItem) then
return nil, nil;
end
local nEnhaceMaxTimes = Item:CalcMaxEnhanceTimes(pItem); -- 最高强化次数
if (nNowEnhanceTimes > nEnhaceMaxTimes) then
return nil, nil;
end
local nEnhTimes = nNowEnhanceTimes;
local nEnhFightPower = nNowEnhanceFightPower;
local nFactor = Item.tbEnhanceOfEquipPos[pItem.nEquipPos] or 1;
for i = (nNowEnhanceTimes + 1), nEnhaceMaxTimes do
nEnhTimes = i;
nEnhFightPower = Item.tbEnhanceFightPower[nEnhTimes] * nFactor;
if (nEnhFightPower > nNowEnhanceFightPower) then
return nEnhTimes, nEnhFightPower;
end
end
return nil,nil;
end
function uiFightPower:GetSpecEquipPower(nEquipId)
local nValue = nil;
if (11 == nEquipId) then -- 披风
nValue = Player.tbFightPower:GetPiFengPower(me);
elseif(12 == nEquipId) then -- 五行印
nValue = Player.tbFightPower:Get5XingYinPower(me);
elseif(13 == nEquipId) then -- 秘籍
nValue = Player.tbFightPower:GetMiJiPower(me);
elseif(14 == nEquipId) then -- 阵法
nValue = Player.tbFightPower:GetZhenFaPower(me);
elseif(15 == nEquipId) then -- 官印
nValue = Player.tbFightPower:GetGuanYinPower(me);
end
return nValue;
end
function uiFightPower:UpdatePageEquipReserved()
self.tbCurWndList = self.WND_EQUIP_LIST_RE;
self:UpdatePageEquipEx(Item.ROOM_EQUIPEX, self.WND_EQUIP_LIST_RE, 1);
Txt_SetTxt(self.UIGROUP, self.TXT_INSTRUCTION, self.tbInstruction[2][2]);
end
function uiFightPower:UpdatePageEquipEx(nRoomId, tbWndList, nParam)
local tbData = self:GetEquipDataEx(nRoomId, tbWndList, nParam);
local tbWnd = self.tbCurWndList;
for i = 1, #tbWnd do
Wnd_SetTip(self.UIGROUP, tbWnd[i][1], tbData[i][1]); -- Tips显示装备的名称
Prg_SetPos(self.UIGROUP, tbWnd[i][2], tbData[i][2]); -- 进度条
Txt_SetTxt(self.UIGROUP, tbWnd[i][3], tbData[i][3]); -- 进度条文字
Wnd_SetTip(self.UIGROUP, tbWnd[i][3], tbData[i][4]); -- Tips强化
end
end
function uiFightPower:GetEquipDataEx(nRoomId, tbWndList, nParam)
local tbData = {};
for i = 1, #self.tbCurWndList do
local tbCloth = {};
local pItem = me.GetItem(nRoomId, tbWndList[i].nPos, 0);
if (not pItem) then
end
tbCloth[1] = (pItem and pItem.szName) or "Chưa trang bị";
local nCurEnhPower = 0;
local nMaxEnhPower = 0;
local nNxtEnhPower = nil;
local nNxtEnhTimes = nil;
local szEnhTip = "";
if pItem then
local nEnhaceMaxTimes = Item:CalcMaxEnhanceTimes(pItem); -- 最高强化次数
nCurEnhPower = pItem.CalcExtraFightPower(pItem.nEnhTimes, 0) / nParam;
nMaxEnhPower = pItem.CalcExtraFightPower(nEnhaceMaxTimes, 0) / nParam;
nNxtEnhTimes = pItem.nEnhTimes + 1;
if (nEnhaceMaxTimes == nNxtEnhTimes) then
nNxtEnhTimes = nEnhaceMaxTimes;
nNxtEnhPower = nMaxEnhPower;
elseif (pItem.nEnhTimes == nEnhaceMaxTimes) then
nNxtEnhTimes = nil;
nNxtEnhPower = nil;
else
nNxtEnhTimes, nNxtEnhPower = self:GetNextEnhancPowerLevel(pItem, pItem.nEnhTimes, nCurEnhPower * nParam);
if (nNxtEnhPower) then
nNxtEnhPower = nNxtEnhPower / nParam;
end
end
szEnhTip = "[Hiện tại]<enter>".."Cường hóa+"..pItem.nEnhTimes.."Hiệu quả: sức chiến đấu"..self:FormatValue(nCurEnhPower);
local bMaxEnhPower = nCurEnhPower >= nMaxEnhPower;
if (1 ~= pItem.IsWhite()) then
if not bMaxEnhPower then
if (nNxtEnhTimes and pItem.nEnhTimes ~= nEnhaceMaxTimes) then
szEnhTip = (szEnhTip.."<color=green><enter>[Cấp kế]<enter>Cường hóa+"..(nNxtEnhTimes).."Hiệu quả: sức chiến đấu"..self:FormatValue(nNxtEnhPower).."<color>");
end
szEnhTip = szEnhTip.."<color=red><enter><enter>[Cao nhất]<enter>Cường hóa+"..nEnhaceMaxTimes.."Hiệu quả: sức chiến đấu"..self:FormatValue(nMaxEnhPower).."<color>";
end
else
nMaxEnhPower = 0;
bMaxEnhPower = true;
end
if bMaxEnhPower then
szEnhTip = szEnhTip.."<enter><color=red>Đã đạt điểm cao nhất<color>";
end
if nEnhaceMaxTimes ~= MAX_ENHTIMES then
szEnhTip = szEnhTip.."<enter><enter><color=green>Cấp cao có thể dùng trang bị +"..MAX_ENHTIMES..", sức chiến đấu +"..(pItem.CalcExtraFightPower(MAX_ENHTIMES, 0) / nParam).."<color>";
end
end
tbCloth[2] = (pItem and (nCurEnhPower/nMaxEnhPower * 1000)) or 0;
tbCloth[3] = (pItem and (self:FormatValue(nCurEnhPower, nMaxEnhPower))) or "--/--";
tbCloth[4] = (pItem and szEnhTip) or "Chưa trang bị";
tbData[i] = tbCloth;
end
return tbData;
end
function uiFightPower:UpdatePageEquipExpand()
self.tbCurWndList = self.WND_EQUIP_LIST_EX;
self:UpdatePageEquipEx(Item.ROOM_EQUIPEX2, self.WND_EQUIP_LIST_EX, 2); -- 以后加上
Txt_SetTxt(self.UIGROUP, self.TXT_INSTRUCTION, self.tbInstruction[2][3]);
end
function uiFightPower:OnButtonClick(szWnd, nParam)
if (szWnd == self.BTN_CLOSE) then
UiManager:CloseWindow(self.UIGROUP);
elseif (szWnd == self.BTN_LADDER) then
local nSelGroupId, nSelItemId = GetOutLookCurSelItemIdx(self.UIGROUP, self.OUTLOOK_TOTAL_POWER);
local nGen = 1;
if (nSelGroupId) then
if (0 == nSelGroupId) then
nGen = 3;
elseif(3 == nSelGroupId) then
nGen = 2;
elseif(4 == nSelGroupId) then
nGen = 4;
else
nGen = 1;
end
end
UiManager:SwitchWindow(Ui.UI_LADDER, 7, nGen);
end
for i = 1,2 do
if (szWnd == self.PAGE_MAIN[i][1]) then
self.m_nCurPageIndex = i;
self:UpdatePageMain();
return;
end
end
for i = 1,3 do
if (szWnd == self.PAGE_EQUIP[i][1]) then
self.nEquipCurPageIndex = i;
self:UpdatePageEquip();
return;
end
end
end
function uiFightPower:LoadInstructionText()
local tbFile = Lib:LoadTabFile("\\setting\\fightpower\\instruction.txt");
if (not tbFile) then
print("[fightpower]Failed to load file instruction.txt!");
else
local tbInfo = {};
for _, tbRow in ipairs(tbFile) do
local nMainId = tonumber(tbRow.mainid);
local nSubId = tonumber(tbRow.subid);
local strText = tostring(tbRow.text);
if (not tbInfo[nMainId]) then
tbInfo[nMainId] = {};
end
if (not tbInfo[nMainId][nSubId]) then
tbInfo[nMainId][nSubId] = {};
end
tbInfo[nMainId][nSubId] = strText;
end
self.tbInstruction = tbInfo;
end
local tbCheck = {{0,5}, {1,3}};
for i = 1, #tbCheck do
for j = tbCheck[i][1], tbCheck[i][2] do
if (not self.tbInstruction[i][j]) then
self.tbInstruction[i][j] = "";
end
end
end
end
function uiFightPower:FormatValue(nLValue, nRValue)
local szResult = "";
if (nLValue) then
nLValue = math.floor(nLValue * 100) / 100;
szResult = ((nLValue == math.floor(nLValue)) and ("+"..nLValue)) or (string.format("+%0.2f", nLValue));
end
if (nRValue) then
nRValue = math.floor(nRValue * 100) / 100;
szResult= szResult .. (((math.floor(nLValue) == nLValue) and ("/"..nRValue)) or (string.format("/%0.2f", nRValue)));
end
return szResult;
end
tất nhiên là còn nhiều cái nữa
Đây là folder pak của họ mà mình đã unpak ra
anh em cùng nghiên cứu và search trên mạng tìm thêm ở trên server nữa :">
đây là client thì có rồi :)>-
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
hoặc pro nào biết thì lên share cách sử dụng hoặc cách làm sao để có naòooo :">