PDA

View Full Version : [KT] Chân nguyên hộ thể và trang bị đồng hành



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 :">

ngockiem
11-06-12, 01:42 AM
Thanks bạn nhìu , đả down nhưng chưa biết cách sữ dụng :D
phải đợi pro nào test rồi chỉ dùng thui :D

mr.longtay
11-06-12, 02:35 AM
Mình mới add được đồ pet, chưa tìm ra cách sử dụng :D

Mr.QuangHuy
11-06-12, 02:46 AM
Mình mới add được đồ pet, chưa tìm ra cách sử dụng :D

Hướng dẫn đi bạn, mình mò mãi mà chả đc .

nh0kk3n2310
11-06-12, 10:03 AM
Mình mới add được đồ pet, chưa tìm ra cách sử dụng :D

có thì share ra để mọi ng cùng nghiên cứu cho vui bạn :)

testdangky123
11-06-12, 12:56 PM
trang bị đồng hành có sẵn trong server rồi mà
\gameserver1\setting\item\001\partnerequip

vipbk
11-06-12, 12:59 PM
trang bị đồng hành có sẵn trong server rồi mà
\gameserver1\setting\item\001\partnerequip

Có sẵn nhưng add vào thì không thấy gì cả :D

testdangky123
11-06-12, 01:01 PM
Có sẵn nhưng add vào thì không thấy gì cả :D

chắc là add đúng ko mà thấy
hỏi các pro trong diễn đàn cách add như nào cho đúng đeeeeeeee:-/

vipbk
11-06-12, 01:11 PM
chắc là add đúng ko mà thấy
hỏi các pro trong diễn đàn cách add như nào cho đúng đeeeeeeee:-/

me.AddItem mà chiến, nó cũng là item như trang bị

nh0kk3n2310
11-06-12, 03:37 PM
me.AddItem mà chiến, nó cũng là item như trang bị

có cái id chân nguyên mà không gọi ra dc :|

function tbGift:channguyen()
me.AddItem(1,1,24,1);
me.AddItem(1,1,24,2);
me.AddItem(1,1,24,3);
me.AddItem(1,1,24,4);
me.AddItem(1,1,24,5);
me.AddItem(1,1,24,6);
me.AddItem(1,1,24,7);
end

vipbk
11-06-12, 03:41 PM
có cái id chân nguyên mà không gọi ra dc :|

function tbGift:channguyen()
me.AddItem(1,1,24,1);
me.AddItem(1,1,24,2);
me.AddItem(1,1,24,3);
me.AddItem(1,1,24,4);
me.AddItem(1,1,24,5);
me.AddItem(1,1,24,6);
me.AddItem(1,1,24,7);
end

Chuẩn đó

nh0kk3n2310
11-06-12, 04:04 PM
Chuẩn đó

add vào nó ko có gì cả :(( ko bik phải làm đây :((

khactai
11-06-12, 04:24 PM
add vào nó ko có gì cả :(( ko bik phải làm đây :((
sv ko có lấy j mà add chừng nào có script của nó đã =))

khungvonline1
11-06-12, 04:29 PM
Server phải có thì mới hiện các bạn cái này phải có source để làm chứ không phải lấy cái đó về nhét vào server là xong đâu GS nó biết nhận kiểu gì được

nh0kk3n2310
11-06-12, 05:06 PM
vậy là phải đơi đến khi nào thằng VNG nó share ra mới có sao ta :(

vipcuonghy
13-06-12, 10:11 PM
{"Nhận Chân Nguyên",self.channguyen,self},

function tbGift:channguyen() me.AddItem(18,1,712,1);
me.AddItem(18,1,712,2);
me.AddItem(18,1,712,3);
me.AddItem(18,1,712,4);
me.AddItem(18,1,712,5);
me.AddItem(18,1,712,6);
me.AddItem(18,1,712,7);
me.AddItem(18,1,712,8);
me.AddItem(18,1,712,9);
me.AddItem(18,1,712,10);
me.AddItem(18,1,712,11);
end

chaolegion01
13-06-12, 10:35 PM
Sao mình additem trang bị đồng hành nó k có hiện ra ?

vipbk
14-06-12, 12:20 PM
Sao mình additem trang bị đồng hành nó k có hiện ra ?

không có script của nó nên không hiện được :|

kakakura
14-06-12, 12:59 PM
Vậy Có ai biết không, hướng dẫn với. add dô mà không hiện ra do server hay client không hiện thị vậy ?

nguyendung2011
14-06-12, 01:31 PM
Vậy Có ai biết không, hướng dẫn với. add dô mà không hiện ra do server hay client không hiện thị vậy ?

mấy bận nói phía trên rồi mà, dù có add kiểu j nhưng chưa có script của nó thì làm sao nó hiện cho được ;)), phải đợi share thôi bạn ơi ;))

tien-kiem.net
14-06-12, 01:36 PM
mấy bận nói phía trên rồi mà, dù có add kiểu j nhưng chưa có script của nó thì làm sao nó hiện cho được ;)), phải đợi share thôi bạn ơi ;))

Tự mò là chắc chắn lun bạn :)) đợi share thì tết công gố

nguyendung2011
14-06-12, 01:49 PM
Tự mò là chắc chắn lun bạn :)) đợi share thì tết công gố

tớ tham gia kiếm thế private cũng chỉ là đam mê :x, ko phải nghề nghiệp chính nên ko đầu tư được thời gian nhiều và cũng ko tìm hiểu được nhiều, tham gia gamezone cũng chỉ hóng và chém gió là chính ;)). cái j dễ hiểu thì làm được chứ cái phức tạp thì ko làm được vì ko đầu tư được thời gian nên chủ yếu hóng thôi :D

VNGameZoneVN
14-06-12, 09:26 PM
add như vậy có đúng ko nhỉ. add nó ko hiện ra dc.


function tbGift:tbdonghanh()
me.AddItem(5, 23, 1, 12);
me.AddItem(5, 21, 1, 12);
me.AddItem(5, 20, 1, 12);
me.AddItem(5, 19, 1, 12);
me.AddItem(5, 22, 1, 12);
end

nguyenhophuc87
15-06-12, 01:47 AM
đầu tiên vào check trong setting > item > 001 > other > scriptitem.txt trước. check mấy cái chân nguyên. kéo ra phía sau xem nó chạy Script nào.

vào script > item > class > tạo file script cho nó. có thể tạm thời tạo script rỗng trước. add > hiện ra ngay.

công việc kế tiếp là... viết script cho Chân nguyên hoặc đi sưu tầm ở SV nào đó ^^ SV mình hiện được chân nguyên nhưng chưa có script sử dụng >.<

satthupro95
15-06-12, 09:38 AM
đầu tiên vào check trong setting > item > 001 > other > scriptitem.txt trước. check mấy cái chân nguyên. kéo ra phía sau xem nó chạy Script nào.

vào script > item > class > tạo file script cho nó. có thể tạm thời tạo script rỗng trước. add > hiện ra ngay.

công việc kế tiếp là... viết script cho Chân nguyên hoặc đi sưu tầm ở SV nào đó ^^ SV mình hiện được chân nguyên nhưng chưa có script sử dụng >.<

<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>

vipbk
01-10-12, 07:57 PM
<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>

script\marry\item\xinhunlibao.lua

chú ý dòng này:

local tbUselessLibao = Item:GetClass("marry_uselessxinhunlibao");