Editor.cpp 37 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174
  1. #include "Editor.h"
  2. #include <Datei.h>
  3. #include "Reader.h"
  4. // Inhalt der Editor Klasse aus Editor.h
  5. // Konstruktor
  6. Editor::Editor()
  7. {
  8. ref = 1;
  9. }
  10. // Destruktor
  11. Editor::~Editor()
  12. {}
  13. // nicht constant
  14. void Editor::setPfad( char *pfad )
  15. {
  16. this->pfad = pfad;
  17. this->pfad += "/editor";
  18. }
  19. void Editor::open()
  20. {
  21. }
  22. bool Editor::nachricht( SKlient *k )
  23. {
  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( 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( 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( 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( 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( 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( 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->getIterator(); t; t++ )
  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. // Reference Counting
  447. ESEditorV *Editor::getThis()
  448. {
  449. ref++;
  450. return this;
  451. }
  452. ESEditorV *Editor::release()
  453. {
  454. ref--;
  455. if( !ref )
  456. delete this;
  457. return 0;
  458. }
  459. // privat
  460. bool Editor::createSitzung()
  461. {
  462. DateiRemove( pfad );
  463. Text pf = pfad.getText();
  464. pf.remove( pf.getLength() - 6, pf.getLength() );
  465. pf += "map/server/sts.ltgd";
  466. int spielerAnzahl;
  467. int teamAnzahl;
  468. Datei d;
  469. d.setDatei( pf );
  470. if( !d.existiert() || d.istOrdner() )
  471. {
  472. err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim lesen von ";
  473. err += pf;
  474. err += ". Fehler Code: " __FILE__ ":";
  475. err += __LINE__;
  476. err += "\n";
  477. return 0;
  478. }
  479. d.open( Datei::Style::lesen );
  480. d.lese( (char *)& spielerAnzahl, 4 );
  481. d.lese( (char *)& teamAnzahl, 4 );
  482. d.close();
  483. pf = pfad.getText();
  484. pf.remove( pf.getLength() - 6, pf.getLength() );
  485. pf += "map/server/data.map";
  486. d.setDatei( pf.getText() );
  487. if( d.open( Datei::Style::lesen ) )
  488. {
  489. // map size
  490. pf = pfad.getText();
  491. pf += "/size";
  492. Datei s;
  493. s.setDatei( pf.getText() );
  494. if( !s.open( Datei::Style::schreiben ) )
  495. {
  496. err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim lesen von ";
  497. err += pf;
  498. err += ". Fehler Code: " __FILE__ ":";
  499. err += __LINE__;
  500. err += "\n";
  501. }
  502. __int64 size = 0;
  503. d.lese( (char *)& size, 8 );
  504. s.schreibe( (char *)& size, 8 );
  505. s.close();
  506. // teams
  507. pf = pfad.getText();
  508. pf += "/team/";
  509. for( int i = 0; i < teamAnzahl; i++ )
  510. {
  511. Text tmpPf = pf.getText();
  512. tmpPf += i;
  513. tmpPf += ".t";
  514. int maxWbZeit;
  515. int punkte;
  516. d.lese( (char *)& maxWbZeit, 4 );
  517. d.lese( (char *)& punkte, 4 );
  518. Datei t;
  519. t.setDatei( tmpPf );
  520. t.erstellen();
  521. if( !t.open( Datei::Style::schreiben ) )
  522. {
  523. err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
  524. err += tmpPf;
  525. err += ". Fehler Code: " __FILE__ ":";
  526. err += __LINE__;
  527. err += "\n";
  528. }
  529. t.schreibe( (char *)& maxWbZeit, 4 );
  530. t.schreibe( (char *)& punkte, 4 );
  531. t.close();
  532. }
  533. // spieler
  534. pf = pfad.getText();
  535. pf += "/player/";
  536. for( int i = 0; i < spielerAnzahl; i++ )
  537. {
  538. Text tmpPf = pf.getText();
  539. tmpPf += i;
  540. tmpPf += ".t";
  541. int spawnX;
  542. int spawnY;
  543. d.lese( (char *)& spawnX, 4 );
  544. d.lese( (char *)& spawnY, 4 );
  545. Datei s;
  546. s.setDatei( tmpPf );
  547. s.erstellen();
  548. if( !s.open( Datei::Style::schreiben ) )
  549. {
  550. err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
  551. err += tmpPf;
  552. err += ". Fehler Code: " __FILE__ ":";
  553. err += __LINE__;
  554. err += "\n";
  555. }
  556. s.schreibe( (char *)& spawnX, 4 );
  557. s.schreibe( (char *)& spawnY, 4 );
  558. s.close();
  559. }
  560. // barieren
  561. pf = pfad.getText();
  562. pf += "/bariere/";
  563. int anz;
  564. d.lese( (char *)&anz, 4 );
  565. for( int i = 0; i < anz; i++ )
  566. {
  567. int id;
  568. d.lese( (char *)& id, 4 );
  569. Text tmpPf = pf.getText();
  570. tmpPf += id;
  571. tmpPf += ".t";
  572. char buffer[ 32 ];
  573. d.lese( buffer, 32 );
  574. Datei s;
  575. s.setDatei( tmpPf );
  576. s.erstellen();
  577. if( !s.open( Datei::Style::schreiben ) )
  578. {
  579. err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
  580. err += tmpPf;
  581. err += ". Fehler Code: " __FILE__ ":";
  582. err += __LINE__;
  583. err += "\n";
  584. }
  585. s.schreibe( buffer, 32 );
  586. s.close();
  587. }
  588. // basen
  589. pf = pfad.getText();
  590. pf += "/base/";
  591. d.lese( (char *)&anz, 4 );
  592. for( int i = 0; i < anz; i++ )
  593. {
  594. int id;
  595. d.lese( (char *)& id, 4 );
  596. Text tmpPf = pf.getText();
  597. tmpPf += id;
  598. tmpPf += ".t";
  599. char buffer[ 24 ];
  600. d.lese( buffer, 24 );
  601. Datei s;
  602. s.setDatei( tmpPf );
  603. s.erstellen();
  604. if( !s.open( Datei::Style::schreiben ) )
  605. {
  606. err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
  607. err += tmpPf;
  608. err += ". Fehler Code: " __FILE__ ":";
  609. err += __LINE__;
  610. err += "\n";
  611. }
  612. s.schreibe( buffer, 24 );
  613. s.close();
  614. }
  615. // drops
  616. pf = pfad.getText();
  617. pf += "/drop/";
  618. d.lese( (char *)&anz, 4 );
  619. for( int i = 0; i < anz; i++ )
  620. {
  621. int id;
  622. d.lese( (char *)& id, 4 );
  623. Text tmpPf = pf.getText();
  624. tmpPf += id;
  625. tmpPf += ".t";
  626. char buffer[ 96 ];
  627. d.lese( buffer, 96 );
  628. Datei s;
  629. s.setDatei( tmpPf );
  630. s.erstellen();
  631. if( !s.open( Datei::Style::schreiben ) )
  632. {
  633. err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
  634. err += tmpPf;
  635. err += ". Fehler Code: " __FILE__ ":";
  636. err += __LINE__;
  637. err += "\n";
  638. }
  639. s.schreibe( buffer, 96 );
  640. unsigned char len;
  641. d.lese( (char *)&len, 1 );
  642. char *name = new char[ (int)len + 1 ];
  643. d.lese( name, len );
  644. name[ (int)len ] = 0;
  645. s.schreibe( (char *)&len, 1 );
  646. s.schreibe( (char *)&name, len );
  647. delete[] name;
  648. s.close();
  649. }
  650. // schalter
  651. pf = pfad.getText();
  652. pf += "/schalter/";
  653. d.lese( (char *)&anz, 4 );
  654. for( int i = 0; i < anz; i++ )
  655. {
  656. int id;
  657. d.lese( (char *)& id, 4 );
  658. Text tmpPf = pf.getText();
  659. tmpPf += id;
  660. tmpPf += ".t";
  661. char buffer[ 17 ];
  662. d.lese( buffer, 17 );
  663. Datei s;
  664. s.setDatei( tmpPf );
  665. s.erstellen();
  666. if( !s.open( Datei::Style::schreiben ) )
  667. {
  668. err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
  669. err += tmpPf;
  670. err += ". Fehler Code: " __FILE__ ":";
  671. err += __LINE__;
  672. err += "\n";
  673. }
  674. s.schreibe( buffer, 17 );
  675. s.close();
  676. }
  677. // schiene
  678. pf = pfad.getText();
  679. pf += "/schiene/";
  680. d.lese( (char *)&anz, 4 );
  681. for( int i = 0; i < anz; i++ )
  682. {
  683. int id;
  684. d.lese( (char *)& id, 4 );
  685. Text tmpPf = pf.getText();
  686. tmpPf += id;
  687. tmpPf += ".t";
  688. char buffer[ 16 ];
  689. d.lese( buffer, 16 );
  690. Datei s;
  691. s.setDatei( tmpPf );
  692. s.erstellen();
  693. if( !s.open( Datei::Style::schreiben ) )
  694. {
  695. err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
  696. err += tmpPf;
  697. err += ". Fehler Code: " __FILE__ ":";
  698. err += __LINE__;
  699. err += "\n";
  700. }
  701. s.schreibe( buffer, 16 );
  702. s.close();
  703. }
  704. // timer
  705. pf = pfad.getText();
  706. pf += "/timer/";
  707. d.lese( (char *)&anz, 4 );
  708. for( int i = 0; i < anz; i++ )
  709. {
  710. int id;
  711. d.lese( (char *)& id, 4 );
  712. Text tmpPf = pf.getText();
  713. tmpPf += id;
  714. tmpPf += ".t";
  715. char buffer[ 19 ];
  716. d.lese( buffer, 19 );
  717. Datei s;
  718. s.setDatei( tmpPf );
  719. s.erstellen();
  720. if( !s.open( Datei::Style::schreiben ) )
  721. {
  722. err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
  723. err += tmpPf;
  724. err += ". Fehler Code: " __FILE__ ":";
  725. err += __LINE__;
  726. err += "\n";
  727. }
  728. s.schreibe( buffer, 19 );
  729. unsigned char len;
  730. d.lese( (char *)& len, 1 );
  731. char *name = new char[ (int)len + 1 ];
  732. d.lese( name, len );
  733. name[ (int)len ] = 0;
  734. s.schreibe( (char *)& len, 1 );
  735. s.schreibe( (char *)& name, len );
  736. delete[] name;
  737. s.close();
  738. }
  739. // tunnel
  740. pf = pfad.getText();
  741. pf += "/tunnel/";
  742. d.lese( (char *)&anz, 4 );
  743. for( int i = 0; i < anz; i++ )
  744. {
  745. int id;
  746. d.lese( (char *)& id, 4 );
  747. Text tmpPf = pf.getText();
  748. tmpPf += id;
  749. tmpPf += ".t";
  750. char buffer[ 25 ];
  751. d.lese( buffer, 25 );
  752. Datei s;
  753. s.setDatei( tmpPf );
  754. s.erstellen();
  755. if( !s.open( Datei::Style::schreiben ) )
  756. {
  757. err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
  758. err += tmpPf;
  759. err += ". Fehler Code: " __FILE__ ":";
  760. err += __LINE__;
  761. err += "\n";
  762. }
  763. s.schreibe( buffer, 25 );
  764. s.close();
  765. }
  766. // umlenkung
  767. pf = pfad.getText();
  768. pf += "/umlenkung/";
  769. d.lese( (char *)&anz, 4 );
  770. for( int i = 0; i < anz; i++ )
  771. {
  772. int id;
  773. d.lese( (char *)& id, 4 );
  774. Text tmpPf = pf.getText();
  775. tmpPf += id;
  776. tmpPf += ".t";
  777. char buffer[ 23 ];
  778. d.lese( buffer, 23 );
  779. Datei s;
  780. s.setDatei( tmpPf );
  781. s.erstellen();
  782. if( !s.open( Datei::Style::schreiben ) )
  783. {
  784. err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
  785. err += tmpPf;
  786. err += ". Fehler Code: " __FILE__ ":";
  787. err += __LINE__;
  788. err += "\n";
  789. }
  790. s.schreibe( buffer, 23 );
  791. s.close();
  792. }
  793. // trigger
  794. MapReader mr;
  795. pf = pfad.getText();
  796. pf += "/trigger/";
  797. d.lese( (char *)&anz, 4 );
  798. for( int i = 0; i < anz; i++ )
  799. {
  800. int id;
  801. d.lese( (char *)& id, 4 );
  802. Text tmpPf = pf.getText();
  803. tmpPf += id;
  804. tmpPf += ".t";
  805. Datei s;
  806. s.setDatei( tmpPf );
  807. s.erstellen();
  808. if( !s.open( Datei::Style::schreiben ) )
  809. {
  810. err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
  811. err += tmpPf;
  812. err += ". Fehler Code: " __FILE__ ":";
  813. err += __LINE__;
  814. err += "\n";
  815. }
  816. unsigned char len;
  817. d.lese( (char *)&len, 1 );
  818. char *name = new char[ (int)len + 1 ];
  819. d.lese( name, len );
  820. name[ (int)len ] = 0;
  821. s.schreibe( (char *)&len, 1 );
  822. s.schreibe( (char *)&name, len );
  823. delete[] name;
  824. int ereignisAnzahl;
  825. int bedingungAnzahl;
  826. int aktionAnzahl;
  827. d.lese( (char *)&ereignisAnzahl, 4 );
  828. d.lese( (char *)&bedingungAnzahl, 4 );
  829. d.lese( (char *)&aktionAnzahl, 4 );
  830. s.schreibe( (char *)&ereignisAnzahl, 4 );
  831. s.schreibe( (char *)&bedingungAnzahl, 4 );
  832. s.schreibe( (char *)&aktionAnzahl, 4 );
  833. for( int j = 0; j < ereignisAnzahl; j++ )
  834. {
  835. int typ;
  836. d.lese( (char *)& typ, 4 );
  837. s.schreibe( (char *)& typ, 4 );
  838. }
  839. for( int j = 0; j < bedingungAnzahl; j++ )
  840. mr.writeAktion( mr.readAktion( d ), s );
  841. for( int j = 0; j < aktionAnzahl; j++ )
  842. mr.writeAktion( mr.readAktion( d ), s );
  843. s.close();
  844. }
  845. // variable
  846. pf = pfad.getText();
  847. pf += "/variable/";
  848. d.lese( (char *)&anz, 4 );
  849. for( int i = 0; i < anz; i++ )
  850. {
  851. char len;
  852. d.lese( (char *)& len, 1 );
  853. char *name = new char[ (int)len + 1 ];
  854. d.lese( name, len );
  855. name[ (int)len ] = 0;
  856. Text tmpPf = pf.getText();
  857. tmpPf += name;
  858. tmpPf += ".v";
  859. delete[] name;
  860. Datei s;
  861. s.setDatei( tmpPf );
  862. s.erstellen();
  863. if( !s.open( Datei::Style::schreiben ) )
  864. {
  865. err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
  866. err += tmpPf;
  867. err += ". Fehler Code: " __FILE__ ":";
  868. err += __LINE__;
  869. err += "\n";
  870. }
  871. char typ;
  872. d.lese( &typ, 1 );
  873. char def;
  874. d.lese( &def, 1 );
  875. s.schreibe( &typ, 1 );
  876. s.schreibe( &def, 1 );
  877. if( def )
  878. {
  879. if( typ == BOOLEAN || typ == TASTE )
  880. {
  881. char v;
  882. d.lese( &v, 1 );
  883. s.schreibe( &v, 1 );
  884. }
  885. else if( typ == STRING || typ == RICHTUNG )
  886. {
  887. char len;
  888. d.lese( (char *)& len, 1 );
  889. char *str = new char[ (int)len + 1 ];
  890. d.lese( str, len );
  891. s.schreibe( &len, 1 );
  892. s.schreibe( str, len );
  893. delete[] str;
  894. }
  895. else if( typ != NICHTS )
  896. {
  897. int v;
  898. d.lese( (char *)&v, 4 );
  899. s.schreibe( (char *)&v, 4 );
  900. }
  901. }
  902. s.close();
  903. }
  904. d.close();
  905. }
  906. else
  907. {
  908. err = "Sitzung konnte nicht korrekt erstellt werden. Fehler beim lesen von ";
  909. err += pf;
  910. err += ". Fehler Code: " __FILE__ ":";
  911. err += __LINE__;
  912. pf = pfad.getText();
  913. pf += "/empty.file";
  914. DateiPfadErstellen( pf );
  915. DateiRemove( pf );
  916. }
  917. if( !err.getLength() )
  918. return 1;
  919. else
  920. return 0;
  921. }
  922. bool Editor::saveSitzung()
  923. {/*
  924. Text pf = pfad.getText();
  925. pf.remove( pf.getLength() - 6, pf.getLength() );
  926. pf += "map/server/data_tmp.map";
  927. Datei d;
  928. d.setDatei( pf.getText() );
  929. if( d.open( Datei::Style::schreiben ) )
  930. {
  931. pf = pfad.getText();
  932. pf += "/resource";
  933. Datei res;
  934. res.setDatei( pf );
  935. RCArray<Text> *resList = res.getDateiListe();
  936. if( resList )
  937. {
  938. int anz = resList->getEintragAnzahl();
  939. d.schreibe( (char *)& anz, 4 );
  940. for( auto resPf = resList->getIterator(); resPf && resPf._; resPf++ )
  941. {
  942. Text tmp = pf.getText();
  943. tmp += "/";
  944. tmp += resPf->getText();
  945. Datei r;
  946. r.setDatei( tmp );
  947. if( r.open( Datei::Style::lesen ) )
  948. {
  949. int id = (int)* resPf;
  950. d.schreibe( (char *)& id, 4 );
  951. char b = 0;
  952. r.lese( &b, 1 );
  953. char *buffer = new char[ b + 1 ];
  954. buffer[ (int)b ] = 0;
  955. r.lese( buffer, b );
  956. d.schreibe( &b, 1 );
  957. d.schreibe( buffer, b );
  958. r.close();
  959. }
  960. else
  961. {
  962. err = "Fehler beim Lesen von ";
  963. err += tmp.getText();
  964. err += ". Fehler Code: " __FILE__ ":";
  965. err += __LINE__;
  966. d.close();
  967. d.remove();
  968. resList->release();
  969. return 0;
  970. }
  971. }
  972. resList->release();
  973. }
  974. else
  975. d.schreibe( "\0\0\0\0", 4 );
  976. pf = pfad.getText();
  977. pf += "/size";
  978. Datei s;
  979. s.setDatei( pf.getText() );
  980. if( s.open( Datei::Style::lesen ) )
  981. {
  982. __int64 size = 0;
  983. s.lese( (char *)& size, 8 );
  984. d.schreibe( (char *)& size, 8 );
  985. s.close();
  986. }
  987. else
  988. {
  989. err = "Fehler beim Lesen von ";
  990. err += pf.getText();
  991. err = ". Fehler Code: " __FILE__ ":";
  992. err += __LINE__;
  993. d.close();
  994. d.remove();
  995. return 0;
  996. }
  997. pf = pfad.getText();
  998. pf += "/objekt";
  999. Datei obj;
  1000. obj.setDatei( pf );
  1001. RCArray<Text> *objList = obj.getDateiListe();
  1002. if( objList )
  1003. {
  1004. int anz = objList->getEintragAnzahl();
  1005. d.schreibe( (char *)& anz, 4 );
  1006. for( auto objPf = objList->getIterator(); objPf && objPf._; objPf++ )
  1007. {
  1008. Text tmp = pf.getText();
  1009. tmp += "/";
  1010. tmp += objPf->getText();
  1011. Datei r;
  1012. r.setDatei( tmp );
  1013. if( r.open( Datei::Style::lesen ) )
  1014. {
  1015. ObjektStr objStr( &r );
  1016. objStr.save( &d );
  1017. r.close();
  1018. }
  1019. else
  1020. {
  1021. err = "Fehler beim Lesen von ";
  1022. err += tmp.getText();
  1023. err = ". Fehler Code: " __FILE__ ":";
  1024. err += __LINE__;
  1025. d.close();
  1026. d.remove();
  1027. objList->release();
  1028. return 0;
  1029. }
  1030. }
  1031. objList->release();
  1032. }
  1033. else
  1034. d.schreibe( "\0\0\0\0", 4 );
  1035. pf = pfad.getText();
  1036. pf += "/player";
  1037. Datei pl;
  1038. pl.setDatei( pf );
  1039. RCArray<Text> *plList = pl.getDateiListe();
  1040. if( !plList )
  1041. {
  1042. err = "Fehler beim Lesen von ";
  1043. err += pf.getText();
  1044. err = ". Fehler Code: " __FILE__ ":";
  1045. err += __LINE__;
  1046. d.close();
  1047. d.remove();
  1048. return 0;
  1049. }
  1050. for( auto plPf = plList->getIterator(); plPf && plPf._; plPf++ )
  1051. {
  1052. Text tmp = pf.getText();
  1053. tmp += "/";
  1054. tmp += plPf->getText();
  1055. Datei r;
  1056. r.setDatei( tmp );
  1057. if( r.open( Datei::Style::lesen ) )
  1058. {
  1059. SpielerStr spStr( &r );
  1060. spStr.save( &d );
  1061. r.close();
  1062. }
  1063. else
  1064. {
  1065. err = "Fehler beim Lesen von ";
  1066. err += tmp.getText();
  1067. err = ". Fehler Code: " __FILE__ ":";
  1068. err += __LINE__;
  1069. d.close();
  1070. d.remove();
  1071. plList->release();
  1072. return 0;
  1073. }
  1074. }
  1075. plList->release();
  1076. pf = pfad.getText();
  1077. pf += "/team";
  1078. Datei tm;
  1079. tm.setDatei( pf );
  1080. RCArray<Text> *tmList = tm.getDateiListe();
  1081. if( !tmList )
  1082. {
  1083. err = "Fehler beim Lesen von ";
  1084. err += pf.getText();
  1085. err = ". Fehler Code: " __FILE__ ":";
  1086. err += __LINE__;
  1087. d.close();
  1088. d.remove();
  1089. return 0;
  1090. }
  1091. for( auto tmPf = tmList->getIterator(); tmPf && tmPf._; tmPf++ )
  1092. {
  1093. Text tmp = pf.getText();
  1094. tmp += "/";
  1095. tmp += tmPf->getText();
  1096. Datei r;
  1097. r.setDatei( tmp );
  1098. if( r.open( Datei::Style::lesen ) )
  1099. {
  1100. TeamStr tStr( &r );
  1101. tStr.save( &d );
  1102. r.close();
  1103. }
  1104. else
  1105. {
  1106. err = "Fehler beim Lesen von ";
  1107. err += tmp.getText();
  1108. err = ". Fehler Code: " __FILE__ ":";
  1109. err += __LINE__;
  1110. d.close();
  1111. d.remove();
  1112. tmList->release();
  1113. return 0;
  1114. }
  1115. }
  1116. tmList->release();
  1117. pf = pfad.getText();
  1118. pf.remove( pf.getLength() - 6, pf.getLength() );
  1119. pf += "map/server/data.map";
  1120. d.close();
  1121. if( !DateiRemove( pf ) || !d.umbenennen( pf ) )
  1122. {
  1123. err = "Fehler beim Übernehmen der Änderungen. Fehler Code: " __FILE__ ":";
  1124. err += __LINE__;
  1125. return 0;
  1126. }
  1127. }
  1128. else
  1129. {
  1130. err = "Fehler beim Speichern der Änderungen (Server). Fehler Code: " __FILE__ ":";
  1131. err += __LINE__;
  1132. return 0;
  1133. }
  1134. pf = pfad.getText();
  1135. pf.remove( pf.getLength() - 6, pf.getLength() );
  1136. pf += "map/client/map/data/data.map";
  1137. Datei d2;
  1138. d2.setDatei( pf.getText() );
  1139. if( d2.open( Datei::Style::schreiben ) && d.open( Datei::Style::lesen ) )
  1140. {
  1141. __int64 size = d.getSize();
  1142. char *buffer = new char[ 2048 ];
  1143. while( size > 0 )
  1144. {
  1145. int len = (int)( size > 2048 ? 2048 : size );
  1146. d.lese( buffer, len );
  1147. d2.schreibe( buffer, len );
  1148. size -= len;
  1149. }
  1150. delete[] buffer;
  1151. d.close();
  1152. d2.close();
  1153. }
  1154. else
  1155. {
  1156. err = "Fehler beim Speichern der Änderungen (Client). Fehler Code: " __FILE__ ":";
  1157. err += __LINE__;
  1158. return 0;
  1159. }
  1160. DateiRemove( pfad.getText() );
  1161. */
  1162. return 1;
  1163. }