PDA

View Full Version : [KT] Hướng dẫn phụ tu nhiều môn phái (Tứ Tu, Ngũ Tu,... "n" Tu ^^)



xaophayxoan
26-03-12, 06:14 PM
1 nhân vật có thể đồng thời tu luyện tất cả các phái (ngoài những môn phái quy định giới tính ra thì chịu)

đường dẫn tới file

...\gameserver\script\faction\changefaction.lua

các bác tìm dòng

Faction.MAX_USED_FACTION = 3;

thay số 3 = số môn phái 1 nhân vật có thể đồng thời tu luyện, nhiều nhất nên chọn 11 (không nên để >11) :D

Tiếp theo là dùng tu luyện châu để thay đổi môn phái, các bác yên tâm khi phụ tu thêm 1 phái tu luyện châu sẽ có thêm dòng chuyển sang phái đấy, tuy nhiên thời gian chờ để chuyển từ phái này sáng phái khác mặc định là 30p, để rút ngắn thời gian, tìm đến dòng (vẫn file changefaction.lua đấy)

Faction.SWITCH_FACTION_CD = 1800;

Thay đổi 1800 (tương ứng 1800=30*60=30p) muốn bao nhiêu phút thì lấy số phút nhân 60, mình để 1 tức là 1 giây sau có thể đổi được phái khác

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

minhphuong111
26-03-12, 06:27 PM
Bạn việt hóa dòng :Thay Đổi Đến ..... ở scrip nào vậy mình tìm hoài mà không được. Bạn giúp mình nhé.

satthulauhyh
26-03-12, 06:31 PM
Bạn có tgian thì hoàn thành cái skill 120 dùm với nha :D
Mình chỉ chỉnh chỉ số skill sơ sơ thôi chứ hok hỉu j hết.

xaophayxoan
26-03-12, 07:22 PM
Bạn việt hóa dòng :Thay Đổi Đến ..... ở scrip nào vậy mình tìm hoài mà không được. Bạn giúp mình nhé.

trong gameserver\script\item\class\xiulianzhu.lua



local tbItem = Item:GetClass("xiulianzhu");

tbItem.tbExpLimit = {
[1] = 300000, -- 10~19
[2] = 480000, -- 20~29 ľޣ2ʾdz10
[3] = 800000, -- 30~39
[4] = 1200000, -- 40~49
[5] = 1680000, -- 50~59
[6] = 2200000, -- 60~69
[7] = 2880000, -- 70~79
[8] = 3600000, -- 80~89
[9] = 4400000, -- 90~99
[10] = 5280000, -- 100~109
[11] = 6200000, -- 110~119
[12] = 7240000, -- 120~129
[13] = 8400000, -- 130~139
[14] = 9600000, -- 140~149
[15] = 9600000, -- 150
};

tbItem.tbXiuWeiLimit = {
[1] = 2400,
[2] = 2400,
[3] = 4000,
[4] = 6000,
[5] = 8400,
[6] = 11200,
[7] = 14400,
[8] = 18000,
[9] = 22000,
[10] = 26400,
};

tbItem.TASKGROUPID_HAVETASK = 1022;

tbItem.tbTaskHaveId = {
[2] = 188,
[3] = 189,
[4] = 190,
};

tbItem.tbPlayerTaskId = {
[2] = {
[1] = { 0x184, 0x245 },
[2] = { 0x17F, 0x240 },
[3] = { 0x187, 0x248 },
[4] = { 0x181, 0x242 },
[5] = { 0x186, 0x247 },
[6] = { 0x188, 0x249 },
[7] = { 0x180, 0x241 },
[8] = { 0x185, 0x246 },
[9] = { 0x183, 0x244 },
[10] = { 0x182, 0x243 },
[11] = { 0x189, 0x24A },
[12] = { 0x18A, 0x24B },
},
[3] = {
[1] = { 0x19A, 0x25B },
[2] = { 0x195, 0x256 },
[3] = { 0x19D, 0x25E },
[4] = { 0x197, 0x258 },
[5] = { 0x19C, 0x25D },
[6] = { 0x19E, 0x25F },
[7] = { 0x196, 0x257 },
[8] = { 0x19B, 0x25C },
[9] = { 0x199, 0x25A },
[10] = { 0x198, 0x259 },
[11] = { 0x19F, 0x260 },
[12] = { 0x1A0, 0x261 },
},
[4] = {
[1] = { 0x1A6, 0x267 },
[2] = { 0x1A1, 0x262 },
[3] = { 0x1A9, 0x26A },
[4] = { 0x1A3, 0x264 },
[5] = { 0x1A8, 0x269 },
[6] = { 0x1AA, 0x26B },
[7] = { 0x1A2, 0x263 },
[8] = { 0x1A7, 0x268 },
[9] = { 0x1A5, 0x266 },
[10] = { 0x1A4, 0x265 },
[11] = { 0x1AB, 0x26C },
[12] = { 0x1AC, 0x26D },
},
};


tbItem.MIN_PLAYER_LEVEL = Item.IVER_nXiuLianZhuLevel;
tbItem.TASKGROUP = 1023;
tbItem.TASKLASTTIME_ID = 1;
tbItem.TASKREMAINTIME_ID = 2;
tbItem.TASKEXPLIMIT_ID = 3;
tbItem.TASKXIUWEI_ID = 4;
tbItem.TASKOLDPRTIME_ID = 5;
tbItem.TASKCANGETEXTIME_ID = 6;
tbItem.MAX_REMAINTIME = 14;
tbItem.SKILL_ID_EXP = 332;
tbItem.SKILL_ID_LUCKY = 333;
tbItem.SKILL_ID_XIUWEI = 380;
tbItem.XIULIANREMAINTIME = 1.5;
tbItem.EXPTIMES = 1.2;
tbItem.SKILL_ID_EXP_LEVEL = Item.IVER_nXiuLianZhuSkillLevel;
tbItem.TASK_XIULIAN_ADDTIME = 7;
tbItem.LIMIT_ADDTIME = 10;

tbItem.TASK_GROUP_COZONE = 2065;
tbItem.TASK_GETEXTIME_FLAG = 2;
tbItem.TASK_SUBPLAYER_EXTIME = 3;


function tbItem:OnLevelUp(nLevel)
if (nLevel < self.MIN_PLAYER_LEVEL) then
return;
end
if (me.GetTask(self.TASKGROUP,self.TASKLASTTIME_ID) ~= 0) then
return;
end
local nNowTime = GetTime();
local nRemainTime = self.XIULIANREMAINTIME;
local nRemainExp = 0;
me.SetTask(self.TASKGROUP, self.TASKLASTTIME_ID, nNowTime);
me.SetTask(self.TASKGROUP, self.TASKREMAINTIME_ID, nRemainTime * 10);
me.SetTask(self.TASKGROUP, self.TASKEXPLIMIT_ID, nRemainExp);
end

function tbItem:OnUse()
local tbOpt = {};
local tbGerneFaction = Faction:GetGerneFactionInfo(me);

for _, nFactionId in ipairs(tbGerneFaction)do
if(nFactionId ~= me.nFaction)then
local szMsg = "Thay đổi đến ".. tostring(Player.tbFactions[nFactionId].szName);
table.insert(tbOpt, 1, {szMsg, self.OnSwitchFaction, self, nFactionId});
end
end

if (IsVoting() == 1) then
tbOpt = Lib:MergeTable({{"Bỏ phiếu tuyển chọn Đại sư huynh/Đại sư tỷ", FactionElect.VoteDialogLogin, FactionElect}}, tbOpt)
end
if Item.IVER_nEventCheck == 1 then
if (SpecialEvent.HundredKin:CheckEventTime2("view") == 1) then
tbOpt = Lib:MergeTable({{"Xếp hạng điểm tích lũy gia tộc", SpecialEvent.HundredKin.XiuLianZhu_Logic, SpecialEvent.HundredKin}}, tbOpt)
end

if (SpecialEvent.WangLaoJi:CheckEventTime(4) == 1) then
tbOpt = Lib:MergeTable({{"Xem xếp hạng hành động phòng hỏa", SpecialEvent.WangLaoJi.XiuLianZhu, SpecialEvent.WangLaoJi}}, tbOpt)
end

<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>
if self:CheckAddableCommon() == 1 then
tbOpt = Lib:MergeTable({{"Nhận thời gian tu luyện bổ sung", self.CheckAddableCommon, self, 1}}, tbOpt);
end

<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>
if Wldh.Qualification:Check_Yingxiong() == 1 then
tbOpt = Lib:MergeTable({{"<color=yellow>Đại Hội Võ Lâm Anh Hùng Thiếp<color>", Wldh.Qualification.Yingxiong_Dialog, Wldh.Qualification}}, tbOpt);
end

if Wldh.Qualification:Check_Vote() == 1 then
tbOpt = Lib:MergeTable({{"<color=yellow>Tuyển chọn Võ lâm minh chủ<color>", Wldh.Qualification.Vote_Dialog, Wldh.Qualification}}, tbOpt);
end

if Wldh.Qualification:Check_Query() == 1 then
tbOpt = Lib:MergeTable({{"<color=yellow>Danh sách tuyển thủ Đại Hội Võ Lâm<color>", Wldh.Qualification.ShowMemberDialog, Wldh.Qualification}}, tbOpt);
end

if EventManager.IVER_bOpenChongZhiHuoDong == 1 and (self:CheckAddablePreMonth() == 1) then
tbOpt = Lib:MergeTable({{"Nhận thời gian tu luyện thêm tháng này", self.CheckAddablePreMonth, self, 1}}, tbOpt)
end

if (SpecialEvent.tbTwentyAnniversary:CheckTime() == 1) then
tbOpt = Lib:MergeTable({{"Nhận phần thưởng hoạt động kỷ niệm 20 năm KingSoft", SpecialEvent.tbTwentyAnniversary.XiuLianZhuOnDialo g, SpecialEvent.tbTwentyAnniversary, 1}},tbOpt);
end;
end

if self:CheckAddableSubPlayer() == 1 then
tbOpt = Lib:MergeTable({{"Thời gian bổ sung tu luyện châu (bồi thường gộp server)", self.CheckAddableSubPlayer, self, 1}}, tbOpt)
end
if self:CheckAddableCoZone() == 1 and me.nLevel >= 50 then
tbOpt = Lib:MergeTable({{"Nhận phần thưởng thêm thời gian tu luyện", self.CheckAddableCoZone, self, 1}}, tbOpt)
end
if (self:CheckOldPCallBack() == 1) then
tbOpt = Lib:MergeTable({{"Thời gian tu luyện bổ sung", self.CheckOldPCallBack, self, 1}}, tbOpt);
end

tbOpt = Lib:MergeTable({{"Mua Tinh Hoạt phúc lợi", SpecialEvent.BuyJingHuo.OnDialog, SpecialEvent.BuyJingHuo}}, tbOpt);

local nNowLevel = me.nLevel;
if (self.MIN_PLAYER_LEVEL > nNowLevel) then
tbOpt = Lib:MergeTable( tbOpt, {{"Kết thúc đối thoại"}});
Dialog:Say(string.format("Bạn chưa đạt đến cấp %d quy định của trạng thái tu luyện, hãy tiếp tục cố gắng!", tbItem.MIN_PLAYER_LEVEL),
tbOpt);
return 0;
end

if (20 < me.nLevel and 50 > me.nLevel and me.nFaction > 0) then
local nIndex = math.floor(me.nLevel / 10);
local nMod = math.fmod(me.nLevel, 10);
local nHaveTaskId = self.tbTaskHaveId[nIndex];
if (nHaveTaskId) then
if (nMod > 0) then
local nFlag = me.GetTask(self.TASKGROUPID_HAVETASK, nHaveTaskId);
if (nFlag == 0) then
tbOpt = Lib:MergeTable({{string.format("Nhiệm vụ phụ tuyến môn phái cấp %d", nIndex * 10), self.CheckFactionTask, self, nIndex}}, tbOpt);
end
end
end
end

self:Update();

local nExpSkillLevel, nExpStateType, nExpEndTime, bExpIsNoClearOnDeath = me.GetSkillState(self.SKILL_ID_EXP);
local nLuckySkillLevel, nLuckyStateType, nLuckyEndTime, bLuckyIsNoClearOnDeath = me.GetSkillState(self.SKILL_ID_LUCKY);

local nRemainTime = self:GetRemainTime();
local nMiniter = (nRemainTime % 1) * 60;


local nRemainTime = self:GetRemainTime();
local nMiniter = (nRemainTime % 1) * 60;
local szMsg = " Đặt tay lên cảm thấy khí huyết cuộn dâng. " ..
"<color=yellow>Bạn có thể mở trạng thái tu luyện để nhận kinh nghiệm đánh quái x2 và tăng 10 điểm may mắn,<color> <color=red>một khi đã mở tu luyện sẽ không thể đóng lại trước khi hết giờ.<color>" ..
string.format("\n Thời gian tu luyện tích lũy còn: <color=green>%d<color> <color=yellow>giờ<color> <color=green>%d<color> <color=yellow>phút<color>. Bạn muốn mở bao lâu?", nRemainTime, nMiniter);
tbOpt = Lib:MergeTable( tbOpt,{
{"<color=yellow>Ta muốn mở tu luyện<color>", self.OnOpenXiuLianSure, self},
{"Kết thúc đối thoại"},
});

Dialog:Say(szMsg, tbOpt);

return 0;
end

function tbItem:OnOpenXiuLianSure()
local nRemainTime = self:GetRemainTime();
local nMiniter = (nRemainTime % 1) * 60;
local szMsg = " Đặt tay lên cảm thấy khí huyết cuộn dâng. " ..
"<color=yellow>Bạn có thể mở trạng thái tu luyện để nhận kinh nghiệm đánh quái x2 và tăng 10 điểm may mắn,<color> <color=red>một khi đã mở tu luyện sẽ không thể đóng lại trước khi hết giờ.<color>" ..
string.format("\n Thời gian tu luyện tích lũy còn: <color=green>%d<color> <color=yellow>giờ<color> <color=green>%d<color> <color=yellow>phút<color>. Bạn muốn mở bao lâu?", nRemainTime, nMiniter);
local tbOpt =
{
{"Ta muốn mở 0.5 giờ.", self.StartPractice, self, 0.5},
{"Ta muốn mở 1 giờ.", self.StartPractice, self, 1},
{"Ta muốn mở 1.5 giờ.", self.StartPractice, self, 1.5},
{"Ta muốn mở 2 giờ.", self.StartPractice, self, 2},
{"Ta muốn mở 4 giờ.", self.StartPractice, self, 4},
{"Ta muốn mở 6 giờ.", self.StartPractice, self, 6},
{"Ta muốn mở 8 giờ.", self.StartPractice, self, 8},
{"Không mở nữa."},
}
Dialog:Say(szMsg, tbOpt);
end

function tbItem:OnSwitchFaction(nFactionId)
local tbOpt = {
{"Đồng ý", self.OnSwitchFactionEx, self, nFactionId},
{"Hủy"},
};

Dialog:Say("Xác định muốn đổi môn phái?\n\n<color=green>Sau khi đổi tham gia nhiệm vụ nghĩa quân, Chiến trường Tống Kim, ải gia tộc, Bạch Hổ Đường sẽ nhận được danh vọng ngũ hành tương ứng với môn phái mới, đồng thời đến chỗ NPC mua trang bị danh vọng ngũ hành tương ứng với môn phái mới.<color>", tbOpt);
end

function tbItem:OnSwitchFactionEx(nFactionId)
local nResult, szMsg = Faction:SwitchFaction(me, nFactionId);
if (szMsg) then
me.Msg(szMsg)
end
end

function tbItem:GetReTime()
self:Update();
return me.GetTask(self.TASKGROUP, self.TASKREMAINTIME_ID) / 10;
end

function tbItem:GetRemainTime()
return me.GetTask(self.TASKGROUP, self.TASKREMAINTIME_ID) / 10;
end

-- ״̬
function tbItem:StartPractice(nChooseTime)
self:Update();
local nRemainTime = self:GetRemainTime();
local szMsg = "";
local tbOpt = {};
local nNewLunckyTime = 0;
local nNewExpTime = 0;
local nNewXiuWeiTime = 0;
if (nChooseTime > nRemainTime) then
szMsg = string.format("Thời gian tu luyện bạn tích lũy không đủ, không thể mở trạng thái tu luyện <color=yellow>(%.1f)<color> giờ.", nChooseTime);
else
local nLuckySkillLevel, nLuckyStateType, nLuckyEndTime, bLuckyIsNoClearOnDeath = me.GetSkillState(self.SKILL_ID_LUCKY);
local nExpSkillLevel, nExpStateType, nExpEndTime, bExpIsNoClearOnDeath = me.GetSkillState(self.SKILL_ID_EXP);
local nXiuSkillLevel, nXiuStateType, nXiuEndTime, bXiuIsNoClearOnDeath = me.GetSkillState(self.SKILL_ID_XIUWEI);
if (not nLuckyEndTime) then
nLuckyEndTime = 0;
end

if (not nExpEndTime) then
nExpEndTime = 0;
end

if (not nXiuEndTime) then
nXiuEndTime = 0;
end

szMsg = string.format("Bạn đã tăng <color=yellow>(%.1f)<color> giờ tu luyện, bây giờ đánh quái nhận được <color=yellow>2<color> lần kinh nghiệm, đồng thời may mắn tăng <color=yellow>10<color>!", nChooseTime);
nRemainTime = nRemainTime - nChooseTime;
local nRemainExp = self:GetExpLimit();
local nXiuWeiLimit = self:GetXiuWeiLimit();
local nRemainLimitExp = me.GetTask(self.TASKGROUP, self.TASKEXPLIMIT_ID);
if (not nExpSkillLevel or nExpSkillLevel <= 0) then
nRemainLimitExp = 0;
end
local nAddExp = nRemainExp * nChooseTime + nRemainLimitExp;
nNewExpTime = nChooseTime * 18 * 3600 + nExpEndTime;
nNewLunckyTime = nChooseTime * 18 * 3600 + nLuckyEndTime;
nNewXiuWeiTime = nChooseTime * 18 * 3600 + nXiuEndTime;

if (nRemainExp * self.LIMIT_ADDTIME < nAddExp) then
Dialog:Say("Kinh nghiệm tích lũy của Tu Luyện Châu vượt hơn mức tối đa so với kinh nghiệm hiện tại, không thể mở nữa!");
return 0;
end


local nRemainXiuwei = me.GetTask(self.TASKGROUP, self.TASKXIUWEI_ID);
if (not nXiuSkillLevel or nXiuSkillLevel <= 0) then
nRemainXiuwei = 0;
end
local nAddXiuWei = nXiuWeiLimit * nChooseTime + nRemainXiuwei;
me.AddSkillState(self.SKILL_ID_EXP, self.SKILL_ID_EXP_LEVEL, 1, nNewExpTime, 1);
me.SetTask(self.TASKGROUP, self.TASKEXPLIMIT_ID, nAddExp);
me.AddSkillState(self.SKILL_ID_LUCKY, 2, 1, nNewLunckyTime, 1);
me.AddSkillState(self.SKILL_ID_XIUWEI, 1, 1, nNewXiuWeiTime, 1);
me.SetTask(self.TASKGROUP, self.TASKXIUWEI_ID, nAddXiuWei);
me.SetTask(self.TASKGROUP, self.TASKREMAINTIME_ID, nRemainTime * 10);

Stats.Activity:AddCount(me, Stats.TASK_COUNT_XIULIANZHU, nChooseTime * 10);
end
Dialog:Say(szMsg);
end

function tbItem:ExpExhausted()
local nExpSkillLevel, nExpStateType, nExpEndTime, bExpIsNoClearOnDeath = me.GetSkillState(self.SKILL_ID_EXP);
local nXiuSkillLevel, nXiuStateType, nXiuEndTime, bXiuIsNoClearOnDeath = me.GetSkillState(self.SKILL_ID_XIUWEI);
if (nExpSkillLevel < 0) then
return;
end
me.RemoveSkillState(self.SKILL_ID_EXP);
if (nXiuSkillLevel > 0) then
me.Msg("Bạn đạt đến giới hạn kinh nghiệm tu luyện, đánh quái sẽ không được kinh nghiệm x2, nhưng vẫn được tu luyện mật tịch và tăng 10 điểm may mắn.");
else
me.Msg("Bạn đạt đến giới hạn kinh nghiệm tu luyện, đánh quái sẽ không được kinh nghiệm x2, nhưng vẫn nhận được mật tịch và tăng 10 điểm may mắn.");
end
end

function tbItem:XiuWeiExhausted()
local nXiuSkillLevel, nXiuStateType, nXiuEndTime, bXiuIsNoClearOnDeath = me.GetSkillState(self.SKILL_ID_XIUWEI);
local nExpSkillLevel, nExpStateType, nExpEndTime, bExpIsNoClearOnDeath = me.GetSkillState(self.SKILL_ID_EXP);
if (nXiuSkillLevel < 0) then
return;
end
me.RemoveSkillState(self.SKILL_ID_XIUWEI);
if (nExpSkillLevel > 0) then
me.Msg("Bạn đạt đến giới hạn tu luyện mật tịch, độ tu luyện mật tịch kỹ năng sẽ không tăng, nhưng vẫn nhận được kinh nghiệm đánh quái x2 và tăng 10 điểm may mắn.");
else
me.Msg("Bạn đạt đến giới hạn tu luyện mật tịch, độ tu luyện mật tịch kỹ năng sẽ không tăng, nhưng vẫn nhận được kinh nghiệm đánh quái x2 và tăng 10 điểm may mắn.");
end
end

function tbItem:CheckFactionTask(nIndex)
if (20 >= me.nLevel or 50 <= me.nLevel) then
Dialog:Say("Hiện giờ cấp của bạn không thể nhận nhiệm nhiệm vụ đánh quái của môn phái!");
return 0;
end

if (me.nFaction <= 0) then
Dialog:Say("Bạn chưa gia nhập môn phái, không thể nhận nhiệm vụ môn phái");
end

local nNowIndex = math.floor(me.nLevel / 10);
local nMod = math.fmod(me.nLevel, 10);

if (nMod == 0) then
return 0;
end

local tbTaskList = self.tbPlayerTaskId[nNowIndex];
if (not tbTaskList) then
Dialog:Say("Nhiệm vụ môn phái của cấp hiện tại không tồn tại!");
return 0;
end

local tbOpt = {};
for i, tbTask in ipairs(tbTaskList) do
if (tbTask[1] and tbTask[2]) then
if (Task:HaveDoneSubTask(me, tbTask[1], tbTask[2]) == 0 and Task.tbTaskDatas[tbTask[1]]) then
local szTaskName = Task.tbTaskDatas[tbTask[1]].szName;
local tbReferData = Task.tbReferDatas[tbTask[2]];
if (tbReferData) then
local tbVisable = tbReferData.tbVisable;
local bOK = Lib:DoTestFuncs(tbVisable);
if (bOK) then
local tbSubData = Task.tbSubDatas[tbReferData.nSubTaskId];
if (tbSubData) then
local szMsg = "";
if (tbSubData.tbAttribute.tbDialog.Start) then
if (tbSubData.tbAttribute.tbDialog.Start.szMsg) then
szMsg = tbSubData.tbAttribute.tbDialog.Start.szMsg;
else
szMsg = tbSubData.tbAttribute.tbDialog.Start.tbSetpMsg[1];
end
end
tbOpt[#tbOpt + 1] = {szTaskName, TaskAct.TalkInDark, TaskAct, szMsg, Task.AskAccept, Task, tbTask[1], tbTask[2]};
end
end
end
end
end
end
tbOpt[#tbOpt + 1] = {"Để ta suy nghĩ đã"};
Dialog:Say(string.format("Danh sách nhiệm vụ môn phái %d: ", nNowIndex * 10), tbOpt);
end

function tbItem:GetExpLimit()
local nExpLimit = 0;
local nLevel = me.nLevel;
local nIndex = 0;
if (nLevel < self.MIN_PLAYER_LEVEL) then
return nExpLimit;
elseif (nLevel > 150) then
nIndex = 15;
else
nIndex = math.floor(nLevel / 10);
end
nExpLimit = self.tbExpLimit[nIndex] * self.EXPTIMES;
return nExpLimit;
end

function tbItem:GetXiuWeiLimit()
local nXiuLimit = 0;
local nLevel = me.nLevel;
local nIndex = 0;
if (nLevel < self.MIN_PLAYER_LEVEL) then
return nXiuLimit;
elseif (nLevel > 100) then
nIndex = 10;
else
nIndex = math.floor(nLevel / 10);
end
nXiuLimit = self.tbXiuWeiLimit[nIndex] * 2;
return nXiuLimit;
end

function tbItem:Update()
local nLastTime = me.GetTask(self.TASKGROUP, self.TASKLASTTIME_ID);
local nNowTime = GetTime();
local nDays = self:CalculateDay(nLastTime, nNowTime);
local nRemainTime = nDays * 1.5 + self:GetRemainTime();
if (nRemainTime < 0.1) then
nRemainTime = 0;
end
if (nRemainTime > self.MAX_REMAINTIME) then
nRemainTime = self.MAX_REMAINTIME;
end

if (nLastTime <= 0) then
nRemainTime = 1.5;
end

me.SetTask(self.TASKGROUP, self.TASKLASTTIME_ID, nNowTime);
me.SetTask(self.TASKGROUP, self.TASKREMAINTIME_ID, nRemainTime * 10); -- Сʱʮ
end

function tbItem:CalculateDay(nLastTime, nNowTime)
local nLastDay = Lib:GetLocalDay(nLastTime);
local nNowDay = Lib:GetLocalDay(nNowTime);
local nDays = nNowDay - nLastDay;
if (nDays < 0) then
nDays = 0;
end
return nDays;
end

function tbItem:GetTip(nState)
local nLuckySkillLevel, nLuckyStateType, nLuckyEndTime, bLuckyIsNoClearOnDeath = me.GetSkillState(self.SKILL_ID_LUCKY);
local szTip = "";

local nLastTime = me.GetTask(self.TASKGROUP, self.TASKLASTTIME_ID);
local nNowTime = GetTime();
local nDays = self:CalculateDay(nLastTime, nNowTime);
local nRemainTime = nDays * 1.5 + me.GetTask(self.TASKGROUP, self.TASKREMAINTIME_ID) / 10;
if (nRemainTime < 0.1) then
nRemainTime = 0;
end
if (nRemainTime > self.MAX_REMAINTIME) then
nRemainTime = self.MAX_REMAINTIME;
end

local nMiniter = (nRemainTime % 1) * 60;
local szRemainMsg = string.format("Thời gian tu luyện tích lũy hiện tại: <color=green>%d<color><color=yellow> giờ <color><color=green>%d<color><color=yellow> phút<color>,\n", nRemainTime, nMiniter);


if (not nLuckyEndTime) then
nLuckyEndTime = 0;
szTip = szTip..string.format(szRemainMsg .. "<color=0x8080ff>Nhấn chuột phải dùng<color>.");
else
szTip = szTip..string.format(szRemainMsg .. "<color=0x8080ff> đã trong trạng thái tu luyện<color>.");
end
return szTip;
end

function tbItem:GetXiuLianZhuInfo()
local pPlayer = me;
self:Update();
local nCount = pPlayer.GetItemCountInBags(18,1,16,1);
local nRemainTime = pPlayer.GetTask(self.TASKGROUP, self.TASKREMAINTIME_ID) / 10;
local nLuckySkillLevel, nLuckyStateType, nLuckyEndTime, bLuckyIsNoClearOnDeath = pPlayer.GetSkillState(self.SKILL_ID_LUCKY);
if (0 >= nLuckySkillLevel) then
nLuckyEndTime = 0;
end
return nCount, nRemainTime, nLuckyEndTime;
end

function tbItem:AddRemainTime(nMin)
local nHour = self:GetReTime() + string.format("%0.1f",nMin/60);
if nHour > self.MAX_REMAINTIME then
nHour = self.MAX_REMAINTIME
end
me.SetTask(self.TASKGROUP, self.TASKREMAINTIME_ID, (nHour*10));
end

function tbItem:CheckAddableCommon(bAdd, ...)

-- add private condition
if arg[1] ~= nil then

-- private callback
local bOk = arg[1](unpack(arg, 2));

if bOk ~= 1 then
return 0;
end
end

-- check
if (not bAdd) or (bAdd ~= 1) then

-- get remain extra time
local nExtraTime = me.GetTask(self.TASKGROUP, self.TASK_XIULIAN_ADDTIME);

if nExtraTime <= 0 then
return 0;
end

return 1;

-- add
elseif (bAdd == 1) then

-- get remain xiulian time
local nRemainTime = self:GetRemainTime();

-- get remain extra time
local nExtraTime = me.GetTask(self.TASKGROUP, self.TASK_XIULIAN_ADDTIME) / 10;

-- full time
if (nRemainTime >= self.MAX_REMAINTIME) then
Dialog:Say(string.format("Thời gian tu luyện đã đủ, không thể nhận thời gian tu luyện bổ sung.\n\nThời gian tu luyện bổ sung: <color=yellow>%s giờ<color>", nExtraTime));
return 0;
end

-- free time
local nFreeTime = self.MAX_REMAINTIME - nRemainTime;

if (nFreeTime > nExtraTime) then
nFreeTime = nExtraTime;
end

-- add minute
self:AddRemainTime(nFreeTime * 60);

-- dec extra time
nExtraTime = nExtraTime - nFreeTime;

-- save task
me.SetTask(self.TASKGROUP, self.TASK_XIULIAN_ADDTIME, nExtraTime * 10);

Dialog:Say("Thời gian tu luyện của bạn đã tăng <color=yellow>" .. nFreeTime .. "<color> giờ, thời gian tu luyện bổ sung: <color=yellow>" .. nExtraTime .. "<color> giờ.");
end
end

function tbItem:CheckAddable(bAdd)
local nBufLevel = me.GetSkillState(881);
local nCurDate = tonumber(os.date("%Y%m%d", GetTime()));
local nDate = me.GetTask(2038, 4)
if nBufLevel > 0 and nDate ~= nCurDate then
if bAdd == 1 then
if self:GetRemainTime() == 14 then
Dialog:Say("Thời gian tu luyện của bạn đã đầy, không thể nhận thời gian tu luyện thêm.")
return 0;
end
self:AddRemainTime(30);
me.SetTask(2038, 4, nCurDate);
Dialog:Say("Thời gian tu luyện của bạn đã tăng <color=green>30 phút<color>");
end
return 1;
else
if bAdd == 1 then
Dialog:Say("Bạn đã dùng hết thời gian tu luyện")
end
return 0;
end
end

function tbItem:CheckAddableCoZone(bAdd)
local nCurDate = tonumber(os.date("%Y%m%d", GetTime()));
local nDate = me.GetTask(2065, 1)
if GetTime() < KGblTask.SCGetDbTaskInt(DBTASK_COZONE_TIME) + 7 * 24 * 60 * 60 and nDate ~= nCurDate then
if bAdd == 1 then
if self:GetRemainTime() == 14 then
Dialog:Say("Thời gian tu luyện của bạn đã đầy, không thể nhận thời gian tu luyện thêm.")
return 0;
end
self:AddRemainTime(120);
me.SetTask(2065, 1, nCurDate);
Dialog:Say("Thời gian tu luyện của bạn đã tăng <color=green>2 giờ<color>");
end
return 1;
else
if bAdd == 1 then
Dialog:Say("Bạn đã dùng hết thời gian tu luyện")
end
return 0;
end
end

function tbItem:CheckAddableSubPlayer(bAdd)
if (me.nLevel < 50) then
return 0;
end
if (me.IsSubPlayer() == 0 and 1 == me.GetTask(self.TASK_GROUP_COZONE, self.TASK_GETEXTIME_FLAG)) then
me.SetTask(self.TASK_GROUP_COZONE, self.TASK_GETEXTIME_FLAG, 0);
end
if (not bAdd) then
if (me.IsSubPlayer() == 1 and 0 == me.GetTask(self.TASK_GROUP_COZONE, self.TASK_GETEXTIME_FLAG)) then
local nExtraTime = math.floor(KGblTask.SCGetDbTaskInt(DBTASK_SERVER_S TARTTIME_DISTANCE) / (24 * 3600)) * 0.5 * 10;
me.SetTask(self.TASK_GROUP_COZONE, self.TASK_GETEXTIME_FLAG, 1);
if (nExtraTime >= 0) then
me.SetTask(self.TASK_GROUP_COZONE, self.TASK_SUBPLAYER_EXTIME, nExtraTime);
end
end
if (me.GetTask(self.TASK_GROUP_COZONE, self.TASK_SUBPLAYER_EXTIME) > 0) then
return 1;
else
return 0;
end
end
if (bAdd == 1 and me.GetTask(self.TASK_GROUP_COZONE, self.TASK_SUBPLAYER_EXTIME) >= 0) then
local nExtraTime = me.GetTask(self.TASK_GROUP_COZONE, self.TASK_SUBPLAYER_EXTIME) / 10;
local nStillHaveTime = self:GetRemainTime();
local nNeedTime = 14 - nStillHaveTime;
if (nExtraTime == 0) then
Dialog:Say("Thời gian tu luyện thêm đã hết, không thể bổ sung.");
return 0;
end
if (nStillHaveTime == 14) then
Dialog:Say("Thời gian tu luyện đã đủ, không cần bổ sung.");
return 0;
end
if (nExtraTime >= 0 and nExtraTime < nNeedTime) then
nNeedTime = nExtraTime;
end
self:AddRemainTime(nExtraTime * 60);
nExtraTime = nExtraTime - nNeedTime;
if (nExtraTime < 0) then
nExtraTime = 0;
end
me.SetTask(self.TASK_GROUP_COZONE, self.TASK_SUBPLAYER_EXTIME, nExtraTime * 10);
Dialog:Say("Đã bổ sung thời gian tu luyện <color=yellow>" .. nNeedTime .. "<color> giờ, thời gian tu luyện còn <color=yellow>" .. nExtraTime .. "<color> giờ.");
return 1;
else
return 0;
end
end

function tbItem:CheckOldPCallBack(bAdd)
if ((not bAdd) or (bAdd ~= 1)) then
if EventManager.ExEvent.tbPlayerCallBack:IsOpen(me, 3) == 1 and
me.GetTask(self.TASKGROUP, self.TASKCANGETEXTIME_ID) == 0 then
local nCanAddTime = me.GetTask(self.TASKGROUP, self.TASKOLDPRTIME_ID);
if (0 == nCanAddTime and (0 == me.GetTask(self.TASKGROUP, self.TASKCANGETEXTIME_ID))) then
local nLeaveDay = EventManager.ExEvent.tbPlayerCallBack:GetLeaveDay( me);
nCanAddTime = nLeaveDay * 0.5 * 10;
me.SetTask(self.TASKGROUP, self.TASKOLDPRTIME_ID, nCanAddTime);
me.SetTask(self.TASKGROUP, self.TASKCANGETEXTIME_ID, 1);
end
return 1;
end

if me.GetTask(self.TASKGROUP, self.TASKCANGETEXTIME_ID) == 1 and me.GetTask(self.TASKGROUP, self.TASKOLDPRTIME_ID) > 0 then
return 1;
end

return 0;
elseif (bAdd == 1) then
local nRemainTime = self:GetReTime();
local nCanAddTime = me.GetTask(self.TASKGROUP, self.TASKOLDPRTIME_ID) / 10;
if (nRemainTime >= self.MAX_REMAINTIME) then
Dialog:Say(string.format("Thời gian tu luyện của bạn đã đầy, không cần thêm.\n\n<color=yellow>Thời gia tu luyện thêm còn: %s giờ<color>", nCanAddTime));
return 0;
end

local nNeedTime = (self.MAX_REMAINTIME - nRemainTime)
if (nNeedTime > nCanAddTime) then
nNeedTime = nCanAddTime;
end
self:AddRemainTime(nNeedTime * 60);
nCanAddTime = nCanAddTime - nNeedTime;
me.SetTask(self.TASKGROUP, self.TASKOLDPRTIME_ID, nCanAddTime * 10);
Dialog:Say("Thời gian tu luyện của bạn đã tăng <color=yellow>" .. nNeedTime .. "<color> giờ, thời gian tu luyện có thể nhận thêm: <color=yellow>" .. nCanAddTime .. "<color> giờ.");
end
end

function tbItem:CheckAddablePreMonth(bAdd)
local nCurDate = tonumber(GetLocalDate("%y%m%d"));
local szMsg = string.format(
[[%s tích lũy %s đạt <color=red>%s<color>, có thể nhận được những ưu đãi sau:
<color=yellow>
Thêm một lần chúc phúc mỗi ngày <color>
(Tự nhận)
<color=yellow>
Thêm 30 phút x2 kinh nghiệm mỗi ngày <color>
(Nhận từ Tu Luyện Châu)
<color=yellow>
1 Vô Hạn Truyền Tống Phù (1 tháng)<color>
(Nhanh chóng nhận được khi có đặc quyền nạp thẻ)<color=yellow>
<color=yellow>
1 Càn Khôn Phù (10 lần)<color>
(Nhanh chóng nhận được khi có đặc quyền nạp thẻ)
<color=yellow>
Mỗi tuần nhận 20 điểm Uy danh giang hồ<color>
(Đạt cấp 60, %s đạt %s, mỗi tuần đến chỗ Lễ Quan nhận 10 điểm Uy danh giang hồ. %s đạt %s, mỗi tuần đến chỗ Lễ Quan nhận 20 điểm Uy danh giang hồ)
]],IVER_g_szPayMonth, IVER_g_szPayName, IVER_g_szPayLevel2, IVER_g_szPayName, IVER_g_szPayLevel1, IVER_g_szPayName, IVER_g_szPayLevel2
);
if me.GetTask(2038, 6) < nCurDate then
if bAdd == 1 then
if me.GetExtMonthPay() < IVER_g_nPayLevel2 then
Dialog:Say(string.format("Tháng này nhân vật %s không đủ %s, ", IVER_g_szPayName, IVER_g_szPayLevel2)..szMsg)
return 0;
end
if self:GetRemainTime() == 14 then
Dialog:Say("Thời gian tu luyện của bạn đã đầy, không thể nhận thời gian tu luyện thêm.")
return 0;
end
self:AddRemainTime(30);
me.SetTask(2038, 6, nCurDate);
Dialog:Say("Thời gian tu luyện tăng <color=green>30 phút<color>\n\n"..szMsg);
me.Msg("Thời gian tu luyện của bạn đã tăng <color=green>30 phút<color>");
end
return 1;
else
if bAdd == 1 then
Dialog:Say("Ngươi đã nhận thêm thời gian tu luyện ngày hôm nay\n\n"..szMsg);
end
return 0;
end
end
function tbItem:Init()
if (MODULE_GAMESERVER) then
PlayerEvent:RegisterGlobal("On4TimeExpExhausted", self.ExpExhausted, self);
PlayerEvent:RegisterGlobal("OnLevelUp", self.OnLevelUp, self);
PlayerEvent:RegisterGlobal("OnXiuWeiExhausted", self.XiuWeiExhausted, self);
end
end

function tbItem:WriteLog(...)
if (MODULE_GAMESERVER) then
Dbg:WriteLogEx(Dbg.LOG_INFO, "Item", "XiuLianZhu", unpack(arg));
end
end

tbItem:Init();

cuccut
26-03-12, 10:34 PM
bài viết quá hay, kiếm thế VNG sắp ra Tứ Tu, anh em ta "11 tu" :))
thanks bạn rất nhiều :-|

mmobank
29-03-12, 02:45 AM
bài viết quá hay, kiếm thế VNG sắp ra Tứ Tu, anh em ta "11 tu" :))
thanks bạn rất nhiều :-|

11 Tu xong Đồ dự phòng và vũ khí dự phòng chắc đầy rương đồ bạn ơi 8-}

kixboc
04-05-12, 04:48 PM
muốn tứ tu, ngũ tu,.... thập nhất tu, thì dùng lb nào

mrkutepro
05-05-12, 07:56 PM
xoắn cho hỏi mở sv bao lâu thì nó mới cho phụ tu. Mình muốn chỉnh thời gian cho phụ tu này xuống thấp nhất, 1 ngày sau mở sv có thể phụ tu luôn

vipbk
07-05-12, 05:50 PM
xoắn cho hỏi mở sv bao lâu thì nó mới cho phụ tu. Mình muốn chỉnh thời gian cho phụ tu này xuống thấp nhất, 1 ngày sau mở sv có thể phụ tu luôn

mở sv là phụ tu được ngay, miễn là đủ điều kiện

mrkutepro
10-05-12, 09:08 PM
mở sv là phụ tu được ngay, miễn là đủ điều kiện

Mà nói thật mình cũng chẳng nhớ đk để phụ tu nữa

thanhnga1505
11-05-12, 06:50 PM
bac xoan ơi, bác gửi luôn cái file phụ tu cho em với

vipbk
25-05-12, 04:04 PM
Mà nói thật mình cũng chẳng nhớ đk để phụ tu nữa

vào phái và đạt cấp 100 là đủ điều kiện :D

thanhbeo8
15-06-12, 04:36 PM
mình đã đưa time đổi phái về 1s nhưng khi vào game nó không cho sài tu luyện châu lun(trước r click là đc còn bây giờ thì không)

vipbk
15-06-12, 05:00 PM
mình đã đưa time đổi phái về 1s nhưng khi vào game nó không cho sài tu luyện châu lun(trước r click là đc còn bây giờ thì không)

1s không được đâu bạn, thời gian chuyển từ phái này sang phái khác cũng mất 2-3 giây rồi =))
Server xaophayxoan mặc định là 60 giây (1 phút)
Nhớ chỉnh sửa = notepad++

rocklamdat
08-07-12, 01:42 PM
Faction.OPEN_DUOXIU = 1;
Faction.SWITCH_FACTION_CD = 60; -- лCDʱ䣬λ
Faction.SWITCH_FACTION_BUF_ID = 897;
Faction.MAX_USED_FACTION = 11; --
Faction.MAX_MODIFY_TIME = 3;

sao không phụ tu được các phái khác chỉ đc 2 phái thui ai chỉ giùm mình

vipbk
08-07-12, 01:56 PM
chỉnh xong restart server .........