Як я можу реалізувати офлайн-навички


13

Прикладом офлайн-майстерності може бути EvE Online. Ваш персонаж (пілот) не здобуває навичок, отримуючи досвід. Натомість ваш персонаж отримує бали майстерності щодо навички, якого ви тренуєте, будь то в грі чи поза грою. Також я впевнений, що навички продовжують формуватися навіть тоді, коли ігрові сервери не працюють.

У кого-небудь є широкі уявлення про те, як вони займаються цим, а ще краще, як я міг би реалізувати щось подібне у грі, яку я розробляю. Я не шукаю тут детального пояснення (не дозволяйте мені стримати вас), але шукаю покажчик, який би вказував мені в правильному напрямку.

Спасибі!

Відповіді:


17

Якщо припустити, що розвиток навичок є детермінованим і досить лінійним, все, що вам потрібно зробити, - це підключити до якогось годинника в режимі реального часу (наприклад, системний годинник або серверний годинник) і обчислити, скільки часу цей навик розвивався.

Іншими словами, коли починається розвиток навичок, візьміть часові позначки і зберігайте їх, і коли ви хочете перевірити, чи навик покращився, порівняйте часову позначку з поточною, перевірте, чи є дельта достатньо великою, і бінг, гравець має новий навик.


2
Раптом має сенс, чому вони змушують вас призупинити навчання, якщо ви зміните свої атрибути, які впливають на швидкість тренування! Тому що вони перераховують потрібну дельту ... Дивовижно, дякую!
Сон Лейн

5
@Dream Lane, щоб полегшити будь-які потенційні обчислювальні витрати. Перераховуйте зароблені навички / бали лише тоді, коли користувач увійде в систему. Так що тисячі виїзних людей не матимуть ніяких накладних витрат.
AttackingHobo

2

Якщо цей навик не буде використаний, поки гравець не повернеться до Інтернету, ви можете просто зберегти час виходу та час, що залишився, у будь-яких навичках черги, а потім, коли гравець увійде в систему, зробіть щось подібне:

timeRemaining = currentTime - logoutTime
while ( timeRemaining > 0 and hasQueuedSkill() ) {
     skillTime -= timeRemaining
     if ( skillTime <= 0 ) {
           popSkill()
           timeRemaining = -skillTime
     }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.