Editor.cpp 37 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175
  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. return 0;
  922. }
  923. bool Editor::saveSitzung()
  924. {/*
  925. Text pf = pfad.getText();
  926. pf.remove( pf.getLength() - 6, pf.getLength() );
  927. pf += "map/server/data_tmp.map";
  928. Datei d;
  929. d.setDatei( pf.getText() );
  930. if( d.open( Datei::Style::schreiben ) )
  931. {
  932. pf = pfad.getText();
  933. pf += "/resource";
  934. Datei res;
  935. res.setDatei( pf );
  936. RCArray<Text> *resList = res.getDateiListe();
  937. if( resList )
  938. {
  939. int anz = resList->getEintragAnzahl();
  940. d.schreibe( (char *)& anz, 4 );
  941. for( auto resPf = resList->getIterator(); resPf && resPf._; resPf++ )
  942. {
  943. Text tmp = pf.getText();
  944. tmp += "/";
  945. tmp += resPf->getText();
  946. Datei r;
  947. r.setDatei( tmp );
  948. if( r.open( Datei::Style::lesen ) )
  949. {
  950. int id = (int)* resPf;
  951. d.schreibe( (char *)& id, 4 );
  952. char b = 0;
  953. r.lese( &b, 1 );
  954. char *buffer = new char[ b + 1 ];
  955. buffer[ (int)b ] = 0;
  956. r.lese( buffer, b );
  957. d.schreibe( &b, 1 );
  958. d.schreibe( buffer, b );
  959. r.close();
  960. }
  961. else
  962. {
  963. err = "Fehler beim Lesen von ";
  964. err += tmp.getText();
  965. err += ". Fehler Code: " __FILE__ ":";
  966. err += __LINE__;
  967. d.close();
  968. d.remove();
  969. resList->release();
  970. return 0;
  971. }
  972. }
  973. resList->release();
  974. }
  975. else
  976. d.schreibe( "\0\0\0\0", 4 );
  977. pf = pfad.getText();
  978. pf += "/size";
  979. Datei s;
  980. s.setDatei( pf.getText() );
  981. if( s.open( Datei::Style::lesen ) )
  982. {
  983. __int64 size = 0;
  984. s.lese( (char *)& size, 8 );
  985. d.schreibe( (char *)& size, 8 );
  986. s.close();
  987. }
  988. else
  989. {
  990. err = "Fehler beim Lesen von ";
  991. err += pf.getText();
  992. err = ". Fehler Code: " __FILE__ ":";
  993. err += __LINE__;
  994. d.close();
  995. d.remove();
  996. return 0;
  997. }
  998. pf = pfad.getText();
  999. pf += "/objekt";
  1000. Datei obj;
  1001. obj.setDatei( pf );
  1002. RCArray<Text> *objList = obj.getDateiListe();
  1003. if( objList )
  1004. {
  1005. int anz = objList->getEintragAnzahl();
  1006. d.schreibe( (char *)& anz, 4 );
  1007. for( auto objPf = objList->getIterator(); objPf && objPf._; objPf++ )
  1008. {
  1009. Text tmp = pf.getText();
  1010. tmp += "/";
  1011. tmp += objPf->getText();
  1012. Datei r;
  1013. r.setDatei( tmp );
  1014. if( r.open( Datei::Style::lesen ) )
  1015. {
  1016. ObjektStr objStr( &r );
  1017. objStr.save( &d );
  1018. r.close();
  1019. }
  1020. else
  1021. {
  1022. err = "Fehler beim Lesen von ";
  1023. err += tmp.getText();
  1024. err = ". Fehler Code: " __FILE__ ":";
  1025. err += __LINE__;
  1026. d.close();
  1027. d.remove();
  1028. objList->release();
  1029. return 0;
  1030. }
  1031. }
  1032. objList->release();
  1033. }
  1034. else
  1035. d.schreibe( "\0\0\0\0", 4 );
  1036. pf = pfad.getText();
  1037. pf += "/player";
  1038. Datei pl;
  1039. pl.setDatei( pf );
  1040. RCArray<Text> *plList = pl.getDateiListe();
  1041. if( !plList )
  1042. {
  1043. err = "Fehler beim Lesen von ";
  1044. err += pf.getText();
  1045. err = ". Fehler Code: " __FILE__ ":";
  1046. err += __LINE__;
  1047. d.close();
  1048. d.remove();
  1049. return 0;
  1050. }
  1051. for( auto plPf = plList->getIterator(); plPf && plPf._; plPf++ )
  1052. {
  1053. Text tmp = pf.getText();
  1054. tmp += "/";
  1055. tmp += plPf->getText();
  1056. Datei r;
  1057. r.setDatei( tmp );
  1058. if( r.open( Datei::Style::lesen ) )
  1059. {
  1060. SpielerStr spStr( &r );
  1061. spStr.save( &d );
  1062. r.close();
  1063. }
  1064. else
  1065. {
  1066. err = "Fehler beim Lesen von ";
  1067. err += tmp.getText();
  1068. err = ". Fehler Code: " __FILE__ ":";
  1069. err += __LINE__;
  1070. d.close();
  1071. d.remove();
  1072. plList->release();
  1073. return 0;
  1074. }
  1075. }
  1076. plList->release();
  1077. pf = pfad.getText();
  1078. pf += "/team";
  1079. Datei tm;
  1080. tm.setDatei( pf );
  1081. RCArray<Text> *tmList = tm.getDateiListe();
  1082. if( !tmList )
  1083. {
  1084. err = "Fehler beim Lesen von ";
  1085. err += pf.getText();
  1086. err = ". Fehler Code: " __FILE__ ":";
  1087. err += __LINE__;
  1088. d.close();
  1089. d.remove();
  1090. return 0;
  1091. }
  1092. for( auto tmPf = tmList->getIterator(); tmPf && tmPf._; tmPf++ )
  1093. {
  1094. Text tmp = pf.getText();
  1095. tmp += "/";
  1096. tmp += tmPf->getText();
  1097. Datei r;
  1098. r.setDatei( tmp );
  1099. if( r.open( Datei::Style::lesen ) )
  1100. {
  1101. TeamStr tStr( &r );
  1102. tStr.save( &d );
  1103. r.close();
  1104. }
  1105. else
  1106. {
  1107. err = "Fehler beim Lesen von ";
  1108. err += tmp.getText();
  1109. err = ". Fehler Code: " __FILE__ ":";
  1110. err += __LINE__;
  1111. d.close();
  1112. d.remove();
  1113. tmList->release();
  1114. return 0;
  1115. }
  1116. }
  1117. tmList->release();
  1118. pf = pfad.getText();
  1119. pf.remove( pf.getLength() - 6, pf.getLength() );
  1120. pf += "map/server/data.map";
  1121. d.close();
  1122. if( !DateiRemove( pf ) || !d.umbenennen( pf ) )
  1123. {
  1124. err = "Fehler beim Übernehmen der Änderungen. Fehler Code: " __FILE__ ":";
  1125. err += __LINE__;
  1126. return 0;
  1127. }
  1128. }
  1129. else
  1130. {
  1131. err = "Fehler beim Speichern der Änderungen (Server). Fehler Code: " __FILE__ ":";
  1132. err += __LINE__;
  1133. return 0;
  1134. }
  1135. pf = pfad.getText();
  1136. pf.remove( pf.getLength() - 6, pf.getLength() );
  1137. pf += "map/client/map/data/data.map";
  1138. Datei d2;
  1139. d2.setDatei( pf.getText() );
  1140. if( d2.open( Datei::Style::schreiben ) && d.open( Datei::Style::lesen ) )
  1141. {
  1142. __int64 size = d.getSize();
  1143. char *buffer = new char[ 2048 ];
  1144. while( size > 0 )
  1145. {
  1146. int len = (int)( size > 2048 ? 2048 : size );
  1147. d.lese( buffer, len );
  1148. d2.schreibe( buffer, len );
  1149. size -= len;
  1150. }
  1151. delete[] buffer;
  1152. d.close();
  1153. d2.close();
  1154. }
  1155. else
  1156. {
  1157. err = "Fehler beim Speichern der Änderungen (Client). Fehler Code: " __FILE__ ":";
  1158. err += __LINE__;
  1159. return 0;
  1160. }
  1161. DateiRemove( pfad.getText() );
  1162. */
  1163. return 1;
  1164. }