123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759 |
- #include "EditorKlient.h"
- #include <Klient.h>
- #include "../Karte/EditorKarte.h"
- #include <DateiSystem.h>
- #include <M2Datei.h>
- using namespace Network;
- using namespace Editor;
- SpielerTeamStruktur::SpielerTeamStruktur()
- {
- spielerAnzahl = 0;
- teamAnzahl = 0;
- spielerFarbe = new Array< int >();
- teamFarbe = new Array< int >();
- teamName = new RCArray< Text >();
- teamSize = new Array< int >();
- ref = 1;
- }
- SpielerTeamStruktur::~SpielerTeamStruktur()
- {
- spielerFarbe->release();
- teamFarbe->release();
- teamName->release();
- teamSize->release();
- }
- SpielerTeamStrukturV *SpielerTeamStruktur::getThis()
- {
- ref++;
- return this;
- }
- SpielerTeamStrukturV *SpielerTeamStruktur::release()
- {
- ref--;
- if( !ref )
- delete this;
- return 0;
- }
- // Inhalt der EditorKlient Klasse aus EditorKlient.h
- // Konstruktor
- // k: Der zu verwendende Klient
- EditorKlient::EditorKlient( KSGClient::EditorServerClient *k )
- : ReferenceCounter()
- {
- klient = k;
- }
- // Destruktor
- EditorKlient::~EditorKlient()
- {
- klient->release();
- }
- // Initialisiert den Server
- // return: 1, falls erfolgreich
- // 2, falls bereits eine Sitzung existiert
- // 0, sonnst
- int EditorKlient::init()
- {
- Network::Klient *k = klient->beginEditorMessage();
- if( !k )
- {
- error = klient->getLetzterFehler();
- return 0;
- }
- error = "";
- k->sendeEncrypted( "\x0", 1 );
- char ret;
- k->getNachrichtEncrypted( &ret, 1 );
- if( ret == 1 )
- k->getNachrichtEncrypted( &ret, 1 );
- if( ret == 3 )
- {
- unsigned char l = 0;
- k->getNachrichtEncrypted( (char *)&l, 1 );
- char *err = new char[ l + 1 ];
- err[ l ] = 0;
- k->getNachrichtEncrypted( err, l );
- error = err;
- delete[] err;
- ret = 0;
- }
- klient->endEditorMessage();
- return ret;
- }
- // Verwirft die vorhandene Sitzung und erstellt eine neue
- bool EditorKlient::sitzungVerwerfen()
- {
- Network::Klient *k = klient->beginEditorMessage();
- if( !k )
- {
- error = klient->getLetzterFehler();
- return 0;
- }
- error = "";
- char ret;
- k->sendeEncrypted( "\x1", 1 );
- k->getNachrichtEncrypted( &ret, 1 );
- if( ret == 3 )
- {
- unsigned char l = 0;
- k->getNachrichtEncrypted( (char *)&l, 1 );
- char *err = new char[ l + 1 ];
- err[ l ] = 0;
- k->getNachrichtEncrypted( err, l );
- error = err;
- delete[] err;
- ret = 0;
- }
- klient->endEditorMessage();
- return ret == 1;
- }
- // Speichert Sitzung und beendet Editor
- bool EditorKlient::sitzungBeenden()
- {
- Network::Klient *k = klient->beginEditorMessage();
- if( !k )
- {
- error = klient->getLetzterFehler();
- return 0;
- }
- error = "";
- char ret;
- k->sendeEncrypted( "\x2", 1 );
- k->getNachrichtEncrypted( &ret, 1 );
- if( ret == 3 )
- {
- unsigned char l = 0;
- k->getNachrichtEncrypted( (char *)&l, 1 );
- char *err = new char[ l + 1 ];
- err[ l ] = 0;
- k->getNachrichtEncrypted( err, l );
- error = err;
- delete[] err;
- ret = 0;
- }
- klient->endEditorMessage();
- return ret == 1;
- }
- bool EditorKlient::saveTeam( const TeamDaten *team )
- {
- Network::Klient *k = klient->beginEditorMessage();
- if( !k )
- {
- error = klient->getLetzterFehler();
- return 0;
- }
- error = "";
- char ret;
- k->sendeEncrypted( "\x7", 1 );
- k->getNachrichtEncrypted( &ret, 1 );
- if( ret == 1 )
- {
- k->sendeEncrypted( (char *)&team->id, 4 );
- k->sendeEncrypted( (char *)&team->maxPunkte, 4 );
- k->sendeEncrypted( (char *)&team->beschleunigung, 8 );
- k->sendeEncrypted( (char *)&team->maxStabilität, 4 );
- k->sendeEncrypted( (char *)&team->maxEnergie, 4 );
- k->sendeEncrypted( (char *)&team->reparatur, 8 );
- k->sendeEncrypted( (char *)&team->akkuLeistung, 8 );
- k->sendeEncrypted( (char *)&team->laserIntensität, 4 );
- k->sendeEncrypted( (char *)&team->laserEffizienz, 4 );
- k->sendeEncrypted( (char *)&team->laserTempo, 4 );
- k->sendeEncrypted( (char *)&team->wendigkeit, 8 );
- k->sendeEncrypted( (char *)&team->antriebEffizienz, 8 );
- k->sendeEncrypted( (char *)&team->energieSchild, 8 );
- k->sendeEncrypted( (char *)&team->energieSchildEffizienz, 8 );
- k->sendeEncrypted( (char *)&team->punkte, 4 );
- k->getNachrichtEncrypted( &ret, 1 );
- }
- if( ret == 3 )
- {
- unsigned char l = 0;
- k->getNachrichtEncrypted( (char *)&l, 1 );
- char *err = new char[ l + 1 ];
- err[ l ] = 0;
- k->getNachrichtEncrypted( err, l );
- error = err;
- delete[] err;
- ret = 0;
- }
- klient->endEditorMessage();
- return ret == 1;
- }
- bool EditorKlient::saveSpieler( const SpielerDaten *spieler )
- {
- Network::Klient *k = klient->beginEditorMessage();
- if( !k )
- {
- error = klient->getLetzterFehler();
- return 0;
- }
- error = "";
- char ret;
- k->sendeEncrypted( "\x6", 1 );
- k->getNachrichtEncrypted( &ret, 1 );
- if( ret == 1 )
- {
- k->sendeEncrypted( (char *)&spieler->id, 4 );
- k->sendeEncrypted( (char *)&spieler->pos.x, 4 );
- k->sendeEncrypted( (char *)&spieler->pos.y, 4 );
- k->sendeEncrypted( (char *)&spieler->rot, 8 );
- k->sendeEncrypted( (char *)&spieler->beschleunigung, 8 );
- k->sendeEncrypted( (char *)&spieler->maxStabilität, 4 );
- k->sendeEncrypted( (char *)&spieler->maxEnergie, 4 );
- k->sendeEncrypted( (char *)&spieler->reparatur, 8 );
- k->sendeEncrypted( (char *)&spieler->akkuLeistung, 8 );
- k->sendeEncrypted( (char *)&spieler->laserIntensität, 4 );
- k->sendeEncrypted( (char *)&spieler->laserEffizienz, 4 );
- k->sendeEncrypted( (char *)&spieler->laserTempo, 4 );
- k->sendeEncrypted( (char *)&spieler->wendigkeit, 8 );
- k->sendeEncrypted( (char *)&spieler->antriebEffizienz, 8 );
- k->sendeEncrypted( (char *)&spieler->energieSchild, 8 );
- k->sendeEncrypted( (char *)&spieler->energieSchildEffizienz, 8 );
- k->sendeEncrypted( (char *)&spieler->netzwerk, 4 );
- k->sendeEncrypted( (char *)&spieler->skillPunkte, 4 );
- k->sendeEncrypted( (char *)&spieler->m2d, 4 );
- k->sendeEncrypted( (char *)&spieler->bild, 4 );
- k->getNachrichtEncrypted( &ret, 1 );
- }
- if( ret == 3 )
- {
- unsigned char l = 0;
- k->getNachrichtEncrypted( (char *)&l, 1 );
- char *err = new char[ l + 1 ];
- err[ l ] = 0;
- k->getNachrichtEncrypted( err, l );
- error = err;
- delete[] err;
- ret = 0;
- }
- klient->endEditorMessage();
- return ret == 1;
- }
- bool EditorKlient::saveObjekt( const ObjektDaten *objekt )
- {
- Network::Klient *k = klient->beginEditorMessage();
- if( !k )
- {
- error = klient->getLetzterFehler();
- return 0;
- }
- error = "";
- char ret;
- k->sendeEncrypted( "\x8", 1 );
- k->getNachrichtEncrypted( &ret, 1 );
- if( ret == 1 )
- {
- k->sendeEncrypted( (char *)&objekt->pos.x, 4 );
- k->sendeEncrypted( (char *)&objekt->pos.y, 4 );
- k->sendeEncrypted( (char *)&objekt->rot, 4 );
- k->sendeEncrypted( (char *)&objekt->scale, 4 );
- k->sendeEncrypted( (char *)&objekt->id, 4 );
- k->sendeEncrypted( (char *)&objekt->m2d, 4 );
- k->sendeEncrypted( (char *)&objekt->bild, 4 );
- k->sendeEncrypted( (char *)&objekt->style, 4 );
- k->sendeEncrypted( (char *)&objekt->maxStabilität, 4 );
- k->sendeEncrypted( (char *)&objekt->maxEnergie, 4 );
- k->sendeEncrypted( (char *)&objekt->energieRadius, 4 );
- k->sendeEncrypted( (char *)&objekt->reparatur, 8 );
- k->sendeEncrypted( (char *)&objekt->akkuLeistung, 8 );
- k->sendeEncrypted( (char *)&objekt->team, 1 );
- k->getNachrichtEncrypted( &ret, 1 );
- }
- if( ret == 3 )
- {
- unsigned char l = 0;
- k->getNachrichtEncrypted( (char *)&l, 1 );
- char *err = new char[ l + 1 ];
- err[ l ] = 0;
- k->getNachrichtEncrypted( err, l );
- error = err;
- delete[] err;
- ret = 0;
- }
- klient->endEditorMessage();
- return ret == 1;
- }
- bool EditorKlient::deleteObjekt( int id )
- {
- Network::Klient *k = klient->beginEditorMessage();
- if( !k )
- {
- error = klient->getLetzterFehler();
- return 0;
- }
- error = "";
- char ret;
- k->sendeEncrypted( "\x9", 1 );
- k->getNachrichtEncrypted( &ret, 1 );
- if( ret == 1 )
- {
- k->sendeEncrypted( (char *)&id, 4 );
- k->getNachrichtEncrypted( &ret, 1 );
- }
- if( ret == 3 )
- {
- unsigned char l = 0;
- k->getNachrichtEncrypted( (char *)&l, 1 );
- char *err = new char[ l + 1 ];
- err[ l ] = 0;
- k->getNachrichtEncrypted( err, l );
- error = err;
- delete[] err;
- ret = 0;
- }
- klient->endEditorMessage();
- return ret == 1;
- }
- bool EditorKlient::loadResources( Array< ResourceDaten * > &resources )
- {
- Network::Klient *k = klient->beginEditorMessage();
- if( !k )
- {
- error = klient->getLetzterFehler();
- return 0;
- }
- error = "";
- char ret;
- k->sendeEncrypted( "\xA", 1 );
- k->getNachrichtEncrypted( &ret, 1 );
- if( ret == 1 )
- {
- int anz = 0;
- k->getNachrichtEncrypted( (char *)&anz, 4 );
- for( int i = 0; i < anz; i++ )
- {
- ResourceDaten *resource = new ResourceDaten();
- k->getNachrichtEncrypted( (char *)&resource->id, 4 );
- char len = 0;
- k->getNachrichtEncrypted( (char *)&len, 1 );
- char *path = new char[ len + 1 ];
- path[ len ] = 0;
- k->getNachrichtEncrypted( path, len );
- resource->path = path;
- delete[] path;
- resources.add( resource );
- }
- }
- if( ret == 3 )
- {
- unsigned char l = 0;
- k->getNachrichtEncrypted( (char *)&l, 1 );
- char *err = new char[ l + 1 ];
- err[ l ] = 0;
- k->getNachrichtEncrypted( err, l );
- error = err;
- delete[] err;
- ret = 0;
- }
- klient->endEditorMessage();
- return ret == 1;
- }
- int EditorKlient::addResource( const char *path )
- {
- Network::Klient *k = klient->beginEditorMessage();
- if( !k )
- {
- error = klient->getLetzterFehler();
- return 0;
- }
- error = "";
- char ret;
- k->sendeEncrypted( "\xC", 1 );
- k->getNachrichtEncrypted( &ret, 1 );
- if( ret == 1 )
- {
- unsigned char len = (unsigned char)strlen( path );
- k->sendeEncrypted( (char *)&len, 1 );
- k->sendeEncrypted( path, len );
- k->getNachrichtEncrypted( &ret, 1 );
- if( ret == 1 )
- {
- int id = 0;
- k->getNachrichtEncrypted( (char *)&id, 4 );
- klient->endEditorMessage();
- return id;
- }
- }
- if( ret == 3 )
- {
- unsigned char l = 0;
- k->getNachrichtEncrypted( (char *)&l, 1 );
- char *err = new char[ l + 1 ];
- err[ l ] = 0;
- k->getNachrichtEncrypted( err, l );
- error = err;
- delete[] err;
- ret = 0;
- }
- klient->endEditorMessage();
- return 0;
- }
- bool EditorKlient::loadSpieler( Array< SpielerDaten * > &spieler )
- {
- Network::Klient *k = klient->beginEditorMessage();
- if( !k )
- {
- error = klient->getLetzterFehler();
- return 0;
- }
- error = "";
- char ret;
- k->sendeEncrypted( "\x3", 1 );
- k->getNachrichtEncrypted( &ret, 1 );
- if( ret == 1 )
- {
- int anz = 0;
- k->getNachrichtEncrypted( (char *)&anz, 4 );
- for( int i = 0; i < anz; i++ )
- {
- SpielerDaten *player = new SpielerDaten();
- k->getNachrichtEncrypted( (char *)&player->id, 4 );
- k->getNachrichtEncrypted( (char *)&player->pos.x, 4 );
- k->getNachrichtEncrypted( (char *)&player->pos.y, 4 );
- k->getNachrichtEncrypted( (char *)&player->rot, 8 );
- k->getNachrichtEncrypted( (char *)&player->beschleunigung, 8 );
- k->getNachrichtEncrypted( (char *)&player->maxStabilität, 4 );
- k->getNachrichtEncrypted( (char *)&player->maxEnergie, 4 );
- k->getNachrichtEncrypted( (char *)&player->reparatur, 8 );
- k->getNachrichtEncrypted( (char *)&player->akkuLeistung, 8 );
- k->getNachrichtEncrypted( (char *)&player->laserIntensität, 4 );
- k->getNachrichtEncrypted( (char *)&player->laserEffizienz, 4 );
- k->getNachrichtEncrypted( (char *)&player->laserTempo, 4 );
- k->getNachrichtEncrypted( (char *)&player->wendigkeit, 8 );
- k->getNachrichtEncrypted( (char *)&player->antriebEffizienz, 8 );
- k->getNachrichtEncrypted( (char *)&player->energieSchild, 8 );
- k->getNachrichtEncrypted( (char *)&player->energieSchildEffizienz, 8 );
- k->getNachrichtEncrypted( (char *)&player->netzwerk, 4 );
- k->getNachrichtEncrypted( (char *)&player->skillPunkte, 4 );
- k->getNachrichtEncrypted( (char *)&player->m2d, 4 );
- k->getNachrichtEncrypted( (char *)&player->bild, 4 );
- spieler.add( player );
- }
- }
- if( ret == 3 )
- {
- unsigned char l = 0;
- k->getNachrichtEncrypted( (char *)&l, 1 );
- char *err = new char[ l + 1 ];
- err[ l ] = 0;
- k->getNachrichtEncrypted( err, l );
- error = err;
- delete[] err;
- ret = 0;
- }
- klient->endEditorMessage();
- return ret == 1;
- }
- bool EditorKlient::loadTeams( Array< TeamDaten * > &teams )
- {
- Network::Klient *k = klient->beginEditorMessage();
- if( !k )
- {
- error = klient->getLetzterFehler();
- return 0;
- }
- error = "";
- char ret;
- k->sendeEncrypted( "\x4", 1 );
- k->getNachrichtEncrypted( &ret, 1 );
- if( ret == 1 )
- {
- int anz = 0;
- k->getNachrichtEncrypted( (char *)&anz, 4 );
- for( int i = 0; i < anz; i++ )
- {
- TeamDaten *team = new TeamDaten();
- k->getNachrichtEncrypted( (char *)&team->id, 4 );
- k->getNachrichtEncrypted( (char *)&team->maxPunkte, 4 );
- k->getNachrichtEncrypted( (char *)&team->beschleunigung, 8 );
- k->getNachrichtEncrypted( (char *)&team->maxStabilität, 4 );
- k->getNachrichtEncrypted( (char *)&team->maxEnergie, 4 );
- k->getNachrichtEncrypted( (char *)&team->reparatur, 8 );
- k->getNachrichtEncrypted( (char *)&team->akkuLeistung, 8 );
- k->getNachrichtEncrypted( (char *)&team->laserIntensität, 4 );
- k->getNachrichtEncrypted( (char *)&team->laserEffizienz, 4 );
- k->getNachrichtEncrypted( (char *)&team->laserTempo, 4 );
- k->getNachrichtEncrypted( (char *)&team->wendigkeit, 8 );
- k->getNachrichtEncrypted( (char *)&team->antriebEffizienz, 8 );
- k->getNachrichtEncrypted( (char *)&team->energieSchild, 8 );
- k->getNachrichtEncrypted( (char *)&team->energieSchildEffizienz, 8 );
- k->getNachrichtEncrypted( (char *)&team->punkte, 4 );
- teams.add( team );
- }
- }
- if( ret == 3 )
- {
- unsigned char l = 0;
- k->getNachrichtEncrypted( (char *)&l, 1 );
- char *err = new char[ l + 1 ];
- err[ l ] = 0;
- k->getNachrichtEncrypted( err, l );
- error = err;
- delete[] err;
- ret = 0;
- }
- klient->endEditorMessage();
- return ret == 1;
- }
- bool EditorKlient::loadObjekte( Array< ObjektDaten * > &objekte )
- {
- Network::Klient *k = klient->beginEditorMessage();
- if( !k )
- {
- error = klient->getLetzterFehler();
- return 0;
- }
- error = "";
- char ret;
- k->sendeEncrypted( "\x5", 1 );
- k->getNachrichtEncrypted( &ret, 1 );
- if( ret == 1 )
- {
- int anz = 0;
- k->getNachrichtEncrypted( (char *)&anz, 4 );
- for( int i = 0; i < anz; i++ )
- {
- ObjektDaten *objekt = new ObjektDaten();
- k->getNachrichtEncrypted( (char *)&objekt->pos.x, 4 );
- k->getNachrichtEncrypted( (char *)&objekt->pos.y, 4 );
- k->getNachrichtEncrypted( (char *)&objekt->rot, 4 );
- k->getNachrichtEncrypted( (char *)&objekt->scale, 4 );
- k->getNachrichtEncrypted( (char *)&objekt->id, 4 );
- k->getNachrichtEncrypted( (char *)&objekt->m2d, 4 );
- k->getNachrichtEncrypted( (char *)&objekt->bild, 4 );
- k->getNachrichtEncrypted( (char *)&objekt->style, 4 );
- k->getNachrichtEncrypted( (char *)&objekt->maxStabilität, 4 );
- k->getNachrichtEncrypted( (char *)&objekt->maxEnergie, 4 );
- k->getNachrichtEncrypted( (char *)&objekt->energieRadius, 4 );
- k->getNachrichtEncrypted( (char *)&objekt->reparatur, 8 );
- k->getNachrichtEncrypted( (char *)&objekt->akkuLeistung, 8 );
- k->getNachrichtEncrypted( (char *)&objekt->team, 1 );
- objekte.add( objekt );
- }
- }
- if( ret == 3 )
- {
- unsigned char l = 0;
- k->getNachrichtEncrypted( (char *)&l, 1 );
- char *err = new char[ l + 1 ];
- err[ l ] = 0;
- k->getNachrichtEncrypted( err, l );
- error = err;
- delete[] err;
- ret = 0;
- }
- klient->endEditorMessage();
- return ret == 1;
- }
- Bild *EditorKlient::loadBild( const char *templatePath )
- {
- Text txt( templatePath );
- Text pfad;
- if( txt.positionVon( "spiel:" ) == 0 )
- {
- pfad = "data/spiele/Asteroids";
- pfad.append( txt.getTeilText( 6 ) );
- if( pfad.hat( ".ltdb/" ) )
- {
- int pos = pfad.positionVon( ".ltdb/", pfad.anzahlVon( ".ltdb/" ) - 1 );
- LTDBDatei datei;
- datei.setDatei( pfad.getTeilText( 0, pos + 5 ) );
- datei.leseDaten( 0 );
- return datei.laden( 0, pfad.getTeilText( pos + 6 ) );
- }
- }
- if( txt.positionVon( "map:" ) == 0 )
- {
- pfad.append( txt.getTeilText( 5 ) );
- if( pfad.hat( ".ltdb/" ) )
- {
- cs.lock();
- if( klient->deResetPath() )
- {
- while( pfad.anzahlVon( "/" ) > 1 )
- {
- Text *name = pfad.getTeilText( 0, pfad.positionVon( "/" ) );
- klient->deOrdnerÖffnen( name );
- pfad.remove( 0, name->getLength() + 1 );
- name->release();
- }
- Text *datei = pfad.getTeilText( 0, pfad.positionVon( ".ltdb/" ) + 5 );
- Text *bild = pfad.getTeilText( pfad.positionVon( ".ltdb/" ) + 6 );
- Bild *res = klient->deBildLaden( datei, bild, 0 );
- datei->release();
- bild->release();
- cs.unlock();
- return res;
- }
- cs.unlock();
- }
- }
- error = klient->getLetzterFehler();
- return 0;
- }
- Model2DData *EditorKlient::loadModel( const char *templatePath )
- {
- Text txt( templatePath );
- Text pfad;
- if( txt.positionVon( "spiel:" ) == 0 )
- {
- pfad = "data/spiele/Asteroids";
- pfad.append( txt.getTeilText( 6 ) );
- if( pfad.hat( ".m2/" ) )
- {
- int pos = pfad.positionVon( ".m2/", pfad.anzahlVon( ".m2/" ) - 1 );
- M2Datei datei;
- Text *file = pfad.getTeilText( 0, pos + 3 );
- datei.setPfad( file->getText() );
- file->release();
- datei.leseDaten();
- return datei.ladeModel( pfad.getTeilText( pos + 4 ) );
- }
- }
- if( txt.positionVon( "map:" ) == 0 )
- {
- pfad.append( txt.getTeilText( 5 ) );
- if( pfad.hat( ".m2/" ) )
- {
- cs.lock();
- if( klient->deResetPath() )
- {
- while( pfad.anzahlVon( "/" ) > 1 )
- {
- Text *name = pfad.getTeilText( 0, pfad.positionVon( "/" ) );
- klient->deOrdnerÖffnen( name );
- pfad.remove( 0, name->getLength() + 1 );
- name->release();
- }
- Text *datei = pfad.getTeilText( 0, pfad.positionVon( ".m2/" ) + 3 );
- Text *model = pfad.getTeilText( pfad.positionVon( ".m2/" ) + 4 );
- Model2DData *res = klient->deModelLaden( datei, model, 0 );
- datei->release();
- model->release();
- cs.unlock();
- return res;
- }
- cs.unlock();
- }
- }
- error = klient->getLetzterFehler();
- return 0;
- }
- RCArray< Text > *EditorKlient::getAllMapResourcePaths()
- {
- cs.lock();
- klient->deResetPath();
- RCArray< Text > *result = new RCArray< Text >();
- loadMapResourcePathsFromFolder( "map:", result );
- cs.unlock();
- return result;
- }
- void EditorKlient::loadMapResourcePathsFromFolder( const char *folderPath, RCArray< Text > *zPaths )
- {
- RCArray< Text > *files = new RCArray< Text >();
- klient->deGetDateiListe( files );
- for( auto f = files->getIterator(); f; f++ )
- {
- Text path( folderPath );
- path += Text( "/" ) + *f._;
- if( !f->hat( "." ) )
- {
- klient->deOrdnerÖffnen( f );
- loadMapResourcePathsFromFolder( path, zPaths );
- Text back = "..";
- klient->deOrdnerÖffnen( &back );
- }
- else if( f->hat( ".ltdb" ) )
- {
- RCArray< Text > *bilder = new RCArray< Text >();
- klient->deGetBildListe( f, bilder );
- for( auto n = bilder->getIterator(); n; n++ )
- zPaths->add( new Text( path + "/" + *n._ ) );
- bilder->release();
- }
- else if( f->hat( ".m2" ) )
- {
- RCArray< Text > *models = new RCArray< Text >();
- klient->deGetModelListe( f, models );
- for( auto n = models->getIterator(); n; n++ )
- zPaths->add( new Text( path + "/" + *n._ ) );
- models->release();
- }
- else if( f->hat( ".gsl" ) )
- {
- RCArray< Text > *sounds = new RCArray< Text >();
- klient->deGetSoundListe( f, sounds );
- for( auto n = sounds->getIterator(); n; n++ )
- zPaths->add( new Text( path + "/" + *n._ ) );
- sounds->release();
- }
- }
- files->release();
- }
- // Lädt die Spieler Team Struktur
- bool EditorKlient::getSpielerTeamStruktur( SpielerTeamStrukturV *sts )
- {
- return klient->ladeTeamDaten( sts );
- }
- bool EditorKlient::loadMapSize( Punkt &size )
- {
- Network::Klient *k = klient->beginEditorMessage();
- if( !k )
- {
- error = klient->getLetzterFehler();
- return 0;
- }
- error = "";
- char ret;
- k->sendeEncrypted( "\xB", 1 );
- k->getNachrichtEncrypted( &ret, 1 );
- if( ret == 1 )
- {
- k->getNachrichtEncrypted( (char *)&size.x, 4 );
- k->getNachrichtEncrypted( (char *)&size.y, 4 );
- }
- if( ret == 3 )
- {
- unsigned char l = 0;
- k->getNachrichtEncrypted( (char *)&l, 1 );
- char *err = new char[ l + 1 ];
- err[ l ] = 0;
- k->getNachrichtEncrypted( err, l );
- error = err;
- delete[] err;
- ret = 0;
- }
- klient->endEditorMessage();
- return ret == 1;
- }
- // Gibt den Letzten Fehler zurück
- char *EditorKlient::getLastError() const
- {
- return error;
- }
|