Bei der Arbeit an den XML-Exporten ist mir bei den Karten noch eine unzulaenglichkeit aufgefallen. So wird bisher nicht gespeichert wer denn eine Karte entwickelt hat.
Dieses habe ich nun nachgezogen und auch das Export-Skript erweitert. So kann, korrekterweise, ausgelesen werden wer denn eine Karte erstellt hat. Was noch offen ist, ist eine Pruefung ob im Trigger fuer Innenstaedte ich dieses auch noch nachziehen muss.
Export-Skript:
#!/usr/bin/perl -w
# Inselexport
# Exportiert eine Insel aus Insulae in das Intergamesformat
# Dabei wird eine eventuell bereits bestehende Datei ersetzt.
#
# Aufruf: insulae_ex_insuel.pl [Inselid]
#
# @author Jan H. Krueger
# @since 13.04.2008
#
# Interpreteroptionen
use strict; # Erzwingt Variablendeklaration
use warnings; # Bewirkt, das die Warnings nicht unterdrueckt werden.
use DBI; # Datenbankpackage
my $xmldatei; # Name der Ausgabedatei. Wird unten Zusammengesetzt
my $dateipfad = "C:\\sonstiges_programme\\xampp\\htdocs\\insulae\\XML-Austausch\\"; # Ort der Ausgabedatei
# Verbindung aufbauen
my $username = "USER"; # DB-User
my $auth = "PASS"; # DB-Passwort
my $database = "DBNAME"; # Datenbankname
my $hostname = "DBHOST"; # Datenbankhost
my $dsn = "DBI:Pg:database=$database;host=$hostname"; # Datebanktreiber
# Variablen bekannt machen
my $karte = shift @ARGV; # Die ID der abzufragenden Karte. Aus der Komanndozeile
my $karte_id; # Eindeutige Nummer der Karte
my $karte_entdeckt; # Flag ob die Karte bereits erkundet wurde
my $karte_name; # Name unter welcher die Karte bekannt ist
my $karte_beschreibungsid; # ID der Beschreibung
my $karte_beschreibung; # Beschreibung der Karte, InGame
my $karte_x; # Lage des Feldes auf der X-Achse
my $karte_y; # Lage des Feldes auf der Y-Achse
my $karte_w; # Lage des Feldes auf der W-Achse
my $karte_gelaende; # Um was fuer einen Landtyp es sich handelt
my $karte_land; # Art des Gelaendes, Ebene, Wueste, Schnee etc
my $karte_landwert; # Die Qualitaet des Feldes
my $karte_jahreszeit; # Die derzeitig Jahreszeit auf der Insel
my $karte_herkunft; # In welchem Spiel die Karte ihren Ursprung hat
my $karte_ersteller; # Wer die Karte entworfen hat.
# Variablen fuer die Zeitermittlung
my $sec;
my $min;
my $hour;
my $mday;
my $mon;
my $year;
my $wday;
my $ydat;
my $isdst;
my $Xdatum;
my $statement; # Abfrage fuer die Kartenbasisdaten
my $stmt_beschreibung; # Abfrage um die Beschreibung zu ermitteln
my $stmt_karte; # Statement um die Karte auszulesen
# Ermitteln des Datums
($sec,$min,$hour,$mday,$mon,$year,$wday,$ydat,$isdst)=localtime();
$mon=$mon+1;
$year=$year +1900;
if (length($mon) == 1)
{
$mon="0$mon";
}
if(length($mday) == 1)
{
$mday="0$mday";
}
$Xdatum=$year."-".$mon."-".$mday;
# Konstruktor und Verbindung:
my $dbh = DBI::->connect( $dsn, $username, $auth) or die "connection failed $DBI::errstr";
# Abfrage anlegen
$statement = $dbh->prepare('SELECT karte_id, karte_name, karte_entdeckt, karte_beschreibung, karte_jahreszeit, karte_herkunft, karte_ersteller FROM welt.karte_name WHERE karte_id = '. $karte);
# Abfrage ausfuehren
$statement->execute or die $statement->errstr;
# binden der variablen an die felder
$statement->bind_col(1,\$karte_id);
$statement->bind_col(2,\$karte_name);
$statement->bind_col(3,\$karte_entdeckt);
$statement->bind_col(4,\$karte_beschreibungsid);
$statement->bind_col(5,\$karte_jahreszeit);
$statement->bind_col(6,\$karte_herkunft);
$statement->bind_col(7,\$karte_ersteller);
my @data = $statement->fetchrow_array;
# Dateiname zusammensetzen und Datei anlegen
my $mapname = $karte_name;
$mapname =~ s/[ ]| /_/g;
$xmldatei=$dateipfad . "insulae_insel_" . $mapname . ".xml";
open (XMLDATEI,">$xmldatei");
print XMLDATEI "\n";
print XMLDATEI "\n";
print XMLDATEI " \n";
# Kartenheader
print XMLDATEI " " . $karte_name . "\n";
print XMLDATEI " " . $karte_id . "\n";
print XMLDATEI " ". $karte_herkunft ."\n";
print XMLDATEI " ". $karte_ersteller ."\n";
print XMLDATEI " " . $karte_entdeckt . "\n";
print XMLDATEI " " . $karte_jahreszeit . "\n";
print XMLDATEI " ".$Xdatum."\n";
# Abfrage der Kartenbeschreibung
$stmt_beschreibung = $dbh->prepare('SELECT beschreibung_text FROM sonstiges.beschreibung WHERE beschreibung_id = '.$karte_beschreibungsid);
$stmt_beschreibung->execute or die $stmt_beschreibung->errstr;
$stmt_beschreibung->bind_col(1,\$karte_beschreibung);
while ( my @data = $stmt_beschreibung->fetchrow_array ) {
print XMLDATEI " " . $karte_beschreibung . "\n";
}
print XMLDATEI " \n";
# Abfrage der Kartendetails
$stmt_karte = $dbh->prepare('SELECT karte_x, karte_y, karte_w, karte_gelaende, karte_land, karte_landwert FROM welt.karte WHERE karte_id = '.$karte_id);
$stmt_karte->execute or die $stmt_karte->errstr;
$stmt_karte->bind_col(1,\$karte_x);
$stmt_karte->bind_col(2,\$karte_y);
$stmt_karte->bind_col(3,\$karte_w);
$stmt_karte->bind_col(4,\$karte_gelaende);
$stmt_karte->bind_col(5,\$karte_land);
$stmt_karte->bind_col(6,\$karte_landwert);
print XMLDATEI " \n";
while ( my @data = $stmt_karte->fetchrow_array ) {
print XMLDATEI " \n";
print XMLDATEI "
\n";
print XMLDATEI " " . $karte_x . "\n";
print XMLDATEI " " . $karte_y . "\n";
print XMLDATEI " " . $karte_w . "\n";
print XMLDATEI " \n";
print XMLDATEI " \n";
print XMLDATEI " " . $karte_land . "\n";
print XMLDATEI " " . $karte_gelaende . "\n";
print XMLDATEI " \n";
print XMLDATEI " \n";
print XMLDATEI " j\n";
print XMLDATEI " j\n";
print XMLDATEI " " . $karte_landwert . "\n";
print XMLDATEI " \n";
print XMLDATEI " \n";
}
print XMLDATEI " \n";
print XMLDATEI "\n";
close (XMLDATEI);
# Das Statement beenden
$statement->finish;
$stmt_beschreibung->finish;
$stmt_karte->finish;
# Verbindung trennen
$dbh->disconnect;
# Skriptende