|
@@ -0,0 +1,748 @@
|
|
|
+#include "Editor.h"
|
|
|
+#include <Datei.h>
|
|
|
+#include "STS.h"
|
|
|
+#include "KartenLeser.h"
|
|
|
+#include "Strukturen.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.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.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 += "/object";
|
|
|
+ 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.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.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.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->sendeEncrypted( (char*)&o.pos.x, 4 );
|
|
|
+ k->sendeEncrypted( (char*)&o.pos.y, 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 );
|
|
|
+ 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->sendeEncrypted( (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;
|
|
|
+ }
|
|
|
+ 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/data.map";
|
|
|
+ Datei d;
|
|
|
+ d.setDatei( pf.getText() );
|
|
|
+ if( d.open( Datei::Style::lesen ) )
|
|
|
+ {
|
|
|
+ pf = pfad.getText();
|
|
|
+ pf += "/resource/";
|
|
|
+ int rAnz = 0;
|
|
|
+ d.lese( (char*)&rAnz, 4 );
|
|
|
+ for( int i = 0; i < rAnz; i++ )
|
|
|
+ {
|
|
|
+ int id = 0;
|
|
|
+ d.lese( (char*)&id, 4 );
|
|
|
+ Text tmpPf = pf.getText();
|
|
|
+ tmpPf += id;
|
|
|
+ tmpPf += ".r";
|
|
|
+ char len = 0;
|
|
|
+ d.lese( &len, 1 );
|
|
|
+ char *path = new char[ len + 1 ];
|
|
|
+ path[ (int)len ] = 0;
|
|
|
+ d.lese( path, len );
|
|
|
+ Datei r;
|
|
|
+ r.setDatei( tmpPf );
|
|
|
+ r.erstellen();
|
|
|
+ if( !r.open( Datei::Style::schreiben ) )
|
|
|
+ {
|
|
|
+ err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim lesen von ";
|
|
|
+ err += tmpPf;
|
|
|
+ err += ". Fehler Code: " __FILE__ ":";
|
|
|
+ err += __LINE__;
|
|
|
+ err += "\n";
|
|
|
+ }
|
|
|
+ r.schreibe( &len, 1 );
|
|
|
+ r.schreibe( path, len );
|
|
|
+ r.close();
|
|
|
+ delete[] path;
|
|
|
+ }
|
|
|
+ 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();
|
|
|
+ int objAnz = 0;
|
|
|
+ d.lese( (char*)&objAnz, 4 );
|
|
|
+ for( int i = 0; i < objAnz; i++ )
|
|
|
+ {
|
|
|
+ ObjektStr objStr( &d );
|
|
|
+ Text tmpPf = pfad.getText();
|
|
|
+ tmpPf += "/object/";
|
|
|
+ tmpPf += objStr.id;
|
|
|
+ tmpPf += ".o";
|
|
|
+ Datei obj;
|
|
|
+ obj.setDatei( tmpPf.getText() );
|
|
|
+ obj.erstellen();
|
|
|
+ if( !obj.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";
|
|
|
+ }
|
|
|
+ objStr.save( &obj );
|
|
|
+ obj.close();
|
|
|
+ }
|
|
|
+ SpielerTeamStruktur *sts = new SpielerTeamStruktur();
|
|
|
+ Text tmp = pfad.getText();
|
|
|
+ pf.remove( pf.getLength() - 12, pf.getLength() );
|
|
|
+ tmp.remove( 0, tmp.positionVon( '/', tmp.anzahlVon( '/' ) ) );
|
|
|
+ int kartenId = tmp;
|
|
|
+ tmp = pfad.getText();
|
|
|
+ tmp.remove( tmp.getLength() - 6, tmp.getLength() );
|
|
|
+ tmp += "map/server/";
|
|
|
+ KartenLeser *stsReader = new KartenLeser( kartenId, 0, tmp );
|
|
|
+ stsReader->ladeSpielerTeamStruktur( sts );
|
|
|
+ stsReader->release();
|
|
|
+ for( int i = 0; i < sts->spielerAnzahl; i++ )
|
|
|
+ {
|
|
|
+ SpielerStr spStr( &d );
|
|
|
+ Text tmpPf = pfad.getText();
|
|
|
+ tmpPf += "/player/";
|
|
|
+ tmpPf += spStr.id;
|
|
|
+ tmpPf += ".p";
|
|
|
+ Datei pl;
|
|
|
+ pl.setDatei( tmpPf.getText() );
|
|
|
+ pl.erstellen();
|
|
|
+ if( !pl.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";
|
|
|
+ }
|
|
|
+ spStr.save( &pl );
|
|
|
+ pl.close();
|
|
|
+ }
|
|
|
+ for( int i = 0; i < sts->teamAnzahl; i++ )
|
|
|
+ {
|
|
|
+ TeamStr tStr( &d );
|
|
|
+ Text tmpPf = pfad.getText();
|
|
|
+ tmpPf += "/team/";
|
|
|
+ tmpPf += tStr.id;
|
|
|
+ tmpPf += ".t";
|
|
|
+ Datei pl;
|
|
|
+ pl.setDatei( tmpPf.getText() );
|
|
|
+ pl.erstellen();
|
|
|
+ if( !pl.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";
|
|
|
+ }
|
|
|
+ tStr.save( &pl );
|
|
|
+ pl.close();
|
|
|
+ }
|
|
|
+ sts->release();
|
|
|
+ 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->getArray(); resPf.set && resPf.var; resPf++ )
|
|
|
+ {
|
|
|
+ Text tmp = pf.getText();
|
|
|
+ tmp += "/";
|
|
|
+ tmp += resPf.var->getText();
|
|
|
+ Datei r;
|
|
|
+ r.setDatei( tmp );
|
|
|
+ if( r.open( Datei::Style::lesen ) )
|
|
|
+ {
|
|
|
+ int id = (int)*resPf.var;
|
|
|
+ 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 += "/object";
|
|
|
+ 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->getArray(); objPf.set && objPf.var; objPf++ )
|
|
|
+ {
|
|
|
+ Text tmp = pf.getText();
|
|
|
+ tmp += "/";
|
|
|
+ tmp += objPf.var->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->getArray(); plPf.set && plPf.var; plPf++ )
|
|
|
+ {
|
|
|
+ Text tmp = pf.getText();
|
|
|
+ tmp += "/";
|
|
|
+ tmp += plPf.var->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->getArray(); tmPf.set && tmPf.var; tmPf++ )
|
|
|
+ {
|
|
|
+ Text tmp = pf.getText();
|
|
|
+ tmp += "/";
|
|
|
+ tmp += tmPf.var->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;
|
|
|
+}
|