PDA

View Full Version : [KT] Xin hỏi về lỗi đánh quái nhận đồng thường



anhnhianh
01-09-15, 05:54 PM
e dùng sever 2.6 . e add code nhận đồng khi giết quái vào player.lua vào game đánh quái thì lại ko ra đồng thường e cũng đã copy cái player bản gốc nhưng vẫn ko đc ko biết còn liên quan đến cái gì nữa mong pro nào chỉ giáo với. sau đây là code e add vào player


function Player:_OnKillNpc()
-- 如果是精英怪,首领怪,判断是否要� �玩家的同伴添加经验
if him.GetNpcType() ~= 0 then
Partner:OnKillBoss(me, him);
end

Task:OnKillNpc(me,him);
local nMapId = me.GetWorldPos();
if (nMapId == 1536) and (nMapId == 1537) and (nMapId == 1538) and (nMapId == 1539) then
me.AddJbCoin(10);
me.Msg("<color=wheat>Bạn nhận được<color=red> 10 <color> đồng <color>");
end

end

mong pro xem xét :D

__Jie__
01-09-15, 08:52 PM
Không thấy sai gì có khả năng là do sai cách dùng and . Không chuyên lập trình nên không biết nhưng thấy kì kì ở chổ
if (nMapId == 1536) and (nMapId == 1537) and (nMapId == 1538) and (nMapId == 1539) then .

Thông thường : Nếu And xuất hiện trong if nghĩa là điều kiện hiển nhiên đúng mới thực hiện hàm. Ví dụ đang đứng ở Map 1536 nhưng cú pháp lại là and 1537. Chương trình sẽ hiểu là nếu bạn đang đứng ở map 1536 = 1537 thì sẽ chạy... ( bất khả thi ngay tại đây ).

Nếu dùng Or thì hoàn toàn khác. Or có nghĩa là hoặc ví dụ if nMapId == 1536 or nMapId == 1537 then. Nghĩa là nếu bạn đang đứng ở 1536 hoặc 1537 thì điều kiện được thực thi.


Nếu dùng and thì nên viết theo dạng khoảng cách giữa các số.

Có thể viết lại theo cách này.

local nMapId, nPosX, nPosY = me.GetWorldPos();
if nMapId >= 1536 and nMapId <= 1539 then
me.AddJbCoin(2);
me.Msg(string.format("Nhân vật đã nhận <color=yellow>2 đồng<color> từ hoạt động"));
end

Hoặc thay and bằng or thử xem.

Đoán đại thôi :)

satthupro95
01-09-15, 11:02 PM
if (nMapId == 1536) and (nMapId == 1537) and (nMapId == 1538) and (nMapId == 1539) then -- And có nghĩa là đồng thời, đổi thành Or (hoặc) là được

na.ilusm89
02-09-15, 07:46 AM
e dùng sever 2.6 . e add code nhận đồng khi giết quái vào player.lua vào game đánh quái thì lại ko ra đồng thường e cũng đã copy cái player bản gốc nhưng vẫn ko đc ko biết còn liên quan đến cái gì nữa mong pro nào chỉ giáo với. sau đây là code e add vào player


function Player:_OnKillNpc()
-- 如果是精英怪,首领怪,判断是否要� �玩家的同伴添加经验
if him.GetNpcType() ~= 0 then
Partner:OnKillBoss(me, him);
end

Task:OnKillNpc(me,him);
local nMapId = me.GetWorldPos();
if (nMapId == 1536) and (nMapId == 1537) and (nMapId == 1538) and (nMapId == 1539) then
me.AddJbCoin(10);
me.Msg("<color=wheat>Bạn nhận được<color=red> 10 <color> đồng <color>");
end

end

mong pro xem xét :D


Sai hàm and rồi e... Đổi hàm and thành or là ok


if (nMapId == 1536) or (nMapId == 1537) or (nMapId == 1538) or (nMapId == 1539) then

anhnhianh
02-09-15, 10:16 AM
à thì ra là sai hàm :)) tks mấy đại ca :)) khó hiểu 2 chữ or và and quá chả biết lúc nào dùng cho hợp :(

__Jie__
02-09-15, 11:07 AM
Như tôi đã giải thích phía trên chắc từ nay sẽ Hiểu.
Đơn giản nếu dùng and trong if có nghĩa là luôn luôn đúng mới thực thi.
Nếu dùng and thì dùng cách điếm khoảng cách giữa các số kết hợp các phép toàn >= and <=.

Còn nhiều cái ở Plugin nó hiểu nhưng chưa có dịp thử trên server không biết nó hiểu ko :)
Ví dụ : if string.find(GetMapNameFormId(me.nTemplateMapId), "Tần Lăng") then -- doc vào chắc hiểu mục đích nó làm gì :)

SInSu
02-09-15, 11:17 AM
If (Điều kiện A) and (Điều kiện B) and (Điều kiện C) then
(Hàm Thực Thi X)
end

- Dùng 'and' thì phải thoả mãn cả 3 điều kiện A, B, C thì mới thực thi được hàm X

If (Điều kiện A) or (Điều kiện B) or (Điều kiện C) then
(Hàm Thực Thi X)
end

- Dùng 'or' thì chỉ cần thỏa mãn 1 trong 3 điều kiện A hoặc B hoặc C là đã có thể thực thi được hàm X

anhnhianh
02-09-15, 11:27 AM
If (Điều kiện A) and (Điều kiện B) and (Điều kiện C) then
(Hàm Thực Thi X)
end

- Dùng 'and' thì phải thoả mãn cả 3 điều kiện A, B, C thì mới thực thi được hàm X

If (Điều kiện A) or (Điều kiện B) or (Điều kiện C) then
(Hàm Thực Thi X)
end

- Dùng 'or' thì chỉ cần thỏa mãn 1 trong 3 điều kiện A hoặc B hoặc C là đã có thể thực thi được hàm X

nói như bác Su dễ hiểu hơn đấy :)) tks bác nhiều