KarteEditor.cpp 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701
  1. #include "KarteEditor.h"
  2. #include <Datei.h>
  3. #include <DateiSystem.h>
  4. #include <Bild.h>
  5. #include <Zeit.h>
  6. #include "KsgsBeschreibung.h"
  7. #include "KsgsShopSeite.h"
  8. #include <unistd.h>
  9. #define Sleep( x ) usleep( (x) * 1000 )
  10. #include <dlfcn.h>
  11. #define LoadLibrary( x ) dlopen( (x), RTLD_LAZY )
  12. #define GetProcAddress dlsym
  13. #define FreeLibrary dlclose
  14. typedef ESEditorV *( *DllStart )( );
  15. // Inhalt der KarteEditor Klasse aus KarteEditor.h
  16. // Konstruktor
  17. KarteEditor::KarteEditor( int id, EdSDatenbank *datenbank, char *pf, InitDatei *zIni )
  18. : ReferenceCounter()
  19. {
  20. this->id = id;
  21. db = datenbank;
  22. ini = dynamic_cast<InitDatei *>( zIni->getThis() );
  23. pfad = new Text( pf );
  24. pfad->append( "/" );
  25. pfad->append( id );
  26. if( !DateiExistiert( *pfad ) )
  27. { // Karte erstellen
  28. // Client Daten
  29. Text dn = pfad->getText();
  30. dn += "/live/map/client/titel.ltdb";
  31. LTDBDatei bilder;
  32. bilder.setDatei( dynamic_cast<Text *>( dn.getThis() ) );
  33. bilder.erstellen();
  34. Bild *bild = new Bild();
  35. bild->neuBild( 200, 100, 0x00000000 );
  36. bilder.speichern( 0, dynamic_cast<Bild *>( bild->getThis() ), new Text( "titel" ) );
  37. dn = pfad->getText();
  38. dn += "/live/map/client/minimap.ltdb";
  39. bilder.setDatei( dynamic_cast<Text *>( dn.getThis() ) );
  40. bilder.erstellen();
  41. bild->neuBild( 348, 348, 0x00000000 );
  42. bilder.speichern( 0, dynamic_cast<Bild *>( bild->getThis() ), new Text( "vorschau" ) );
  43. dn = pfad->getText();
  44. dn += "/live/map/client/ladebild.ltdb";
  45. bilder.setDatei( dynamic_cast<Text *>( dn.getThis() ) );
  46. bilder.erstellen();
  47. bild->neuBild( 1300, 900, 0x00000000 );
  48. bilder.speichern( 0, bild, new Text( "spielladen" ) );
  49. dn = pfad->getText();
  50. dn += "/live/map/client/beschreibung.ksgs";
  51. Datei d;
  52. d.setDatei( dn );
  53. d.erstellen();
  54. d.open( Datei::Style::schreiben );
  55. d.schreibe( (char *)_neu_karte_ksgs_beschreibung, textLength( _neu_karte_ksgs_beschreibung ) );
  56. d.close();
  57. dn = pfad->getText();
  58. dn += "/live/map/client/map/data/data.sts";
  59. d.setDatei( dn );
  60. d.erstellen();
  61. d.open( Datei::Style::schreiben );
  62. int i = 0;
  63. d.schreibe( (char *)&i, 4 );
  64. d.schreibe( (char *)&i, 4 );
  65. d.close();
  66. // Shop Seite
  67. dn = pfad->getText();
  68. dn += "/live/shop/seite/seite.ksgs";
  69. d.setDatei( dn );
  70. d.erstellen();
  71. d.open( Datei::Style::schreiben );
  72. d.schreibe( (char *)_neu_karte_ksgs_shop_seite, textLength( _neu_karte_ksgs_shop_seite ) );
  73. d.close();
  74. dn = pfad->getText();
  75. dn += "/live/shop/titelbg.ltdb";
  76. bilder.setDatei( dynamic_cast<Text *>( dn.getThis() ) );
  77. bilder.erstellen();
  78. bild->neuBild( 200, 100, 0x00000000 );
  79. bilder.speichern( 0, dynamic_cast<Bild *>( bild->getThis() ), new Text( "auswbg.jpg" ) );
  80. // Server Daten
  81. dn = pfad->getText();
  82. dn += "/live/map/server/sts.ltgd";
  83. d.setDatei( dn );
  84. d.erstellen();
  85. d.open( Datei::Style::schreiben );
  86. i = 0;
  87. d.schreibe( (char *)&i, 4 );
  88. d.schreibe( (char *)&i, 4 );
  89. d.close();
  90. dn = pfad->getText();
  91. dn += "/live/map/server/...";
  92. }
  93. shop = new SSEditor( pfad->getText() );
  94. beschreibung = new BeschreibungEditor( pfad->getText() );
  95. teams = new TeamsEditor( id, pfad->getText(), dynamic_cast<EdSDatenbank *>( db->getThis() ) );
  96. dateien = new DateienEditor( pfad->getText(), zIni );
  97. editor = 0;
  98. editorDll = 0;
  99. fehler = "";
  100. }
  101. // Destruktor
  102. KarteEditor::~KarteEditor()
  103. {
  104. shop->release();
  105. beschreibung->release();
  106. teams->release();
  107. dateien->release();
  108. db->release();
  109. pfad->release();
  110. if( editor )
  111. editor->release();
  112. if( editorDll )
  113. FreeLibrary( editorDll );
  114. ini->release();
  115. }
  116. // private
  117. int KarteEditor::findeDateien( char *pf, RCArray< Text > *pfad )
  118. {
  119. Datei d;
  120. d.setDatei( pf );
  121. if( d.existiert() && !d.istOrdner() )
  122. {
  123. pfad->add( new Text( pf ) );
  124. return 1;
  125. }
  126. if( d.istOrdner() )
  127. {
  128. RCArray< Text > *list = d.getDateiListe();
  129. int anz = list->getEintragAnzahl();
  130. int ret = 0;
  131. for( int i = 0; i < anz; i++ )
  132. {
  133. Text p = pf;
  134. p += "/";
  135. p += list->z( i )->getText();
  136. ret += findeDateien( p, pfad );
  137. }
  138. list->release();
  139. return ret;
  140. }
  141. return 0;
  142. }
  143. // nicht constant
  144. bool KarteEditor::getAbbildListe( RCArray< Text > *name, RCArray< Zeit > *datum )
  145. {
  146. name->leeren();
  147. datum->leeren();
  148. Text pf = pfad->getText();
  149. pf += "/abbilder";
  150. Datei d;
  151. d.setDatei( pf );
  152. if( !d.existiert() || !d.istOrdner() )
  153. return 1;
  154. RCArray< Text > *list = d.getDateiListe();
  155. if( !list )
  156. return 0;
  157. int anz = list->getEintragAnzahl();
  158. for( int i = 0; i < anz; i++ )
  159. {
  160. Text p = pf.getText();
  161. p += "/";
  162. p += list->z( i )->getText();
  163. d.setDatei( p );
  164. Zeit *z = d.getLastChange();
  165. if( z )
  166. {
  167. name->add( list->get( i ) );
  168. datum->add( z );
  169. }
  170. }
  171. list->release();
  172. return 1;
  173. }
  174. int KarteEditor::getDateiUpdateListe( char *p, RCArray< Text > *pfad )
  175. {
  176. pfad->leeren();
  177. Text pf = this->pfad->getText();
  178. pf += "/live/";
  179. pf += p;
  180. RCArray< Text > *list = new RCArray< Text >();
  181. int anz = findeDateien( pf, list );
  182. for( int i = 0; i < anz; i++ )
  183. {
  184. list->z( i )->remove( pf.getText() );
  185. pfad->add( list->get( i ) );
  186. }
  187. list->release();
  188. return anz;
  189. }
  190. bool KarteEditor::abbildErstellen( char *name )
  191. {
  192. Text pf = pfad->getText();
  193. pf += "/abbilder/";
  194. pf += name;
  195. if( DateiExistiert( pf ) )
  196. {
  197. fehler = "Es existiert bereits ein Abbild mit diesem Namen. Du musst es vorher remove, oder einen anderen Namen angeben.";
  198. return 0;
  199. }
  200. Text live = pfad->getText();
  201. live += "/live";
  202. RCArray< Text > *list = new RCArray< Text >();
  203. int anz = findeDateien( live, list );
  204. bool ret = 1;
  205. for( int i = 0; i < anz; i++ )
  206. {
  207. Datei alt;
  208. Datei neu;
  209. alt.setDatei( list->z( i )->getText() );
  210. Text pfNeu = pf.getText();
  211. pfNeu += ( list->z( i )->getText() + live.getLength() );
  212. neu.setDatei( pfNeu );
  213. neu.erstellen();
  214. ret &= alt.open( Datei::Style::lesen );
  215. ret &= neu.open( Datei::Style::schreiben );
  216. __int64 size = alt.getSize();
  217. char *buffer = new char[ 2048 ];
  218. while( size > 0 )
  219. {
  220. int l = size > 2048 ? 2048 : (int)size;
  221. alt.lese( buffer, l );
  222. neu.schreibe( buffer, l );
  223. size -= l;
  224. }
  225. delete[] buffer;
  226. alt.close();
  227. neu.close();
  228. }
  229. list->release();
  230. if( !ret )
  231. {
  232. DateiRemove( pf );
  233. fehler = "Es ist ein Fehler beim Lesen oder Schreiben einer Datei aufgetreten.";
  234. }
  235. return ret;
  236. }
  237. bool KarteEditor::abbildRemove( char *name )
  238. {
  239. Text pf = pfad->getText();
  240. pf += "/abbilder/";
  241. pf += name;
  242. if( !DateiRemove( pf ) )
  243. {
  244. fehler = "Es ist ein Fehler beim Löschen des Abbildes aufgetreten.";
  245. return 0;
  246. }
  247. return 1;
  248. }
  249. bool KarteEditor::abbildHerstellen( char *name )
  250. {
  251. if( inUpdate() )
  252. {
  253. fehler = "Die Karte wird momentan aktualisiert. Bitte haben sie Geduld, bis dieser Vorgang abgeschlossen ist.";
  254. return 0;
  255. }
  256. Text pf = pfad->getText();
  257. pf += "/abbilder/";
  258. pf += name;
  259. if( !DateiExistiert( pf ) )
  260. {
  261. fehler = "Es existiert kein Abbild mit dem angegebenen Namen.";
  262. return 0;
  263. }
  264. Text live = pfad->getText();
  265. live += "/live";
  266. if( !DateiRemove( live ) )
  267. {
  268. fehler = "Es ist ein Fehler beim Löschen der aktuellen Version aufgetreten.";
  269. return 0;
  270. }
  271. RCArray< Text > *list = new RCArray< Text >();
  272. int anz = findeDateien( pf, list );
  273. bool ret = 1;
  274. for( int i = 0; i < anz; i++ )
  275. {
  276. Datei alt;
  277. Datei neu;
  278. alt.setDatei( list->z( i )->getText() );
  279. Text pfNeu = live.getText();
  280. pfNeu += ( list->z( i )->getText() + pf.getLength() );
  281. neu.setDatei( pfNeu );
  282. neu.erstellen();
  283. ret |= alt.open( Datei::Style::lesen );
  284. ret |= neu.open( Datei::Style::schreiben );
  285. __int64 size = alt.getSize();
  286. char *buffer = new char[ 2048 ];
  287. while( size > 0 )
  288. {
  289. int l = size > 2048 ? 2048 : (int)size;
  290. alt.lese( buffer, l );
  291. neu.schreibe( buffer, l );
  292. size -= l;
  293. }
  294. delete[] buffer;
  295. alt.close();
  296. neu.close();
  297. }
  298. list->release();
  299. if( !ret )
  300. {
  301. DateiRemove( pf );
  302. fehler = "Es ist ein Fehler beim Lesen oder Schreiben einer Datei aufgetreten.";
  303. }
  304. return ret;
  305. }
  306. bool KarteEditor::startUpdate()
  307. {
  308. if( inUpdate() )
  309. {
  310. fehler = "Die Karte wird momentan aktualisiert. Bitte haben sie Geduld, bis dieser Vorgang abgeschlossen ist.";
  311. return 0;
  312. }
  313. if( !db->startKarteUpdate( id ) )
  314. {
  315. Text *t = db->getLetzterFehler();
  316. fehler = t->getText();
  317. t->release();
  318. return 0;
  319. }
  320. return 1;
  321. }
  322. bool KarteEditor::startShopUpdate()
  323. {
  324. if( !db->startShopUpdate( id ) )
  325. {
  326. Text *t = db->getLetzterFehler();
  327. fehler = t->getText();
  328. t->release();
  329. return 0;
  330. }
  331. return 1;
  332. }
  333. bool KarteEditor::prozessMessage( SKlient *zKlient )
  334. {
  335. char message = 0;
  336. zKlient->getNachrichtEncrypted( &message, 1 );
  337. switch( message )
  338. {
  339. case 0x1: // Abbild Erstellen
  340. {
  341. zKlient->sendeEncrypted( "\1", 1 );
  342. unsigned char l = 0;
  343. zKlient->getNachrichtEncrypted( (char *)&l, 1 );
  344. char *name = new char[ l + 1 ];
  345. name[ (int)l ] = 0;
  346. if( l )
  347. zKlient->getNachrichtEncrypted( name, l );
  348. if( !textLength( name ) )
  349. {
  350. delete[] name;
  351. fehler = "Du musst einen Namen angeben.";
  352. return 0;
  353. }
  354. if( !abbildErstellen( name ) )
  355. {
  356. delete[] name;
  357. return 0;
  358. }
  359. delete[] name;
  360. zKlient->sendeEncrypted( "\1", 1 );
  361. return 1;
  362. }
  363. case 0x2: // Abbild Löschen
  364. {
  365. zKlient->sendeEncrypted( "\1", 1 );
  366. unsigned char l = 0;
  367. zKlient->getNachrichtEncrypted( (char *)&l, 1 );
  368. char *name = new char[ l + 1 ];
  369. name[ (int)l ] = 0;
  370. if( l )
  371. zKlient->getNachrichtEncrypted( name, l );
  372. if( !textLength( name ) )
  373. {
  374. delete[] name;
  375. fehler = "Du musst einen Namen angeben.";
  376. return 0;
  377. }
  378. if( !abbildRemove( name ) )
  379. {
  380. delete[] name;
  381. return 0;
  382. }
  383. delete[] name;
  384. zKlient->sendeEncrypted( "\1", 1 );
  385. return 1;
  386. }
  387. case 0x3: // Abbild Herstellen
  388. {
  389. zKlient->sendeEncrypted( "\1", 1 );
  390. unsigned char l = 0;
  391. zKlient->getNachrichtEncrypted( (char *)&l, 1 );
  392. char *name = new char[ l + 1 ];
  393. name[ (int)l ] = 0;
  394. if( l )
  395. zKlient->getNachrichtEncrypted( name, l );
  396. if( !textLength( name ) )
  397. {
  398. delete[] name;
  399. fehler = "Du musst einen Namen angeben.";
  400. return 0;
  401. }
  402. if( !abbildHerstellen( name ) )
  403. {
  404. delete[] name;
  405. return 0;
  406. }
  407. delete[] name;
  408. zKlient->sendeEncrypted( "\1", 1 );
  409. return 1;
  410. }
  411. case 0x4: // Karte Veröffentlichen
  412. {
  413. zKlient->sendeEncrypted( "\1", 1 );
  414. if( !startUpdate() )
  415. return 0;
  416. else
  417. zKlient->sendeEncrypted( "\1", 1 );
  418. return 1;
  419. }
  420. case 0x5: // get Abbild Liste
  421. {
  422. zKlient->sendeEncrypted( "\1", 1 );
  423. RCArray< Text > *name = new RCArray< Text >();
  424. RCArray< Zeit > *datum = new RCArray< Zeit >();
  425. getAbbildListe( name, datum );
  426. int anz = name->getEintragAnzahl();
  427. zKlient->sendeEncrypted( (char *)&anz, 4 );
  428. for( int i = 0; i < anz; i++ )
  429. {
  430. Text n = name->z( i )->getText();
  431. char len = (char)n.getLength();
  432. zKlient->sendeEncrypted( &len, 1 );
  433. zKlient->sendeEncrypted( n, len );
  434. int d = datum->z( i )->zDatum()->getJahr();
  435. zKlient->sendeEncrypted( (char *)&d, 4 );
  436. d = datum->z( i )->zDatum()->getMonat();
  437. zKlient->sendeEncrypted( (char *)&d, 4 );
  438. d = datum->z( i )->zDatum()->getTag();
  439. zKlient->sendeEncrypted( (char *)&d, 4 );
  440. d = datum->z( i )->zUhrzeit()->getStunde();
  441. zKlient->sendeEncrypted( (char *)&d, 4 );
  442. d = datum->z( i )->zUhrzeit()->getMinute();
  443. zKlient->sendeEncrypted( (char *)&d, 4 );
  444. d = datum->z( i )->zUhrzeit()->getSekunde();
  445. zKlient->sendeEncrypted( (char *)&d, 4 );
  446. }
  447. name->release();
  448. datum->release();
  449. return 1;
  450. }
  451. case 0x6: // Shop Seite Veröffentlichen
  452. {
  453. zKlient->sendeEncrypted( "\1", 1 );
  454. if( !startShopUpdate() )
  455. return 0;
  456. else
  457. zKlient->sendeEncrypted( "\1", 1 );
  458. return 1;
  459. }
  460. case 0x7: // Shop Seite Nachricht
  461. {
  462. zKlient->sendeEncrypted( "\1", 1 );
  463. if( !shop->prozessMessage( zKlient ) )
  464. fehler = shop->getLetzterFehler();
  465. else
  466. return 1;
  467. return 0;
  468. }
  469. case 0x8: // Shop Seite herunterladen
  470. {
  471. zKlient->sendeEncrypted( "\1", 1 );
  472. RCArray< Text > *list = new RCArray< Text >();
  473. Text pf = pfad->getText();
  474. pf += "/live/shop";
  475. int anz = findeDateien( pf, list );
  476. zKlient->sendeEncrypted( (char *)&anz, 4 );
  477. for( int i = 0; i < anz; i++ )
  478. {
  479. Text p = list->z( i )->getText();
  480. char l = (char)( p.getLength() - pf.getLength() );
  481. zKlient->sendeEncrypted( &l, 1 );
  482. zKlient->sendeEncrypted( (char *)p + pf.getLength(), l );
  483. Datei d;
  484. d.setDatei( p );
  485. __int64 size = d.getSize();
  486. zKlient->sendeEncrypted( (char *)&size, 8 );
  487. d.open( Datei::Style::lesen );
  488. char *buffer = new char[ 2048 ];
  489. while( size > 0 )
  490. {
  491. int l = size > 2048 ? 2048 : (int)size;
  492. d.lese( buffer, l );
  493. zKlient->sende( buffer, l );
  494. size -= l;
  495. }
  496. delete[] buffer;
  497. d.close();
  498. }
  499. list->release();
  500. return 1;
  501. }
  502. case 0x9: // Shop Daten laden
  503. {
  504. int es = 0, tp = 0, vp = 0;
  505. if( !db->getKarteShopDaten( id, es, tp, vp ) )
  506. {
  507. fehler = "Fehler beim laden der Shop Informationen.";
  508. return 0;
  509. }
  510. zKlient->sendeEncrypted( "\1", 1 );
  511. zKlient->sendeEncrypted( (char *)&es, 4 );
  512. zKlient->sendeEncrypted( (char *)&tp, 4 );
  513. zKlient->sendeEncrypted( (char *)&vp, 4 );
  514. return 1;
  515. }
  516. case 0xA: // Set Shop Daten
  517. {
  518. zKlient->sendeEncrypted( "\1", 1 );
  519. int es = 0, tp = 0, vp = 0;
  520. zKlient->getNachrichtEncrypted( (char *)&es, 4 );
  521. zKlient->getNachrichtEncrypted( (char *)&tp, 4 );
  522. zKlient->getNachrichtEncrypted( (char *)&vp, 4 );
  523. if( db->setKarteShopDaten( id, es, tp, vp ) )
  524. {
  525. zKlient->sendeEncrypted( "\1", 1 );
  526. return 1;
  527. }
  528. fehler = "Fehler beim setzen der Shop Werte.";
  529. return 0;
  530. }
  531. case 0xB: // Beschreibung Nachricht
  532. {
  533. zKlient->sendeEncrypted( "\1", 1 );
  534. if( !beschreibung->prozessMessage( zKlient ) )
  535. fehler = beschreibung->getLetzterFehler();
  536. else
  537. return 1;
  538. return 0;
  539. }
  540. case 0xC: // Teams Nachricht
  541. {
  542. zKlient->sendeEncrypted( "\1", 1 );
  543. if( !teams->prozessMessage( zKlient ) )
  544. fehler = teams->getLetzterFehler();
  545. else
  546. return 1;
  547. return 0;
  548. }
  549. case 0xD: // Dateien Nachicht
  550. {
  551. zKlient->sendeEncrypted( "\1", 1 );
  552. if( !dateien->prozessMessage( zKlient ) )
  553. fehler = dateien->getLetzterFehler();
  554. else
  555. return 1;
  556. return 0;
  557. }
  558. case 0xE: // Init Editor
  559. {
  560. if( editorDll )
  561. {
  562. if( editor )
  563. editor = (ESEditorV *)editor->release();
  564. FreeLibrary( editorDll );
  565. }
  566. if( !ini->wertExistiert( "SpielePfad" ) )
  567. {
  568. fehler = "Diese Option ist noch nicht verfügbar. Error Code: " __FILE__ ":";
  569. fehler += __LINE__;
  570. return 0;
  571. }
  572. Text pf = ini->zWert( "SpielePfad" )->getText();
  573. pf += "/";
  574. int said = db->getSpielArtId( id );
  575. if( !said )
  576. {
  577. fehler = "Diese Option ist noch nicht verfügbar. Error Code: " __FILE__ ":";
  578. fehler += __LINE__;
  579. return 0;
  580. }
  581. pf += said;
  582. pf += "/bin/game";
  583. pf += ".so";
  584. editorDll = LoadLibrary( pf.getText() );
  585. if( !editorDll )
  586. {
  587. fehler = "Diese Option ist noch nicht verfügbar. Error Code: " __FILE__ ":";
  588. fehler += __LINE__;
  589. return 0;
  590. }
  591. DllStart getEditorKlasse = (DllStart)GetProcAddress( editorDll, "getEditorKlasse" );
  592. if( !getEditorKlasse )
  593. {
  594. fehler = "Diese Option ist noch nicht verfügbar. Error Code: " __FILE__ ":";
  595. fehler += __LINE__;
  596. FreeLibrary( editorDll );
  597. editorDll = 0;
  598. return 0;
  599. }
  600. editor = getEditorKlasse();
  601. if( !editor )
  602. {
  603. fehler = "Diese Option ist noch nicht verfügbar. Error Code: " __FILE__ ":";
  604. fehler += __LINE__;
  605. FreeLibrary( editorDll );
  606. editorDll = 0;
  607. return 0;
  608. }
  609. zKlient->sendeEncrypted( "\1", 1 );
  610. Text p = pfad->getText();
  611. p += "/live";
  612. editor->setPfad( p );
  613. editor->open();
  614. return 1;
  615. }
  616. case 0xF:
  617. { // Editor Nachricht
  618. if( !editor )
  619. {
  620. fehler = "Der Editor wurde nicht initialisiert. Error Code: " __FILE__ ":";
  621. fehler += __LINE__;
  622. editorDll = 0;
  623. return 0;
  624. }
  625. zKlient->sendeEncrypted( "\1", 1 );
  626. if( !editor->nachricht( zKlient ) )
  627. fehler = editor->getLetzterFehler();
  628. else
  629. return 1;
  630. return 0;
  631. }
  632. case 0x10:
  633. { // Get Verkauf Statistik
  634. Array< int > einkommen;
  635. Array< int > verkauft;
  636. Array< int > spiele;
  637. if( db->getLast30DaysIncomeStatistik( id, &einkommen, &verkauft ) && db->getLast30DaysSpielStatistik( id, &spiele ) )
  638. {
  639. zKlient->sendeEncrypted( "\1", 1 );
  640. int kaufAnz = db->getKaufAnz( id );
  641. zKlient->sendeEncrypted( (char *)&kaufAnz, 4 );
  642. char anz = (char)einkommen.getEintragAnzahl();
  643. zKlient->sendeEncrypted( &anz, 1 );
  644. for( int i = 0; i < anz; i++ )
  645. {
  646. int kupfer = einkommen.get( i );
  647. int kauf = verkauft.get( i );
  648. int games = spiele.get( i );
  649. zKlient->sendeEncrypted( (char *)&kupfer, 4 );
  650. zKlient->sendeEncrypted( (char *)&kauf, 4 );
  651. zKlient->sendeEncrypted( (char *)&games, 4 );
  652. }
  653. return 1;
  654. }
  655. fehler = "Die Statistik konnte nicht erstellt werden.";
  656. return 0;
  657. }
  658. default:
  659. fehler = "Unbekannte Nachricht. Eventuell ist der Client nicht auf dem neusten Stand.";
  660. }
  661. return 0;
  662. }
  663. void KarteEditor::removeError()
  664. {
  665. fehler = "";
  666. }
  667. // constant
  668. bool KarteEditor::inUpdate() const
  669. {
  670. return db->istKarteInUpdate( id );
  671. }
  672. bool KarteEditor::istOk() const
  673. {
  674. return fehler.getLength() == 0;
  675. }
  676. char *KarteEditor::getLetzterFehler() const
  677. {
  678. return fehler;
  679. }
  680. char *KarteEditor::getPfad() const
  681. {
  682. return pfad->getText();
  683. }