PDA

View Full Version : [KT] Xin Cách Fix Lỗi Vô Lý Khi Add NPC



nhtlquan
06-02-15, 12:32 AM
<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>

Đây là hàm mình viết khi tiêu diệt boss thì sẽ Add tượng ở thành


function tbQinshihuang1Boss:OnDeath(pNpcKiller)

Boss.tbUniqueBossCallOut[him.nTemplateId] = nil;

Boss.Qinshihuang:ClearPassNpc();
Boss.Qinshihuang:ClearInfo();

local pPlayer = pNpcKiller.GetPlayer();

if not pPlayer then
return 0;
end

local nTeamId = pPlayer.nTeamId;
if nTeamId == 0 then
pPlayer.AddKinReputeEntry(5, "sieuboss");
else
local tbPlayerId, nMemberCount = KTeam.GetTeamMemberList(nTeamId);
for i, nPlayerId in pairs(tbPlayerId) do
local pTeamPlayer = KPlayer.GetPlayerObjById(nPlayerId);
if (pTeamPlayer and pTeamPlayer.nMapId == him.nMapId) then
pTeamPlayer.AddKinReputeEntry(5, "sieuboss");
end
end
end

KNpc.Add2(3622, 60, 0, 1734, 1686, 3277)-- Vẫn xuất hiện bình thường

if me.nSex == 0 then--Tạo Tượng
ClearMapNpcWithName(24, "Thiết Phù Thành Chủ");--Xóa NPC
local pNpc = KNpc.Add2(26012, 60, 0, 24, 1752, 3492) -- Báo Lỗi, NPC Add Không Xuất Hiện
local szTitle = "<color=red>Tượng Của <color=green>"..pPlayer.szName;
pNpc.SetTitle(szTitle);
else
ClearMapNpcWithName(24, "Thiết Phù Thành Chủ");--Xóa NPC
local pNpc = KNpc.Add2(26013, 60, 0, 24, 1752, 3492)
local szTitle = "<color=red>Tượng Của <color=green>"..pPlayer.szName;
pNpc.SetTitle(szTitle);
end



end;




Nhưng khi đặt


if me.nSex == 0 then--Tạo Tượng
ClearMapNpcWithName(24, "Thiết Phù Thành Chủ");--Xóa NPC
local pNpc = KNpc.Add2(26012, 60, 0, 24, 1752, 3492) --
local szTitle = "<color=red>Tượng Của <color=green>"..pPlayer.szName;
pNpc.SetTitle(szTitle);
else
ClearMapNpcWithName(24, "Thiết Phù Thành Chủ");--Xóa NPC
local pNpc = KNpc.Add2(26013, 60, 0, 24, 1752, 3492)
local szTitle = "<color=red>Tượng Của <color=green>"..pPlayer.szName;
pNpc.SetTitle(szTitle);
end[/COLOR]


vào thẻ GM và click thì NPC xuất hiện và không báo lỗi j

Tất cả các hàm


local pNpc = KNpc.Add2(x, y, 0, o, t, e) --

trong script đều bị lỗi tuơng tự

__Jie__
06-02-15, 06:36 AM
đổi me thành pPlayer thử nhé
chúc thành công

nhtlquan
06-02-15, 08:50 AM
đổi me thành pPlayer thử nhé
chúc thành công

Em đổi rồi khoing được bác ak.

nhtlquan
06-02-15, 10:02 AM
đổi me thành pPlayer thử nhé
chúc thành công

Mình đã tìm được lỗi, là do Map kill boss và map add NPC không cùng 1 GS. Nhưng đó là với kill boss, còn như đốt lửa trại thì có liên quan đến GS đâu nhi? Nó cũng bảo lỗi a nil value

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

vd_tt
06-02-15, 11:03 AM
Mình đã tìm được lỗi, là do Map kill boss và map add NPC không cùng 1 GS. Nhưng đó là với kill boss, còn như đốt lửa trại thì có liên quan đến GS đâu nhi? Nó cũng bảo lỗi a nil value

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

1. khai báo map cho script vd mapindex
2. dis game.exe là do res không đồng bộ, vào client sửa res npc là được

anhnhianh
06-02-15, 11:34 AM
Mình đã tìm được lỗi, là do Map kill boss và map add NPC không cùng 1 GS. Nhưng đó là với kill boss, còn như đốt lửa trại thì có liên quan đến GS đâu nhi? Nó cũng bảo lỗi a nil value

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

lỗi của bác lúc trước e cũng đã bị và e đã giải quyết đc là do lỗi res npc client và sever không đồng bộ :)

nhtlquan
06-02-15, 02:01 PM
1. khai báo map cho script vd mapindex
2. dis game.exe là do res không đồng bộ, vào client sửa res npc là được

Thank bạn. Lỗi 2 mình đã fixx được. Nhưng lỗi một thì mình k hiểu lắm. Bạn ns rõ hộ mình được k. Ví dụ lửa trại khi tiêu diệt bos thủ lĩnh

function tbGouhuoItem:CallGouhuoNpc(nX, nY, nExistentTime, nBaseMultip)
local tbNpc = Npc:GetClass("gouhuonpc");
local nMapIdx = SubWorldID2Idx(me.nMapId);
local pNpc = KNpc.Add(tbNpc.nNpcId, 1, -1, nMapIdx, nX, nY); -- 获得篝火Npc
tbNpc:InitGouHuo(pNpc.dwId, 1, nExistentTime, 5, 40, nBaseMultip, 1)
tbNpc:SetTeamId(pNpc.dwId, me.nTeamId)
tbNpc:StartNpcTimer(pNpc.dwId)

me.SendMsgToFriend("Hảo hữu [" ..me.szName.. "] đã đốt lửa trại.");
Player:SendMsgToKinOrTong(me, " đã dốt lửa trại.", 0);
self:ExEvent();
end


Nó báo lỗi "a nil value" pNpc

NhanVT
06-02-15, 02:36 PM
local pNpc = KNpc.Add(tbNpc.nNpcId, 1, -1, nMapIdx, nX, nY);
"a nil value" NPC chưa add =>
tbNpc.nNpcId = ?, NPC này có yêu cầu script ? -> nil?
nMapIdx =?, -> nil? hoặc giá trị không hợp lệ
local nMapIdx = SubWorldID2Idx(me.nMapId);
nX = ? -> nil? hay giá trị không hợp lệ
nY = ? -> nil? hoặc giá trị không hợp lệ

Mấy lỗi dạng này chỉ cần thêm vài dòng là có thể tìm được cách fix
function tbGouhuoItem:CallGouhuoNpc(nX, nY, nExistentTime, nBaseMultip)
local tbNpc = Npc:GetClass("gouhuonpc");
print(tostring(tbNpc))
print(tostring(tbNpc.nNpcId))
local nMapIdx = SubWorldID2Idx(me.nMapId);
print(tostring(nMapIdx))
print(tostring(nX))
print(tostring(nY))
local pNpc = KNpc.Add(tbNpc.nNpcId, 1, -1, nMapIdx, nX, nY); -- 获得篝火Npc
if pNpc then
tbNpc:InitGouHuo(pNpc.dwId, 1, nExistentTime, 5, 40, nBaseMultip, 1)
tbNpc:SetTeamId(pNpc.dwId, me.nTeamId)
tbNpc:StartNpcTimer(pNpc.dwId)

me.SendMsgToFriend("Hảo hữu [" ..me.szName.. "] đã đốt lửa trại.");
Player:SendMsgToKinOrTong(me, " đã dốt lửa trại.", 0);
self:ExEvent();
end
end

nhtlquan
06-02-15, 03:04 PM
local pNpc = KNpc.Add(tbNpc.nNpcId, 1, -1, nMapIdx, nX, nY);
"a nil value" NPC chưa add =>
tbNpc.nNpcId = ?, NPC này có yêu cầu script ? -> nil?
nMapIdx =?, -> nil? hoặc giá trị không hợp lệ
local nMapIdx = SubWorldID2Idx(me.nMapId);
nX = ? -> nil? hay giá trị không hợp lệ
nY = ? -> nil? hoặc giá trị không hợp lệ

Mấy lỗi dạng này chỉ cần thêm vài dòng là có thể tìm được cách fix
function tbGouhuoItem:CallGouhuoNpc(nX, nY, nExistentTime, nBaseMultip)
local tbNpc = Npc:GetClass("gouhuonpc");
print(tostring(tbNpc))
print(tostring(tbNpc.nNpcId))
local nMapIdx = SubWorldID2Idx(me.nMapId);
print(tostring(nMapIdx))
print(tostring(nX))
print(tostring(nY))
local pNpc = KNpc.Add(tbNpc.nNpcId, 1, -1, nMapIdx, nX, nY); -- 获得篝火Npc
if pNpc then
tbNpc:InitGouHuo(pNpc.dwId, 1, nExistentTime, 5, 40, nBaseMultip, 1)
tbNpc:SetTeamId(pNpc.dwId, me.nTeamId)
tbNpc:StartNpcTimer(pNpc.dwId)

me.SendMsgToFriend("Hảo hữu [" ..me.szName.. "] đã đốt lửa trại.");
Player:SendMsgToKinOrTong(me, " đã dốt lửa trại.", 0);
self:ExEvent();
end
end

Thank bác, Đã fixx được, không biết lỡ tay xóa NPC lúc nào không biết.:)
Nhưng lỗi dis Game.exe em đã biết nguyên nhân do client và gs k đồng bộ nhưng hiện tại em đang dùng res của VNG , đồng bộ sang GS rồi nhưng vẫn diss Game.exe. Con dùng res đi theo gameserver thì lại k việc j.

vd_tt
06-02-15, 03:24 PM
mở map vũ lăng sơn lên, xem thử có npc nào, qua res của gs, lấy res của npc ấy add vào res bên client là được :-" , hoặc lấy res của vng add vào client, add từng cái và ko cần đồng bộ gs cũng được

nhtlquan
06-02-15, 06:05 PM
mở map vũ lăng sơn lên, xem thử có npc nào, qua res của gs, lấy res của npc ấy add vào res bên client là được :-" , hoặc lấy res của vng add vào client, add từng cái và ko cần đồng bộ gs cũng đượ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>

vd_tt
06-02-15, 07:02 PM
những cái này cũng đơn giản, có hướng dẫn ở #1 rồi bác ơi, làm đi làm lại là được thôi, với lại bác mở online rồi mà mấy cái này còn fix đượ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>