mmofacts.com

Battlesystem mit Session ?

gepostet vor 15 Jahre, 11 Monate von Isogames

Hi,

wollte mal Eure Meinung zu folgendem hören.

Derzeit läuft meine Battle rundenbasiert ab. Also Spieler macht seine Aktion, Werte werden berechnet HP Verlust usw. und in DB gespeichert. Dann kommen die Monster Aktionen. Werte werden wieder berechnet und in DB gespeichert. Das geht solange bis der Kampf zuende ist. Da es bis zu 5 Monster in einem Kampf gibt, die sich auch auf der Karte bewegen können, kam mir der Gedanke den Kampf in einer Session laufen zu lassen und erst das Endergebnis in die DB zu schreiben, damit die DB nich unnötig mit Queries belastet wird. Hätte den Nachteil, dass wenn der User die Session beendet der Stand der Battle verloren geht und neu begonnen werden muss.

Was meint Ihr ist die bessere Variante ?

gepostet vor 15 Jahre, 11 Monate von neonlex

Ich weiß nicht genau wie deine Kämpfe ablaufen.

Normale Kampfscripte laufen ja in einem Rutsch ab.

Und werden danach in die db gespeichert.

Ich persönlich berechne alle meinem Kämpfe mit einem Deamon oder Conjob.

Dies hat die vorteile, dass manche Scripte recht Zeitaufwändig sind.

Aber wenn du alles live haben willst. Würde ich das in einer Datei alles ablaufen lassen in variablen speichern und danach das Endergebniss eintragen.

gepostet vor 15 Jahre, 11 Monate von Isogames

Die Battle läuft ab wie eine Art Schach auf dem Computer. Spieler macht seinen Zug - Computer "überlegt" und macht dann seinen Zug. Das Battle System von DSA war früher auch so, wenn ich mich recht entsinne.

Derzeit werden halt bei jedem Zug die Daten erst aus der DB ausgelesen und dann wieder gespeichert.

Das speichern in eine Datei, bringt zwar der DB Entlastung, aber für den Server dürfte es nicht wirklich schön sein.

gepostet vor 15 Jahre, 11 Monate von neonlex

Mhh also ob in der DB oder in nem File ist eig. egal. Beides belastet den Server!

Ich finde daher deine Datenbankvariante ganz gut.

Weil wie du sagstest das problem mit der Session ist, dass du alles ohne Logout machen musst.

Glaube du kommst nicht drum rum alles in der Datenbank zu spiechern.

Aber du kannst ja immer mal in der DB aufräumen wenn etwas nicht mehr gebraucht wird.

gepostet vor 15 Jahre, 11 Monate von buhrmi

Allein mit Sessions geht schonmal gar nicht. Gegen Ende des Kampfes merkt der Spieler es läuft nicht gut für ihn, und löscht dann einfach sein session cookie.

gepostet vor 15 Jahre, 11 Monate von rami95

Original von neonlex

Mhh also ob in der DB oder in nem File ist eig. egal. Beides belastet den Server!

Ich finde daher deine Datenbankvariante ganz gut.

Weil wie du sagstest das problem mit der Session ist, dass du alles ohne Logout machen musst.

Glaube du kommst nicht drum rum alles in der Datenbank zu spiechern.

Aber du kannst ja immer mal in der DB aufräumen wenn etwas nicht mehr gebraucht wird.

Allerdings hat bei unserem Game der Fileserver noch nie gelaggt, die MySQL-Sockets haben wir ca. 1x pro Monat ausgelastet.

gepostet vor 15 Jahre, 11 Monate von neonlex

Original von rami95

Original von neonlex

Mhh also ob in der DB oder in nem File ist eig. egal. Beides belastet den Server!

Ich finde daher deine Datenbankvariante ganz gut.

Weil wie du sagstest das problem mit der Session ist, dass du alles ohne Logout machen musst.

Glaube du kommst nicht drum rum alles in der Datenbank zu spiechern.

Aber du kannst ja immer mal in der DB aufräumen wenn etwas nicht mehr gebraucht wird.

Allerdings hat bei unserem Game der Fileserver noch nie gelaggt, die MySQL-Sockets haben wir ca. 1x pro Monat ausgelastet.

Gut da hast du auch wieder recht. Naja der Fakt in dem Thread ist auf jeden Fall das es in der Session nicht sinvoll wäre. Kannst es ja nun in einer Datei machen. Und dein Kampfarray serialized speichern.

gepostet vor 15 Jahre, 11 Monate von Bloodredangel

Naja es ist schon sinnvoll den Kampf in einer Session ablaufen zu lassen, wenn du ohnehin den Großteil der Daten (als Session) speichern würdest (was ja auch die HP des Spielers zutrifft, die Monsterhp ständen sonst in der DB?).

Aber: Du musst die Fälle bedenken, was passieren soll, wenn der Spieler unterbricht. Löscht er die Sessiondaten ist ja alles weg, also der "Überlebenstrick" schlechthin. Falls das nicht schlimm sein sollte ok. Kampf wiederholen würde ich auf jeden Fall nicht, da man sonst so lange probiert bis es klappt. Aber falls zB. die Spieler sich auf ner Map bewegen und (3,3) ist zB. ein Engpass (Tor oä.) und dort steht ein Boss, dann könnte man hinlaufen, den Kampf abbrechen und weiterlaufen (Boss steht noch, aber man wäre weiter).

Ich nehm jedoch an, dass dieses "Aber" der auschlaggebende Grund dafür ist, weiterhin immer zu speicher. Sessions würden nur insofern Erleichterung bringen, dass du dir Tables anlegen für die Monster sparst (oder wie du das machst), da sich nach dem Kampf ja nur HP uä. vom Spieler ändern, die temporären Gegner aber nicht gespeichert werden müssen.

Daher würde ich persönlich weiterhin immer speichern. Allein den Komfort mittendrin zu unterbrechen und später weiterzumachen (ich seh das als gewolltes Feature an ^^) würde ich ungern missen. Außerdem sind Datenbanken recht schlau, daher wird es von der Geschwindigkeit kaum einen Unterschied machen. Man könnte wie gesagt am meisten an Struktur sparen (Kampf in bestimmtes DB Format brechen und entsprechend Tables / Datensätze anlegen). Aber naja, überleg dir lieber wie das am perfomantesten klappt und du hast eine gute Lösung ohne das "Aber". :)

Auf diese Diskussion antworten