BeschreibungEditor.cpp 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. #include "BeschreibungEditor.h"
  2. #include <Datei.h>
  3. #include <DateiSystem.h>
  4. #include <Bild.h>
  5. // Inhalt der BeschreibungEditor Klasse aus BeschreibungEditor.h
  6. // Konstruktor
  7. BeschreibungEditor::BeschreibungEditor( char *pf )
  8. {
  9. pfad = pf;
  10. pfad += "/live/map/client";
  11. fehler = "";
  12. ref = 1;
  13. }
  14. // Destruktor
  15. BeschreibungEditor::~BeschreibungEditor()
  16. {}
  17. // nicht constant
  18. bool BeschreibungEditor::prozessMessage( SKlient *zKlient )
  19. {
  20. char message = 0;
  21. zKlient->getNachrichtEncrypted( &message, 1 );
  22. switch( message )
  23. {
  24. case 0x1: // Beschreibung laden
  25. {
  26. Text p = pfad.getText();
  27. p += "/beschreibung.ksgs";
  28. if( !DateiExistiert( p ) )
  29. {
  30. fehler = "Die Beschreibung wurde nicht gefunden.";
  31. return 0;
  32. }
  33. zKlient->sendeEncrypted( "\1", 1 );
  34. Datei d;
  35. d.setDatei( p );
  36. bool ok = d.open( Datei::Style::lesen );
  37. char *buffer = new char[ 2048 ];
  38. int gr = (int)d.getSize();
  39. zKlient->sendeEncrypted( (char*)&gr, 4 );
  40. while( gr > 0 )
  41. {
  42. int l = gr > 2048 ? 2048 : gr;
  43. d.lese( buffer, l );
  44. zKlient->sende( buffer, l );
  45. gr -= l;
  46. }
  47. delete[] buffer;
  48. d.close();
  49. if( !ok )
  50. {
  51. fehler = "Es ist ein Fehler beim laden der Beschreibung aufgetreten.";
  52. return 0;
  53. }
  54. zKlient->sendeEncrypted( "\1", 1 );
  55. return 1;
  56. }
  57. case 0x2: // Titelbild laden
  58. {
  59. Text p = pfad.getText();
  60. p += "/titel.ltdb";
  61. if( !DateiExistiert( p ) )
  62. {
  63. fehler = "Das Titelbild wurde nicht gefunden.";
  64. return 0;
  65. }
  66. LTDBDatei dat;
  67. dat.setDatei( p.getThis() );
  68. dat.leseDaten( 0 );
  69. Bild *b = dat.laden( 0, dat.zBildListe()->get( 0 ) );
  70. if( !b )
  71. {
  72. fehler = "Das Titelbild wurde nicht gefunden.";
  73. return 0;
  74. }
  75. zKlient->sendeEncrypted( "\1", 1 );
  76. int br = b->getBreite();
  77. int hi = b->getHeight();
  78. zKlient->sendeEncrypted( (char*)&br, 4 );
  79. zKlient->sendeEncrypted( (char*)&hi, 4 );
  80. char *buffer = (char*)b->getBuffer();
  81. __int64 gr = br * hi * 4;
  82. for( int i = 0, l = gr > 2048 ? 2048 : (int)gr; gr > 0; i += l, gr -= l, l = gr > 2048 ? 2048 : (int)gr )
  83. zKlient->sende( &( buffer[ i ] ), l );
  84. b->release();
  85. return 1;
  86. }
  87. case 0x3: // Minimap laden
  88. {
  89. Text p = pfad.getText();
  90. p += "/minimap.ltdb";
  91. if( !DateiExistiert( p ) )
  92. {
  93. fehler = "Das Minimap Bild wurde nicht gefunden.";
  94. return 0;
  95. }
  96. LTDBDatei dat;
  97. dat.setDatei( p.getThis() );
  98. dat.leseDaten( 0 );
  99. Bild *b = dat.laden( 0, dat.zBildListe()->get( 0 ) );
  100. if( !b )
  101. {
  102. fehler = "Das Minimap Bild wurde nicht gefunden.";
  103. return 0;
  104. }
  105. zKlient->sendeEncrypted( "\1", 1 );
  106. int br = b->getBreite();
  107. int hi = b->getHeight();
  108. zKlient->sendeEncrypted( (char*)&br, 4 );
  109. zKlient->sendeEncrypted( (char*)&hi, 4 );
  110. char *buffer = (char*)b->getBuffer();
  111. __int64 gr = br * hi * 4;
  112. for( int i = 0, l = gr > 2048 ? 2048 : (int)gr; gr > 0; i += l, gr -= l, l = gr > 2048 ? 2048 : (int)gr )
  113. zKlient->sende( &( buffer[ i ] ), l );
  114. b->release();
  115. return 1;
  116. }
  117. case 0x4: // Ladebild laden
  118. {
  119. Text p = pfad.getText();
  120. p += "/ladebild.ltdb";
  121. if( !DateiExistiert( p ) )
  122. {
  123. fehler = "Das Ladebild wurde nicht gefunden.";
  124. return 0;
  125. }
  126. LTDBDatei dat;
  127. dat.setDatei( p.getThis() );
  128. dat.leseDaten( 0 );
  129. Bild *b = dat.laden( 0, dat.zBildListe()->get( 0 ) );
  130. if( !b )
  131. {
  132. fehler = "Das Ladebild wurde nicht gefunden.";
  133. return 0;
  134. }
  135. zKlient->sendeEncrypted( "\1", 1 );
  136. int br = b->getBreite();
  137. int hi = b->getHeight();
  138. zKlient->sendeEncrypted( (char*)&br, 4 );
  139. zKlient->sendeEncrypted( (char*)&hi, 4 );
  140. char *buffer = (char*)b->getBuffer();
  141. __int64 gr = br * hi * 4;
  142. for( int i = 0, l = gr > 2048 ? 2048 : (int)gr; gr > 0; i += l, gr -= l, l = gr > 2048 ? 2048 : (int)gr )
  143. zKlient->sende( &( buffer[ i ] ), l );
  144. b->release();
  145. return 1;
  146. }
  147. case 0x5: // Beschreibung speichern
  148. {
  149. zKlient->sendeEncrypted( "\1", 1 );
  150. Text p = pfad.getText();
  151. p += "/beschreibung.ksgs";
  152. Datei d;
  153. d.setDatei( p );
  154. if( !d.existiert() )
  155. d.erstellen();
  156. bool ok = d.open( Datei::Style::schreiben );
  157. char *buffer = new char[ 2048 ];
  158. int gr = 0;
  159. zKlient->getNachrichtEncrypted( (char*)&gr, 4 );
  160. while( gr > 0 )
  161. {
  162. int l = gr > 2048 ? 2048 : gr;
  163. zKlient->getNachricht( buffer, l );
  164. d.schreibe( buffer, l );
  165. gr -= l;
  166. }
  167. delete[] buffer;
  168. d.close();
  169. if( !ok )
  170. {
  171. fehler = "Es ist ein Fehler beim schreiben der Beschreibung aufgetreten.";
  172. return 0;
  173. }
  174. zKlient->sendeEncrypted( "\1", 1 );
  175. return 1;
  176. }
  177. case 0x6: // Titelbild speichern
  178. {
  179. zKlient->sendeEncrypted( "\1", 1 );
  180. Text p = pfad.getText();
  181. p += "/titel.ltdb";
  182. int br = 0;
  183. int hi = 0;
  184. zKlient->getNachrichtEncrypted( (char*)&br, 4 );
  185. zKlient->getNachrichtEncrypted( (char*)&hi, 4 );
  186. __int64 gr = br * hi * 4;
  187. Bild *b = new Bild();
  188. b->neuBild( br, hi, 0 );
  189. char *buffer = (char*)b->getBuffer();
  190. for( int i = 0, l = gr > 2048 ? 2048 : (int)gr; gr > 0; i += l, gr -= l, l = gr > 2048 ? 2048 : (int)gr )
  191. zKlient->getNachricht( &( buffer[ i ] ), l );
  192. LTDBDatei dat;
  193. dat.setDatei( p.getThis() );
  194. if( !DateiExistiert( p ) )
  195. dat.erstellen();
  196. dat.leseDaten( 0 );
  197. dat.remove( 0, dat.zBildListe()->get( 0 ) );
  198. if( dat.speichern( 0, b, new Text( "titel" ) ) < 0 )
  199. {
  200. fehler = "Fehler beim speichern des Titelbildes.";
  201. return 0;
  202. }
  203. zKlient->sendeEncrypted( "\1", 1 );
  204. return 1;
  205. }
  206. case 0x7: // Minimap speichern
  207. {
  208. zKlient->sendeEncrypted( "\1", 1 );
  209. Text p = pfad.getText();
  210. p += "/minimap.ltdb";
  211. int br = 0;
  212. int hi = 0;
  213. zKlient->getNachrichtEncrypted( (char*)&br, 4 );
  214. zKlient->getNachrichtEncrypted( (char*)&hi, 4 );
  215. __int64 gr = br * hi * 4;
  216. Bild *b = new Bild();
  217. b->neuBild( br, hi, 0 );
  218. char *buffer = (char*)b->getBuffer();
  219. for( int i = 0, l = gr > 2048 ? 2048 : (int)gr; gr > 0; i += l, gr -= l, l = gr > 2048 ? 2048 : (int)gr )
  220. zKlient->getNachricht( &( buffer[ i ] ), l );
  221. LTDBDatei dat;
  222. dat.setDatei( p.getThis() );
  223. if( !DateiExistiert( p ) )
  224. dat.erstellen();
  225. dat.leseDaten( 0 );
  226. dat.remove( 0, dat.zBildListe()->get( 0 ) );
  227. if( dat.speichern( 0, b, new Text( "vorschau" ) ) < 0 )
  228. {
  229. fehler = "Fehler beim speichern des Minimap Bildes.";
  230. return 0;
  231. }
  232. zKlient->sendeEncrypted( "\1", 1 );
  233. return 1;
  234. }
  235. case 0x8: // Ladebild speichern
  236. {
  237. zKlient->sendeEncrypted( "\1", 1 );
  238. Text p = pfad.getText();
  239. p += "/ladebild.ltdb";
  240. int br = 0;
  241. int hi = 0;
  242. zKlient->getNachrichtEncrypted( (char*)&br, 4 );
  243. zKlient->getNachrichtEncrypted( (char*)&hi, 4 );
  244. __int64 gr = br * hi * 4;
  245. Bild *b = new Bild();
  246. b->neuBild( br, hi, 0 );
  247. char *buffer = (char*)b->getBuffer();
  248. for( int i = 0, l = gr > 2048 ? 2048 : (int)gr; gr > 0; i += l, gr -= l, l = gr > 2048 ? 2048 : (int)gr )
  249. zKlient->getNachricht( &( buffer[ i ] ), l );
  250. LTDBDatei dat;
  251. dat.setDatei( p.getThis() );
  252. if( !DateiExistiert( p ) )
  253. dat.erstellen();
  254. dat.leseDaten( 0 );
  255. dat.remove( 0, dat.zBildListe()->get( 0 ) );
  256. if( dat.speichern( 0, b, new Text( "spielladen" ) ) < 0 )
  257. {
  258. fehler = "Fehler beim speichern des Ladebildes.";
  259. return 0;
  260. }
  261. zKlient->sendeEncrypted( "\1", 1 );
  262. return 1;
  263. }
  264. default:
  265. fehler = "Unbekannte Nachricht. Eventuell ist der Client nicht auf dem neusten Stand.";
  266. }
  267. return 0;
  268. }
  269. // constant
  270. char *BeschreibungEditor::getLetzterFehler() const
  271. {
  272. return fehler;
  273. }
  274. // Reference Counting
  275. BeschreibungEditor *BeschreibungEditor::getThis()
  276. {
  277. ref++;
  278. return this;
  279. }
  280. BeschreibungEditor *BeschreibungEditor::release()
  281. {
  282. ref--;
  283. if( !ref )
  284. delete this;
  285. return 0;
  286. }