Làm cách nào tôi có thể triển khai Skilling ngoại tuyến


13

Một ví dụ về skilling ngoại tuyến sẽ là EvE Online. Nhân vật của bạn (phi công) không có được kỹ năng bằng cách rút kinh nghiệm. Thay vào đó, nhân vật của bạn đạt được điểm kỹ năng đối với một kỹ năng mà bạn đang đào tạo cho dù bạn đang ở trong hoặc ngoài trò chơi. Ngoài ra, tôi khá chắc chắn rằng các kỹ năng tiếp tục được xây dựng ngay cả khi các máy chủ trò chơi ngừng hoạt động.

Bất cứ ai cũng có bất kỳ ý tưởng rộng lớn nào về cách họ thực hiện điều này, hoặc tốt hơn là làm thế nào tôi có thể thực hiện một cái gì đó như thế này trong một trò chơi tôi đang phát triển. Tôi không tìm kiếm một lời giải thích chi tiết ở đây (đừng để tôi giữ bạn lại), nhưng tôi đang tìm một biển chỉ dẫn chỉ cho tôi đi đúng hướng.

Cảm ơn!

Câu trả lời:


17

Giả sử sự phát triển kỹ năng mang tính quyết định và khá tuyến tính, tất cả những gì bạn cần làm là móc vào một loại đồng hồ thời gian thực nào đó (như đồng hồ hệ thống hoặc đồng hồ máy chủ) và tính toán thời gian phát triển kỹ năng.

Nói cách khác, khi quá trình phát triển kỹ năng bắt đầu, hãy lấy dấu thời gian và lưu trữ nó, và bất cứ khi nào bạn muốn kiểm tra xem kỹ năng đã được cải thiện chưa, hãy so sánh dấu thời gian với hiện tại, kiểm tra xem delta có đủ lớn không, và bing, người chơi có một ky năng mơi.


2
Đột nhiên, có lý do tại sao họ buộc bạn phải tạm dừng đào tạo nếu bạn thay đổi thuộc tính ảnh hưởng đến tốc độ đào tạo! Bởi vì họ tính toán lại đồng bằng cần thiết ... Tuyệt vời, cảm ơn!
Dream Lane

5
@Dream Lane, Để giảm bớt bất kỳ chi phí tính toán tiềm năng nào sẽ có. Chỉ tính toán lại các kỹ năng / điểm kiếm được khi người dùng đăng nhập. Vì vậy, có hàng ngàn người đăng xuất sẽ không phải chịu bất kỳ chi phí nào.
Tấn

2

Nếu kỹ năng này sẽ không được sử dụng cho đến khi người chơi trực tuyến trở lại, bạn chỉ cần lưu trữ thời gian đăng xuất và thời gian còn lại trên bất kỳ kỹ năng nào trong hàng đợi, và sau đó khi người chơi đăng nhập, hãy làm như thế này:

timeRemaining = currentTime - logoutTime
while ( timeRemaining > 0 and hasQueuedSkill() ) {
     skillTime -= timeRemaining
     if ( skillTime <= 0 ) {
           popSkill()
           timeRemaining = -skillTime
     }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.