Wie kann ich Offline Skilling implementieren?

13

Ein Beispiel für eine Offline-Qualifizierung wäre EvE Online. Dein Charakter (Pilot) sammelt keine Fähigkeiten, indem er Erfahrung sammelt. Stattdessen erhält Ihr Charakter Fertigkeitspunkte für eine Fertigkeit, die Sie trainieren, unabhängig davon, ob Sie sich im Spiel befinden oder nicht. Außerdem bin ich mir ziemlich sicher, dass die Fähigkeiten auch dann weiter ausgebaut werden, wenn die Spieleserver ausfallen.

Jeder hat eine umfassende Vorstellung davon, wie sie vorgehen, oder noch besser, wie ich so etwas in einem Spiel implementieren könnte, das ich gerade entwickle. Ich suche hier keine ausführliche Erklärung (lass dich aber nicht zurückhalten), sondern suche einen Wegweiser, der mich in die richtige Richtung weist.

Vielen Dank!

Dream Lane
quelle

Antworten:

17

Vorausgesetzt, die Entwicklung der Fertigkeiten ist deterministisch und ziemlich linear, müssen Sie sich lediglich in eine Art Echtzeituhr (wie die Systemuhr oder die Serveruhr) einklinken und berechnen, wie lange sich die Fertigkeiten in der Entwicklung befunden haben.

Mit anderen Worten, wenn die Entwicklung der Fertigkeiten beginnt, nehmen Sie den Zeitstempel und speichern Sie ihn. Wenn Sie prüfen möchten, ob sich die Fertigkeiten verbessert haben, vergleichen Sie den Zeitstempel mit dem aktuellen, prüfen Sie, ob das Delta groß genug ist, und ob der Spieler das Gefühl hat eine neue Fähigkeit.

Jari Komppa
quelle
2
Plötzlich macht es Sinn, warum sie dich zwingen, das Training anzuhalten, wenn du deine Attribute änderst, die die Geschwindigkeit des Trainings beeinflussen! Weil sie das benötigte Delta neu berechnen ... Super, danke!
Dream Lane
5
@ Dream Lane, um eventuellen Rechenaufwand zu verringern. Berechnen Sie die erworbenen Fähigkeiten / Punkte erst dann neu, wenn sich der Benutzer anmeldet. Wenn Sie also Tausende von Personen abgemeldet haben, entstehen keine zusätzlichen Kosten.
AttackingHobo
2

Wenn die Fertigkeit erst verwendet wird, wenn der Spieler wieder online ist, können Sie einfach die Abmeldezeit und die verbleibende Zeit für alle Fertigkeiten in der Warteschlange speichern. Wenn sich der Spieler anmeldet, gehen Sie folgendermaßen vor:

timeRemaining = currentTime - logoutTime
while ( timeRemaining > 0 and hasQueuedSkill() ) {
     skillTime -= timeRemaining
     if ( skillTime <= 0 ) {
           popSkill()
           timeRemaining = -skillTime
     }
}
Elva
quelle