Jak mogę wdrożyć umiejętności offline

13

Przykładem umiejętności offline jest EvE Online. Twoja postać (pilot) nie zdobywa umiejętności, zdobywając doświadczenie. Zamiast tego twoja postać zdobywa punkty umiejętności w kierunku umiejętności, którą trenujesz, niezależnie od tego, czy jesteś w grze, czy poza nią. Jestem też całkiem pewien, że umiejętności będą się rozwijać, nawet gdy serwery gry są wyłączone.

Każdy ma jakieś ogólne wyobrażenie o tym, jak sobie z tym poradzić, lub jeszcze lepiej, jak mógłbym wdrożyć coś takiego w grze, którą opracowuję. Nie szukam tutaj szczegółowego wyjaśnienia (nie pozwól, że cię powstrzymam), ale szukam drogowskazu, który wskaże mi właściwy kierunek.

Dzięki!

Dream Lane
źródło

Odpowiedzi:

17

Zakładając, że rozwój umiejętności jest deterministyczny i dość liniowy, wystarczy podłączyć jakiś rodzaj zegara czasu rzeczywistego (taki jak zegar systemowy lub zegar serwera) i obliczyć, jak długo umiejętność była rozwijana.

Innymi słowy, kiedy zaczyna się rozwój umiejętności, weź znacznik czasu i zapisz go, a gdy chcesz sprawdzić, czy umiejętność się poprawiła, porównaj znacznik czasu z bieżącym, sprawdź, czy delta jest wystarczająco duża i, bing, gracz ma nowa umiejętność.

Jari Komppa
źródło
2
Nagle ma sens, dlaczego zmuszają cię do wstrzymania treningu, jeśli zmienisz atrybuty wpływające na szybkość treningu! Ponieważ ponownie obliczają potrzebną różnicę ... Świetnie, dziękuję!
Dream Lane
5
@Dream Lane, Aby złagodzić wszelkie potencjalne koszty obliczeniowe, będzie to miało miejsce. Przelicz zdobyte umiejętności / punkty tylko wtedy, gdy użytkownik się zaloguje. Tak więc tysiące wylogowanych ludzi nie poniosą żadnych kosztów ogólnych.
AttackingHobo
2

Jeśli umiejętność nie zostanie użyta, dopóki gracz nie wróci do trybu online, możesz po prostu zapisać czas wylogowania i pozostały czas na dowolne umiejętności w kolejce, a następnie, gdy gracz się zaloguje, wykonaj coś takiego:

timeRemaining = currentTime - logoutTime
while ( timeRemaining > 0 and hasQueuedSkill() ) {
     skillTime -= timeRemaining
     if ( skillTime <= 0 ) {
           popSkill()
           timeRemaining = -skillTime
     }
}
Elva
źródło