PDA

View Full Version : [KT] Xin hàm đếm lượng quái giết được



ducanh1010
10-06-24, 08:47 PM
Các cao nhân cho e xin hàm đếm số quái giết đc ở map train để tặng thưởngVí dụ : giết 100 quái dc thưởng 1000 đồng

anubisng
10-06-24, 10:58 PM
Các cao nhân cho e xin hàm đếm số quái giết đc ở map train để tặng thưởngVí dụ : giết 100 quái dc thưởng 1000 đồng

Dùng hàm settask của nhân vật mà đếm, chèn vào player.lua với điều kiện giết quái tại map hay check theo id npc đều dc cả

ducanh1010
13-06-24, 09:42 PM
Dùng hàm settask của nhân vật mà đếm, chèn vào player.lua với điều kiện giết quái tại map hay check theo id npc đều dc cả
cho e xin ví dụ minh họa 1 map bất kỳ dc k ạ . ví dụ map 115

satthupro95
19-06-24, 05:49 PM
Vào gameserver\script\player\player.lua tạo 1 cái function dạng:

-- TSK khai báo vào gameserver\setting\player\task_def.txt cột TASK_GROUP TASK_ID_FIRST TASK_ID_LAST dạng 2000 1 1
Player.AWARDKILLEDMONSTER_TSKGR = 2000;
Player.AWARDKILLEDMONSTER_TSKID_COUNT = 1;

Player.AWARDKILLEDMONSTER_TBMAPCANSETCOUNT = {115, 116, 117}; -- Khai báo ID Map đánh quái được tính thưởng
Player.AWARDKILLEDMONSTER_LISTAWARDBYCOUNTMONSTERK ILLED = {
-- Khai báo phần thưởng theo từng mốc dạng [Số quái diệt] = Số đồng nhận
[100] = 1000,
[500] = 5000,
[1000] = 10000,
};

function Player:AwardKillNPC_SetCount(pPlayer)
if pPlayer then
local nMapIdPlayer = pPlayer.nMapId;
local bCanSetCountKilledMonster = 0;
for i = 1, #Player.AWARDKILLEDMONSTER_TBMAPCANSETCOUNT then
if nMapIdPlayer == Player.AWARDKILLEDMONSTER_TBMAPCANSETCOUNT[i] then
bCanSetCountKilledMonster = 1;
break;
end
end

if bCanSetCountKilledMonster == 1 then
local nCountMonsterKilled = pPlayer.GetTask(Player.AWARDKILLEDMONSTER_TSKGR, Player.AWARDKILLEDMONSTER_TSKID_COUNT);
pPlayer.SetTask(Player.AWARDKILLEDMONSTER_TSKGR, Player.AWARDKILLEDMONSTER_TSKID_COUNT, nCountMonsterKilled + 1);
end
end
end

Tìm đến Player:_OnKillNpc() đưa hàm vừa viết vào
function Player:_OnKillNpc()
Player:AwardKillNPC_SetCount(me);
end

Về phần nhận thưởng, có thể gắn vào con NPC Lễ Quan chẳng hạn:
function tbLiGuan:ReceiveAwardKillMonsterByCount()
local nCountMonsterKilled = me.GetTask(Player.AWARDKILLEDMONSTER_TSKGR, Player.AWARDKILLEDMONSTER_TSKID_COUNT);
if nCountMonsterKilled < 1 then
Dialog:Say("Số quái tiêu diệt hiện tại đang là <color=red>"..nCountMonsterKilled.."<color>, không đủ điều kiện nhận thưởng");
return;
end

local szMsg = "Số quái tiêu diệt hiện tại đang là <color=yellow><color>, hạ gục càng nhiều phần thưởng càng lớn. Chọn phần thưởng muốn nhận:";
local tbOpt = {
{"Kết thúc đối thoại"};
};

local nMilesStoneByCountMonsterKilled = 0;
for nCountMonsterKilledCheck, tbRowData in pairs(Player.AWARDKILLEDMONSTER_LISTAWARDBYCOUNTMO NSTERKILLED) do
if nCountMonsterKilled >= nCountMonsterKilledCheck then
nMilesStoneByCountMonsterKilled = nCountMonsterKilledCheck;
end
end

if nMilesStoneByCountMonsterKilled > 0 then
local nCountAwardByCountMonsterKill = Player.AWARDKILLEDMONSTER_LISTAWARDBYCOUNTMONSTERK ILLED[nMilesStoneByCountMonsterKilled];
table.insert(tbOpt, 1, {"Thưởng hạ gục <color=yellow>"..nCountMonsterKilledCheck.." Quái<color>", self.ReceiveAwardKillMonsterByCount_Confirm, self, nCountAwardByCountMonsterKill});
end

Dialog:Say(szMsg, tbOpt);
end

function tbLiGuan:ReceiveAwardKillMonsterByCount_Confirm(nC ountAwardByCountMonsterKill)
if not nCountAwardByCountMonsterKill or nCountAwardByCountMonsterKill < 1 then
return;
end

local nCountMonsterKilled = me.GetTask(Player.AWARDKILLEDMONSTER_TSKGR, Player.AWARDKILLEDMONSTER_TSKID_COUNT);
if nCountMonsterKilled < 1 then
Dialog:Say("Số quái tiêu diệt hiện tại đang là <color=red>"..nCountMonsterKilled.."<color>, không đủ điều kiện nhận thưởng");
return;
end

me.AddJbCoin(nCountAwardByCountMonsterKill);
me.Msg("<color=yellow>Nhận thành công phần thưởng hạ gục <color=green>"..nCountMonsterKilled.."<color> là <color=green>"..nCountAwardByCountMonsterKill.." Đồng<color><color>");

-- Nhận xong thưởng set lại số quái đã hạ gục về 0
me.SetTask(Player.AWARDKILLEDMONSTER_TSKGR, Player.AWARDKILLEDMONSTER_TSKID_COUNT, 0);
end