PDA

View Full Version : [JX] Muốn hỏi về hàm SetTimer



f-fantasy
12-06-12, 06:28 AM
Mình viết một cái sự kiện mình muốn là khi nhận vật đăng kí sự kiện đó thì mình set cho nó 1 cái task là tasktemp hoặc gì đó rồi sau đó đến đúng giờ server sẽ tự động move toàn bộ các nhận vật đã đăng ký và được settak vào trong một map định sẵn để tham gia sự kiện, sau 30 phút bắt đầu sự kiện thì kết thúc lúc này lại move toàn bộ những người ở trong cái map kia ra ngoài .... mình đang rối đoạn này ai chỉ mình xài hàm thời gian thế nào để làm được như vậy

thaihoa91
12-06-12, 08:16 AM
Tui nghĩ là sẽ liên quan 2 hàm này !


SetTimer(Thời gian,thứ tự file trong TimerTask) ---thời gian tính bằng giây ví dụ : 60 giây = 60*18 ---Được khởi động bằng hàm function OnTimer()
StopTimer() ---Tắt hàm SetTimer() cho vào lúc mình muốn nó sẽ dừng lại

f-fantasy
12-06-12, 08:50 AM
Cái đó thì mình biết rồi chỉ có cái là thiết đặt thế nào để đến đúng giờ move tất cả những người đã đăng kí vào 1 map rồi hết giờ lại move hết tất cả những người trong map về ba lăng huyện....

Tiện thể Hòa biết hàm SetMissionV và SetGlbMissionV khác nhau giống nhau chỗ nào không vậy chỉ mình ...

Trong ý nghĩ của mình thì đại loại là thế này ... Khi nhận chọn dòng đăng kí mình SetTask (1 loại task nào đó có thể là SetMission hay SetTaskTemp hay SetTask không thôi mình đang bí lù chỗ này này) cho nhân vật một loại task rồi cho chạy 1 code lua bằng SetTimer sau khoảng thời gian còn lại để đăng kí sự kiện ví dụ 9h bắt đầu ng chơi đăng kí từ 8h55 vậy thời gian còn lại là (60-55) sau 5 phút bắt đầu chạy file đã được SetTimer .... nhưng bây giờ trong file SetTimer ấy mình sẽ phải viết thế nào để nó check toàn bộ những người đang online xem ông nào đã đăng ký đi sự kiện ... bình thường mình tương tác NPC thông qua các dòng hội thoại thì sẽ dùng GetTask để xem đã đủ điều kiện chưa còn đây chạy hàm SetTimer này thì có dùng GetTask được không nếu mình SetTask(1,1) cho nhân vật khi đăng kí thì đến 9h mình dùng

if GetTask(1) == 1 then

Thì nó có check tất các nhân vật có GetTask(1) là 1 không hay phải dùng loại task nào khác

Mà ai biết hàm làm sao đọc được các nhân vật trong 1 party ko ví dụ như mình có pt 3 nhân vật có name là NVA NVB NVC muốn khi nói chuyện với NPC nó hiện lên là pt của bạn gồm có NVA NVB NVC thì GetName lấy được tên của bản thân mình là NVA thôi còn các NVB và C làm sao để lấy được nhỉ

jxvietnam
12-06-12, 10:12 AM
Cái đó thì mình biết rồi chỉ có cái là thiết đặt thế nào để đến đúng giờ move tất cả những người đã đăng kí vào 1 map rồi hết giờ lại move hết tất cả những người trong map về ba lăng huyện....

Tiện thể Hòa biết hàm SetMissionV và SetGlbMissionV khác nhau giống nhau chỗ nào không vậy chỉ mình ...

Trong ý nghĩ của mình thì đại loại là thế này ... Khi nhận chọn dòng đăng kí mình SetTask (1 loại task nào đó có thể là SetMission hay SetTaskTemp hay SetTask không thôi mình đang bí lù chỗ này này) cho nhân vật một loại task rồi cho chạy 1 code lua bằng SetTimer sau khoảng thời gian còn lại để đăng kí sự kiện ví dụ 9h bắt đầu ng chơi đăng kí từ 8h55 vậy thời gian còn lại là (60-55) sau 5 phút bắt đầu chạy file đã được SetTimer .... nhưng bây giờ trong file SetTimer ấy mình sẽ phải viết thế nào để nó check toàn bộ những người đang online xem ông nào đã đăng ký đi sự kiện ... bình thường mình tương tác NPC thông qua các dòng hội thoại thì sẽ dùng GetTask để xem đã đủ điều kiện chưa còn đây chạy hàm SetTimer này thì có dùng GetTask được không nếu mình SetTask(1,1) cho nhân vật khi đăng kí thì đến 9h mình dùng

if GetTask(1) == 1 then

Thì nó có check tất các nhân vật có GetTask(1) là 1 không hay phải dùng loại task nào khác

Mà ai biết hàm làm sao đọc được các nhân vật trong 1 party ko ví dụ như mình có pt 3 nhân vật có name là NVA NVB NVC muốn khi nói chuyện với NPC nó hiện lên là pt của bạn gồm có NVA NVB NVC thì GetName lấy được tên của bản thân mình là NVA thôi còn các NVB và C làm sao để lấy được nhỉ
dùng đoạn code này là đc

for i=1,200 do
PlayerIndex = i
if GetTask(task) == 1 then
Msg2Player("Ban du dieu kien tham gia !")
end

f-fantasy
12-06-12, 04:31 PM
Vậy check số người online trong một map thì làm thế nào vậy bạn ...
Hồi sáng buồn ngủ quá rồi k trụ được nữa nên ko test được mấy đoạn mã mình nghĩ vừa rồi ngồi test thì mình viết file đã được settimer như vầy

function OnTimer()StopTimer()
SayEx({"<color=yellow>Hinh bo dau<color>: Hien nay da co chuyen xe de dua nguoi toi huyen Ba Lang tieu tru son tac nguoi co muon di hay khong?",
"Ta dong y di ngay bay gio/okdi",
"Khong !Ta khong di/Exit"
})
end


function okdi()
if GetTaskTemp(16) == 1 then
NewWorld(37,1716,3373)
SetTimer(30*60*18,19)
SetTaskTemp(16,2)
SetFightState(1)
SetLogoutRV(1)
end
end

Khi đăng kí mình set cho nhân vật tasktemp 16 bằng 1 và khi cái file này nó chạy thì cứ nhân vật nào được task 16 bằng 1 nó sẽ hiện lên cái bảng hỏi han như vầy mình đã onlnine thử cả 3 char check 1 con đăng ký 2 con ko rồi 2 con đăng ký 1 con ko rồi cả 3 đăng ký thì thấy nó đều hoạt động tốt đúng giờ là nhân vật nào đã có TaskTemp 16 bằng 1 nó đều hiện lên cái bảng hỏi xem có đi hay không

KingMax
12-06-12, 05:23 PM
function SoLuongPlayerInMap(maps)
if maps == nil then return 0 end
sl = 0
for i = 1,500 do
PlayerIndex = i
w,x,y = GetWorldPos()
if (w == maps) then
sl = sl + 1
end
end
return sl
end

--- Chế độ gộp bài viết ---


Vậy check số người online trong một map thì làm thế nào vậy bạn ...
Hồi sáng buồn ngủ quá rồi k trụ được nữa nên ko test được mấy đoạn mã mình nghĩ vừa rồi ngồi test thì mình viết file đã được settimer như vầy


Khi đăng kí mình set cho nhân vật tasktemp 16 bằng 1 và khi cái file này nó chạy thì cứ nhân vật nào được task 16 bằng 1 nó sẽ hiện lên cái bảng hỏi han như vầy mình đã onlnine thử cả 3 char check 1 con đăng ký 2 con ko rồi 2 con đăng ký 1 con ko rồi cả 3 đăng ký thì thấy nó đều hoạt động tốt đúng giờ là nhân vật nào đã có TaskTemp 16 bằng 1 nó đều hiện lên cái bảng hỏi xem có đi hay không
dùng SetTimer đụng liên quan tới PlayerIndex, chỉ dùng Offline chơi vui , online sẽ động chạm , vì 1 playerindex out ra , sẽ có 1 player khác lấy số index đó . nhưng nếu dùng TaskTemp thì ok , nhớ Stoptimer nếu ko đúng task

jxvietnam
12-06-12, 10:43 PM
Làm cách này có mà chết :)). giả sử có 10000 member tham gia. thì nó phải chạy 10000 vòng lặp ===> Dis GameServer :))
nhưng mà muốn check tất cả nhân vật mà ko kích vào npc thì chỉ còn cách đó :(

10000 member, server nào khủng thế :))

f-fantasy
12-06-12, 11:36 PM
Ây dà server online thì ko nói mình mở ra khoảng chục anh em cùng dãy nhà trọ nhảy vào chém gió chém bão thôi mà vậy ko có cách nào đọc được tên các nhân vật trong 1 party hả mọi người. Mí bạn có ai có mở sv nào qua hamachi để nghịch ko cho mình vào chém học hỏi với

hoivegame
13-06-12, 06:00 AM
Bạn thử dùng mảng để store các nhân vật rồi dùng task để ktra và gọi ra. Mình có nhớ là 1 vài sv có chức năng lưu mảng do mấy đàn a tạo ra bạn kiếm thử rồi nghiên cứu thử xem.