mmofacts.com

Events in Datenbank

gepostet vor 16 Jahre von Nerosmeel

Nabend,

ich stehe vor folgendem Problem:

In meinem BG gibts es nebem den Siedlungen noch RPG Charaktere die man direkt Steuern kann.

Diese haben nun Berufe die verschiendene Effekte auf die Siedlungen haben, das Problem ist nicht das Event selber abzufragen, sondern das ausführen des Event selber. Manche Effekte haben einen Passiven Effekt mansche einen aktiven.

Meine Idee war jetzt das ich, wenn ein Event aufgerufen wird ein Codesippet aus der Datenbank per eval ausgeführt wird. Allerdings finde ich diese Lösung nicht ganz optimal.

hoffe ich konnte deutlich machen was ich meine.

Was hab ihr für Erfahrungen gemacht? Wie löst ihr das Problem?

mfg und schönen Abend noch

Nero

gepostet vor 16 Jahre von knalli

Egal welche Lösung du machen willst, generierten Code (sogar aus der eigenen Datenbank) _willst_ du nicht! Nein nein nein, willst du wirklich nicht.

Möglichkeiten: Je nachdem, was du dir vorstellst und was dir an Resourcen zur Verfügung steht: Möglichkeit 1 wäre die klassische Event-Queue, d.h. Events werden von einem Server-Prozess mittels Zeitmarken oder Zeitmustern abgearbeitet. Die Implementierung geschieht über dafür entsprechende Scripte, idealerweise natürlich eine modulare Struktur. Das managen was und wie aktiviert werden soll, kann man natürlich per Datenbank machen. Die andere Möglichkeit ist das, was doch noch einige Browsersgames machen: Ausführen, wenn der (oder ein) Benutzer es aufruft. Ist bereits mehr Zeit vergangen, wird dies entweder vernachlässigt, oder einfach nachgerechnet (kein Problem, wenn es keine großen Überschneidungen gibt).

gepostet vor 16 Jahre von Phoscur

Original von Nerosmeel

Diese haben nun Berufe die verschiendene Effekte auf die Siedlungen haben, das Problem ist nicht das Event selber abzufragen, sondern das ausführen des Event selber.

Meine Idee war jetzt das ich, wenn ein Event aufgerufen wird ein Codesippet aus der Datenbank per eval ausgeführt wird. Allerdings finde ich diese Lösung nicht ganz optimal.

Das hört sich danach an, als wäre bzw soll das extrem variabel sein. Ich hoffe nicht zu sehr variabel. Ich würde kein eval nehmen, das ist fürchterlich. Versuch es doch auf ein paar Variabeln (Felder) zu begrentzen und schmeiß es dann durch ein CASE bzw switch, am besten wäre es wahrscheinlich noch im SQL selber. Ich habe das mit Missionen gemacht, ist gar nicht so schwer. Bei Bedarf kannst du meinen MySQL Code einsehen.

gepostet vor 16 Jahre von KoMtuR

Original von Nerosmeel

Meine Idee war jetzt das ich, wenn ein Event aufgerufen wird ein Codesippet aus der Datenbank per eval ausgeführt wird. Allerdings finde ich diese Lösung nicht ganz optimal.

hoffe ich konnte deutlich machen was ich meine.

Also Code in der DB halten find ich...naja. Schnelle Codeänderungen kannste da nicht machen. Warum wollt ihr denn immer alles in ne DB hauen? ^^ Event hat ein Name. Dann nimmst du einfach eine Konstante, die einen Scriptordner für Effekte angibt und kombinierst den Namen mit der Konstante und lässt es 30 Minuten kochen auf mittlerer Hitze. Danach, wenn du alles gecheckt hast, ob das Script auch da wirklich garr ist, dann machste ein include. In dem Snippet selber ist dann halt die Funktion drin (Ich könnte ja nun von Objekten anfangen ) oder halt eine eine Anweisung, die dann die Effekte regelt. Gibst dem ganzen Codeschnipseln noch eine sinnvolle Struktur, dass man sich auch in allen zurecht findet und weiß wo was steht, und schon haste das eval umgangen und das lästige editieren, wenn du den Code mal ändern musst.

gepostet vor 16 Jahre von Nerosmeel

Danke für die Antworten, werds wohl klassisch über einen erweiterten Observer lösen. Kann ich die Events zwar nicht so leicht über ein ACP einfügen.

Da selbst mein Prof mich für eval verflucht hat...naja war halt ne Idee xD

mfg Nero

gepostet vor 16 Jahre von knalli

Original von Nerosmeel

Danke für die Antworten, werds wohl klassisch über einen erweiterten Observer lösen. Kann ich die Events zwar nicht so leicht über ein ACP einfügen.

Da selbst mein Prof mich für eval verflucht hat...naja war halt ne Idee xD

mfg Nero

Wieso.. der Oberserver kann per ACP eine abzuarbeitende Liste (Zeitmuster, vgl. Crons) abarbeiten. Jeder Job ist bsp. ein "CronModule". festgelegte Methoden für preCheck, execute, usw. Je nachdem, was und wie man das nun benötigt.

gepostet vor 16 Jahre von Nerosmeel

Ich wollte mir das einfügen neuer Datein per FTP eigentlich ersparren Also war naheliegendste Idee das ich einfach ne Code aus der Datei in nen DB Zelle kloppe, aber das Thema ist ja durch.

Aber jerzt werde ich neue Berufe, bzw. die Effekte die sie auslösen über ein Observer realisieren, und einige Parameter aus der Datenbank nehmen.

So meine Theorie.

mfg Nero

Auf diese Diskussion antworten