PDA

View Full Version : [KT] Xin hỏi về cách thêm một món đồ nhất định khi giết quái ?



huylouis1996
08-10-12, 01:59 AM
function BaiHuTang:OnDeath_Boss(pNpc)
local pKillerPlayer = pNpc.GetPlayer();
if (pKillerPlayer) then
self:AddRepute(pKillerPlayer, 10);
--self:AwardWeiWang(pKillerPlayer, 2, 10);
self:AwardXinDe(pKillerPlayer, 100000);

local nMapId = pKillerPlayer.nMapId
local nBaiHuLevel = BaiHuTang:GetLevelByMapId(nMapId);
local nFreeCount, tbFunExecute = SpecialEvent.ExtendAward:DoCheck("BaiHuTangBoss", pKillerPlayer, nBaiHuLevel, BaiHuTang:GetFloor(nMapId));
SpecialEvent.ExtendAward:DoExecute(tbFunExecute);

local nTeamId = pKillerPlayer.nTeamId;
if (0 == nTeamId) then
return;
end
local tbPlayerId, nMemberCount = KTeam.GetTeamMemberList(nTeamId);
for i, nPlayerId in pairs(tbPlayerId) do
local pPlayer = KPlayer.GetPlayerObjById(nPlayerId);
if (pPlayer and pPlayer.nId ~= pKillerPlayer.nId and pPlayer.nMapId == him.nMapId) then
--self:AwardWeiWang(pPlayer, 2);
self:AwardXinDe(pPlayer, 100000);
self:AddRepute(pPlayer, 10);
local nFreeCount, tbFunExecute = SpecialEvent.ExtendAward:DoCheck("BaiHuTangBoss", pPlayer, nBaiHuLevel, BaiHuTang:GetFloor(nMapId));
SpecialEvent.ExtendAward:DoExecute(tbFunExecute);
end
end
end
end

Đây là file BHD

Mình có thử thêm vào đoạn code trong script phần OnDeath như VipBK nói nhưng khi đánh chết 3 quái của 3 ải BHD thì mình chẳng thấy xuất hiện vật phẩm nào xuất hiện trong người .

Bác nào pro chỉ em là thêm đoạn code rơi đồ nhất định với số lượng nhất định khi đánh chết quái ở dòng nào đc k ạ :D

Em cảm ơn nhiều

Sesshomaru
08-10-12, 02:06 AM
rơi vật phẩm boss chỉnh trong setting

setting\npc\droprate\baihutang

Bạn chỉnh trong script nó ko rớt là đúng rồi.ko rớt bất kì vật phẩm nào luôn ý chứ:))

vipbk
08-10-12, 06:37 PM
ví dụ mình làm ok:

boss Lý Thanh - tần lăng 3

file script của nó: script\boss\qinshihuang\npc\boss_qinshihuang.lua



local tbJingying = Npc:GetClass("boss_qinjingying");
function tbJingying:OnDeath(pNpcKiller)

Boss.tbUniqueBossCallOut[him.nTemplateId] = nil;

local pPlayer = pNpcKiller.GetPlayer();
if not pPlayer then
return 0;
end

pPlayer.AddItem(18,1,114,9);
pPlayer.AddItem(18,1,114,9);
...


ở trên mình muốn sau khi kill boss nhận được 2 viên Huyền Tinh cấp 9 khóa

DEMO:

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

Như hình trên ta thấy ngoài vật phẩm nhận được (random) còn có 2 HT 9 (chắc chắn 100%)

huylouis1996
08-10-12, 10:59 PM
vậy bạn sửa giúp mình cái code trên để nó rớt vật phẩm ngoài vật phẩm random ra đc k VipBK

vipbk
09-10-12, 08:28 PM
mở file: gameserver\script\pvp\baihutang_gs.lua


function BaiHuTang:OnDeath_Boss(pNpc)
local pKillerPlayer = pNpc.GetPlayer();
if (pKillerPlayer) then
self:AddRepute(pKillerPlayer, 10);
--self:AwardWeiWang(pKillerPlayer, 2, 10);
self:AwardXinDe(pKillerPlayer, 100000);

local nMapId = pKillerPlayer.nMapId
local nBaiHuLevel = BaiHuTang:GetLevelByMapId(nMapId);
local nFreeCount, tbFunExecute = SpecialEvent.ExtendAward:DoCheck("BaiHuTangBoss", pKillerPlayer, nBaiHuLevel, BaiHuTang:GetFloor(nMapId));
SpecialEvent.ExtendAward:DoExecute(tbFunExecute);

local nTeamId = pKillerPlayer.nTeamId;
if (0 == nTeamId) then
return;
end
local tbPlayerId, nMemberCount = KTeam.GetTeamMemberList(nTeamId);
for i, nPlayerId in pairs(tbPlayerId) do
local pPlayer = KPlayer.GetPlayerObjById(nPlayerId);
if (pPlayer and pPlayer.nId ~= pKillerPlayer.nId and pPlayer.nMapId == him.nMapId) then
--self:AwardWeiWang(pPlayer, 2);
self:AwardXinDe(pPlayer, 100000);
self:AddRepute(pPlayer, 10);
local nFreeCount, tbFunExecute = SpecialEvent.ExtendAward:DoCheck("BaiHuTangBoss", pPlayer, nBaiHuLevel, BaiHuTang:GetFloor(nMapId));
SpecialEvent.ExtendAward:DoExecute(tbFunExecute);

pPlayer.AddItem(...);


end
end
end
end

kakakura
26-10-12, 09:57 AM
mở file: gameserver\script\pvp\baihutang_gs.lua


function BaiHuTang:OnDeath_Boss(pNpc)
local pKillerPlayer = pNpc.GetPlayer();
if (pKillerPlayer) then
self:AddRepute(pKillerPlayer, 10);
--self:AwardWeiWang(pKillerPlayer, 2, 10);
self:AwardXinDe(pKillerPlayer, 100000);

local nMapId = pKillerPlayer.nMapId
local nBaiHuLevel = BaiHuTang:GetLevelByMapId(nMapId);
local nFreeCount, tbFunExecute = SpecialEvent.ExtendAward:DoCheck("BaiHuTangBoss", pKillerPlayer, nBaiHuLevel, BaiHuTang:GetFloor(nMapId));
SpecialEvent.ExtendAward:DoExecute(tbFunExecute);

local nTeamId = pKillerPlayer.nTeamId;
if (0 == nTeamId) then
return;
end
local tbPlayerId, nMemberCount = KTeam.GetTeamMemberList(nTeamId);
for i, nPlayerId in pairs(tbPlayerId) do
local pPlayer = KPlayer.GetPlayerObjById(nPlayerId);
if (pPlayer and pPlayer.nId ~= pKillerPlayer.nId and pPlayer.nMapId == him.nMapId) then
--self:AwardWeiWang(pPlayer, 2);
self:AwardXinDe(pPlayer, 100000);
self:AddRepute(pPlayer, 10);
local nFreeCount, tbFunExecute = SpecialEvent.ExtendAward:DoCheck("BaiHuTangBoss", pPlayer, nBaiHuLevel, BaiHuTang:GetFloor(nMapId));
SpecialEvent.ExtendAward:DoExecute(tbFunExecute);

pPlayer.AddItem(...);


end
end
end
end

Sao mình làm như vậy nó báo lỗi, đánh xong không nhận được gì, àh cho mình hỏi muốn chỉnh nhận cố định khi làm hoàn thành TDC thì chỉnh chổ nào vậy ?

vipbk
26-10-12, 02:52 PM
Sao mình làm như vậy nó báo lỗi, đánh xong không nhận được gì, àh cho mình hỏi muốn chỉnh nhận cố định khi làm hoàn thành TDC thì chỉnh chổ nào vậy ?

- mình vẫn nhận bình thường, bạn xem lại cách làm nhé

- TDC: tìm file lua của nó rồi làm tương tự

kakakura
09-11-12, 10:11 PM
TDC tìm không thấy nhĩ, mò cả buổi chả thấy đâu,

Còn BHD chắc đúng không vậy mình làm như thế này :

function BaiHuTang:OnDeath_Boss(pNpc)
local pKillerPlayer = pNpc.GetPlayer();
if (pKillerPlayer) then
.....
....
local nFreeCount, tbFunExecute = SpecialEvent.ExtendAward:DoCheck("BaiHuTangBoss", pPlayer, nBaiHuLevel, BaiHuTang:GetFloor(nMapId));
SpecialEvent.ExtendAward:DoExecute(tbFunExecute);
pPlayer.AddItem(18,1,114,12); -- them day
pPlayer.AddItem(18,1,114,12); -- them day
end
end
end
end

kiemphap
11-11-12, 06:26 PM
Vip ơi hướng dẫn mình cụ thể cách thêm item (vài item khác nhau theo từng lần đánh) nhận được khi đánh chết HKL, Lam KL, Hắc KL với nhé. Thanks nhiều \m/

vipbk
11-11-12, 07:17 PM
Vip ơi hướng dẫn mình cụ thể cách thêm item (vài item khác nhau theo từng lần đánh) nhận được khi đánh chết HKL, Lam KL, Hắc KL với nhé. Thanks nhiều \m/

mở file lua của nó rồi làm hoàn toàn tương tự như trên

kiemphap
12-11-12, 10:30 AM
Hay mình lấy file đó up lên VIP làm giúp mình với nhé? Mình mới tập làm nên còn mù mờ quá ~:>

thanhdinh10
15-07-13, 03:37 PM
mở file: gameserver\script\pvp\baihutang_gs.lua


function BaiHuTang:OnDeath_Boss(pNpc)
local pKillerPlayer = pNpc.GetPlayer();
if (pKillerPlayer) then
self:AddRepute(pKillerPlayer, 10);
--self:AwardWeiWang(pKillerPlayer, 2, 10);
self:AwardXinDe(pKillerPlayer, 100000);

local nMapId = pKillerPlayer.nMapId
local nBaiHuLevel = BaiHuTang:GetLevelByMapId(nMapId);
local nFreeCount, tbFunExecute = SpecialEvent.ExtendAward:DoCheck("BaiHuTangBoss", pKillerPlayer, nBaiHuLevel, BaiHuTang:GetFloor(nMapId));
SpecialEvent.ExtendAward:DoExecute(tbFunExecute);

local nTeamId = pKillerPlayer.nTeamId;
if (0 == nTeamId) then
return;
end
local tbPlayerId, nMemberCount = KTeam.GetTeamMemberList(nTeamId);
for i, nPlayerId in pairs(tbPlayerId) do
local pPlayer = KPlayer.GetPlayerObjById(nPlayerId);
if (pPlayer and pPlayer.nId ~= pKillerPlayer.nId and pPlayer.nMapId == him.nMapId) then
--self:AwardWeiWang(pPlayer, 2);
self:AwardXinDe(pPlayer, 100000);
self:AddRepute(pPlayer, 10);
local nFreeCount, tbFunExecute = SpecialEvent.ExtendAward:DoCheck("BaiHuTangBoss", pPlayer, nBaiHuLevel, BaiHuTang:GetFloor(nMapId));
SpecialEvent.ExtendAward:DoExecute(tbFunExecute);

pPlayer.AddItem(...);


end
end
end
end
Vấn đề đã lâu nhưng mình xin hỏi lại :)
Mình đã add item theo cách của Vipbk nhưng gặp 1 vấn đề đó là cứ qua 1 ải BHD là nhận được item mình đã add vào có cách nào để khi đi hết ải thứ 3 mới nhận được item ko ?
Nhờ mọi người chỉ giáo. Thank ! :)

mrkutepro
15-07-13, 04:30 PM
Vấn đề đã lâu nhưng mình xin hỏi lại :)
Mình đã add item theo cách của Vipbk nhưng gặp 1 vấn đề đó là cứ qua 1 ải BHD là nhận được item mình đã add vào có cách nào để khi đi hết ải thứ 3 mới nhận được item ko ?
Nhờ mọi người chỉ giáo. Thank ! :)

Gợi ý thôi nhé. Bạn có thể thêm 1 task bất kỳ, khi bắt đầu vào trận bạch hổ đường, set giá trị task về 0, khi nhân vật qua mỗi tầng tăng task lên 1, sau đó dùng hiểm kiểm tra giá trị task nếu >= 3 thì cho phép Add Item 8-x

thanhdinh10
15-07-13, 05:41 PM
Gợi ý thôi nhé. Bạn có thể thêm 1 task bất kỳ, khi bắt đầu vào trận bạch hổ đường, set giá trị task về 0, khi nhân vật qua mỗi tầng tăng task lên 1, sau đó dùng hiểm kiểm tra giá trị task nếu >= 3 thì cho phép Add Item 8-x

bạn gợi ý mình hiểu ý bạn nhưng với newbie như mình chưa hiểu gì về task cả, bạn có thể cho mình 1 đoạn code tương tự như thế để mình có thể dựa vào đó mà làm ko ? Thanks bạn rất nhiều :)

mrkutepro
15-07-13, 06:15 PM
bạn gợi ý mình hiểu ý bạn nhưng với newbie như mình chưa hiểu gì về task cả, bạn có thể cho mình 1 đoạn code tương tự như thế để mình có thể dựa vào đó mà làm ko ? Thanks bạn rất nhiều :)

Ok. mình sẽ hướng dẫn đơn giản hơn không dùng tast. Đúng theo yêu cầu của bạn qua 3 cửa mới nhận được thưởng

B1. Mở file này lên theo đường dẫn \script\pvp\baihutang_def.lua
B2. Tìm tới hàm có tên:
function BaiHuTang:OnPlayerTrap(nMapId)
B3. Tìm tới đoạn code này trong hàm trên:

if (nToMapId == 225 or nToMapId == 233 or nToMapId == 274 or nToMapId ==821) then
BaiHuTang:KickOutMission(me, nToMapId);
end

Sau đó thêm mắm muối vào tùy bạn. Ví dụ cho 1 cái túi phúc khi qua cửa tầng 3:


if (nToMapId == 225 or nToMapId == 233 or nToMapId == 274 or nToMapId ==821) then
BaiHuTang:KickOutMission(me, nToMapId);
me.AddItem(18,1,80,1); --TÚI PHÚC HOÀNG KIM
end

Không cần khai báo task

thanhdinh10
15-07-13, 07:41 PM
Ok. mình sẽ hướng dẫn đơn giản hơn không dùng tast. Đúng theo yêu cầu của bạn qua 3 cửa mới nhận được thưởng

B1. Mở file này lên theo đường dẫn \script\pvp\baihutang_def.lua
B2. Tìm tới hàm có tên:
function BaiHuTang:OnPlayerTrap(nMapId)
B3. Tìm tới đoạn code này trong hàm trên:

if (nToMapId == 225 or nToMapId == 233 or nToMapId == 274 or nToMapId ==821) then
BaiHuTang:KickOutMission(me, nToMapId);
end

Sau đó thêm mắm muối vào tùy bạn. Ví dụ cho 1 cái túi phúc khi qua cửa tầng 3:


if (nToMapId == 225 or nToMapId == 233 or nToMapId == 274 or nToMapId ==821) then
BaiHuTang:KickOutMission(me, nToMapId);
me.AddItem(18,1,80,1); --TÚI PHÚC HOÀNG KIM
end

Không cần khai báo task
Cảm ơn bạn rất nhiều ! mình đã làm được :)