Direkt zum Hauptbereich

Projektzustand in der Tabelle einer mySQL Datenbank speichern

Events in Construct
(in Arbeit)
Im Construct 2 Editor sind folgende Events und Aktionen nötig:
  • Bei Klick auf den Savebutton Aktion "System -> Save" aufrufen
  • On Save Complete und On Save Fail abfangen
    • Variable "query" mit Standartwert "saves=" & URLEncode(SaveStateJSON ) setzen 
    • Der On Save Complete Event ruft mittels Ajax die Datei "ajax_save.php" auf und übergibt query als Wert
    • Der On Save Fail Event sorgt dafür, dass Du was mitbekommst, falls was schief gehen sollte. Hier sorgst du entweder mittels Console.Log() oder einem Textobjekt für Rückmeldung.
  • Damit später wieder drauf zugegriffen werden kann, gibt's ein Klick Event für einen Load Button und dieser ruft wieder AJAX auf, um "ajax_load.php" ins System zu kriegen.
  • On Ajax Complete mit Tag "load" abfangen
  • System Aktion Load from JSON ausführen mit Ajax.LastData ausführen
  • Wiederum auf On Load Complete und On Load Fail eingehen

Server
Beschaff dir online einen Server oder lade XAMPP herunter, um dir ziehmlich schnell einen eigenen Server einzurichten.
Wenn Du Zugriff auf den myPHPAdmin hast, kannst Du dort die Datenbank "games" und die Tabelle "savegames" gleich direkt erstellen. Ansonsten kannst Du auch den Code vom Punkt "Initialisiere Tabellen" benützen.


Verbindung zum mySQL Server

Für den ersten Teil erstellst Du eine Datei mit Namen "database.php". In dieser wird die Verbindung zum mySQL Server hergestellt.

// Damit alle Fehler angezeigt werden, ansonsten auskommentieren.
error_reporting(E_ALL);

define ( 'MYSQL_HOST',  'localhost' );
define ( 'MYSQL_CLIENT',  'root' );
define ( 'MYSQL_PASS',  '' );
define ( 'MYSQL_DBASE', 'c2games' );

$db_link = mysqli_connect (MYSQL_HOST, MYSQL_CLIENT, MYSQL_PASS, MYSQL_DBASE);

if ( $db_link )
{
    echo 'Verbindung erfolgreich: ';
    mysqli_set_charset($db_link, 'utf8_bin');

    // print_r( $db_link);
}
else {
    echo ('FEHLER: Keine Verbindung möglich: ' . mysqli_error());
}


Initialisiere die Tabellen
Falls Du sicher gehen willst, dass die Datenbank und Tabellen existieren kannst Du das Skript "database.php" erweitern. Damit wird die Datenstruktur in jedem Fall erstellt, was den Code einfacher zügeln lässt. Das System wird quasi geeicht.

$query = 'CREATE DATABASE c2saves';
$result = mysqli_query($query);
 
$query = 'CREATE TABLE savegames ( saveName VARCHAR(255) NOT NULL PRIMARY KEY, saveData TEXT)';
$result = mysqli_query($query);

In der Tabelle speichern

Der  zweite Teil besteht darin eine Datei "ajax_save.php" anzulegen. Diese füllst Du mit dem folgenden Code und passt ihn nach Deinem Gusto an:

header('Access-Control-Allow-Origin: *');
include 'database.php';
define('TABLE', 'savegames');

$values = 'saveName=' . mysql_escape_string($_POST['saveName']);
$values .= ', saveData=' . mysql_escape_string($_POST['saveData']);
 
$query = 'INSERT INTO TABLE SET { $values } ON DUPLICATE KEY UPDATE TABLE SET { $values }';

$result = mysqli_query($query);
echo $result; // hier kann mit dem Ajax Objekt in Construct die Rückmeldung ausgegeben werden?>

Savegame aus der Datenbank laden
Teil drei der Geschichte; Wir wollen die Daten ja auch wieder aus der DB rausholen können, oder? Hier könnten wir obiges Beispiel anpassen und so umschreiben, dass es mittels weiterer POST Variable, wie besipielsweise "modus" angesteuert wird, ob es nun Daten aufruft oder speichert. Der Einfachheit halber werden wir hier aber dafür die Datei "ajax_load.php" erstellen und Du kannst wiederum den folgenden Code einfügen:

header('Access-Control-Allow-Origin: *');



include 'database.php';

define('TABLE', 'savegames');


$condition = 'saveName="' . mysql_escape_string($_POST['saveName'].'"');
$query = "SELECT saveData FROM TABLE WHERE $condition "

$result = mysqli_query($query);
echo $result; // die gespeicherten JSON Daten werden für Construct's AJAX Objekt zurückgegeben

Zum Schluss
Dieser Eintrag lebt von Erfahrungen und passendem Lesestoff. Dabei kann er sich jederzeit weiterentwickeln. Momentan befindet er sich noch in der Fassungsphase. Dennoch hoffe ich Dir erste Ideen oder gar ein fertiges Produkt in die Hände gelegt zu haben.
Gleichwohl sei gewarnt, denn das Testprogramm und die Skripte zum Test dieses Tutorials sind gerade erst im entstehen. Sieh es so, dass ich mir hier gerade selber eine Anleitung schreibe, um meine Arbeitsmethodik zu verbessern.

Quellen
Das Construct Handbuch
https://www.construct.net/en/tutorials/speichern-momentanen-1872?highlight=25370#comments
https://www.informatikzentrale.de/mysql-tabelle-anlegen.html
https://www.php-kurs.com/mysql-datenbank-anlegen.htm


Kommentare

Die beliebtesten Posts eines Jahres

STOP RETARGETING !!! Paragon Char with ALS

  It's a bit older and made for UE4 but I bet you will get the trick. ;-) Turn the way it's done around by exporting as FBX-file to Blender and renaming the bones. Then back as FBX to Unreal Editor et voilà, no more retargeting nonsense.

Candy Rose & Lana Nikols in Agent Action Aftermath

So they came all the long way, dressed for the evening ball to find out where the secret meeting place of the world's most renowest villains is. They did expect the worst but not yet how to get off the building. Will they make it out, sneaking past the goons now streaming in from all around the property. And then she said something like: It's time to kick ass and chew bubble gum but I am all outta gum.

Galerie nach SmartAlbums Schock wieder online

E inen Moment lang, dachte ich es wäre mit dem Bilderkatalog von PiwiGo aus und vorbei. Kaum zwei Alben als SmartAlbum des gleichnamigen Plugins markiert, war's mit der Seite geschehen. Dann folgte noch ein Lockout mittels Setzen des Wartungsmodus, der sich nur noch durch löschen von DB-Einträgen wieder zurücksetzen liess. Das wiederum war der Gnadenstoss: Die Seite blieb quesi als ein leeres weisses Blatt zurück... das Chaos war perfekt. 💥 Z um Glück gab's noch ein Backup vom November - Zeitmaschine an und zurück mit dem Ding! Plugins, Updates... bleibt mir vom Leibe! Geht auch nicht ganz ohne, doch weniger ist in dem Falle tatsächlich oftmals ein gutes Stück mehr. W enn Du noch nicht reingeguckt hast, kommst Du hier direkt zum Katalog mit Bildern und Animationen, die unter anderem auch hier gepostet wurden. Und natürlich auch noch werden... 😁 P arty on and stay creative! 👊

Keeping Contact! A Standalone Social RPG System

In einer magischen Welt und einer modernen Stadt: KEEPING CONTACT! - Standalone Social system for Solo Roleplaying  mittels Listen und vorgegebenen Regelsets. Einfach das Bild mit Bōkensha-kun klicken, wobei es Dich auf's Gügl Draif weiterleitet. Ah ja, anstossen nicht vergessen, haha. Cheers! :-) Just click the image to get the PDF. Come on! Bōkensha-kun is treating you with a jug of beer!  Don't leave him hanging there... he might faint doing a solo drinking challenge! KEEPING CONTACT! is a standalone roleplaying system which is usable with many other roleplaying game rulesets. Play along with a full set of lookup tables, rules and ideas. Never get bored even when the internet connection broke down or no friend indeed see's your RPG need. Have phunn and stay creative! =) Cheers, Sam. 

Candy Rose & Lana Nikols intimate moment

   Enjoy!