Editor.cpp 20 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(const 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 = (int)*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. const 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 = (int)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. }