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!

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ść.


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
     }
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.