Editor.cpp 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849
  1. #include "Editor.h"
  2. #include <Datei.h>
  3. #include "STS.h"
  4. #include "KartenLeser.h"
  5. #include "Strukturen.h"
  6. // Inhalt der Editor Klasse aus Editor.h
  7. // Konstruktor
  8. Editor::Editor()
  9. : ReferenceCounter()
  10. {}
  11. // Destruktor
  12. Editor::~Editor()
  13. {}
  14. // nicht constant
  15. void Editor::setPfad( char* pfad )
  16. {
  17. this->pfad = pfad;
  18. this->pfad += "/editor";
  19. }
  20. void Editor::open()
  21. {
  22. }
  23. bool Editor::nachricht( SKlient* k )
  24. {
  25. err = "";
  26. char n = 0;
  27. k->getNachrichtEncrypted( &n, 1 );
  28. switch( n )
  29. {
  30. case 0: // Initialisierung
  31. k->sendeEncrypted( "\1", 1 );
  32. if( DateiExistiert( pfad ) )
  33. k->sendeEncrypted( "\2", 1 );
  34. else
  35. {
  36. if( createSitzung() )
  37. k->sendeEncrypted( "\1", 1 );
  38. else
  39. return 0;
  40. }
  41. return 1;
  42. case 1: // Sitzung verwerfen
  43. if( createSitzung() )
  44. k->sendeEncrypted( "\1", 1 );
  45. else
  46. return 0;
  47. return 1;
  48. case 2: // Sitzung speichern unt beenden
  49. if( saveSitzung() )
  50. k->sendeEncrypted( "\1", 1 );
  51. else
  52. return 0;
  53. return 1;
  54. case 3: // Lade Spieler Daten
  55. {
  56. Text tmpPf = pfad.getText();
  57. tmpPf += "/player";
  58. Datei d;
  59. d.setDatei( tmpPf );
  60. RCArray< Text >* files = d.getDateiListe();
  61. if( files )
  62. {
  63. k->sendeEncrypted( "\1", 1 );
  64. int anz = files->getEintragAnzahl();
  65. k->sendeEncrypted( (char*)&anz, 4 );
  66. for( int i = 0; i < anz; i++ )
  67. {
  68. Text pf = tmpPf;
  69. pf += "/";
  70. pf += files->z( i )->getText();
  71. Datei player;
  72. player.setDatei( pf );
  73. player.open( Datei::Style::lesen );
  74. SpielerStr p( dynamic_cast<Datei*>(player.getThis()) );
  75. player.close();
  76. k->sendeEncrypted( (char*)&p.id, 4 );
  77. k->sendeEncrypted( (char*)&p.pos.x, 4 );
  78. k->sendeEncrypted( (char*)&p.pos.y, 4 );
  79. k->sendeEncrypted( (char*)&p.rot, 8 );
  80. k->sendeEncrypted( (char*)&p.beschleunigung, 8 );
  81. k->sendeEncrypted( (char*)&p.maxStability, 4 );
  82. k->sendeEncrypted( (char*)&p.maxEnergie, 4 );
  83. k->sendeEncrypted( (char*)&p.reparatur, 8 );
  84. k->sendeEncrypted( (char*)&p.akkuLeistung, 8 );
  85. k->sendeEncrypted( (char*)&p.laserIntensity, 4 );
  86. k->sendeEncrypted( (char*)&p.laserEffizienz, 4 );
  87. k->sendeEncrypted( (char*)&p.laserTempo, 4 );
  88. k->sendeEncrypted( (char*)&p.wendigkeit, 8 );
  89. k->sendeEncrypted( (char*)&p.antriebEffizienz, 8 );
  90. k->sendeEncrypted( (char*)&p.energieSchild, 8 );
  91. k->sendeEncrypted( (char*)&p.energieSchildEffizienz, 8 );
  92. k->sendeEncrypted( (char*)&p.netzwerk, 4 );
  93. k->sendeEncrypted( (char*)&p.skillPunkte, 4 );
  94. k->sendeEncrypted( (char*)&p.m2d, 4 );
  95. k->sendeEncrypted( (char*)&p.bild, 4 );
  96. }
  97. }
  98. else
  99. {
  100. err = "Fehler beim laden von ";
  101. err += tmpPf.getText();
  102. return 0;
  103. }
  104. return 1;
  105. }
  106. case 4: // Lade Team Daten
  107. {
  108. Text tmpPf = pfad.getText();
  109. tmpPf += "/team";
  110. Datei d;
  111. d.setDatei( tmpPf );
  112. RCArray< Text >* files = d.getDateiListe();
  113. if( files )
  114. {
  115. k->sendeEncrypted( "\1", 1 );
  116. int anz = files->getEintragAnzahl();
  117. k->sendeEncrypted( (char*)&anz, 4 );
  118. for( int i = 0; i < anz; i++ )
  119. {
  120. Text pf = tmpPf;
  121. pf += "/";
  122. pf += files->z( i )->getText();
  123. Datei team;
  124. team.setDatei( pf );
  125. team.open( Datei::Style::lesen );
  126. TeamStr t( dynamic_cast<Datei*>(team.getThis()) );
  127. team.close();
  128. k->sendeEncrypted( (char*)&t.id, 4 );
  129. k->sendeEncrypted( (char*)&t.maxPunkte, 4 );
  130. k->sendeEncrypted( (char*)&t.beschleunigung, 8 );
  131. k->sendeEncrypted( (char*)&t.maxStability, 4 );
  132. k->sendeEncrypted( (char*)&t.maxEnergie, 4 );
  133. k->sendeEncrypted( (char*)&t.reparatur, 8 );
  134. k->sendeEncrypted( (char*)&t.akkuLeistung, 8 );
  135. k->sendeEncrypted( (char*)&t.laserIntensity, 4 );
  136. k->sendeEncrypted( (char*)&t.laserEffizienz, 4 );
  137. k->sendeEncrypted( (char*)&t.laserTempo, 4 );
  138. k->sendeEncrypted( (char*)&t.wendigkeit, 8 );
  139. k->sendeEncrypted( (char*)&t.antriebEffizienz, 8 );
  140. k->sendeEncrypted( (char*)&t.energieSchild, 8 );
  141. k->sendeEncrypted( (char*)&t.energieSchildEffizienz, 8 );
  142. k->sendeEncrypted( (char*)&t.punkte, 4 );
  143. }
  144. }
  145. else
  146. {
  147. err = "Fehler beim laden von ";
  148. err += tmpPf.getText();
  149. return 0;
  150. }
  151. return 1;
  152. }
  153. case 5: // Lade Objekt Daten
  154. {
  155. Text tmpPf = pfad.getText();
  156. tmpPf += "/objekt";
  157. Datei d;
  158. d.setDatei( tmpPf );
  159. RCArray< Text >* files = d.getDateiListe();
  160. if( files )
  161. {
  162. k->sendeEncrypted( "\1", 1 );
  163. int anz = files->getEintragAnzahl();
  164. k->sendeEncrypted( (char*)&anz, 4 );
  165. for( int i = 0; i < anz; i++ )
  166. {
  167. Text pf = tmpPf;
  168. pf += "/";
  169. pf += files->z( i )->getText();
  170. Datei object;
  171. object.setDatei( pf );
  172. object.open( Datei::Style::lesen );
  173. ObjektStr o( dynamic_cast<Datei*>(object.getThis()) );
  174. object.close();
  175. k->sendeEncrypted( (char*)&o.pos.x, 4 );
  176. k->sendeEncrypted( (char*)&o.pos.y, 4 );
  177. k->sendeEncrypted( (char*)&o.rot, 4 );
  178. k->sendeEncrypted( (char*)&o.scale, 4 );
  179. k->sendeEncrypted( (char*)&o.id, 4 );
  180. k->sendeEncrypted( (char*)&o.m2d, 4 );
  181. k->sendeEncrypted( (char*)&o.bild, 4 );
  182. k->sendeEncrypted( (char*)&o.style, 4 );
  183. k->sendeEncrypted( (char*)&o.maxStability, 4 );
  184. k->sendeEncrypted( (char*)&o.maxEnergie, 4 );
  185. k->sendeEncrypted( (char*)&o.energieRadius, 4 );
  186. k->sendeEncrypted( (char*)&o.reparatur, 8 );
  187. k->sendeEncrypted( (char*)&o.akkuLeistung, 8 );
  188. k->sendeEncrypted( (char*)&o.team, 1 );
  189. }
  190. }
  191. else
  192. {
  193. err = "Fehler beim laden von ";
  194. err += tmpPf.getText();
  195. return 0;
  196. }
  197. return 1;
  198. }
  199. case 6: // Save Player
  200. {
  201. k->sendeEncrypted( "\1", 1 );
  202. SpielerStr p( 0 );
  203. k->getNachrichtEncrypted( (char*)&p.id, 4 );
  204. k->getNachrichtEncrypted( (char*)&p.pos.x, 4 );
  205. k->getNachrichtEncrypted( (char*)&p.pos.y, 4 );
  206. k->getNachrichtEncrypted( (char*)&p.rot, 8 );
  207. k->getNachrichtEncrypted( (char*)&p.beschleunigung, 8 );
  208. k->getNachrichtEncrypted( (char*)&p.maxStability, 4 );
  209. k->getNachrichtEncrypted( (char*)&p.maxEnergie, 4 );
  210. k->getNachrichtEncrypted( (char*)&p.reparatur, 8 );
  211. k->getNachrichtEncrypted( (char*)&p.akkuLeistung, 8 );
  212. k->getNachrichtEncrypted( (char*)&p.laserIntensity, 4 );
  213. k->getNachrichtEncrypted( (char*)&p.laserEffizienz, 4 );
  214. k->getNachrichtEncrypted( (char*)&p.laserTempo, 4 );
  215. k->getNachrichtEncrypted( (char*)&p.wendigkeit, 8 );
  216. k->getNachrichtEncrypted( (char*)&p.antriebEffizienz, 8 );
  217. k->getNachrichtEncrypted( (char*)&p.energieSchild, 8 );
  218. k->getNachrichtEncrypted( (char*)&p.energieSchildEffizienz, 8 );
  219. k->getNachrichtEncrypted( (char*)&p.netzwerk, 4 );
  220. k->getNachrichtEncrypted( (char*)&p.skillPunkte, 4 );
  221. k->getNachrichtEncrypted( (char*)&p.m2d, 4 );
  222. k->getNachrichtEncrypted( (char*)&p.bild, 4 );
  223. Text pf = pfad.getText();
  224. pf += "/player/";
  225. pf += p.id;
  226. pf += ".p";
  227. Datei player;
  228. player.setDatei( pf );
  229. if( player.open( Datei::Style::schreiben ) )
  230. {
  231. p.save( dynamic_cast<Datei*>(player.getThis()) );
  232. player.close();
  233. k->sendeEncrypted( "\1", 1 );
  234. return 1;
  235. }
  236. err = "Fehler beim Schreiben von ";
  237. err += pf.getText();
  238. return 0;
  239. }
  240. case 7: // Save Team
  241. {
  242. k->sendeEncrypted( "\1", 1 );
  243. TeamStr t( 0 );
  244. k->getNachrichtEncrypted( (char*)&t.id, 4 );
  245. k->getNachrichtEncrypted( (char*)&t.maxPunkte, 4 );
  246. k->getNachrichtEncrypted( (char*)&t.beschleunigung, 8 );
  247. k->getNachrichtEncrypted( (char*)&t.maxStability, 4 );
  248. k->getNachrichtEncrypted( (char*)&t.maxEnergie, 4 );
  249. k->getNachrichtEncrypted( (char*)&t.reparatur, 8 );
  250. k->getNachrichtEncrypted( (char*)&t.akkuLeistung, 8 );
  251. k->getNachrichtEncrypted( (char*)&t.laserIntensity, 4 );
  252. k->getNachrichtEncrypted( (char*)&t.laserEffizienz, 4 );
  253. k->getNachrichtEncrypted( (char*)&t.laserTempo, 4 );
  254. k->getNachrichtEncrypted( (char*)&t.wendigkeit, 8 );
  255. k->getNachrichtEncrypted( (char*)&t.antriebEffizienz, 8 );
  256. k->getNachrichtEncrypted( (char*)&t.energieSchild, 8 );
  257. k->getNachrichtEncrypted( (char*)&t.energieSchildEffizienz, 8 );
  258. k->getNachrichtEncrypted( (char*)&t.punkte, 4 );
  259. Text pf = pfad.getText();
  260. pf += "/player/";
  261. pf += t.id;
  262. pf += ".t";
  263. Datei team;
  264. team.setDatei( pf );
  265. if( team.open( Datei::Style::schreiben ) )
  266. {
  267. t.save( dynamic_cast<Datei*>(team.getThis()) );
  268. team.close();
  269. k->sendeEncrypted( "\1", 1 );
  270. return 1;
  271. }
  272. err = "Fehler beim Schreiben von ";
  273. err += pf.getText();
  274. return 0;
  275. }
  276. case 8: // Save Objekt
  277. {
  278. k->sendeEncrypted( "\1", 1 );
  279. ObjektStr o( 0 );
  280. k->getNachrichtEncrypted( (char*)&o.pos.x, 4 );
  281. k->getNachrichtEncrypted( (char*)&o.pos.y, 4 );
  282. k->getNachrichtEncrypted( (char*)&o.rot, 4 );
  283. k->getNachrichtEncrypted( (char*)&o.scale, 4 );
  284. k->getNachrichtEncrypted( (char*)&o.id, 4 );
  285. k->getNachrichtEncrypted( (char*)&o.m2d, 4 );
  286. k->getNachrichtEncrypted( (char*)&o.bild, 4 );
  287. k->getNachrichtEncrypted( (char*)&o.style, 4 );
  288. k->getNachrichtEncrypted( (char*)&o.maxStability, 4 );
  289. k->getNachrichtEncrypted( (char*)&o.maxEnergie, 4 );
  290. k->getNachrichtEncrypted( (char*)&o.energieRadius, 4 );
  291. k->getNachrichtEncrypted( (char*)&o.reparatur, 8 );
  292. k->getNachrichtEncrypted( (char*)&o.akkuLeistung, 8 );
  293. k->getNachrichtEncrypted( (char*)&o.team, 1 );
  294. Text pf = pfad.getText();
  295. pf += "/objekt/";
  296. pf += o.id;
  297. pf += ".o";
  298. Datei objekt;
  299. objekt.setDatei( pf );
  300. if( objekt.erstellen() && objekt.open( Datei::Style::schreiben ) )
  301. {
  302. o.save( dynamic_cast<Datei*>(objekt.getThis()) );
  303. objekt.close();
  304. k->sendeEncrypted( "\1", 1 );
  305. return 1;
  306. }
  307. err = "Fehler beim Schreiben von ";
  308. err += pf.getText();
  309. return 0;
  310. }
  311. case 9: // Delete Objekt
  312. {
  313. k->sendeEncrypted( "\1", 1 );
  314. int id;
  315. k->getNachrichtEncrypted( (char*)&id, 4 );
  316. Text pf = pfad.getText();
  317. pf += "/objekt/";
  318. pf += id;
  319. pf += ".o";
  320. if( DateiRemove( pf ) )
  321. {
  322. k->sendeEncrypted( "\1", 1 );
  323. return 1;
  324. }
  325. err = "Fehler beim löschen der Datei ";
  326. err += pf;
  327. return 0;
  328. }
  329. case 0xA: // Lade Resourcen
  330. {
  331. Text tmpPf = pfad.getText();
  332. tmpPf += "/resource";
  333. Datei d;
  334. d.setDatei( tmpPf );
  335. RCArray< Text >* files = d.getDateiListe();
  336. if( files )
  337. {
  338. k->sendeEncrypted( "\1", 1 );
  339. int anz = files->getEintragAnzahl();
  340. k->sendeEncrypted( (char*)&anz, 4 );
  341. for( int i = 0; i < anz; i++ )
  342. {
  343. Text pf = tmpPf;
  344. pf += "/";
  345. pf += files->z( i )->getText();
  346. Datei resource;
  347. resource.setDatei( pf );
  348. resource.open( Datei::Style::lesen );
  349. int id = *files->z( i );
  350. k->sendeEncrypted( (char*)&id, 4 );
  351. char len = 0;
  352. resource.lese( &len, 1 );
  353. char* path = new char[ len + 1 ];
  354. path[ (int)len ] = 0;
  355. resource.lese( path, len );
  356. k->sendeEncrypted( &len, 1 );
  357. k->sendeEncrypted( path, len );
  358. delete[] path;
  359. resource.close();
  360. }
  361. }
  362. else
  363. {
  364. err = "Fehler beim laden von ";
  365. err += tmpPf.getText();
  366. return 0;
  367. }
  368. return 1;
  369. }
  370. case 0xB: // Map Size
  371. {
  372. Text tmpPf = pfad.getText();
  373. tmpPf += "/size";
  374. Datei d;
  375. d.setDatei( tmpPf );
  376. if( d.open( Datei::Style::lesen ) )
  377. {
  378. k->sendeEncrypted( "\1", 1 );
  379. int size = 0;
  380. d.lese( (char*)&size, 4 );
  381. k->sendeEncrypted( (char*)&size, 4 );
  382. d.lese( (char*)&size, 4 );
  383. k->sendeEncrypted( (char*)&size, 4 );
  384. d.close();
  385. }
  386. else
  387. {
  388. err = "Fehler beim laden von ";
  389. err += tmpPf.getText();
  390. return 0;
  391. }
  392. return 1;
  393. }
  394. case 0xC: // Add Resource
  395. {
  396. k->sendeEncrypted( "\1", 1 );
  397. Datei d;
  398. d.setDatei( Text( pfad.getText() ) + "/resource" );
  399. RCArray<Text>* list = d.getDateiListe();
  400. int nId = 0;
  401. bool found = 0;
  402. do
  403. {
  404. nId++;
  405. found = 0;
  406. for( auto t : *list )
  407. {
  408. if( t->istGleich( Text( nId ) + ".r" ) )
  409. {
  410. found = 1;
  411. break;
  412. }
  413. }
  414. } while( found );
  415. list->release();
  416. unsigned char len = 0;
  417. k->getNachrichtEncrypted( (char*)&len, 1 );
  418. char* path = new char[ len + 1 ];
  419. path[ len ] = 0;
  420. k->getNachrichtEncrypted( path, len );
  421. d.setDatei( Text( pfad.getText() ) + "/resource/" + nId + ".r" );
  422. if( d.open( Datei::Style::schreiben ) )
  423. {
  424. d.schreibe( (char*)&len, 1 );
  425. d.schreibe( path, len );
  426. d.close();
  427. k->sendeEncrypted( "\1", 1 );
  428. k->sendeEncrypted( (char*)&nId, 4 );
  429. return 1;
  430. }
  431. err = "Fehler beim schreiben der Datei.";
  432. return 0;
  433. }
  434. default:
  435. err = "Unbekannte Nachricht. Error Code: " __FILE__ ":";
  436. err += __LINE__;
  437. return 0;
  438. }
  439. return 0;
  440. }
  441. // constant
  442. char* Editor::getLetzterFehler() const
  443. {
  444. return err;
  445. }
  446. // privat
  447. bool Editor::createSitzung()
  448. {
  449. DateiRemove( pfad );
  450. Text pf = pfad.getText();
  451. pf.remove( pf.getLength() - 6, pf.getLength() );
  452. pf += "map/server/data.map";
  453. Datei d;
  454. d.setDatei( pf.getText() );
  455. if( d.open( Datei::Style::lesen ) )
  456. {
  457. pf = pfad.getText();
  458. pf += "/resource/";
  459. int rAnz = 0;
  460. d.lese( (char*)&rAnz, 4 );
  461. for( int i = 0; i < rAnz; i++ )
  462. {
  463. int id = 0;
  464. d.lese( (char*)&id, 4 );
  465. Text tmpPf = pf.getText();
  466. tmpPf += id;
  467. tmpPf += ".r";
  468. char len = 0;
  469. d.lese( &len, 1 );
  470. char* path = new char[ len + 1 ];
  471. path[ (int)len ] = 0;
  472. d.lese( path, len );
  473. Datei r;
  474. r.setDatei( tmpPf );
  475. r.erstellen();
  476. if( !r.open( Datei::Style::schreiben ) )
  477. {
  478. err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim lesen von ";
  479. err += tmpPf;
  480. err += ". Fehler Code: " __FILE__ ":";
  481. err += __LINE__;
  482. err += "\n";
  483. }
  484. r.schreibe( &len, 1 );
  485. r.schreibe( path, len );
  486. r.close();
  487. delete[] path;
  488. }
  489. pf = pfad.getText();
  490. pf += "/size";
  491. Datei s;
  492. s.setDatei( pf.getText() );
  493. if( !s.open( Datei::Style::schreiben ) )
  494. {
  495. err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim lesen von ";
  496. err += pf;
  497. err += ". Fehler Code: " __FILE__ ":";
  498. err += __LINE__;
  499. err += "\n";
  500. }
  501. __int64 size = 0;
  502. d.lese( (char*)&size, 8 );
  503. s.schreibe( (char*)&size, 8 );
  504. s.close();
  505. int objAnz = 0;
  506. d.lese( (char*)&objAnz, 4 );
  507. for( int i = 0; i < objAnz; i++ )
  508. {
  509. ObjektStr objStr( &d );
  510. Text tmpPf = pfad.getText();
  511. tmpPf += "/objekt/";
  512. tmpPf += objStr.id;
  513. tmpPf += ".o";
  514. Datei obj;
  515. obj.setDatei( tmpPf.getText() );
  516. obj.erstellen();
  517. if( !obj.open( Datei::Style::schreiben ) )
  518. {
  519. err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
  520. err += tmpPf;
  521. err += ". Fehler Code: " __FILE__ ":";
  522. err += __LINE__;
  523. err += "\n";
  524. }
  525. objStr.save( &obj );
  526. obj.close();
  527. }
  528. SpielerTeamStruktur* sts = new SpielerTeamStruktur();
  529. Text tmp = pfad.getText();
  530. pf.remove( pf.getLength() - 12, pf.getLength() );
  531. tmp.remove( 0, tmp.positionVon( '/', tmp.anzahlVon( '/' ) ) );
  532. int kartenId = tmp;
  533. tmp = pfad.getText();
  534. tmp.remove( tmp.getLength() - 6, tmp.getLength() );
  535. tmp += "map/server/";
  536. KartenLeser* stsReader = new KartenLeser( kartenId, 0, tmp );
  537. stsReader->ladeSpielerTeamStruktur( sts );
  538. stsReader->release();
  539. for( int i = 0; i < sts->spielerAnzahl; i++ )
  540. {
  541. SpielerStr spStr( &d );
  542. Text tmpPf = pfad.getText();
  543. tmpPf += "/player/";
  544. tmpPf += spStr.id;
  545. tmpPf += ".p";
  546. Datei pl;
  547. pl.setDatei( tmpPf.getText() );
  548. pl.erstellen();
  549. if( !pl.open( Datei::Style::schreiben ) )
  550. {
  551. err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
  552. err += tmpPf;
  553. err += ". Fehler Code: " __FILE__ ":";
  554. err += __LINE__;
  555. err += "\n";
  556. }
  557. spStr.save( &pl );
  558. pl.close();
  559. }
  560. for( int i = 0; i < sts->teamAnzahl; i++ )
  561. {
  562. TeamStr tStr( &d );
  563. Text tmpPf = pfad.getText();
  564. tmpPf += "/team/";
  565. tmpPf += tStr.id;
  566. tmpPf += ".t";
  567. Datei pl;
  568. pl.setDatei( tmpPf.getText() );
  569. pl.erstellen();
  570. if( !pl.open( Datei::Style::schreiben ) )
  571. {
  572. err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
  573. err += tmpPf;
  574. err += ". Fehler Code: " __FILE__ ":";
  575. err += __LINE__;
  576. err += "\n";
  577. }
  578. tStr.save( &pl );
  579. pl.close();
  580. }
  581. sts->release();
  582. d.close();
  583. }
  584. else
  585. {
  586. err = "Sitzung konnte nicht korrekt erstellt werden. Fehler beim lesen von ";
  587. err += pf;
  588. err += ". Fehler Code: " __FILE__ ":";
  589. err += __LINE__;
  590. pf = pfad.getText();
  591. pf += "/empty.file";
  592. DateiPfadErstellen( pf );
  593. DateiRemove( pf );
  594. }
  595. if( !err.getLength() )
  596. return 1;
  597. else
  598. return 0;
  599. }
  600. bool Editor::saveSitzung()
  601. {
  602. Text pf = pfad.getText();
  603. pf.remove( pf.getLength() - 6, pf.getLength() );
  604. pf += "map/server/data_tmp.map";
  605. Datei d;
  606. d.setDatei( pf.getText() );
  607. if( d.open( Datei::Style::schreiben ) )
  608. {
  609. pf = pfad.getText();
  610. pf += "/resource";
  611. Datei res;
  612. res.setDatei( pf );
  613. RCArray<Text>* resList = res.getDateiListe();
  614. if( resList )
  615. {
  616. int anz = resList->getEintragAnzahl();
  617. d.schreibe( (char*)&anz, 4 );
  618. for( auto resPf : *resList )
  619. {
  620. Text tmp = pf.getText();
  621. tmp += "/";
  622. tmp += resPf->getText();
  623. Datei r;
  624. r.setDatei( tmp );
  625. if( r.open( Datei::Style::lesen ) )
  626. {
  627. int id = (int)*resPf;
  628. d.schreibe( (char*)&id, 4 );
  629. char b = 0;
  630. r.lese( &b, 1 );
  631. char* buffer = new char[ b + 1 ];
  632. buffer[ (int)b ] = 0;
  633. r.lese( buffer, b );
  634. d.schreibe( &b, 1 );
  635. d.schreibe( buffer, b );
  636. r.close();
  637. }
  638. else
  639. {
  640. err = "Fehler beim Lesen von ";
  641. err += tmp.getText();
  642. err += ". Fehler Code: " __FILE__ ":";
  643. err += __LINE__;
  644. d.close();
  645. d.remove();
  646. resList->release();
  647. return 0;
  648. }
  649. }
  650. resList->release();
  651. }
  652. else
  653. d.schreibe( "\0\0\0\0", 4 );
  654. pf = pfad.getText();
  655. pf += "/size";
  656. Datei s;
  657. s.setDatei( pf.getText() );
  658. if( s.open( Datei::Style::lesen ) )
  659. {
  660. __int64 size = 0;
  661. s.lese( (char*)&size, 8 );
  662. d.schreibe( (char*)&size, 8 );
  663. s.close();
  664. }
  665. else
  666. {
  667. err = "Fehler beim Lesen von ";
  668. err += pf.getText();
  669. err = ". Fehler Code: " __FILE__ ":";
  670. err += __LINE__;
  671. d.close();
  672. d.remove();
  673. return 0;
  674. }
  675. pf = pfad.getText();
  676. pf += "/objekt";
  677. Datei obj;
  678. obj.setDatei( pf );
  679. RCArray<Text>* objList = obj.getDateiListe();
  680. if( objList )
  681. {
  682. int anz = objList->getEintragAnzahl();
  683. d.schreibe( (char*)&anz, 4 );
  684. for( auto objPf : *objList )
  685. {
  686. Text tmp = pf.getText();
  687. tmp += "/";
  688. tmp += objPf->getText();
  689. Datei r;
  690. r.setDatei( tmp );
  691. if( r.open( Datei::Style::lesen ) )
  692. {
  693. ObjektStr objStr( &r );
  694. objStr.save( &d );
  695. r.close();
  696. }
  697. else
  698. {
  699. err = "Fehler beim Lesen von ";
  700. err += tmp.getText();
  701. err = ". Fehler Code: " __FILE__ ":";
  702. err += __LINE__;
  703. d.close();
  704. d.remove();
  705. objList->release();
  706. return 0;
  707. }
  708. }
  709. objList->release();
  710. }
  711. else
  712. d.schreibe( "\0\0\0\0", 4 );
  713. pf = pfad.getText();
  714. pf += "/player";
  715. Datei pl;
  716. pl.setDatei( pf );
  717. RCArray<Text>* plList = pl.getDateiListe();
  718. if( !plList )
  719. {
  720. err = "Fehler beim Lesen von ";
  721. err += pf.getText();
  722. err = ". Fehler Code: " __FILE__ ":";
  723. err += __LINE__;
  724. d.close();
  725. d.remove();
  726. return 0;
  727. }
  728. for( auto plPf : *plList )
  729. {
  730. Text tmp = pf.getText();
  731. tmp += "/";
  732. tmp += plPf->getText();
  733. Datei r;
  734. r.setDatei( tmp );
  735. if( r.open( Datei::Style::lesen ) )
  736. {
  737. SpielerStr spStr( &r );
  738. spStr.save( &d );
  739. r.close();
  740. }
  741. else
  742. {
  743. err = "Fehler beim Lesen von ";
  744. err += tmp.getText();
  745. err = ". Fehler Code: " __FILE__ ":";
  746. err += __LINE__;
  747. d.close();
  748. d.remove();
  749. plList->release();
  750. return 0;
  751. }
  752. }
  753. plList->release();
  754. pf = pfad.getText();
  755. pf += "/team";
  756. Datei tm;
  757. tm.setDatei( pf );
  758. RCArray<Text>* tmList = tm.getDateiListe();
  759. if( !tmList )
  760. {
  761. err = "Fehler beim Lesen von ";
  762. err += pf.getText();
  763. err = ". Fehler Code: " __FILE__ ":";
  764. err += __LINE__;
  765. d.close();
  766. d.remove();
  767. return 0;
  768. }
  769. for( auto tmPf : *tmList )
  770. {
  771. Text tmp = pf.getText();
  772. tmp += "/";
  773. tmp += tmPf->getText();
  774. Datei r;
  775. r.setDatei( tmp );
  776. if( r.open( Datei::Style::lesen ) )
  777. {
  778. TeamStr tStr( &r );
  779. tStr.save( &d );
  780. r.close();
  781. }
  782. else
  783. {
  784. err = "Fehler beim Lesen von ";
  785. err += tmp.getText();
  786. err = ". Fehler Code: " __FILE__ ":";
  787. err += __LINE__;
  788. d.close();
  789. d.remove();
  790. tmList->release();
  791. return 0;
  792. }
  793. }
  794. tmList->release();
  795. pf = pfad.getText();
  796. pf.remove( pf.getLength() - 6, pf.getLength() );
  797. pf += "map/server/data.map";
  798. d.close();
  799. if( !DateiRemove( pf ) || !d.umbenennen( pf ) )
  800. {
  801. err = "Fehler beim Übernehmen der Änderungen. Fehler Code: " __FILE__ ":";
  802. err += __LINE__;
  803. return 0;
  804. }
  805. }
  806. else
  807. {
  808. err = "Fehler beim Speichern der Änderungen (Server). Fehler Code: " __FILE__ ":";
  809. err += __LINE__;
  810. return 0;
  811. }
  812. pf = pfad.getText();
  813. pf.remove( pf.getLength() - 6, pf.getLength() );
  814. pf += "map/client/map/data/data.map";
  815. Datei d2;
  816. d2.setDatei( pf.getText() );
  817. if( d2.open( Datei::Style::schreiben ) && d.open( Datei::Style::lesen ) )
  818. {
  819. __int64 size = d.getSize();
  820. char* buffer = new char[ 2048 ];
  821. while( size > 0 )
  822. {
  823. int len = (int)(size > 2048 ? 2048 : size);
  824. d.lese( buffer, len );
  825. d2.schreibe( buffer, len );
  826. size -= len;
  827. }
  828. delete[] buffer;
  829. d.close();
  830. d2.close();
  831. }
  832. else
  833. {
  834. err = "Fehler beim Speichern der Änderungen (Client). Fehler Code: " __FILE__ ":";
  835. err += __LINE__;
  836. return 0;
  837. }
  838. DateiRemove( pfad.getText() );
  839. return 1;
  840. }