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: ~~~~ {lang="perl" line="1" colla="-" file="insulae_ex_insel.txt"} #!/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## Interpreteroptionenuse strict; # Erzwingt Variablendeklarationuse warnings; # Bewirkt, das die Warnings nicht unterdrueckt werden.use DBI; # Datenbankpackagemy $xmldatei; # Name der Ausgabedatei. Wird unten Zusammengesetztmy $dateipfad = "C:\\sonstiges_programme\\xampp\\htdocs\\insulae\\XML-Austausch\\"; # Ort der Ausgabedatei# Verbindung aufbauenmy $username = "USER"; # DB-Usermy $auth = "PASS"; # DB-Passwortmy $database = "DBNAME"; # Datenbanknamemy $hostname = "DBHOST"; # Datenbankhostmy $dsn = "DBI:Pg:database=$database;host=$hostname"; # Datebanktreiber# Variablen bekannt machenmy $karte = shift @ARGV; # Die ID der abzufragenden Karte. Aus der Komanndozeilemy $karte_id; # Eindeutige Nummer der Kartemy $karte_entdeckt; # Flag ob die Karte bereits erkundet wurdemy $karte_name; # Name unter welcher die Karte bekannt istmy $karte_beschreibungsid; # ID der Beschreibungmy $karte_beschreibung; # Beschreibung der Karte, InGamemy $karte_x; # Lage des Feldes auf der X-Achsemy $karte_y; # Lage des Feldes auf der Y-Achsemy $karte_w; # Lage des Feldes auf der W-Achsemy $karte_gelaende; # Um was fuer einen Landtyp es sich handeltmy $karte_land; # Art des Gelaendes, Ebene, Wueste, Schnee etcmy $karte_landwert; # Die Qualitaet des Feldesmy $karte_jahreszeit; # Die derzeitig Jahreszeit auf der Inselmy $karte_herkunft; # In welchem Spiel die Karte ihren Ursprung hatmy $karte_ersteller; # Wer die Karte entworfen hat. # Variablen fuer die Zeitermittlungmy $sec;my $min;my $hour;my $mday;my $mon;my $year;my $wday;my $ydat;my $isdst;my $Xdatum;my $statement; # Abfrage fuer die Kartenbasisdatenmy $stmt_beschreibung; # Abfrage um die Beschreibung zu ermittelnmy $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 anlegenmy $mapname = $karte_name;$mapname =~ s/[ ]| /_/g;$xmldatei=$dateipfad . "insulae_insel_" . $mapname . ".xml";open (XMLDATEI,">$xmldatei");print XMLDATEI "\n";print XMLDATEI "\n";print XMLDATEI " \n";# Kartenheaderprint 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 ~~~~