Phaltôn: Über "Engine" jede paar Sekunden Aktionen laufen lassen

Beitrag lesen

Vielen Dank erstmal, du hast einige sehr gute Ideen.

Hihi, das mit Wahrscheinlichkeiten ist so eine Sache. Microsoft dachte wohl auch, dass sie in Windows 2000 und Windows XP eine "ziemlich gute Wahrscheinlichkeit" integriert hatten, und dann kam das hier raus.

Haha^^ Naja, aber was soll ich machen^^ Solange es nur annähernd stimmt, reicht es ja.

Mit anderen Worten: Jemand mit einer sehr schnellen Internetleitung kann sehr häufig "klicken" und dadurch viele Felder besuchen. Jemand mit einer langsamen Leitung kann das nicht. Die Gleichheit der Spieler hängt also von deren Leitung ab. Das aber nur am Rande.

Nein. Jeder Spieler muss 3 Sekunden (abhängig vom Gebiet) warten, bis er sich wieder bewegen kann. Trotzdem kann er schneller Monster angreifen, schneller Items aufnehmen, richtig.

Je schneller man Felder besuchen kann, desto schneller findet man Monster, desto schneller kriegt man Geld.

Sehr richtig, beachtet werden muss hierbei aber die Wartezeit.

Richtig, die Monster müssen irgendeinen Grund haben, auf einem bestimmten Feld zu sein. Entweder "leben" sie an bestimmten Orten (dann liegt der Grund in der Kreation der Spielwelt begründet), oder sie rennen nach einem bestimmten Muster durch die Landschaft (so ähnlich wie einst die Geister in PAC MAN), oder sie tauchen auf einem Feld zufällig aus dem Nichts auf.

Auf einem Feld kommt immer das gleiche Monster. Da es pro Gebiet oft 20 oder mehr Felder gibt, ist das nicht so schlimm.
Dieses Monster taucht durch Zufall einfach auf.

Wenn sie aus dem Nichts auftauchen, dann gibts pro Feld eine gewisse Monsterauftauchwahrscheinlichkeit. Die ist dann aber unabhängig von irgendeinem zeitlichen Verlauf. Und du könntest dir die ganze Aktualisierung sparen, wenn du einfach nur beim Betreten eines Feldes eine kurze Rechnung ablaufen läßt, ob der Spieler auf ein Monster trifft, oder nicht: Ermittle eine Zufallszahl, und wenn die Zahl größer oder kleiner als ein Grenzwert ist, ist ein Monster anwesend.

Problem hierbei ist nur: Wie synchronisiere ich das mit anderen Spielern? Man kann leider nicht sagen, ob der Spieler auf ein Monster trifft, sondern vielleicht eher, ob eins erscheint, wenn man auf das Feld geht. So könnte man schon mal einen Teil der Monster steuern, doch es wäre besser, wenn viele auch noch durch Zufall erscheinen.

Eventuell kann man je Feld unterschiedliche Monsterwahrscheinlichkeiten definieren. Beispielsweise könnte man mitzählen, wieviele Monster auf einem bestimmten Feld schon aufgetaucht sind, und das ins Verhältnis zur Gesamtzahl der Monster in der Welt setzen, so dass die Monsterwahrscheinlichkeit auf genau diesem einen Feld sinkt oder steigt, je nachdem, wie häufig dort Monster aufgetreten sind. Auf lange Sicht gesehen ist das allerdings wieder irrelevant, denn es ist Kennzeichen eines guten Zufallsgenerators, dass er gut verteilte Zufallszahlen ausspuckt. Sofern also die Spieler die Felder gleichmäßig besuchen, werden auch Monster gleichmäßig auftauchen.

Interessante Idee. Aber wie du schon sagtest - rand() sollte ausreichen.

Wenn du einen "Aberntungseffekt" haben willst, benötigst du natürlich eine zeitliche Komponente, d.h. die Wahrscheinlichkeit, auf einem Feld auf ein Monster zu stoßen, hängt davon ab, wie lange es her ist, dass dort schon mal ein Monster angetroffen wurde. Mit anderen Worten: Die Wahrscheinlichkeit hängt davon ab, wieviel Zeit seit dem letzten Monster vergangen ist. Der Monsterfaktor muß also kleiner werden, wenn wenig Zeit verging, und er steigt bis zum Normalwert an, wenn eine ausreichend große Zeitspanne vergangen ist. Vollkommen ausgeschlossen sein darf es natürlich nicht, sofort wieder auf ein Monster zu treffen.

Wäre aber blöd, wenn ein Spieler zu einem selten besuchten (oder besuchbaren Ort) kommt, und dort sofort haufenweise Monster vorfindet.

Das muß ja nicht jede Sekunde gelöscht werden, sondern jeden Tag reicht vollkommen. Oder meinetwegen jede Stunde. Oder jedesmal, wenn jemand was neues chattet. Jedenfalls kriegst du ja problemlos eine eingeschränkte Liste der letzten Äußerungen, wenn du die Uhrzeit mitspeicherst und bei der Ausgabe nur die letzten X Minuten selektierst, alles vorher nicht. Dann ist es zwar noch gespeichert, und du als Admin kannst auch nachgucken, ob sich z.B. jemand danebenbenommen hat, oder illegale Spielerabsprachen vorkamen, aber die Spieler sehen nichts mehr davon.

Richtig, das reicht auch so jede Viertelstunde (kommt auf die Spieleranzahl an).

Das ist auch nichts, was an zentraler Stelle auf allen Feldern ein- und ausgeschaltet werden muß. Du kannst in der Datenbank einfach schon im Vorraus speichern, von wann bis wann Schneesturm ist. Vielleicht gibt es eine Wettervorhersage, die mit einer gewissen Wahrscheinlichkeit den Schneesturm (der sicher kommt) ankündigt. Natürlich muß da ein Skript irgendwann mal die Datenbank wieder mit neuer Zukunft befüllen, aber das ist nichts, was jede Sekunde sein muß.

DAS ist die beste Idee von allen!!!
Ich könnte z.B: so für einen Tag alles im Voraus berechnen!
Mann, auf sowas bin ich nie gekommen...

Hängt davon ab, was diese NPC so machen sollen. Wenn ein Fährmann regelmäßig den Fluß überquert, kann man diese Bewegung natürlich speichern. Ist halt die Frage, nach welcher Regel er sich bewegt: Fahrplan oder Spieleraktion. Bei Fahrplan kann man berechnen, wann er wo ist. Bei Spieleraktion wartet er, dass ein Spieler ihn ruft.

Es sollen NPCs sein, die sich ähnlich wie Spieler verhalten, also auch Monster angreifen und zufällig rumlaufen.
Aber auch hier könnte man im Voraus planen, was allerdings etwas blöd ist, denn woher weiß der NPC, ob an dem aktuellen Ort dann ein Monster ist?

Klar, das ist halt die Essenz von "entwickeln". Gilt nicht nur für Programme, auch für Programmierer.

Ja, das Ziel ist es, möglich wenig Performance zu nutzen und so zu programmieren, dass das Spiel dynamisch in Hinsicht auf die Spielerzahl ist.

Gruß,

Felix