|
@@ -0,0 +1,1172 @@
|
|
|
+#include "Editor.h"
|
|
|
+#include <Datei.h>
|
|
|
+#include "Reader.h"
|
|
|
+
|
|
|
+// Inhalt der Editor Klasse aus Editor.h
|
|
|
+// Konstruktor
|
|
|
+Editor::Editor()
|
|
|
+{
|
|
|
+ ref = 1;
|
|
|
+}
|
|
|
+
|
|
|
+// Destruktor
|
|
|
+Editor::~Editor()
|
|
|
+{}
|
|
|
+
|
|
|
+// nicht constant
|
|
|
+void Editor::setPfad( char *pfad )
|
|
|
+{
|
|
|
+ this->pfad = pfad;
|
|
|
+ this->pfad += "/editor";
|
|
|
+}
|
|
|
+
|
|
|
+void Editor::open()
|
|
|
+{
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+bool Editor::nachricht( SKlient *k )
|
|
|
+{
|
|
|
+ err = "";
|
|
|
+ char n = 0;
|
|
|
+ k->getNachrichtEncrypted( &n, 1 );
|
|
|
+ switch( n )
|
|
|
+ {
|
|
|
+ case 0: // Initialisierung
|
|
|
+ k->sendeEncrypted( "\1", 1 );
|
|
|
+ if( DateiExistiert( pfad ) )
|
|
|
+ k->sendeEncrypted( "\2", 1 );
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if( createSitzung() )
|
|
|
+ k->sendeEncrypted( "\1", 1 );
|
|
|
+ else
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ return 1;
|
|
|
+ case 1: // Sitzung verwerfen
|
|
|
+ if( createSitzung() )
|
|
|
+ k->sendeEncrypted( "\1", 1 );
|
|
|
+ else
|
|
|
+ return 0;
|
|
|
+ return 1;
|
|
|
+ case 2: // Sitzung speichern unt beenden
|
|
|
+ if( saveSitzung() )
|
|
|
+ k->sendeEncrypted( "\1", 1 );
|
|
|
+ else
|
|
|
+ return 0;
|
|
|
+ return 1;
|
|
|
+ case 3: // Lade Spieler Daten
|
|
|
+ {
|
|
|
+ Text tmpPf = pfad.getText();
|
|
|
+ tmpPf += "/player";
|
|
|
+ Datei d;
|
|
|
+ d.setDatei( tmpPf );
|
|
|
+ RCArray< Text > *files = d.getDateiListe();
|
|
|
+ if( files )
|
|
|
+ {
|
|
|
+ k->sendeEncrypted( "\1", 1 );
|
|
|
+ int anz = files->getEintragAnzahl();
|
|
|
+ k->sendeEncrypted( (char *)& anz, 4 );
|
|
|
+ for( int i = 0; i < anz; i++ )
|
|
|
+ {
|
|
|
+ Text pf = tmpPf;
|
|
|
+ pf += "/";
|
|
|
+ pf += files->z( i )->getText();
|
|
|
+ Datei player;
|
|
|
+ player.setDatei( pf );
|
|
|
+ player.open( Datei::Style::lesen );
|
|
|
+ SpielerStr p( player.getThis() );
|
|
|
+ player.close();
|
|
|
+ k->sendeEncrypted( (char *)& p.id, 4 );
|
|
|
+ k->sendeEncrypted( (char *)& p.pos.x, 4 );
|
|
|
+ k->sendeEncrypted( (char *)& p.pos.y, 4 );
|
|
|
+ k->sendeEncrypted( (char *)& p.rot, 8 );
|
|
|
+ k->sendeEncrypted( (char *)& p.beschleunigung, 8 );
|
|
|
+ k->sendeEncrypted( (char *)& p.maxStability, 4 );
|
|
|
+ k->sendeEncrypted( (char *)& p.maxEnergie, 4 );
|
|
|
+ k->sendeEncrypted( (char *)& p.reparatur, 8 );
|
|
|
+ k->sendeEncrypted( (char *)& p.akkuLeistung, 8 );
|
|
|
+ k->sendeEncrypted( (char *)& p.laserIntensity, 4 );
|
|
|
+ k->sendeEncrypted( (char *)& p.laserEffizienz, 4 );
|
|
|
+ k->sendeEncrypted( (char *)& p.laserTempo, 4 );
|
|
|
+ k->sendeEncrypted( (char *)& p.wendigkeit, 8 );
|
|
|
+ k->sendeEncrypted( (char *)& p.antriebEffizienz, 8 );
|
|
|
+ k->sendeEncrypted( (char *)& p.energieSchild, 8 );
|
|
|
+ k->sendeEncrypted( (char *)& p.energieSchildEffizienz, 8 );
|
|
|
+ k->sendeEncrypted( (char *)& p.netzwerk, 4 );
|
|
|
+ k->sendeEncrypted( (char *)& p.skillPunkte, 4 );
|
|
|
+ k->sendeEncrypted( (char *)& p.m2d, 4 );
|
|
|
+ k->sendeEncrypted( (char *)& p.bild, 4 );
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ err = "Fehler beim laden von ";
|
|
|
+ err += tmpPf.getText();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ case 4: // Lade Team Daten
|
|
|
+ {
|
|
|
+ Text tmpPf = pfad.getText();
|
|
|
+ tmpPf += "/team";
|
|
|
+ Datei d;
|
|
|
+ d.setDatei( tmpPf );
|
|
|
+ RCArray< Text > *files = d.getDateiListe();
|
|
|
+ if( files )
|
|
|
+ {
|
|
|
+ k->sendeEncrypted( "\1", 1 );
|
|
|
+ int anz = files->getEintragAnzahl();
|
|
|
+ k->sendeEncrypted( (char *)& anz, 4 );
|
|
|
+ for( int i = 0; i < anz; i++ )
|
|
|
+ {
|
|
|
+ Text pf = tmpPf;
|
|
|
+ pf += "/";
|
|
|
+ pf += files->z( i )->getText();
|
|
|
+ Datei team;
|
|
|
+ team.setDatei( pf );
|
|
|
+ team.open( Datei::Style::lesen );
|
|
|
+ TeamStr t( team.getThis() );
|
|
|
+ team.close();
|
|
|
+ k->sendeEncrypted( (char *)& t.id, 4 );
|
|
|
+ k->sendeEncrypted( (char *)& t.maxPunkte, 4 );
|
|
|
+ k->sendeEncrypted( (char *)& t.beschleunigung, 8 );
|
|
|
+ k->sendeEncrypted( (char *)& t.maxStability, 4 );
|
|
|
+ k->sendeEncrypted( (char *)& t.maxEnergie, 4 );
|
|
|
+ k->sendeEncrypted( (char *)& t.reparatur, 8 );
|
|
|
+ k->sendeEncrypted( (char *)& t.akkuLeistung, 8 );
|
|
|
+ k->sendeEncrypted( (char *)& t.laserIntensity, 4 );
|
|
|
+ k->sendeEncrypted( (char *)& t.laserEffizienz, 4 );
|
|
|
+ k->sendeEncrypted( (char *)& t.laserTempo, 4 );
|
|
|
+ k->sendeEncrypted( (char *)& t.wendigkeit, 8 );
|
|
|
+ k->sendeEncrypted( (char *)& t.antriebEffizienz, 8 );
|
|
|
+ k->sendeEncrypted( (char *)& t.energieSchild, 8 );
|
|
|
+ k->sendeEncrypted( (char *)& t.energieSchildEffizienz, 8 );
|
|
|
+ k->sendeEncrypted( (char *)& t.punkte, 4 );
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ err = "Fehler beim laden von ";
|
|
|
+ err += tmpPf.getText();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ case 5: // Lade Objekt Daten
|
|
|
+ {
|
|
|
+ Text tmpPf = pfad.getText();
|
|
|
+ tmpPf += "/objekt";
|
|
|
+ Datei d;
|
|
|
+ d.setDatei( tmpPf );
|
|
|
+ RCArray< Text > *files = d.getDateiListe();
|
|
|
+ if( files )
|
|
|
+ {
|
|
|
+ k->sendeEncrypted( "\1", 1 );
|
|
|
+ int anz = files->getEintragAnzahl();
|
|
|
+ k->sendeEncrypted( (char *)& anz, 4 );
|
|
|
+ for( int i = 0; i < anz; i++ )
|
|
|
+ {
|
|
|
+ Text pf = tmpPf;
|
|
|
+ pf += "/";
|
|
|
+ pf += files->z( i )->getText();
|
|
|
+ Datei object;
|
|
|
+ object.setDatei( pf );
|
|
|
+ object.open( Datei::Style::lesen );
|
|
|
+ ObjektStr o( object.getThis() );
|
|
|
+ object.close();
|
|
|
+ k->sendeEncrypted( (char *)& o.pos.x, 4 );
|
|
|
+ k->sendeEncrypted( (char *)& o.pos.y, 4 );
|
|
|
+ k->sendeEncrypted( (char *)& o.rot, 4 );
|
|
|
+ k->sendeEncrypted( (char *)& o.scale, 4 );
|
|
|
+ k->sendeEncrypted( (char *)& o.id, 4 );
|
|
|
+ k->sendeEncrypted( (char *)& o.m2d, 4 );
|
|
|
+ k->sendeEncrypted( (char *)& o.bild, 4 );
|
|
|
+ k->sendeEncrypted( (char *)& o.style, 4 );
|
|
|
+ k->sendeEncrypted( (char *)& o.maxStability, 4 );
|
|
|
+ k->sendeEncrypted( (char *)& o.maxEnergie, 4 );
|
|
|
+ k->sendeEncrypted( (char *)& o.energieRadius, 4 );
|
|
|
+ k->sendeEncrypted( (char *)& o.reparatur, 8 );
|
|
|
+ k->sendeEncrypted( (char *)& o.akkuLeistung, 8 );
|
|
|
+ k->sendeEncrypted( (char *)& o.team, 1 );
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ err = "Fehler beim laden von ";
|
|
|
+ err += tmpPf.getText();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ case 6: // Save Player
|
|
|
+ {
|
|
|
+ k->sendeEncrypted( "\1", 1 );
|
|
|
+ SpielerStr p( 0 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& p.id, 4 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& p.pos.x, 4 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& p.pos.y, 4 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& p.rot, 8 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& p.beschleunigung, 8 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& p.maxStability, 4 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& p.maxEnergie, 4 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& p.reparatur, 8 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& p.akkuLeistung, 8 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& p.laserIntensity, 4 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& p.laserEffizienz, 4 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& p.laserTempo, 4 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& p.wendigkeit, 8 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& p.antriebEffizienz, 8 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& p.energieSchild, 8 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& p.energieSchildEffizienz, 8 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& p.netzwerk, 4 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& p.skillPunkte, 4 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& p.m2d, 4 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& p.bild, 4 );
|
|
|
+ Text pf = pfad.getText();
|
|
|
+ pf += "/player/";
|
|
|
+ pf += p.id;
|
|
|
+ pf += ".p";
|
|
|
+ Datei player;
|
|
|
+ player.setDatei( pf );
|
|
|
+ if( player.open( Datei::Style::schreiben ) )
|
|
|
+ {
|
|
|
+ p.save( player.getThis() );
|
|
|
+ player.close();
|
|
|
+ k->sendeEncrypted( "\1", 1 );
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ err = "Fehler beim Schreiben von ";
|
|
|
+ err += pf.getText();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ case 7: // Save Team
|
|
|
+ {
|
|
|
+ k->sendeEncrypted( "\1", 1 );
|
|
|
+ TeamStr t( 0 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& t.id, 4 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& t.maxPunkte, 4 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& t.beschleunigung, 8 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& t.maxStability, 4 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& t.maxEnergie, 4 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& t.reparatur, 8 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& t.akkuLeistung, 8 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& t.laserIntensity, 4 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& t.laserEffizienz, 4 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& t.laserTempo, 4 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& t.wendigkeit, 8 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& t.antriebEffizienz, 8 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& t.energieSchild, 8 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& t.energieSchildEffizienz, 8 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& t.punkte, 4 );
|
|
|
+ Text pf = pfad.getText();
|
|
|
+ pf += "/player/";
|
|
|
+ pf += t.id;
|
|
|
+ pf += ".t";
|
|
|
+ Datei team;
|
|
|
+ team.setDatei( pf );
|
|
|
+ if( team.open( Datei::Style::schreiben ) )
|
|
|
+ {
|
|
|
+ t.save( team.getThis() );
|
|
|
+ team.close();
|
|
|
+ k->sendeEncrypted( "\1", 1 );
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ err = "Fehler beim Schreiben von ";
|
|
|
+ err += pf.getText();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ case 8: // Save Objekt
|
|
|
+ {
|
|
|
+ k->sendeEncrypted( "\1", 1 );
|
|
|
+ ObjektStr o( 0 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& o.pos.x, 4 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& o.pos.y, 4 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& o.rot, 4 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& o.scale, 4 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& o.id, 4 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& o.m2d, 4 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& o.bild, 4 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& o.style, 4 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& o.maxStability, 4 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& o.maxEnergie, 4 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& o.energieRadius, 4 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& o.reparatur, 8 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& o.akkuLeistung, 8 );
|
|
|
+ k->getNachrichtEncrypted( (char *)& o.team, 1 );
|
|
|
+ Text pf = pfad.getText();
|
|
|
+ pf += "/objekt/";
|
|
|
+ pf += o.id;
|
|
|
+ pf += ".o";
|
|
|
+ Datei objekt;
|
|
|
+ objekt.setDatei( pf );
|
|
|
+ if( objekt.erstellen() && objekt.open( Datei::Style::schreiben ) )
|
|
|
+ {
|
|
|
+ o.save( objekt.getThis() );
|
|
|
+ objekt.close();
|
|
|
+ k->sendeEncrypted( "\1", 1 );
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ err = "Fehler beim Schreiben von ";
|
|
|
+ err += pf.getText();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ case 9: // Delete Objekt
|
|
|
+ {
|
|
|
+ k->sendeEncrypted( "\1", 1 );
|
|
|
+ int id;
|
|
|
+ k->getNachrichtEncrypted( (char *)& id, 4 );
|
|
|
+ Text pf = pfad.getText();
|
|
|
+ pf += "/objekt/";
|
|
|
+ pf += id;
|
|
|
+ pf += ".o";
|
|
|
+ if( DateiRemove( pf ) )
|
|
|
+ {
|
|
|
+ k->sendeEncrypted( "\1", 1 );
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ err = "Fehler beim löschen der Datei ";
|
|
|
+ err += pf;
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ case 0xA: // Lade Resourcen
|
|
|
+ {
|
|
|
+ Text tmpPf = pfad.getText();
|
|
|
+ tmpPf += "/resource";
|
|
|
+ Datei d;
|
|
|
+ d.setDatei( tmpPf );
|
|
|
+ RCArray< Text > *files = d.getDateiListe();
|
|
|
+ if( files )
|
|
|
+ {
|
|
|
+ k->sendeEncrypted( "\1", 1 );
|
|
|
+ int anz = files->getEintragAnzahl();
|
|
|
+ k->sendeEncrypted( (char *)& anz, 4 );
|
|
|
+ for( int i = 0; i < anz; i++ )
|
|
|
+ {
|
|
|
+ Text pf = tmpPf;
|
|
|
+ pf += "/";
|
|
|
+ pf += files->z( i )->getText();
|
|
|
+ Datei resource;
|
|
|
+ resource.setDatei( pf );
|
|
|
+ resource.open( Datei::Style::lesen );
|
|
|
+ int id = *files->z( i );
|
|
|
+ k->sendeEncrypted( (char *)& id, 4 );
|
|
|
+ char len = 0;
|
|
|
+ resource.lese( &len, 1 );
|
|
|
+ char *path = new char[ len + 1 ];
|
|
|
+ path[ (int)len ] = 0;
|
|
|
+ resource.lese( path, len );
|
|
|
+ k->sendeEncrypted( &len, 1 );
|
|
|
+ k->sendeEncrypted( path, len );
|
|
|
+ delete[] path;
|
|
|
+ resource.close();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ err = "Fehler beim laden von ";
|
|
|
+ err += tmpPf.getText();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ case 0xB: // Map Size
|
|
|
+ {
|
|
|
+ Text tmpPf = pfad.getText();
|
|
|
+ tmpPf += "/size";
|
|
|
+ Datei d;
|
|
|
+ d.setDatei( tmpPf );
|
|
|
+ if( d.open( Datei::Style::lesen ) )
|
|
|
+ {
|
|
|
+ k->sendeEncrypted( "\1", 1 );
|
|
|
+ int size = 0;
|
|
|
+ d.lese( (char *)& size, 4 );
|
|
|
+ k->sendeEncrypted( (char *)& size, 4 );
|
|
|
+ d.lese( (char *)& size, 4 );
|
|
|
+ k->sendeEncrypted( (char *)& size, 4 );
|
|
|
+ d.close();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ err = "Fehler beim laden von ";
|
|
|
+ err += tmpPf.getText();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ case 0xC: // Add Resource
|
|
|
+ {
|
|
|
+ k->sendeEncrypted( "\1", 1 );
|
|
|
+ Datei d;
|
|
|
+ d.setDatei( Text( pfad.getText() ) + "/resource" );
|
|
|
+ RCArray<Text> *list = d.getDateiListe();
|
|
|
+ int nId = 0;
|
|
|
+ bool found = 0;
|
|
|
+ do
|
|
|
+ {
|
|
|
+ nId++;
|
|
|
+ found = 0;
|
|
|
+ for( auto t = list->getIterator(); t; t++ )
|
|
|
+ {
|
|
|
+ if( t->istGleich( Text( nId ) + ".r" ) )
|
|
|
+ {
|
|
|
+ found = 1;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } while( found );
|
|
|
+ list->release();
|
|
|
+ unsigned char len = 0;
|
|
|
+ k->getNachrichtEncrypted( (char *)& len, 1 );
|
|
|
+ char *path = new char[ len + 1 ];
|
|
|
+ path[ len ] = 0;
|
|
|
+ k->getNachrichtEncrypted( path, len );
|
|
|
+ d.setDatei( Text( pfad.getText() ) + "/resource/" + nId + ".r" );
|
|
|
+ if( d.open( Datei::Style::schreiben ) )
|
|
|
+ {
|
|
|
+ d.schreibe( (char *)& len, 1 );
|
|
|
+ d.schreibe( path, len );
|
|
|
+ d.close();
|
|
|
+ k->sendeEncrypted( "\1", 1 );
|
|
|
+ k->sendeEncrypted( (char *)& nId, 4 );
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ err = "Fehler beim schreiben der Datei.";
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ default:
|
|
|
+ err = "Unbekannte Nachricht. Error Code: " __FILE__ ":";
|
|
|
+ err += __LINE__;
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+// constant
|
|
|
+char *Editor::getLetzterFehler() const
|
|
|
+{
|
|
|
+ return err;
|
|
|
+}
|
|
|
+
|
|
|
+// Reference Counting
|
|
|
+ESEditorV *Editor::getThis()
|
|
|
+{
|
|
|
+ ref++;
|
|
|
+ return this;
|
|
|
+}
|
|
|
+
|
|
|
+ESEditorV *Editor::release()
|
|
|
+{
|
|
|
+ ref--;
|
|
|
+ if( !ref )
|
|
|
+ delete this;
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+// privat
|
|
|
+bool Editor::createSitzung()
|
|
|
+{
|
|
|
+ DateiRemove( pfad );
|
|
|
+ Text pf = pfad.getText();
|
|
|
+ pf.remove( pf.getLength() - 6, pf.getLength() );
|
|
|
+ pf += "map/server/sts.ltgd";
|
|
|
+ int spielerAnzahl;
|
|
|
+ int teamAnzahl;
|
|
|
+ Datei d;
|
|
|
+ d.setDatei( pf );
|
|
|
+ if( !d.existiert() || d.istOrdner() )
|
|
|
+ {
|
|
|
+ err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim lesen von ";
|
|
|
+ err += pf;
|
|
|
+ err += ". Fehler Code: " __FILE__ ":";
|
|
|
+ err += __LINE__;
|
|
|
+ err += "\n";
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ d.open( Datei::Style::lesen );
|
|
|
+ d.lese( (char *)& spielerAnzahl, 4 );
|
|
|
+ d.lese( (char *)& teamAnzahl, 4 );
|
|
|
+ d.close();
|
|
|
+ pf = pfad.getText();
|
|
|
+ pf.remove( pf.getLength() - 6, pf.getLength() );
|
|
|
+ pf += "map/server/data.map";
|
|
|
+ d.setDatei( pf.getText() );
|
|
|
+ if( d.open( Datei::Style::lesen ) )
|
|
|
+ {
|
|
|
+ // map size
|
|
|
+ pf = pfad.getText();
|
|
|
+ pf += "/size";
|
|
|
+ Datei s;
|
|
|
+ s.setDatei( pf.getText() );
|
|
|
+ if( !s.open( Datei::Style::schreiben ) )
|
|
|
+ {
|
|
|
+ err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim lesen von ";
|
|
|
+ err += pf;
|
|
|
+ err += ". Fehler Code: " __FILE__ ":";
|
|
|
+ err += __LINE__;
|
|
|
+ err += "\n";
|
|
|
+ }
|
|
|
+ __int64 size = 0;
|
|
|
+ d.lese( (char *)& size, 8 );
|
|
|
+ s.schreibe( (char *)& size, 8 );
|
|
|
+ s.close();
|
|
|
+ // teams
|
|
|
+ pf = pfad.getText();
|
|
|
+ pf += "/team/";
|
|
|
+ for( int i = 0; i < teamAnzahl; i++ )
|
|
|
+ {
|
|
|
+ Text tmpPf = pf.getText();
|
|
|
+ tmpPf += i;
|
|
|
+ tmpPf += ".t";
|
|
|
+ int maxWbZeit;
|
|
|
+ int punkte;
|
|
|
+ d.lese( (char *)& maxWbZeit, 4 );
|
|
|
+ d.lese( (char *)& punkte, 4 );
|
|
|
+ Datei t;
|
|
|
+ t.setDatei( tmpPf );
|
|
|
+ t.erstellen();
|
|
|
+ if( !t.open( Datei::Style::schreiben ) )
|
|
|
+ {
|
|
|
+ err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
|
|
|
+ err += tmpPf;
|
|
|
+ err += ". Fehler Code: " __FILE__ ":";
|
|
|
+ err += __LINE__;
|
|
|
+ err += "\n";
|
|
|
+ }
|
|
|
+ t.schreibe( (char *)& maxWbZeit, 4 );
|
|
|
+ t.schreibe( (char *)& punkte, 4 );
|
|
|
+ t.close();
|
|
|
+ }
|
|
|
+ // spieler
|
|
|
+ pf = pfad.getText();
|
|
|
+ pf += "/player/";
|
|
|
+ for( int i = 0; i < spielerAnzahl; i++ )
|
|
|
+ {
|
|
|
+ Text tmpPf = pf.getText();
|
|
|
+ tmpPf += i;
|
|
|
+ tmpPf += ".t";
|
|
|
+ int spawnX;
|
|
|
+ int spawnY;
|
|
|
+ d.lese( (char *)& spawnX, 4 );
|
|
|
+ d.lese( (char *)& spawnY, 4 );
|
|
|
+ Datei s;
|
|
|
+ s.setDatei( tmpPf );
|
|
|
+ s.erstellen();
|
|
|
+ if( !s.open( Datei::Style::schreiben ) )
|
|
|
+ {
|
|
|
+ err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
|
|
|
+ err += tmpPf;
|
|
|
+ err += ". Fehler Code: " __FILE__ ":";
|
|
|
+ err += __LINE__;
|
|
|
+ err += "\n";
|
|
|
+ }
|
|
|
+ s.schreibe( (char *)& spawnX, 4 );
|
|
|
+ s.schreibe( (char *)& spawnY, 4 );
|
|
|
+ s.close();
|
|
|
+ }
|
|
|
+ // barieren
|
|
|
+ pf = pfad.getText();
|
|
|
+ pf += "/bariere/";
|
|
|
+ int anz;
|
|
|
+ d.lese( (char *)&anz, 4 );
|
|
|
+ for( int i = 0; i < anz; i++ )
|
|
|
+ {
|
|
|
+ int id;
|
|
|
+ d.lese( (char *)& id, 4 );
|
|
|
+ Text tmpPf = pf.getText();
|
|
|
+ tmpPf += id;
|
|
|
+ tmpPf += ".t";
|
|
|
+ char buffer[ 32 ];
|
|
|
+ d.lese( buffer, 32 );
|
|
|
+ Datei s;
|
|
|
+ s.setDatei( tmpPf );
|
|
|
+ s.erstellen();
|
|
|
+ if( !s.open( Datei::Style::schreiben ) )
|
|
|
+ {
|
|
|
+ err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
|
|
|
+ err += tmpPf;
|
|
|
+ err += ". Fehler Code: " __FILE__ ":";
|
|
|
+ err += __LINE__;
|
|
|
+ err += "\n";
|
|
|
+ }
|
|
|
+ s.schreibe( buffer, 32 );
|
|
|
+ s.close();
|
|
|
+ }
|
|
|
+ // basen
|
|
|
+ pf = pfad.getText();
|
|
|
+ pf += "/base/";
|
|
|
+ d.lese( (char *)&anz, 4 );
|
|
|
+ for( int i = 0; i < anz; i++ )
|
|
|
+ {
|
|
|
+ int id;
|
|
|
+ d.lese( (char *)& id, 4 );
|
|
|
+ Text tmpPf = pf.getText();
|
|
|
+ tmpPf += id;
|
|
|
+ tmpPf += ".t";
|
|
|
+ char buffer[ 24 ];
|
|
|
+ d.lese( buffer, 24 );
|
|
|
+ Datei s;
|
|
|
+ s.setDatei( tmpPf );
|
|
|
+ s.erstellen();
|
|
|
+ if( !s.open( Datei::Style::schreiben ) )
|
|
|
+ {
|
|
|
+ err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
|
|
|
+ err += tmpPf;
|
|
|
+ err += ". Fehler Code: " __FILE__ ":";
|
|
|
+ err += __LINE__;
|
|
|
+ err += "\n";
|
|
|
+ }
|
|
|
+ s.schreibe( buffer, 24 );
|
|
|
+ s.close();
|
|
|
+ }
|
|
|
+ // drops
|
|
|
+ pf = pfad.getText();
|
|
|
+ pf += "/drop/";
|
|
|
+ d.lese( (char *)&anz, 4 );
|
|
|
+ for( int i = 0; i < anz; i++ )
|
|
|
+ {
|
|
|
+ int id;
|
|
|
+ d.lese( (char *)& id, 4 );
|
|
|
+ Text tmpPf = pf.getText();
|
|
|
+ tmpPf += id;
|
|
|
+ tmpPf += ".t";
|
|
|
+ char buffer[ 96 ];
|
|
|
+ d.lese( buffer, 96 );
|
|
|
+ Datei s;
|
|
|
+ s.setDatei( tmpPf );
|
|
|
+ s.erstellen();
|
|
|
+ if( !s.open( Datei::Style::schreiben ) )
|
|
|
+ {
|
|
|
+ err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
|
|
|
+ err += tmpPf;
|
|
|
+ err += ". Fehler Code: " __FILE__ ":";
|
|
|
+ err += __LINE__;
|
|
|
+ err += "\n";
|
|
|
+ }
|
|
|
+ s.schreibe( buffer, 96 );
|
|
|
+ unsigned char len;
|
|
|
+ d.lese( (char *)&len, 1 );
|
|
|
+ char *name = new char[ (int)len + 1 ];
|
|
|
+ d.lese( name, len );
|
|
|
+ name[ (int)len ] = 0;
|
|
|
+ s.schreibe( (char *)&len, 1 );
|
|
|
+ s.schreibe( (char *)&name, len );
|
|
|
+ delete[] name;
|
|
|
+ s.close();
|
|
|
+ }
|
|
|
+ // schalter
|
|
|
+ pf = pfad.getText();
|
|
|
+ pf += "/schalter/";
|
|
|
+ d.lese( (char *)&anz, 4 );
|
|
|
+ for( int i = 0; i < anz; i++ )
|
|
|
+ {
|
|
|
+ int id;
|
|
|
+ d.lese( (char *)& id, 4 );
|
|
|
+ Text tmpPf = pf.getText();
|
|
|
+ tmpPf += id;
|
|
|
+ tmpPf += ".t";
|
|
|
+ char buffer[ 17 ];
|
|
|
+ d.lese( buffer, 17 );
|
|
|
+ Datei s;
|
|
|
+ s.setDatei( tmpPf );
|
|
|
+ s.erstellen();
|
|
|
+ if( !s.open( Datei::Style::schreiben ) )
|
|
|
+ {
|
|
|
+ err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
|
|
|
+ err += tmpPf;
|
|
|
+ err += ". Fehler Code: " __FILE__ ":";
|
|
|
+ err += __LINE__;
|
|
|
+ err += "\n";
|
|
|
+ }
|
|
|
+ s.schreibe( buffer, 17 );
|
|
|
+ s.close();
|
|
|
+ }
|
|
|
+ // schiene
|
|
|
+ pf = pfad.getText();
|
|
|
+ pf += "/schiene/";
|
|
|
+ d.lese( (char *)&anz, 4 );
|
|
|
+ for( int i = 0; i < anz; i++ )
|
|
|
+ {
|
|
|
+ int id;
|
|
|
+ d.lese( (char *)& id, 4 );
|
|
|
+ Text tmpPf = pf.getText();
|
|
|
+ tmpPf += id;
|
|
|
+ tmpPf += ".t";
|
|
|
+ char buffer[ 16 ];
|
|
|
+ d.lese( buffer, 16 );
|
|
|
+ Datei s;
|
|
|
+ s.setDatei( tmpPf );
|
|
|
+ s.erstellen();
|
|
|
+ if( !s.open( Datei::Style::schreiben ) )
|
|
|
+ {
|
|
|
+ err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
|
|
|
+ err += tmpPf;
|
|
|
+ err += ". Fehler Code: " __FILE__ ":";
|
|
|
+ err += __LINE__;
|
|
|
+ err += "\n";
|
|
|
+ }
|
|
|
+ s.schreibe( buffer, 16 );
|
|
|
+ s.close();
|
|
|
+ }
|
|
|
+ // timer
|
|
|
+ pf = pfad.getText();
|
|
|
+ pf += "/timer/";
|
|
|
+ d.lese( (char *)&anz, 4 );
|
|
|
+ for( int i = 0; i < anz; i++ )
|
|
|
+ {
|
|
|
+ int id;
|
|
|
+ d.lese( (char *)& id, 4 );
|
|
|
+ Text tmpPf = pf.getText();
|
|
|
+ tmpPf += id;
|
|
|
+ tmpPf += ".t";
|
|
|
+ char buffer[ 19 ];
|
|
|
+ d.lese( buffer, 19 );
|
|
|
+ Datei s;
|
|
|
+ s.setDatei( tmpPf );
|
|
|
+ s.erstellen();
|
|
|
+ if( !s.open( Datei::Style::schreiben ) )
|
|
|
+ {
|
|
|
+ err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
|
|
|
+ err += tmpPf;
|
|
|
+ err += ". Fehler Code: " __FILE__ ":";
|
|
|
+ err += __LINE__;
|
|
|
+ err += "\n";
|
|
|
+ }
|
|
|
+ s.schreibe( buffer, 19 );
|
|
|
+ unsigned char len;
|
|
|
+ d.lese( (char *)& len, 1 );
|
|
|
+ char *name = new char[ (int)len + 1 ];
|
|
|
+ d.lese( name, len );
|
|
|
+ name[ (int)len ] = 0;
|
|
|
+ s.schreibe( (char *)& len, 1 );
|
|
|
+ s.schreibe( (char *)& name, len );
|
|
|
+ delete[] name;
|
|
|
+ s.close();
|
|
|
+ }
|
|
|
+ // tunnel
|
|
|
+ pf = pfad.getText();
|
|
|
+ pf += "/tunnel/";
|
|
|
+ d.lese( (char *)&anz, 4 );
|
|
|
+ for( int i = 0; i < anz; i++ )
|
|
|
+ {
|
|
|
+ int id;
|
|
|
+ d.lese( (char *)& id, 4 );
|
|
|
+ Text tmpPf = pf.getText();
|
|
|
+ tmpPf += id;
|
|
|
+ tmpPf += ".t";
|
|
|
+ char buffer[ 25 ];
|
|
|
+ d.lese( buffer, 25 );
|
|
|
+ Datei s;
|
|
|
+ s.setDatei( tmpPf );
|
|
|
+ s.erstellen();
|
|
|
+ if( !s.open( Datei::Style::schreiben ) )
|
|
|
+ {
|
|
|
+ err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
|
|
|
+ err += tmpPf;
|
|
|
+ err += ". Fehler Code: " __FILE__ ":";
|
|
|
+ err += __LINE__;
|
|
|
+ err += "\n";
|
|
|
+ }
|
|
|
+ s.schreibe( buffer, 25 );
|
|
|
+ s.close();
|
|
|
+ }
|
|
|
+ // umlenkung
|
|
|
+ pf = pfad.getText();
|
|
|
+ pf += "/umlenkung/";
|
|
|
+ d.lese( (char *)&anz, 4 );
|
|
|
+ for( int i = 0; i < anz; i++ )
|
|
|
+ {
|
|
|
+ int id;
|
|
|
+ d.lese( (char *)& id, 4 );
|
|
|
+ Text tmpPf = pf.getText();
|
|
|
+ tmpPf += id;
|
|
|
+ tmpPf += ".t";
|
|
|
+ char buffer[ 23 ];
|
|
|
+ d.lese( buffer, 23 );
|
|
|
+ Datei s;
|
|
|
+ s.setDatei( tmpPf );
|
|
|
+ s.erstellen();
|
|
|
+ if( !s.open( Datei::Style::schreiben ) )
|
|
|
+ {
|
|
|
+ err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
|
|
|
+ err += tmpPf;
|
|
|
+ err += ". Fehler Code: " __FILE__ ":";
|
|
|
+ err += __LINE__;
|
|
|
+ err += "\n";
|
|
|
+ }
|
|
|
+ s.schreibe( buffer, 23 );
|
|
|
+ s.close();
|
|
|
+ }
|
|
|
+ // trigger
|
|
|
+ MapReader mr;
|
|
|
+ pf = pfad.getText();
|
|
|
+ pf += "/trigger/";
|
|
|
+ d.lese( (char *)&anz, 4 );
|
|
|
+ for( int i = 0; i < anz; i++ )
|
|
|
+ {
|
|
|
+ int id;
|
|
|
+ d.lese( (char *)& id, 4 );
|
|
|
+ Text tmpPf = pf.getText();
|
|
|
+ tmpPf += id;
|
|
|
+ tmpPf += ".t";
|
|
|
+ Datei s;
|
|
|
+ s.setDatei( tmpPf );
|
|
|
+ s.erstellen();
|
|
|
+ if( !s.open( Datei::Style::schreiben ) )
|
|
|
+ {
|
|
|
+ err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
|
|
|
+ err += tmpPf;
|
|
|
+ err += ". Fehler Code: " __FILE__ ":";
|
|
|
+ err += __LINE__;
|
|
|
+ err += "\n";
|
|
|
+ }
|
|
|
+ unsigned char len;
|
|
|
+ d.lese( (char *)&len, 1 );
|
|
|
+ char *name = new char[ (int)len + 1 ];
|
|
|
+ d.lese( name, len );
|
|
|
+ name[ (int)len ] = 0;
|
|
|
+ s.schreibe( (char *)&len, 1 );
|
|
|
+ s.schreibe( (char *)&name, len );
|
|
|
+ delete[] name;
|
|
|
+ int ereignisAnzahl;
|
|
|
+ int bedingungAnzahl;
|
|
|
+ int aktionAnzahl;
|
|
|
+ d.lese( (char *)&ereignisAnzahl, 4 );
|
|
|
+ d.lese( (char *)&bedingungAnzahl, 4 );
|
|
|
+ d.lese( (char *)&aktionAnzahl, 4 );
|
|
|
+ s.schreibe( (char *)&ereignisAnzahl, 4 );
|
|
|
+ s.schreibe( (char *)&bedingungAnzahl, 4 );
|
|
|
+ s.schreibe( (char *)&aktionAnzahl, 4 );
|
|
|
+ for( int j = 0; j < ereignisAnzahl; j++ )
|
|
|
+ {
|
|
|
+ int typ;
|
|
|
+ d.lese( (char *)& typ, 4 );
|
|
|
+ s.schreibe( (char *)& typ, 4 );
|
|
|
+ }
|
|
|
+ for( int j = 0; j < bedingungAnzahl; j++ )
|
|
|
+ mr.writeAktion( mr.readAktion( d ), s );
|
|
|
+ for( int j = 0; j < aktionAnzahl; j++ )
|
|
|
+ mr.writeAktion( mr.readAktion( d ), s );
|
|
|
+ s.close();
|
|
|
+ }
|
|
|
+ // variable
|
|
|
+ pf = pfad.getText();
|
|
|
+ pf += "/variable/";
|
|
|
+ d.lese( (char *)&anz, 4 );
|
|
|
+ for( int i = 0; i < anz; i++ )
|
|
|
+ {
|
|
|
+ char len;
|
|
|
+ d.lese( (char *)& len, 1 );
|
|
|
+ char *name = new char[ (int)len + 1 ];
|
|
|
+ d.lese( name, len );
|
|
|
+ name[ (int)len ] = 0;
|
|
|
+ Text tmpPf = pf.getText();
|
|
|
+ tmpPf += name;
|
|
|
+ tmpPf += ".v";
|
|
|
+ delete[] name;
|
|
|
+ Datei s;
|
|
|
+ s.setDatei( tmpPf );
|
|
|
+ s.erstellen();
|
|
|
+ if( !s.open( Datei::Style::schreiben ) )
|
|
|
+ {
|
|
|
+ err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
|
|
|
+ err += tmpPf;
|
|
|
+ err += ". Fehler Code: " __FILE__ ":";
|
|
|
+ err += __LINE__;
|
|
|
+ err += "\n";
|
|
|
+ }
|
|
|
+ char typ;
|
|
|
+ d.lese( &typ, 1 );
|
|
|
+ char def;
|
|
|
+ d.lese( &def, 1 );
|
|
|
+ s.schreibe( &typ, 1 );
|
|
|
+ s.schreibe( &def, 1 );
|
|
|
+ if( def )
|
|
|
+ {
|
|
|
+ if( typ == BOOLEAN || typ == TASTE )
|
|
|
+ {
|
|
|
+ char v;
|
|
|
+ d.lese( &v, 1 );
|
|
|
+ s.schreibe( &v, 1 );
|
|
|
+ }
|
|
|
+ else if( typ == STRING || typ == RICHTUNG )
|
|
|
+ {
|
|
|
+ char len;
|
|
|
+ d.lese( (char *)& len, 1 );
|
|
|
+ char *str = new char[ (int)len + 1 ];
|
|
|
+ d.lese( str, len );
|
|
|
+ s.schreibe( &len, 1 );
|
|
|
+ s.schreibe( str, len );
|
|
|
+ delete[] str;
|
|
|
+ }
|
|
|
+ else if( typ != NICHTS )
|
|
|
+ {
|
|
|
+ int v;
|
|
|
+ d.lese( (char *)&v, 4 );
|
|
|
+ s.schreibe( (char *)&v, 4 );
|
|
|
+ }
|
|
|
+ }
|
|
|
+ s.close();
|
|
|
+ }
|
|
|
+ d.close();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ err = "Sitzung konnte nicht korrekt erstellt werden. Fehler beim lesen von ";
|
|
|
+ err += pf;
|
|
|
+ err += ". Fehler Code: " __FILE__ ":";
|
|
|
+ err += __LINE__;
|
|
|
+ pf = pfad.getText();
|
|
|
+ pf += "/empty.file";
|
|
|
+ DateiPfadErstellen( pf );
|
|
|
+ DateiRemove( pf );
|
|
|
+ }
|
|
|
+ if( !err.getLength() )
|
|
|
+ return 1;
|
|
|
+ else
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+bool Editor::saveSitzung()
|
|
|
+{
|
|
|
+ Text pf = pfad.getText();
|
|
|
+ pf.remove( pf.getLength() - 6, pf.getLength() );
|
|
|
+ pf += "map/server/data_tmp.map";
|
|
|
+ Datei d;
|
|
|
+ d.setDatei( pf.getText() );
|
|
|
+ if( d.open( Datei::Style::schreiben ) )
|
|
|
+ {
|
|
|
+ pf = pfad.getText();
|
|
|
+ pf += "/resource";
|
|
|
+ Datei res;
|
|
|
+ res.setDatei( pf );
|
|
|
+ RCArray<Text> *resList = res.getDateiListe();
|
|
|
+ if( resList )
|
|
|
+ {
|
|
|
+ int anz = resList->getEintragAnzahl();
|
|
|
+ d.schreibe( (char *)& anz, 4 );
|
|
|
+ for( auto resPf = resList->getIterator(); resPf && resPf._; resPf++ )
|
|
|
+ {
|
|
|
+ Text tmp = pf.getText();
|
|
|
+ tmp += "/";
|
|
|
+ tmp += resPf->getText();
|
|
|
+ Datei r;
|
|
|
+ r.setDatei( tmp );
|
|
|
+ if( r.open( Datei::Style::lesen ) )
|
|
|
+ {
|
|
|
+ int id = (int)* resPf;
|
|
|
+ d.schreibe( (char *)& id, 4 );
|
|
|
+ char b = 0;
|
|
|
+ r.lese( &b, 1 );
|
|
|
+ char *buffer = new char[ b + 1 ];
|
|
|
+ buffer[ (int)b ] = 0;
|
|
|
+ r.lese( buffer, b );
|
|
|
+ d.schreibe( &b, 1 );
|
|
|
+ d.schreibe( buffer, b );
|
|
|
+ r.close();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ err = "Fehler beim Lesen von ";
|
|
|
+ err += tmp.getText();
|
|
|
+ err += ". Fehler Code: " __FILE__ ":";
|
|
|
+ err += __LINE__;
|
|
|
+ d.close();
|
|
|
+ d.remove();
|
|
|
+ resList->release();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ resList->release();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ d.schreibe( "\0\0\0\0", 4 );
|
|
|
+ pf = pfad.getText();
|
|
|
+ pf += "/size";
|
|
|
+ Datei s;
|
|
|
+ s.setDatei( pf.getText() );
|
|
|
+ if( s.open( Datei::Style::lesen ) )
|
|
|
+ {
|
|
|
+ __int64 size = 0;
|
|
|
+ s.lese( (char *)& size, 8 );
|
|
|
+ d.schreibe( (char *)& size, 8 );
|
|
|
+ s.close();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ err = "Fehler beim Lesen von ";
|
|
|
+ err += pf.getText();
|
|
|
+ err = ". Fehler Code: " __FILE__ ":";
|
|
|
+ err += __LINE__;
|
|
|
+ d.close();
|
|
|
+ d.remove();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ pf = pfad.getText();
|
|
|
+ pf += "/objekt";
|
|
|
+ Datei obj;
|
|
|
+ obj.setDatei( pf );
|
|
|
+ RCArray<Text> *objList = obj.getDateiListe();
|
|
|
+ if( objList )
|
|
|
+ {
|
|
|
+ int anz = objList->getEintragAnzahl();
|
|
|
+ d.schreibe( (char *)& anz, 4 );
|
|
|
+ for( auto objPf = objList->getIterator(); objPf && objPf._; objPf++ )
|
|
|
+ {
|
|
|
+ Text tmp = pf.getText();
|
|
|
+ tmp += "/";
|
|
|
+ tmp += objPf->getText();
|
|
|
+ Datei r;
|
|
|
+ r.setDatei( tmp );
|
|
|
+ if( r.open( Datei::Style::lesen ) )
|
|
|
+ {
|
|
|
+ ObjektStr objStr( &r );
|
|
|
+ objStr.save( &d );
|
|
|
+ r.close();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ err = "Fehler beim Lesen von ";
|
|
|
+ err += tmp.getText();
|
|
|
+ err = ". Fehler Code: " __FILE__ ":";
|
|
|
+ err += __LINE__;
|
|
|
+ d.close();
|
|
|
+ d.remove();
|
|
|
+ objList->release();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ objList->release();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ d.schreibe( "\0\0\0\0", 4 );
|
|
|
+ pf = pfad.getText();
|
|
|
+ pf += "/player";
|
|
|
+ Datei pl;
|
|
|
+ pl.setDatei( pf );
|
|
|
+ RCArray<Text> *plList = pl.getDateiListe();
|
|
|
+ if( !plList )
|
|
|
+ {
|
|
|
+ err = "Fehler beim Lesen von ";
|
|
|
+ err += pf.getText();
|
|
|
+ err = ". Fehler Code: " __FILE__ ":";
|
|
|
+ err += __LINE__;
|
|
|
+ d.close();
|
|
|
+ d.remove();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ for( auto plPf = plList->getIterator(); plPf && plPf._; plPf++ )
|
|
|
+ {
|
|
|
+ Text tmp = pf.getText();
|
|
|
+ tmp += "/";
|
|
|
+ tmp += plPf->getText();
|
|
|
+ Datei r;
|
|
|
+ r.setDatei( tmp );
|
|
|
+ if( r.open( Datei::Style::lesen ) )
|
|
|
+ {
|
|
|
+ SpielerStr spStr( &r );
|
|
|
+ spStr.save( &d );
|
|
|
+ r.close();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ err = "Fehler beim Lesen von ";
|
|
|
+ err += tmp.getText();
|
|
|
+ err = ". Fehler Code: " __FILE__ ":";
|
|
|
+ err += __LINE__;
|
|
|
+ d.close();
|
|
|
+ d.remove();
|
|
|
+ plList->release();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ plList->release();
|
|
|
+ pf = pfad.getText();
|
|
|
+ pf += "/team";
|
|
|
+ Datei tm;
|
|
|
+ tm.setDatei( pf );
|
|
|
+ RCArray<Text> *tmList = tm.getDateiListe();
|
|
|
+ if( !tmList )
|
|
|
+ {
|
|
|
+ err = "Fehler beim Lesen von ";
|
|
|
+ err += pf.getText();
|
|
|
+ err = ". Fehler Code: " __FILE__ ":";
|
|
|
+ err += __LINE__;
|
|
|
+ d.close();
|
|
|
+ d.remove();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ for( auto tmPf = tmList->getIterator(); tmPf && tmPf._; tmPf++ )
|
|
|
+ {
|
|
|
+ Text tmp = pf.getText();
|
|
|
+ tmp += "/";
|
|
|
+ tmp += tmPf->getText();
|
|
|
+ Datei r;
|
|
|
+ r.setDatei( tmp );
|
|
|
+ if( r.open( Datei::Style::lesen ) )
|
|
|
+ {
|
|
|
+ TeamStr tStr( &r );
|
|
|
+ tStr.save( &d );
|
|
|
+ r.close();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ err = "Fehler beim Lesen von ";
|
|
|
+ err += tmp.getText();
|
|
|
+ err = ". Fehler Code: " __FILE__ ":";
|
|
|
+ err += __LINE__;
|
|
|
+ d.close();
|
|
|
+ d.remove();
|
|
|
+ tmList->release();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ tmList->release();
|
|
|
+ pf = pfad.getText();
|
|
|
+ pf.remove( pf.getLength() - 6, pf.getLength() );
|
|
|
+ pf += "map/server/data.map";
|
|
|
+ d.close();
|
|
|
+ if( !DateiRemove( pf ) || !d.umbenennen( pf ) )
|
|
|
+ {
|
|
|
+ err = "Fehler beim Übernehmen der Änderungen. Fehler Code: " __FILE__ ":";
|
|
|
+ err += __LINE__;
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ err = "Fehler beim Speichern der Änderungen (Server). Fehler Code: " __FILE__ ":";
|
|
|
+ err += __LINE__;
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ pf = pfad.getText();
|
|
|
+ pf.remove( pf.getLength() - 6, pf.getLength() );
|
|
|
+ pf += "map/client/map/data/data.map";
|
|
|
+ Datei d2;
|
|
|
+ d2.setDatei( pf.getText() );
|
|
|
+ if( d2.open( Datei::Style::schreiben ) && d.open( Datei::Style::lesen ) )
|
|
|
+ {
|
|
|
+ __int64 size = d.getSize();
|
|
|
+ char *buffer = new char[ 2048 ];
|
|
|
+ while( size > 0 )
|
|
|
+ {
|
|
|
+ int len = (int)( size > 2048 ? 2048 : size );
|
|
|
+ d.lese( buffer, len );
|
|
|
+ d2.schreibe( buffer, len );
|
|
|
+ size -= len;
|
|
|
+ }
|
|
|
+ delete[] buffer;
|
|
|
+ d.close();
|
|
|
+ d2.close();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ err = "Fehler beim Speichern der Änderungen (Client). Fehler Code: " __FILE__ ":";
|
|
|
+ err += __LINE__;
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ DateiRemove( pfad.getText() );
|
|
|
+ return 1;
|
|
|
+}
|