BeschreibungEditor.cpp 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  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(const char* pf)
  8. : ReferenceCounter()
  9. {
  10. pfad = pf;
  11. pfad += "/live/map/client";
  12. fehler = "";
  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(dynamic_cast<Text*>(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(dynamic_cast<Text*>(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(dynamic_cast<Text*>(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(dynamic_cast<Text*>(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(dynamic_cast<Text*>(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(dynamic_cast<Text*>(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. const char* BeschreibungEditor::getLetzterFehler() const
  271. {
  272. return fehler;
  273. }