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
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.