Editor.cpp 37 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172
  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. err = "";
  25. char n = 0;
  26. k->getNachrichtEncrypted( &n, 1 );
  27. switch( n )
  28. {
  29. case 0: // Initialisierung
  30. k->sendeEncrypted( "\1", 1 );
  31. if( DateiExistiert( pfad ) )
  32. k->sendeEncrypted( "\2", 1 );
  33. else
  34. {
  35. if( createSitzung() )
  36. k->sendeEncrypted( "\1", 1 );
  37. else
  38. return 0;
  39. }
  40. return 1;
  41. case 1: // Sitzung verwerfen
  42. if( createSitzung() )
  43. k->sendeEncrypted( "\1", 1 );
  44. else
  45. return 0;
  46. return 1;
  47. case 2: // Sitzung speichern unt beenden
  48. if( saveSitzung() )
  49. k->sendeEncrypted( "\1", 1 );
  50. else
  51. return 0;
  52. return 1;
  53. case 3: // Lade Spieler Daten
  54. {
  55. Text tmpPf = pfad.getText();
  56. tmpPf += "/player";
  57. Datei d;
  58. d.setDatei( tmpPf );
  59. RCArray< Text > *files = d.getDateiListe();
  60. if( files )
  61. {
  62. k->sendeEncrypted( "\1", 1 );
  63. int anz = files->getEintragAnzahl();
  64. k->sendeEncrypted( (char *)& anz, 4 );
  65. for( int i = 0; i < anz; i++ )
  66. {
  67. Text pf = tmpPf;
  68. pf += "/";
  69. pf += files->z( i )->getText();
  70. Datei player;
  71. player.setDatei( pf );
  72. player.open( Datei::Style::lesen );
  73. SpielerStr p( player.getThis() );
  74. player.close();
  75. k->sendeEncrypted( (char *)& p.id, 4 );
  76. k->sendeEncrypted( (char *)& p.pos.x, 4 );
  77. k->sendeEncrypted( (char *)& p.pos.y, 4 );
  78. k->sendeEncrypted( (char *)& p.rot, 8 );
  79. k->sendeEncrypted( (char *)& p.beschleunigung, 8 );
  80. k->sendeEncrypted( (char *)& p.maxStability, 4 );
  81. k->sendeEncrypted( (char *)& p.maxEnergie, 4 );
  82. k->sendeEncrypted( (char *)& p.reparatur, 8 );
  83. k->sendeEncrypted( (char *)& p.akkuLeistung, 8 );
  84. k->sendeEncrypted( (char *)& p.laserIntensity, 4 );
  85. k->sendeEncrypted( (char *)& p.laserEffizienz, 4 );
  86. k->sendeEncrypted( (char *)& p.laserTempo, 4 );
  87. k->sendeEncrypted( (char *)& p.wendigkeit, 8 );
  88. k->sendeEncrypted( (char *)& p.antriebEffizienz, 8 );
  89. k->sendeEncrypted( (char *)& p.energieSchild, 8 );
  90. k->sendeEncrypted( (char *)& p.energieSchildEffizienz, 8 );
  91. k->sendeEncrypted( (char *)& p.netzwerk, 4 );
  92. k->sendeEncrypted( (char *)& p.skillPunkte, 4 );
  93. k->sendeEncrypted( (char *)& p.m2d, 4 );
  94. k->sendeEncrypted( (char *)& p.bild, 4 );
  95. }
  96. }
  97. else
  98. {
  99. err = "Fehler beim laden von ";
  100. err += tmpPf.getText();
  101. return 0;
  102. }
  103. return 1;
  104. }
  105. case 4: // Lade Team Daten
  106. {
  107. Text tmpPf = pfad.getText();
  108. tmpPf += "/team";
  109. Datei d;
  110. d.setDatei( tmpPf );
  111. RCArray< Text > *files = d.getDateiListe();
  112. if( files )
  113. {
  114. k->sendeEncrypted( "\1", 1 );
  115. int anz = files->getEintragAnzahl();
  116. k->sendeEncrypted( (char *)& anz, 4 );
  117. for( int i = 0; i < anz; i++ )
  118. {
  119. Text pf = tmpPf;
  120. pf += "/";
  121. pf += files->z( i )->getText();
  122. Datei team;
  123. team.setDatei( pf );
  124. team.open( Datei::Style::lesen );
  125. TeamStr t( team.getThis() );
  126. team.close();
  127. k->sendeEncrypted( (char *)& t.id, 4 );
  128. k->sendeEncrypted( (char *)& t.maxPunkte, 4 );
  129. k->sendeEncrypted( (char *)& t.beschleunigung, 8 );
  130. k->sendeEncrypted( (char *)& t.maxStability, 4 );
  131. k->sendeEncrypted( (char *)& t.maxEnergie, 4 );
  132. k->sendeEncrypted( (char *)& t.reparatur, 8 );
  133. k->sendeEncrypted( (char *)& t.akkuLeistung, 8 );
  134. k->sendeEncrypted( (char *)& t.laserIntensity, 4 );
  135. k->sendeEncrypted( (char *)& t.laserEffizienz, 4 );
  136. k->sendeEncrypted( (char *)& t.laserTempo, 4 );
  137. k->sendeEncrypted( (char *)& t.wendigkeit, 8 );
  138. k->sendeEncrypted( (char *)& t.antriebEffizienz, 8 );
  139. k->sendeEncrypted( (char *)& t.energieSchild, 8 );
  140. k->sendeEncrypted( (char *)& t.energieSchildEffizienz, 8 );
  141. k->sendeEncrypted( (char *)& t.punkte, 4 );
  142. }
  143. }
  144. else
  145. {
  146. err = "Fehler beim laden von ";
  147. err += tmpPf.getText();
  148. return 0;
  149. }
  150. return 1;
  151. }
  152. case 5: // Lade Objekt Daten
  153. {
  154. Text tmpPf = pfad.getText();
  155. tmpPf += "/objekt";
  156. Datei d;
  157. d.setDatei( tmpPf );
  158. RCArray< Text > *files = d.getDateiListe();
  159. if( files )
  160. {
  161. k->sendeEncrypted( "\1", 1 );
  162. int anz = files->getEintragAnzahl();
  163. k->sendeEncrypted( (char *)& anz, 4 );
  164. for( int i = 0; i < anz; i++ )
  165. {
  166. Text pf = tmpPf;
  167. pf += "/";
  168. pf += files->z( i )->getText();
  169. Datei object;
  170. object.setDatei( pf );
  171. object.open( Datei::Style::lesen );
  172. ObjektStr o( object.getThis() );
  173. object.close();
  174. k->sendeEncrypted( (char *)& o.pos.x, 4 );
  175. k->sendeEncrypted( (char *)& o.pos.y, 4 );
  176. k->sendeEncrypted( (char *)& o.rot, 4 );
  177. k->sendeEncrypted( (char *)& o.scale, 4 );
  178. k->sendeEncrypted( (char *)& o.id, 4 );
  179. k->sendeEncrypted( (char *)& o.m2d, 4 );
  180. k->sendeEncrypted( (char *)& o.bild, 4 );
  181. k->sendeEncrypted( (char *)& o.style, 4 );
  182. k->sendeEncrypted( (char *)& o.maxStability, 4 );
  183. k->sendeEncrypted( (char *)& o.maxEnergie, 4 );
  184. k->sendeEncrypted( (char *)& o.energieRadius, 4 );
  185. k->sendeEncrypted( (char *)& o.reparatur, 8 );
  186. k->sendeEncrypted( (char *)& o.akkuLeistung, 8 );
  187. k->sendeEncrypted( (char *)& o.team, 1 );
  188. }
  189. }
  190. else
  191. {
  192. err = "Fehler beim laden von ";
  193. err += tmpPf.getText();
  194. return 0;
  195. }
  196. return 1;
  197. }
  198. case 6: // Save Player
  199. {
  200. k->sendeEncrypted( "\1", 1 );
  201. SpielerStr p( 0 );
  202. k->getNachrichtEncrypted( (char *)& p.id, 4 );
  203. k->getNachrichtEncrypted( (char *)& p.pos.x, 4 );
  204. k->getNachrichtEncrypted( (char *)& p.pos.y, 4 );
  205. k->getNachrichtEncrypted( (char *)& p.rot, 8 );
  206. k->getNachrichtEncrypted( (char *)& p.beschleunigung, 8 );
  207. k->getNachrichtEncrypted( (char *)& p.maxStability, 4 );
  208. k->getNachrichtEncrypted( (char *)& p.maxEnergie, 4 );
  209. k->getNachrichtEncrypted( (char *)& p.reparatur, 8 );
  210. k->getNachrichtEncrypted( (char *)& p.akkuLeistung, 8 );
  211. k->getNachrichtEncrypted( (char *)& p.laserIntensity, 4 );
  212. k->getNachrichtEncrypted( (char *)& p.laserEffizienz, 4 );
  213. k->getNachrichtEncrypted( (char *)& p.laserTempo, 4 );
  214. k->getNachrichtEncrypted( (char *)& p.wendigkeit, 8 );
  215. k->getNachrichtEncrypted( (char *)& p.antriebEffizienz, 8 );
  216. k->getNachrichtEncrypted( (char *)& p.energieSchild, 8 );
  217. k->getNachrichtEncrypted( (char *)& p.energieSchildEffizienz, 8 );
  218. k->getNachrichtEncrypted( (char *)& p.netzwerk, 4 );
  219. k->getNachrichtEncrypted( (char *)& p.skillPunkte, 4 );
  220. k->getNachrichtEncrypted( (char *)& p.m2d, 4 );
  221. k->getNachrichtEncrypted( (char *)& p.bild, 4 );
  222. Text pf = pfad.getText();
  223. pf += "/player/";
  224. pf += p.id;
  225. pf += ".p";
  226. Datei player;
  227. player.setDatei( pf );
  228. if( player.open( Datei::Style::schreiben ) )
  229. {
  230. p.save( player.getThis() );
  231. player.close();
  232. k->sendeEncrypted( "\1", 1 );
  233. return 1;
  234. }
  235. err = "Fehler beim Schreiben von ";
  236. err += pf.getText();
  237. return 0;
  238. }
  239. case 7: // Save Team
  240. {
  241. k->sendeEncrypted( "\1", 1 );
  242. TeamStr t( 0 );
  243. k->getNachrichtEncrypted( (char *)& t.id, 4 );
  244. k->getNachrichtEncrypted( (char *)& t.maxPunkte, 4 );
  245. k->getNachrichtEncrypted( (char *)& t.beschleunigung, 8 );
  246. k->getNachrichtEncrypted( (char *)& t.maxStability, 4 );
  247. k->getNachrichtEncrypted( (char *)& t.maxEnergie, 4 );
  248. k->getNachrichtEncrypted( (char *)& t.reparatur, 8 );
  249. k->getNachrichtEncrypted( (char *)& t.akkuLeistung, 8 );
  250. k->getNachrichtEncrypted( (char *)& t.laserIntensity, 4 );
  251. k->getNachrichtEncrypted( (char *)& t.laserEffizienz, 4 );
  252. k->getNachrichtEncrypted( (char *)& t.laserTempo, 4 );
  253. k->getNachrichtEncrypted( (char *)& t.wendigkeit, 8 );
  254. k->getNachrichtEncrypted( (char *)& t.antriebEffizienz, 8 );
  255. k->getNachrichtEncrypted( (char *)& t.energieSchild, 8 );
  256. k->getNachrichtEncrypted( (char *)& t.energieSchildEffizienz, 8 );
  257. k->getNachrichtEncrypted( (char *)& t.punkte, 4 );
  258. Text pf = pfad.getText();
  259. pf += "/player/";
  260. pf += t.id;
  261. pf += ".t";
  262. Datei team;
  263. team.setDatei( pf );
  264. if( team.open( Datei::Style::schreiben ) )
  265. {
  266. t.save( team.getThis() );
  267. team.close();
  268. k->sendeEncrypted( "\1", 1 );
  269. return 1;
  270. }
  271. err = "Fehler beim Schreiben von ";
  272. err += pf.getText();
  273. return 0;
  274. }
  275. case 8: // Save Objekt
  276. {
  277. k->sendeEncrypted( "\1", 1 );
  278. ObjektStr o( 0 );
  279. k->getNachrichtEncrypted( (char *)& o.pos.x, 4 );
  280. k->getNachrichtEncrypted( (char *)& o.pos.y, 4 );
  281. k->getNachrichtEncrypted( (char *)& o.rot, 4 );
  282. k->getNachrichtEncrypted( (char *)& o.scale, 4 );
  283. k->getNachrichtEncrypted( (char *)& o.id, 4 );
  284. k->getNachrichtEncrypted( (char *)& o.m2d, 4 );
  285. k->getNachrichtEncrypted( (char *)& o.bild, 4 );
  286. k->getNachrichtEncrypted( (char *)& o.style, 4 );
  287. k->getNachrichtEncrypted( (char *)& o.maxStability, 4 );
  288. k->getNachrichtEncrypted( (char *)& o.maxEnergie, 4 );
  289. k->getNachrichtEncrypted( (char *)& o.energieRadius, 4 );
  290. k->getNachrichtEncrypted( (char *)& o.reparatur, 8 );
  291. k->getNachrichtEncrypted( (char *)& o.akkuLeistung, 8 );
  292. k->getNachrichtEncrypted( (char *)& o.team, 1 );
  293. Text pf = pfad.getText();
  294. pf += "/objekt/";
  295. pf += o.id;
  296. pf += ".o";
  297. Datei objekt;
  298. objekt.setDatei( pf );
  299. if( objekt.erstellen() && objekt.open( Datei::Style::schreiben ) )
  300. {
  301. o.save( objekt.getThis() );
  302. objekt.close();
  303. k->sendeEncrypted( "\1", 1 );
  304. return 1;
  305. }
  306. err = "Fehler beim Schreiben von ";
  307. err += pf.getText();
  308. return 0;
  309. }
  310. case 9: // Delete Objekt
  311. {
  312. k->sendeEncrypted( "\1", 1 );
  313. int id;
  314. k->getNachrichtEncrypted( (char *)& id, 4 );
  315. Text pf = pfad.getText();
  316. pf += "/objekt/";
  317. pf += id;
  318. pf += ".o";
  319. if( DateiRemove( pf ) )
  320. {
  321. k->sendeEncrypted( "\1", 1 );
  322. return 1;
  323. }
  324. err = "Fehler beim löschen der Datei ";
  325. err += pf;
  326. return 0;
  327. }
  328. case 0xA: // Lade Resourcen
  329. {
  330. Text tmpPf = pfad.getText();
  331. tmpPf += "/resource";
  332. Datei d;
  333. d.setDatei( tmpPf );
  334. RCArray< Text > *files = d.getDateiListe();
  335. if( files )
  336. {
  337. k->sendeEncrypted( "\1", 1 );
  338. int anz = files->getEintragAnzahl();
  339. k->sendeEncrypted( (char *)& anz, 4 );
  340. for( int i = 0; i < anz; i++ )
  341. {
  342. Text pf = tmpPf;
  343. pf += "/";
  344. pf += files->z( i )->getText();
  345. Datei resource;
  346. resource.setDatei( pf );
  347. resource.open( Datei::Style::lesen );
  348. int id = *files->z( i );
  349. k->sendeEncrypted( (char *)& id, 4 );
  350. char len = 0;
  351. resource.lese( &len, 1 );
  352. char *path = new char[ len + 1 ];
  353. path[ (int)len ] = 0;
  354. resource.lese( path, len );
  355. k->sendeEncrypted( &len, 1 );
  356. k->sendeEncrypted( path, len );
  357. delete[] path;
  358. resource.close();
  359. }
  360. }
  361. else
  362. {
  363. err = "Fehler beim laden von ";
  364. err += tmpPf.getText();
  365. return 0;
  366. }
  367. return 1;
  368. }
  369. case 0xB: // Map Size
  370. {
  371. Text tmpPf = pfad.getText();
  372. tmpPf += "/size";
  373. Datei d;
  374. d.setDatei( tmpPf );
  375. if( d.open( Datei::Style::lesen ) )
  376. {
  377. k->sendeEncrypted( "\1", 1 );
  378. int size = 0;
  379. d.lese( (char *)& size, 4 );
  380. k->sendeEncrypted( (char *)& size, 4 );
  381. d.lese( (char *)& size, 4 );
  382. k->sendeEncrypted( (char *)& size, 4 );
  383. d.close();
  384. }
  385. else
  386. {
  387. err = "Fehler beim laden von ";
  388. err += tmpPf.getText();
  389. return 0;
  390. }
  391. return 1;
  392. }
  393. case 0xC: // Add Resource
  394. {
  395. k->sendeEncrypted( "\1", 1 );
  396. Datei d;
  397. d.setDatei( Text( pfad.getText() ) + "/resource" );
  398. RCArray<Text> *list = d.getDateiListe();
  399. int nId = 0;
  400. bool found = 0;
  401. do
  402. {
  403. nId++;
  404. found = 0;
  405. for( auto t = list->getIterator(); t; t++ )
  406. {
  407. if( t->istGleich( Text( nId ) + ".r" ) )
  408. {
  409. found = 1;
  410. break;
  411. }
  412. }
  413. } while( found );
  414. list->release();
  415. unsigned char len = 0;
  416. k->getNachrichtEncrypted( (char *)& len, 1 );
  417. char *path = new char[ len + 1 ];
  418. path[ len ] = 0;
  419. k->getNachrichtEncrypted( path, len );
  420. d.setDatei( Text( pfad.getText() ) + "/resource/" + nId + ".r" );
  421. if( d.open( Datei::Style::schreiben ) )
  422. {
  423. d.schreibe( (char *)& len, 1 );
  424. d.schreibe( path, len );
  425. d.close();
  426. k->sendeEncrypted( "\1", 1 );
  427. k->sendeEncrypted( (char *)& nId, 4 );
  428. return 1;
  429. }
  430. err = "Fehler beim schreiben der Datei.";
  431. return 0;
  432. }
  433. default:
  434. err = "Unbekannte Nachricht. Error Code: " __FILE__ ":";
  435. err += __LINE__;
  436. return 0;
  437. }
  438. return 0;
  439. }
  440. // constant
  441. char *Editor::getLetzterFehler() const
  442. {
  443. return err;
  444. }
  445. // Reference Counting
  446. ESEditorV *Editor::getThis()
  447. {
  448. ref++;
  449. return this;
  450. }
  451. ESEditorV *Editor::release()
  452. {
  453. ref--;
  454. if( !ref )
  455. delete this;
  456. return 0;
  457. }
  458. // privat
  459. bool Editor::createSitzung()
  460. {
  461. DateiRemove( pfad );
  462. Text pf = pfad.getText();
  463. pf.remove( pf.getLength() - 6, pf.getLength() );
  464. pf += "map/server/sts.ltgd";
  465. int spielerAnzahl;
  466. int teamAnzahl;
  467. Datei d;
  468. d.setDatei( pf );
  469. if( !d.existiert() || d.istOrdner() )
  470. {
  471. err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim lesen von ";
  472. err += pf;
  473. err += ". Fehler Code: " __FILE__ ":";
  474. err += __LINE__;
  475. err += "\n";
  476. return 0;
  477. }
  478. d.open( Datei::Style::lesen );
  479. d.lese( (char *)& spielerAnzahl, 4 );
  480. d.lese( (char *)& teamAnzahl, 4 );
  481. d.close();
  482. pf = pfad.getText();
  483. pf.remove( pf.getLength() - 6, pf.getLength() );
  484. pf += "map/server/data.map";
  485. d.setDatei( pf.getText() );
  486. if( d.open( Datei::Style::lesen ) )
  487. {
  488. // map size
  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. // teams
  506. pf = pfad.getText();
  507. pf += "/team/";
  508. for( int i = 0; i < teamAnzahl; i++ )
  509. {
  510. Text tmpPf = pf.getText();
  511. tmpPf += i;
  512. tmpPf += ".t";
  513. int maxWbZeit;
  514. int punkte;
  515. d.lese( (char *)& maxWbZeit, 4 );
  516. d.lese( (char *)& punkte, 4 );
  517. Datei t;
  518. t.setDatei( tmpPf );
  519. t.erstellen();
  520. if( !t.open( Datei::Style::schreiben ) )
  521. {
  522. err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
  523. err += tmpPf;
  524. err += ". Fehler Code: " __FILE__ ":";
  525. err += __LINE__;
  526. err += "\n";
  527. }
  528. t.schreibe( (char *)& maxWbZeit, 4 );
  529. t.schreibe( (char *)& punkte, 4 );
  530. t.close();
  531. }
  532. // spieler
  533. pf = pfad.getText();
  534. pf += "/player/";
  535. for( int i = 0; i < spielerAnzahl; i++ )
  536. {
  537. Text tmpPf = pf.getText();
  538. tmpPf += i;
  539. tmpPf += ".t";
  540. int spawnX;
  541. int spawnY;
  542. d.lese( (char *)& spawnX, 4 );
  543. d.lese( (char *)& spawnY, 4 );
  544. Datei s;
  545. s.setDatei( tmpPf );
  546. s.erstellen();
  547. if( !s.open( Datei::Style::schreiben ) )
  548. {
  549. err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
  550. err += tmpPf;
  551. err += ". Fehler Code: " __FILE__ ":";
  552. err += __LINE__;
  553. err += "\n";
  554. }
  555. s.schreibe( (char *)& spawnX, 4 );
  556. s.schreibe( (char *)& spawnY, 4 );
  557. s.close();
  558. }
  559. // barieren
  560. pf = pfad.getText();
  561. pf += "/bariere/";
  562. int anz;
  563. d.lese( (char *)&anz, 4 );
  564. for( int i = 0; i < anz; i++ )
  565. {
  566. int id;
  567. d.lese( (char *)& id, 4 );
  568. Text tmpPf = pf.getText();
  569. tmpPf += id;
  570. tmpPf += ".t";
  571. char buffer[ 32 ];
  572. d.lese( buffer, 32 );
  573. Datei s;
  574. s.setDatei( tmpPf );
  575. s.erstellen();
  576. if( !s.open( Datei::Style::schreiben ) )
  577. {
  578. err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
  579. err += tmpPf;
  580. err += ". Fehler Code: " __FILE__ ":";
  581. err += __LINE__;
  582. err += "\n";
  583. }
  584. s.schreibe( buffer, 32 );
  585. s.close();
  586. }
  587. // basen
  588. pf = pfad.getText();
  589. pf += "/base/";
  590. d.lese( (char *)&anz, 4 );
  591. for( int i = 0; i < anz; i++ )
  592. {
  593. int id;
  594. d.lese( (char *)& id, 4 );
  595. Text tmpPf = pf.getText();
  596. tmpPf += id;
  597. tmpPf += ".t";
  598. char buffer[ 24 ];
  599. d.lese( buffer, 24 );
  600. Datei s;
  601. s.setDatei( tmpPf );
  602. s.erstellen();
  603. if( !s.open( Datei::Style::schreiben ) )
  604. {
  605. err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
  606. err += tmpPf;
  607. err += ". Fehler Code: " __FILE__ ":";
  608. err += __LINE__;
  609. err += "\n";
  610. }
  611. s.schreibe( buffer, 24 );
  612. s.close();
  613. }
  614. // drops
  615. pf = pfad.getText();
  616. pf += "/drop/";
  617. d.lese( (char *)&anz, 4 );
  618. for( int i = 0; i < anz; i++ )
  619. {
  620. int id;
  621. d.lese( (char *)& id, 4 );
  622. Text tmpPf = pf.getText();
  623. tmpPf += id;
  624. tmpPf += ".t";
  625. char buffer[ 96 ];
  626. d.lese( buffer, 96 );
  627. Datei s;
  628. s.setDatei( tmpPf );
  629. s.erstellen();
  630. if( !s.open( Datei::Style::schreiben ) )
  631. {
  632. err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
  633. err += tmpPf;
  634. err += ". Fehler Code: " __FILE__ ":";
  635. err += __LINE__;
  636. err += "\n";
  637. }
  638. s.schreibe( buffer, 96 );
  639. unsigned char len;
  640. d.lese( (char *)&len, 1 );
  641. char *name = new char[ (int)len + 1 ];
  642. d.lese( name, len );
  643. name[ (int)len ] = 0;
  644. s.schreibe( (char *)&len, 1 );
  645. s.schreibe( (char *)&name, len );
  646. delete[] name;
  647. s.close();
  648. }
  649. // schalter
  650. pf = pfad.getText();
  651. pf += "/schalter/";
  652. d.lese( (char *)&anz, 4 );
  653. for( int i = 0; i < anz; i++ )
  654. {
  655. int id;
  656. d.lese( (char *)& id, 4 );
  657. Text tmpPf = pf.getText();
  658. tmpPf += id;
  659. tmpPf += ".t";
  660. char buffer[ 17 ];
  661. d.lese( buffer, 17 );
  662. Datei s;
  663. s.setDatei( tmpPf );
  664. s.erstellen();
  665. if( !s.open( Datei::Style::schreiben ) )
  666. {
  667. err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
  668. err += tmpPf;
  669. err += ". Fehler Code: " __FILE__ ":";
  670. err += __LINE__;
  671. err += "\n";
  672. }
  673. s.schreibe( buffer, 17 );
  674. s.close();
  675. }
  676. // schiene
  677. pf = pfad.getText();
  678. pf += "/schiene/";
  679. d.lese( (char *)&anz, 4 );
  680. for( int i = 0; i < anz; i++ )
  681. {
  682. int id;
  683. d.lese( (char *)& id, 4 );
  684. Text tmpPf = pf.getText();
  685. tmpPf += id;
  686. tmpPf += ".t";
  687. char buffer[ 16 ];
  688. d.lese( buffer, 16 );
  689. Datei s;
  690. s.setDatei( tmpPf );
  691. s.erstellen();
  692. if( !s.open( Datei::Style::schreiben ) )
  693. {
  694. err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
  695. err += tmpPf;
  696. err += ". Fehler Code: " __FILE__ ":";
  697. err += __LINE__;
  698. err += "\n";
  699. }
  700. s.schreibe( buffer, 16 );
  701. s.close();
  702. }
  703. // timer
  704. pf = pfad.getText();
  705. pf += "/timer/";
  706. d.lese( (char *)&anz, 4 );
  707. for( int i = 0; i < anz; i++ )
  708. {
  709. int id;
  710. d.lese( (char *)& id, 4 );
  711. Text tmpPf = pf.getText();
  712. tmpPf += id;
  713. tmpPf += ".t";
  714. char buffer[ 19 ];
  715. d.lese( buffer, 19 );
  716. Datei s;
  717. s.setDatei( tmpPf );
  718. s.erstellen();
  719. if( !s.open( Datei::Style::schreiben ) )
  720. {
  721. err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
  722. err += tmpPf;
  723. err += ". Fehler Code: " __FILE__ ":";
  724. err += __LINE__;
  725. err += "\n";
  726. }
  727. s.schreibe( buffer, 19 );
  728. unsigned char len;
  729. d.lese( (char *)& len, 1 );
  730. char *name = new char[ (int)len + 1 ];
  731. d.lese( name, len );
  732. name[ (int)len ] = 0;
  733. s.schreibe( (char *)& len, 1 );
  734. s.schreibe( (char *)& name, len );
  735. delete[] name;
  736. s.close();
  737. }
  738. // tunnel
  739. pf = pfad.getText();
  740. pf += "/tunnel/";
  741. d.lese( (char *)&anz, 4 );
  742. for( int i = 0; i < anz; i++ )
  743. {
  744. int id;
  745. d.lese( (char *)& id, 4 );
  746. Text tmpPf = pf.getText();
  747. tmpPf += id;
  748. tmpPf += ".t";
  749. char buffer[ 25 ];
  750. d.lese( buffer, 25 );
  751. Datei s;
  752. s.setDatei( tmpPf );
  753. s.erstellen();
  754. if( !s.open( Datei::Style::schreiben ) )
  755. {
  756. err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
  757. err += tmpPf;
  758. err += ". Fehler Code: " __FILE__ ":";
  759. err += __LINE__;
  760. err += "\n";
  761. }
  762. s.schreibe( buffer, 25 );
  763. s.close();
  764. }
  765. // umlenkung
  766. pf = pfad.getText();
  767. pf += "/umlenkung/";
  768. d.lese( (char *)&anz, 4 );
  769. for( int i = 0; i < anz; i++ )
  770. {
  771. int id;
  772. d.lese( (char *)& id, 4 );
  773. Text tmpPf = pf.getText();
  774. tmpPf += id;
  775. tmpPf += ".t";
  776. char buffer[ 23 ];
  777. d.lese( buffer, 23 );
  778. Datei s;
  779. s.setDatei( tmpPf );
  780. s.erstellen();
  781. if( !s.open( Datei::Style::schreiben ) )
  782. {
  783. err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
  784. err += tmpPf;
  785. err += ". Fehler Code: " __FILE__ ":";
  786. err += __LINE__;
  787. err += "\n";
  788. }
  789. s.schreibe( buffer, 23 );
  790. s.close();
  791. }
  792. // trigger
  793. MapReader mr;
  794. pf = pfad.getText();
  795. pf += "/trigger/";
  796. d.lese( (char *)&anz, 4 );
  797. for( int i = 0; i < anz; i++ )
  798. {
  799. int id;
  800. d.lese( (char *)& id, 4 );
  801. Text tmpPf = pf.getText();
  802. tmpPf += id;
  803. tmpPf += ".t";
  804. Datei s;
  805. s.setDatei( tmpPf );
  806. s.erstellen();
  807. if( !s.open( Datei::Style::schreiben ) )
  808. {
  809. err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
  810. err += tmpPf;
  811. err += ". Fehler Code: " __FILE__ ":";
  812. err += __LINE__;
  813. err += "\n";
  814. }
  815. unsigned char len;
  816. d.lese( (char *)&len, 1 );
  817. char *name = new char[ (int)len + 1 ];
  818. d.lese( name, len );
  819. name[ (int)len ] = 0;
  820. s.schreibe( (char *)&len, 1 );
  821. s.schreibe( (char *)&name, len );
  822. delete[] name;
  823. int ereignisAnzahl;
  824. int bedingungAnzahl;
  825. int aktionAnzahl;
  826. d.lese( (char *)&ereignisAnzahl, 4 );
  827. d.lese( (char *)&bedingungAnzahl, 4 );
  828. d.lese( (char *)&aktionAnzahl, 4 );
  829. s.schreibe( (char *)&ereignisAnzahl, 4 );
  830. s.schreibe( (char *)&bedingungAnzahl, 4 );
  831. s.schreibe( (char *)&aktionAnzahl, 4 );
  832. for( int j = 0; j < ereignisAnzahl; j++ )
  833. {
  834. int typ;
  835. d.lese( (char *)& typ, 4 );
  836. s.schreibe( (char *)& typ, 4 );
  837. }
  838. for( int j = 0; j < bedingungAnzahl; j++ )
  839. mr.writeAktion( mr.readAktion( d ), s );
  840. for( int j = 0; j < aktionAnzahl; j++ )
  841. mr.writeAktion( mr.readAktion( d ), s );
  842. s.close();
  843. }
  844. // variable
  845. pf = pfad.getText();
  846. pf += "/variable/";
  847. d.lese( (char *)&anz, 4 );
  848. for( int i = 0; i < anz; i++ )
  849. {
  850. char len;
  851. d.lese( (char *)& len, 1 );
  852. char *name = new char[ (int)len + 1 ];
  853. d.lese( name, len );
  854. name[ (int)len ] = 0;
  855. Text tmpPf = pf.getText();
  856. tmpPf += name;
  857. tmpPf += ".v";
  858. delete[] name;
  859. Datei s;
  860. s.setDatei( tmpPf );
  861. s.erstellen();
  862. if( !s.open( Datei::Style::schreiben ) )
  863. {
  864. err += "Sitzung konnte nicht korrekt erstellt werden. Fehler beim schreiben von ";
  865. err += tmpPf;
  866. err += ". Fehler Code: " __FILE__ ":";
  867. err += __LINE__;
  868. err += "\n";
  869. }
  870. char typ;
  871. d.lese( &typ, 1 );
  872. char def;
  873. d.lese( &def, 1 );
  874. s.schreibe( &typ, 1 );
  875. s.schreibe( &def, 1 );
  876. if( def )
  877. {
  878. if( typ == BOOLEAN || typ == TASTE )
  879. {
  880. char v;
  881. d.lese( &v, 1 );
  882. s.schreibe( &v, 1 );
  883. }
  884. else if( typ == STRING || typ == RICHTUNG )
  885. {
  886. char len;
  887. d.lese( (char *)& len, 1 );
  888. char *str = new char[ (int)len + 1 ];
  889. d.lese( str, len );
  890. s.schreibe( &len, 1 );
  891. s.schreibe( str, len );
  892. delete[] str;
  893. }
  894. else if( typ != NICHTS )
  895. {
  896. int v;
  897. d.lese( (char *)&v, 4 );
  898. s.schreibe( (char *)&v, 4 );
  899. }
  900. }
  901. s.close();
  902. }
  903. d.close();
  904. }
  905. else
  906. {
  907. err = "Sitzung konnte nicht korrekt erstellt werden. Fehler beim lesen von ";
  908. err += pf;
  909. err += ". Fehler Code: " __FILE__ ":";
  910. err += __LINE__;
  911. pf = pfad.getText();
  912. pf += "/empty.file";
  913. DateiPfadErstellen( pf );
  914. DateiRemove( pf );
  915. }
  916. if( !err.getLength() )
  917. return 1;
  918. else
  919. return 0;
  920. }
  921. bool Editor::saveSitzung()
  922. {
  923. Text pf = pfad.getText();
  924. pf.remove( pf.getLength() - 6, pf.getLength() );
  925. pf += "map/server/data_tmp.map";
  926. Datei d;
  927. d.setDatei( pf.getText() );
  928. if( d.open( Datei::Style::schreiben ) )
  929. {
  930. pf = pfad.getText();
  931. pf += "/resource";
  932. Datei res;
  933. res.setDatei( pf );
  934. RCArray<Text> *resList = res.getDateiListe();
  935. if( resList )
  936. {
  937. int anz = resList->getEintragAnzahl();
  938. d.schreibe( (char *)& anz, 4 );
  939. for( auto resPf = resList->getIterator(); resPf && resPf._; resPf++ )
  940. {
  941. Text tmp = pf.getText();
  942. tmp += "/";
  943. tmp += resPf->getText();
  944. Datei r;
  945. r.setDatei( tmp );
  946. if( r.open( Datei::Style::lesen ) )
  947. {
  948. int id = (int)* resPf;
  949. d.schreibe( (char *)& id, 4 );
  950. char b = 0;
  951. r.lese( &b, 1 );
  952. char *buffer = new char[ b + 1 ];
  953. buffer[ (int)b ] = 0;
  954. r.lese( buffer, b );
  955. d.schreibe( &b, 1 );
  956. d.schreibe( buffer, b );
  957. r.close();
  958. }
  959. else
  960. {
  961. err = "Fehler beim Lesen von ";
  962. err += tmp.getText();
  963. err += ". Fehler Code: " __FILE__ ":";
  964. err += __LINE__;
  965. d.close();
  966. d.remove();
  967. resList->release();
  968. return 0;
  969. }
  970. }
  971. resList->release();
  972. }
  973. else
  974. d.schreibe( "\0\0\0\0", 4 );
  975. pf = pfad.getText();
  976. pf += "/size";
  977. Datei s;
  978. s.setDatei( pf.getText() );
  979. if( s.open( Datei::Style::lesen ) )
  980. {
  981. __int64 size = 0;
  982. s.lese( (char *)& size, 8 );
  983. d.schreibe( (char *)& size, 8 );
  984. s.close();
  985. }
  986. else
  987. {
  988. err = "Fehler beim Lesen von ";
  989. err += pf.getText();
  990. err = ". Fehler Code: " __FILE__ ":";
  991. err += __LINE__;
  992. d.close();
  993. d.remove();
  994. return 0;
  995. }
  996. pf = pfad.getText();
  997. pf += "/objekt";
  998. Datei obj;
  999. obj.setDatei( pf );
  1000. RCArray<Text> *objList = obj.getDateiListe();
  1001. if( objList )
  1002. {
  1003. int anz = objList->getEintragAnzahl();
  1004. d.schreibe( (char *)& anz, 4 );
  1005. for( auto objPf = objList->getIterator(); objPf && objPf._; objPf++ )
  1006. {
  1007. Text tmp = pf.getText();
  1008. tmp += "/";
  1009. tmp += objPf->getText();
  1010. Datei r;
  1011. r.setDatei( tmp );
  1012. if( r.open( Datei::Style::lesen ) )
  1013. {
  1014. ObjektStr objStr( &r );
  1015. objStr.save( &d );
  1016. r.close();
  1017. }
  1018. else
  1019. {
  1020. err = "Fehler beim Lesen von ";
  1021. err += tmp.getText();
  1022. err = ". Fehler Code: " __FILE__ ":";
  1023. err += __LINE__;
  1024. d.close();
  1025. d.remove();
  1026. objList->release();
  1027. return 0;
  1028. }
  1029. }
  1030. objList->release();
  1031. }
  1032. else
  1033. d.schreibe( "\0\0\0\0", 4 );
  1034. pf = pfad.getText();
  1035. pf += "/player";
  1036. Datei pl;
  1037. pl.setDatei( pf );
  1038. RCArray<Text> *plList = pl.getDateiListe();
  1039. if( !plList )
  1040. {
  1041. err = "Fehler beim Lesen von ";
  1042. err += pf.getText();
  1043. err = ". Fehler Code: " __FILE__ ":";
  1044. err += __LINE__;
  1045. d.close();
  1046. d.remove();
  1047. return 0;
  1048. }
  1049. for( auto plPf = plList->getIterator(); plPf && plPf._; plPf++ )
  1050. {
  1051. Text tmp = pf.getText();
  1052. tmp += "/";
  1053. tmp += plPf->getText();
  1054. Datei r;
  1055. r.setDatei( tmp );
  1056. if( r.open( Datei::Style::lesen ) )
  1057. {
  1058. SpielerStr spStr( &r );
  1059. spStr.save( &d );
  1060. r.close();
  1061. }
  1062. else
  1063. {
  1064. err = "Fehler beim Lesen von ";
  1065. err += tmp.getText();
  1066. err = ". Fehler Code: " __FILE__ ":";
  1067. err += __LINE__;
  1068. d.close();
  1069. d.remove();
  1070. plList->release();
  1071. return 0;
  1072. }
  1073. }
  1074. plList->release();
  1075. pf = pfad.getText();
  1076. pf += "/team";
  1077. Datei tm;
  1078. tm.setDatei( pf );
  1079. RCArray<Text> *tmList = tm.getDateiListe();
  1080. if( !tmList )
  1081. {
  1082. err = "Fehler beim Lesen von ";
  1083. err += pf.getText();
  1084. err = ". Fehler Code: " __FILE__ ":";
  1085. err += __LINE__;
  1086. d.close();
  1087. d.remove();
  1088. return 0;
  1089. }
  1090. for( auto tmPf = tmList->getIterator(); tmPf && tmPf._; tmPf++ )
  1091. {
  1092. Text tmp = pf.getText();
  1093. tmp += "/";
  1094. tmp += tmPf->getText();
  1095. Datei r;
  1096. r.setDatei( tmp );
  1097. if( r.open( Datei::Style::lesen ) )
  1098. {
  1099. TeamStr tStr( &r );
  1100. tStr.save( &d );
  1101. r.close();
  1102. }
  1103. else
  1104. {
  1105. err = "Fehler beim Lesen von ";
  1106. err += tmp.getText();
  1107. err = ". Fehler Code: " __FILE__ ":";
  1108. err += __LINE__;
  1109. d.close();
  1110. d.remove();
  1111. tmList->release();
  1112. return 0;
  1113. }
  1114. }
  1115. tmList->release();
  1116. pf = pfad.getText();
  1117. pf.remove( pf.getLength() - 6, pf.getLength() );
  1118. pf += "map/server/data.map";
  1119. d.close();
  1120. if( !DateiRemove( pf ) || !d.umbenennen( pf ) )
  1121. {
  1122. err = "Fehler beim Übernehmen der Änderungen. Fehler Code: " __FILE__ ":";
  1123. err += __LINE__;
  1124. return 0;
  1125. }
  1126. }
  1127. else
  1128. {
  1129. err = "Fehler beim Speichern der Änderungen (Server). Fehler Code: " __FILE__ ":";
  1130. err += __LINE__;
  1131. return 0;
  1132. }
  1133. pf = pfad.getText();
  1134. pf.remove( pf.getLength() - 6, pf.getLength() );
  1135. pf += "map/client/map/data/data.map";
  1136. Datei d2;
  1137. d2.setDatei( pf.getText() );
  1138. if( d2.open( Datei::Style::schreiben ) && d.open( Datei::Style::lesen ) )
  1139. {
  1140. __int64 size = d.getSize();
  1141. char *buffer = new char[ 2048 ];
  1142. while( size > 0 )
  1143. {
  1144. int len = (int)( size > 2048 ? 2048 : size );
  1145. d.lese( buffer, len );
  1146. d2.schreibe( buffer, len );
  1147. size -= len;
  1148. }
  1149. delete[] buffer;
  1150. d.close();
  1151. d2.close();
  1152. }
  1153. else
  1154. {
  1155. err = "Fehler beim Speichern der Änderungen (Client). Fehler Code: " __FILE__ ":";
  1156. err += __LINE__;
  1157. return 0;
  1158. }
  1159. DateiRemove( pfad.getText() );
  1160. return 1;
  1161. }