PDA

View Full Version : Em cần giúp đỡ về 1 hàm script



Tôilàai
15-05-11, 11:05 AM
Vấn đề của em là em cần 1 hàm khi nhấp vào NPC để làm gì đó ví dụ nhận 1 vật phẩm bất kỳ thì ngày mai mới có thể nhận tiếp (mỗi ngày chỉ nhận 1 lần) em đã tìm hiểu hàm SetTask và SetTaskTemp nhưng SetTask thì sẽ mãi mãi đến khi SetTask về 0 còn SetTaskTemp thì out ra sẽ = 0 em rất khó hiểu em mong pro nào có thể viết đc hàm em nói trên xin comment phía dưới .... P/s:Thanks các pro nhiều :D

Tôilàai
15-05-11, 12:39 PM
Up................................................ .....

thaihoa91
15-05-11, 05:48 PM
Bạn cần học về hàm SetTimer, hàm này tui ít dùng nên ko rõ mấy !

Xem các hàm ở đây : <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>

Vào đây tham khảo code viết sẵn : <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>

[M]r[K]id
16-05-11, 08:00 PM
Vấn đề của em là em cần 1 hàm khi nhấp vào NPC để làm gì đó ví dụ nhận 1 vật phẩm bất kỳ thì ngày mai mới có thể nhận tiếp (mỗi ngày chỉ nhận 1 lần) em đã tìm hiểu hàm SetTask và SetTaskTemp nhưng SetTask thì sẽ mãi mãi đến khi SetTask về 0 còn SetTaskTemp thì out ra sẽ = 0 em rất khó hiểu em mong pro nào có thể viết đc hàm em nói trên xin comment phía dưới .... P/s:Thanks các pro nhiều :D
cách viết code cần rất nhiều vân đề
đầu tiên và quang trọng nhất đó là tìm hướng giải quyết vấn đề. níu code bạn giỏi và thuộc hết các hàm mà ko có tư duy tốt cũng như không
vấn đề của bạn nếu ra mình có hướng giải quyết thế này

vì nhận vật phẩm nên nó là hàm AddEventItem().
mà vật phẩm bất kì thì phải có hàm random().
mà đã có hàm random() thì nhất định phải có hàm gán ở đây tớ lấy là a
thì ta sẽ có code lấy a như thế này a = random(1,250)
và nó hỉu là số a sẽ nhảy ngẫu nhiên tứ 1 đến 250 ta coi đây là ID item
và nhận ngầu nhiên là code thế này AddEventItem(a).
mà mỗi ngày 1 lần thì cần có SetTask()
mà SetTask() thì mình lại phải có 1 số thể hiện Task Đó (số lưu trữ task)
Ví dụ mình lấy Task 200 là task lưu trữ xem nó nhận chưa :D
mà để khó quên tớ sẽ chú thích và gán cho nó 1 hàm nữa là b
vậy b = 200
và chúng ta đã có 2 hàm gãn là a và b
và bạn đã tìm hiểu về SetTaskTemp() rùi thì SetTask() cũng tương tự
mình giải thích dễ hỉu 1 xíu là thế này
SetTask(200,0) là đặt cho task đó là 0. như là bố bạn đặt tên bạn là 0
SetTask(200,1) là dặt cho task đó là 1. như bạn đổi tên lại là 1 như vậy bạn không còn là 0 nữa.
cái 200 thực chất là ID task và 0 và 1 là cái để nó nhận biết để làm theo
nói theo ví dụ thì 200 là tên và 0 và 1 là tên của bạn vậy
Và đi vs SetTask thì có GetTask dùng để kiểm tra task đó
GetTask(200) kiểm tra task 200, kiểm tra tên của bạn
và hàm trên dc sử dụng để so sánh như sau
GetTask(200) = 0 kiểm tra xem task 200 có bằng 0 hay không, kiểm tra tên bạn có phải là 0 không
GetTask(200) = 1 tương tự trên
như vậy thì ta đã biết được hàm SetTask() Và GetTask()bậy giờ đi vào code
ta đặt task 200 là task lưu trữ xem nó nhận item hay chưa và thông số của Task đó mình cho là 0 và 1.
Nếu là 0 là chưa nhận còn 1 là nhận rồi mai nhận tiếp. và bạn phải có chút kiến thức về hàm If nữa. tự tìm hỉu

-- Sau khi nhấp vào Npc và nhận Item Nha


a = random(1,250)
b = 200

function main()
sayex{("nguoi mun lam gi?",
"nhan item 1 ngay 1 lan/item",
"thoat/out")}
end.

function item()
if GetTask(b) = 0 then
AddEventItem(a)
SetTask(b) = 1
end.
else
Say("Ban Nhan Cua Ngay Hum Nay Rui Nhaz")
end
end.

function out()
end.


còn nhận 1 ngày 1 lần tí nói típ mệt quá :(:(

[M]r[K]id
16-05-11, 08:09 PM
cái thời gian thfi bạn tham khảo bài này nhé:
<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>

jxvietnam
16-05-11, 09:20 PM
góp ý Mr Kid 1 chút :)
SetTask(b,1) chứ ko phải là SetTask(b) == 1
Chủ topic nói là hôm nay nhận xong rồi => ko nhận đc nữa => ngày mai nhận đc lại
Theo hàm của Kid thì ngày mai sẽ ko nhận đc nữa :)

thaihoa91
16-05-11, 09:24 PM
góp ý Mr Kid 1 chút :)
SetTask(b,1) chứ ko phải là SetTask(b) == 1
Chủ topic nói là hôm nay nhận xong rồi => ko nhận đc nữa => ngày mai nhận đc lại
Theo hàm của Kid thì ngày mai sẽ ko nhận đc nữa :)

Uhm ! Có lẽ chắc thiếu hàm SetTimer để check giờ ngày tháng năm nữa !

kidcrazy187
16-05-11, 10:32 PM
Dùng cái nì thử :



TaskNhanThuong = 70 -- Thí dụ 70 chẳng hạn
function main() tgnt = 15 -- Thời gian nhận thưởng tính bằng phút
phut = tonumber(date("%M"))
tam = mod(phut,tgnt)
pcl = abs(tgnt - tam)
if tam == 0 then
if GetTask(TaskNhanThuong) == 0 then
nhanquatang() -- Tui lấy đại tên ví dụ
else Say("<color="..colorS()..">Nhan Thuong<color> : Ban da nhan thuong roi nen khong the nhan thuong duoc nua !",0,"")
end
else Say("<color="..colorS()..">Nhan Thuong<color> : Sau <color=red>"..pcl.."<color> phut hay quay lai nhe !",0,"") SetTask(TaskNhanThuong,0)
end
end

function nhanquatang()
SetTask(TaskNhanThuong,1) -- Trước khi vào hàm thêm dòng này
-- Thực hiện hàm tặng quà
end


Cái này có ưu và nhược là :
Ưu :
- Nhận rồi, không được nhận nữa, sau 1 khoảng thời gian định ra thì nhận tiếp
Nhược :
- Nhận rồi thì phải nhấp NPC đó thì khoảng 1 thời gian sau mới đc nhận, còn k nhấp vào thì lần sau k nhận đc.

=> Chỉ cần xài thêm script cái Task sau 1 khoảng thời gian.

Tôilàai
17-05-11, 10:03 AM
Cám ơn các pro đã tận tình chỉ bảo

KingMax
17-05-11, 10:21 AM
function main(sel)
day = tonumber(date("%d"))
if GetTask(130) ~= day then
AddEventItem("Tu Thuy Tinh")
SetTask(130,day)
else
Msg2Player("Ngay nay mi nhan roi")
end
end

Code đơn giản mún OK thì thêm nữa , mình làm cho bạn biết chút ít thôi ;)) . Cũng giống thế thôi :)) , tự suy nghi là ra ;;)
lua không khó nhưng Logic + tìm là được