start.cpp 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898
  1. #include <Klient.h>
  2. #include <main.h>
  3. #include <Fenster.h>
  4. #include <Text.h>
  5. #include <Datei.h>
  6. #include <Punkt.h>
  7. #include <Bildschirm.h>
  8. #include <Prozess.h>
  9. #include <Knopf.h>
  10. #include <Bild.h>
  11. #include <DateiSystem.h>
  12. #include <MausEreignis.h>
  13. #include <TastaturEreignis.h>
  14. #include <Fortschritt.h>
  15. #include <Schrift.h>
  16. #include <Liste.h>
  17. #include <Rahmen.h>
  18. #include <AlphaFeld.h>
  19. #include <TextFeld.h>
  20. #include <Maus.h>
  21. #include <Zeit.h>
  22. #include <InitDatei.h>
  23. #include <Tabelle.h>
  24. #include <Scroll.h>
  25. #include <AuswahlBox.h>
  26. #include <KSGTDatei.h>
  27. #include <Globals.h>
  28. #include "Patcher.h"
  29. #include "News.h"
  30. using namespace Framework;
  31. using namespace Network;
  32. bool _exitB = 0;
  33. WFenster* _frame;
  34. FBalken* _fortschritt;
  35. TextFeld* _aktion;
  36. TextFeld* _kbps;
  37. Knopf* _play;
  38. Patcher* _patcher;
  39. Fenster* _optionenF;
  40. ObjTabelle* _o_rt;
  41. Knopf* _o_rno;
  42. Knopf* _o_rnu;
  43. TextFeld* _o_ülps;
  44. AuswahlBox* _o_üle;
  45. InitDatei* userOptions;
  46. bool _newWechsel = 1;
  47. bool _abbruch = 0;
  48. bool _o_rkkME(void* p, void* obj, MausEreignis me);
  49. void _frameSchließen(void* p, void* obj)
  50. {
  51. }
  52. bool _frameME(void* p, void* obj, MausEreignis me)
  53. {
  54. return 1;
  55. }
  56. bool _frameTE(void* p, void* obj, TastaturEreignis me)
  57. {
  58. return 1;
  59. }
  60. bool closeME(void* p, void* obj, MausEreignis me)
  61. {
  62. if (me.id == ME_RLinks)
  63. {
  64. _abbruch = 1;
  65. PostQuitMessage(0);
  66. }
  67. return 1;
  68. }
  69. bool minimierenME(void* p, void* obj, MausEreignis me)
  70. {
  71. if (me.id == ME_RLinks)
  72. {
  73. _frame->setAnzeigeModus(2);
  74. }
  75. return 1;
  76. }
  77. bool _playME(void* p, void* obj, MausEreignis me)
  78. {
  79. if (me.id == ME_Betritt)
  80. getMaus().ladeMaus(MausId::hand);
  81. if (me.id == ME_Leaves)
  82. getMaus().ladeMaus(MausId::normal);
  83. getMaus().update();
  84. if (me.id == ME_RLinks)
  85. PostQuitMessage(0);
  86. return 1;
  87. }
  88. bool optionenME(void* p, void* obj, MausEreignis me)
  89. {
  90. if (me.id == ME_RLinks)
  91. {
  92. _o_rno->removeStyle(Knopf::Style::Erlaubt);
  93. _o_rnu->removeStyle(Knopf::Style::Erlaubt);
  94. while (_o_rt->getZeilenAnzahl() > 1)
  95. _o_rt->removeZeile(1);
  96. KSGTDatei* dat = new KSGTDatei("data/dg.ksgt"); // Tabellen Spalten: Id, Pfad, Version, Priorität
  97. dat->laden();
  98. int max = -1;
  99. for (int i = 0; i < dat->getZeilenAnzahl(); i++)
  100. {
  101. if (!dat->zFeld(i, 3) || dat->zFeld(i, 3)->istGleich("NICHT") || dat->zFeld(i, 3)->istGleich(""))
  102. continue;
  103. if (max < (int)TextZuInt(dat->zFeld(i, 3)->getText(), 10))
  104. max = (int)TextZuInt(dat->zFeld(i, 3)->getText(), 10);
  105. }
  106. for (int i = 0; i <= max; i++)
  107. {
  108. for (int j = 0; j < dat->getZeilenAnzahl(); j++)
  109. {
  110. if (!dat->zFeld(j, 1) || dat->zFeld(j, 1)->istGleich(""))
  111. continue;
  112. Text* iT = new Text("");
  113. iT->append(i);
  114. if (dat->zFeld(j, 3) && dat->zFeld(j, 3)->istGleich(iT))
  115. {
  116. Text* name = dat->zFeld(j, 1)->getTeilText(dat->zFeld(j, 1)->positionVon("spiele/") + 7);
  117. if (!name || !name->getLength() || !dat->zFeld(j, 1)->hat("spiele/"))
  118. {
  119. if (name)
  120. name->release();
  121. name = dat->zFeld(j, 1)->getTeilText(dat->zFeld(j, 1)->positionVon("Spiele/") + 7);
  122. }
  123. if (!name || !name->getLength() || (!dat->zFeld(j, 1)->hat("Spiele/") && !dat->zFeld(j, 1)->hat("spiele/")))
  124. {
  125. if (name)
  126. name->release();
  127. name = new Text(dat->zFeld(j, 1)->getText());
  128. if (name->hat('/'))
  129. name->remove(0, name->positionVon('/', name->anzahlVon('/') - 1) + 1);
  130. }
  131. int anz = _o_rt->getZeilenAnzahl();
  132. _o_rt->addZeile(dat->zFeld(j, 0)->getText());
  133. Text* spielN = 0;
  134. if (name->positionVon('/') >= 0)
  135. spielN = name->getTeilText(0, name->positionVon('/'));
  136. else
  137. spielN = new Text(name->getText());
  138. name->release();
  139. TextFeld* spiel = new TextFeld();
  140. spiel->setStyle(TextFeld::Style::Sichtbar | TextFeld::Style::Center);
  141. spiel->setSchriftZ(_optionenF->getTSchrift());
  142. spiel->setSchriftFarbe(0xFFFFFFFF);
  143. spiel->setHintergrundFarbe(0xFF003000);
  144. spiel->setText(spielN);
  145. _o_rt->setZeichnungZ(0, anz, spiel);
  146. KontrollKnopf* erlaubt = new KontrollKnopf();
  147. erlaubt->addStyle(KontrollKnopf::Style::Sichtbar | KontrollKnopf::Style::Erlaubt | KontrollKnopf::Style::KlickBuffer | KontrollKnopf::Style::Selected);
  148. erlaubt->setHintergrundFarbe(0xFF003000);
  149. erlaubt->setSBgFarbe(0xFF003000);
  150. erlaubt->loadData("data/bilder/system.ltdb");
  151. erlaubt->setMausEreignis(_o_rkkME);
  152. _o_rt->setZeichnungZ(1, anz, erlaubt);
  153. }
  154. }
  155. }
  156. for (int i = 0; i < dat->getZeilenAnzahl(); i++)
  157. {
  158. if (dat->zFeld(i, 3) && dat->zFeld(i, 3)->istGleich("NICHT"))
  159. {
  160. Text* name = dat->zFeld(i, 1)->getTeilText(dat->zFeld(i, 1)->positionVon("spiele/") + 7);
  161. if (!name || !name->getLength())
  162. {
  163. if (name)
  164. name->release();
  165. name = dat->zFeld(i, 1)->getTeilText(dat->zFeld(i, 1)->positionVon("Spiele/") + 7);
  166. }
  167. if (!name || !name->getLength())
  168. {
  169. if (name)
  170. name->release();
  171. name = new Text(dat->zFeld(i, 1)->getText());
  172. if (name->hat('/'))
  173. name->remove(0, name->positionVon('/', name->anzahlVon('/') - 1));
  174. }
  175. int anz = _o_rt->getZeilenAnzahl();
  176. _o_rt->addZeile(dat->zFeld(i, 0)->getText());
  177. Text* spielN = 0;
  178. if (name->positionVon('/') >= 0)
  179. spielN = name->getTeilText(0, name->positionVon('/'));
  180. else
  181. spielN = new Text(name->getText());
  182. name->release();
  183. TextFeld* spiel = new TextFeld();
  184. spiel->setStyle(TextFeld::Style::Sichtbar | TextFeld::Style::Center);
  185. spiel->setSchriftZ(_optionenF->getTSchrift());
  186. spiel->setSchriftFarbe(0xFFFFFFFF);
  187. spiel->setHintergrundFarbe(0xFF003000);
  188. spiel->setText(spielN);
  189. _o_rt->setZeichnungZ(0, anz, spiel);
  190. KontrollKnopf* erlaubt = new KontrollKnopf();
  191. erlaubt->addStyle(KontrollKnopf::Style::Sichtbar | KontrollKnopf::Style::Erlaubt | KontrollKnopf::Style::KlickBuffer);
  192. erlaubt->setHintergrundFarbe(0xFF003000);
  193. erlaubt->loadData("data/bilder/system.ltdb");
  194. erlaubt->setMausEreignis(_o_rkkME);
  195. _o_rt->setZeichnungZ(1, anz, erlaubt);
  196. }
  197. }
  198. dat->release();
  199. InitDatei* ini = new InitDatei("data/patch/po.ini");
  200. ini->laden();
  201. if (ini->wertExistiert("ülps"))
  202. _o_ülps->setText(ini->zWert("ülps")->getText());
  203. if (ini->wertExistiert("üle"))
  204. _o_üle->setAuswahl(_o_üle->getEintragPos(ini->zWert("üle")->getText()));
  205. ini->release();
  206. _optionenF->setPosition(100, 100);
  207. _optionenF->addStyle(Fenster::Style::Sichtbar);
  208. }
  209. return 1;
  210. }
  211. bool oAbbrechen(void* p, void* obj, MausEreignis me)
  212. {
  213. if (me.id == ME_RLinks)
  214. _optionenF->removeStyle(Fenster::Style::Sichtbar);
  215. return 1;
  216. }
  217. bool _o_rtME(void* p, void* obj, MausEreignis me)
  218. {
  219. if (me.id == ME_RLinks)
  220. {
  221. for (int i = 1; i < _o_rt->getZeilenAnzahl(); i++)
  222. {
  223. if (_o_rt->zZeichnung(0, i))
  224. ((TextFeld*)_o_rt->zZeichnung(0, i))->removeStyle(TextFeld::Style::Hintergrund);
  225. if (_o_rt->zZeichnung(1, i))
  226. ((KontrollKnopf*)_o_rt->zZeichnung(1, i))->removeStyle(KontrollKnopf::Style::Hintergrund | KontrollKnopf::Style::SelectFarbe);
  227. }
  228. int zeile = (int)_o_rt->getMausZeile(me.my - _o_rt->getVertikalScrollPos());
  229. if (zeile <= 0)
  230. {
  231. _o_rno->removeStyle(Knopf::Style::Erlaubt);
  232. _o_rnu->removeStyle(Knopf::Style::Erlaubt);
  233. }
  234. else
  235. {
  236. if (_o_rt->zZeichnung(0, zeile))
  237. ((TextFeld*)_o_rt->zZeichnung(0, zeile))->addStyle(TextFeld::Style::Hintergrund);
  238. if (_o_rt->zZeichnung(1, zeile))
  239. ((KontrollKnopf*)_o_rt->zZeichnung(1, zeile))->addStyle(KontrollKnopf::Style::Hintergrund | KontrollKnopf::Style::SelectFarbe);
  240. if (zeile > 1)
  241. _o_rno->addStyle(Knopf::Style::Erlaubt);
  242. else
  243. _o_rno->removeStyle(Knopf::Style::Erlaubt);
  244. int max = 0;
  245. for (int i = 1; i < _o_rt->getZeilenAnzahl(); i++)
  246. {
  247. if (!_o_rt->zZeichnung(1, i) || ((KontrollKnopf*)_o_rt->zZeichnung(1, i))->hatStyleNicht(KontrollKnopf::Style::Selected))
  248. break;
  249. max = i;
  250. }
  251. if (zeile < max)
  252. _o_rnu->addStyle(Knopf::Style::Erlaubt);
  253. else
  254. _o_rnu->removeStyle(Knopf::Style::Erlaubt);
  255. if ((_o_rt->zZeichnung(1, zeile) && ((KontrollKnopf*)_o_rt->zZeichnung(1, zeile))->hatStyleNicht(KontrollKnopf::Style::Selected)))
  256. {
  257. _o_rno->removeStyle(Knopf::Style::Erlaubt);
  258. _o_rnu->removeStyle(Knopf::Style::Erlaubt);
  259. }
  260. }
  261. }
  262. return 1;
  263. }
  264. bool _o_rnoME(void* p, void* obj, MausEreignis me)
  265. {
  266. if (me.id == ME_RLinks)
  267. {
  268. int zeile = -1;
  269. for (int i = 1; i < _o_rt->getZeilenAnzahl(); i++)
  270. {
  271. if (_o_rt->zZeichnung(0, i) && ((TextFeld*)_o_rt->zZeichnung(0, i))->hatStyle(TextFeld::Style::Hintergrund))
  272. {
  273. zeile = i;
  274. break;
  275. }
  276. }
  277. if (zeile > 1)
  278. {
  279. _o_rt->setZeilePosition(zeile, zeile - 1);
  280. _o_rnu->addStyle(Knopf::Style::Erlaubt);
  281. }
  282. if (zeile - 1 <= 1)
  283. _o_rno->removeStyle(Knopf::Style::Erlaubt);
  284. }
  285. return 1;
  286. }
  287. bool _o_rnuME(void* p, void* obj, MausEreignis me)
  288. {
  289. if (me.id == ME_RLinks)
  290. {
  291. int zeile = -1;
  292. for (int i = 1; i < _o_rt->getZeilenAnzahl(); i++)
  293. {
  294. if (_o_rt->zZeichnung(0, i) && ((TextFeld*)_o_rt->zZeichnung(0, i))->hatStyle(TextFeld::Style::Hintergrund))
  295. {
  296. zeile = i;
  297. break;
  298. }
  299. }
  300. int max = 0;
  301. for (int i = 1; i < _o_rt->getZeilenAnzahl(); i++)
  302. {
  303. if (!_o_rt->zZeichnung(1, i) || ((KontrollKnopf*)_o_rt->zZeichnung(1, i))->hatStyleNicht(KontrollKnopf::Style::Selected))
  304. break;
  305. max = i;
  306. }
  307. if (zeile > 0 && zeile < max)
  308. {
  309. _o_rt->setZeilePosition(zeile, zeile + 1);
  310. _o_rno->addStyle(Knopf::Style::Erlaubt);
  311. }
  312. if (zeile + 1 >= _o_rt->getZeilenAnzahl() - 1)
  313. _o_rnu->removeStyle(Knopf::Style::Erlaubt);
  314. }
  315. return 1;
  316. }
  317. bool _o_rkkME(void* p, void* obj, MausEreignis me)
  318. {
  319. if (me.id == ME_RLinks)
  320. {
  321. if (((KontrollKnopf*)obj)->hatStyleNicht(KontrollKnopf::Style::Hintergrund | KontrollKnopf::Style::SelectFarbe))
  322. {
  323. ((KontrollKnopf*)obj)->setStyle(KontrollKnopf::Style::Selected, ((KontrollKnopf*)obj)->hatStyleNicht(KontrollKnopf::Style::Selected));
  324. return 1;
  325. }
  326. if (((KontrollKnopf*)obj)->hatStyle(KontrollKnopf::Style::Selected))
  327. {
  328. _o_rno->removeStyle(Knopf::Style::Erlaubt);
  329. _o_rnu->removeStyle(Knopf::Style::Erlaubt);
  330. int zeile = -1;
  331. for (int i = 1; i < _o_rt->getZeilenAnzahl(); i++)
  332. {
  333. if (_o_rt->zZeichnung(1, i) == obj)
  334. {
  335. zeile = i;
  336. break;
  337. }
  338. }
  339. int max = 0;
  340. for (int i = 1; i < _o_rt->getZeilenAnzahl(); i++)
  341. {
  342. if (!_o_rt->zZeichnung(1, i) || ((KontrollKnopf*)_o_rt->zZeichnung(1, i))->hatStyleNicht(KontrollKnopf::Style::Selected))
  343. break;
  344. max = i;
  345. }
  346. _o_rt->setZeilePosition(zeile, max);
  347. }
  348. else
  349. {
  350. int zeile = -1;
  351. for (int i = 1; i < _o_rt->getZeilenAnzahl(); i++)
  352. {
  353. if (_o_rt->zZeichnung(1, i) == obj)
  354. {
  355. zeile = i;
  356. break;
  357. }
  358. }
  359. int max = 0;
  360. for (int i = 1; i < _o_rt->getZeilenAnzahl(); i++)
  361. {
  362. if (!_o_rt->zZeichnung(1, i) || ((KontrollKnopf*)_o_rt->zZeichnung(1, i))->hatStyleNicht(KontrollKnopf::Style::Selected))
  363. break;
  364. max = i;
  365. }
  366. _o_rt->setZeilePosition(zeile, max + 1);
  367. if (max > 1)
  368. _o_rno->addStyle(Knopf::Style::Erlaubt);
  369. }
  370. }
  371. return 1;
  372. }
  373. bool _o_ülpsTE(void* p, void* obj, TastaturEreignis te)
  374. {
  375. if (te.taste == T_Links || te.taste == T_Rechts || te.taste == T_Entf || te.taste == T_BackSpace || (te.taste >= '0' && te.taste <= '9'))
  376. return 1;
  377. return 0;
  378. }
  379. bool o_okME(void* p, void* obj, MausEreignis me)
  380. {
  381. if (me.id == ME_RLinks)
  382. {
  383. KSGTDatei* dat = new KSGTDatei("data/dg.ksgt");
  384. dat->laden();
  385. for (int i = 0; i < dat->getZeilenAnzahl(); i++)
  386. {
  387. for (int j = 0; j < _o_rt->getZeilenAnzahl(); j++)
  388. {
  389. if (!_o_rt->zZeichnung(1, j))
  390. continue;
  391. if (!_o_rt->zZeilenName(j)->istGleich(dat->zFeld(i, 0)->getText()))
  392. continue;
  393. if (((KontrollKnopf*)_o_rt->zZeichnung(1, j))->hatStyle(KontrollKnopf::Style::Selected))
  394. {
  395. Text* t = new Text();
  396. t->append(j);
  397. dat->zFeld(i, 3)->setText(t);
  398. }
  399. else
  400. dat->zFeld(i, 3)->setText("NICHT");
  401. break;
  402. }
  403. }
  404. dat->speichern();
  405. dat->release();
  406. InitDatei* ini = new InitDatei("data/patch/po.ini");
  407. ini->addWert("ülps", _o_ülps->zText()->getText());
  408. ini->addWert("üle", _o_üle->zEintragText(_o_üle->getAuswahl())->getText());
  409. ini->speichern();
  410. ini->release();
  411. _optionenF->removeStyle(Fenster::Style::Sichtbar);
  412. }
  413. return 1;
  414. }
  415. DWORD WINAPI runThread(void* args)
  416. {
  417. Bildschirm* screen = (Bildschirm*)args;
  418. double i = 0;
  419. double tickVal = 1.0 / 60.0;
  420. ZeitMesser* tstop = new ZeitMesser();
  421. while (!_exitB)
  422. {
  423. tstop->messungStart();
  424. screen->render();
  425. screen->tick(tickVal);
  426. Sleep(10);
  427. if (_kbps)
  428. {
  429. i += tickVal * 60;
  430. if (i >= 60 && _kbps)
  431. {
  432. screen->lock();
  433. _kbps->setText("");
  434. _kbps->zText()->append(_patcher ? (_patcher->getDownload() / 1024) : 0);
  435. _kbps->zText()->append(" kb/s, ");
  436. _kbps->zText()->append((unsigned int)((_fortschritt->getAktionAnzahl() - _fortschritt->getAktion()) / 1024));
  437. _kbps->zText()->append(" kb verbleibend...");
  438. screen->unlock();
  439. i -= 60;
  440. }
  441. }
  442. tstop->messungEnde();
  443. tickVal = tstop->getSekunden() + tstop->getSekunden() - tickVal;
  444. }
  445. tstop->release();
  446. return 0;
  447. }
  448. int KSGStart Framework::Start(Startparam p)
  449. {
  450. _abbruch = 0;
  451. Network::Start(10);
  452. if (!DateiExistiert("data/user_options.ini"))
  453. {
  454. userOptions = new InitDatei("data/default_options.ini");
  455. userOptions->laden();
  456. userOptions->setPfad("data/user_options.ini");
  457. userOptions->speichern();
  458. }
  459. else
  460. {
  461. userOptions = new InitDatei("data/user_options.ini");
  462. userOptions->laden();
  463. }
  464. LTDBDatei* patcherBilder = new LTDBDatei();
  465. patcherBilder->setDatei(new Text("data/patch/bilder/patcher.ltdb"));
  466. patcherBilder->leseDaten(0);
  467. Bild* patcherRahmen = patcherBilder->laden(0, new Text("patcherrahmen."));
  468. Bild* patcherHintergrund = patcherBilder->laden(0, new Text("patcher.png"));
  469. Bild* playBild = patcherBilder->laden(0, new Text("play.png"));
  470. Bild* playKlick = patcherBilder->laden(0, new Text("playklick.png"));
  471. patcherBilder->release();
  472. LTDBDatei* systemBilder = new LTDBDatei();
  473. systemBilder->setDatei(new Text("data/bilder/system.ltdb"));
  474. systemBilder->leseDaten(0);
  475. Bild* systemSchließen = systemBilder->laden(0, new Text("schließen.png"));
  476. Bild* systemMinimieren = systemBilder->laden(0, new Text("minimieren.png"));
  477. Bild* systemOptionen = systemBilder->laden(0, new Text("optionen.png"));
  478. Bild* systemFortschrittL = systemBilder->laden(0, new Text("fortschrittleh"));
  479. Bild* systemFortschrittV = systemBilder->laden(0, new Text("fortschrittvol"));
  480. systemBilder->release();
  481. LTDSDatei* normalSchrift = new LTDSDatei();
  482. normalSchrift->setPfad(new Text("data/schriften/normal.ltds"));
  483. normalSchrift->leseDaten();
  484. Schrift* sNormal = normalSchrift->ladeSchrift();
  485. normalSchrift->release();
  486. Monitor m = getMonitor(userOptions->wertExistiert("Monitor") ? (int)*userOptions->zWert("Monitor") : 0);
  487. WNDCLASS wc = F_Normal(p.hinst);
  488. wc.lpszClassName = "Kolja-Strohm Games Patcher";
  489. _frame = new WFenster();
  490. _frame->setVerschiebbar(1);
  491. _frame->erstellen(WS_POPUP, wc);
  492. _frame->setSize(Punkt(500, 500));
  493. _frame->setPosition(Bildschirmmitte(dynamic_cast<WFenster*>(_frame->getThis()), m.existiert ? (userOptions->wertExistiert("Monitor") ? (int)*userOptions->zWert("Monitor") : 0) : 0));
  494. _frame->ladeRahmenFenster(patcherRahmen, p.hinst);
  495. _frame->setMausAktion(_frameME);
  496. _frame->setTastaturAktion(_frameTE);
  497. _frame->setVSchließAktion(_frameSchließen);
  498. Bildschirm* screen = 0;
  499. if (userOptions->wertExistiert("GraphicAPI") && userOptions->zWert("GraphicAPI")->istGleich("DX9"))
  500. screen = new Bildschirm3D(dynamic_cast<WFenster*>(_frame->getThis()), DIRECTX9);
  501. else if (userOptions->wertExistiert("GraphicAPI") && userOptions->zWert("GraphicAPI")->istGleich("DX11"))
  502. screen = new Bildschirm3D(dynamic_cast<WFenster*>(_frame->getThis()), DIRECTX11);
  503. else if (userOptions->wertExistiert("GraphicAPI") && userOptions->zWert("GraphicAPI")->istGleich("DX12"))
  504. screen = new Bildschirm3D(dynamic_cast<WFenster*>(_frame->getThis()), DIRECTX12);
  505. else
  506. screen = new Bildschirm3D(dynamic_cast<WFenster*>(_frame->getThis()));
  507. screen->update();
  508. screen->render();
  509. _frame->setBildschirm(dynamic_cast<Bildschirm*>(screen->getThis()));
  510. _frame->setAnzeigeModus(1);
  511. screen->lock();
  512. BildZ* hintergrund = new BildZ();
  513. hintergrund->setStyle(BildZ::Style::Sichtbar);
  514. hintergrund->setBildZ(dynamic_cast<Bild*>(patcherHintergrund->getThis()));
  515. hintergrund->setPosition(0, 0);
  516. hintergrund->setSize(patcherHintergrund->getBreite(), patcherHintergrund->getHeight());
  517. screen->addMember(hintergrund);
  518. Knopf* close = new Knopf();
  519. close->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer);
  520. close->setHintergrundBildZ(dynamic_cast<Bild*>(systemSchließen->getThis()));
  521. close->setKBFarbe(0xFF000000);
  522. close->setHintergrundFarbe(0);
  523. close->setKBStrength(30);
  524. close->setPosition(475, 5);
  525. close->setSize(20, 20);
  526. close->setMausEreignis(closeME);
  527. screen->addMember(close);
  528. Knopf* minimieren = new Knopf();
  529. minimieren->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer);
  530. minimieren->setHintergrundBildZ(dynamic_cast<Bild*>(systemMinimieren->getThis()));
  531. minimieren->setHintergrundFarbe(0);
  532. minimieren->setKBFarbe(0xFF000000);
  533. minimieren->setKBStrength(30);
  534. minimieren->setPosition(454, 5);
  535. minimieren->setSize(20, 20);
  536. minimieren->setMausEreignis(minimierenME);
  537. screen->addMember(minimieren);
  538. Knopf* optionen = new Knopf();
  539. optionen->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer);
  540. optionen->setHintergrundBildZ(dynamic_cast<Bild*>(systemOptionen->getThis()));
  541. optionen->setHintergrundFarbe(0);
  542. optionen->setKBFarbe(0xFF000000);
  543. optionen->setKBStrength(30);
  544. optionen->setPosition(433, 5);
  545. optionen->setSize(20, 20);
  546. optionen->setMausEreignis(optionenME);
  547. screen->addMember(optionen);
  548. // Main Server Adresse Laden
  549. Datei* dat = new Datei();
  550. dat->setDatei("data/tmp/k.id");
  551. int klientNummer = 0;
  552. dat->open(Datei::Style::lesen);
  553. dat->lese((char*)&klientNummer, 4);
  554. dat->close();
  555. dat->setDatei("data/tmp/m.port");
  556. int serverPort = 0;
  557. dat->open(Datei::Style::lesen);
  558. dat->lese((char*)&serverPort, 4);
  559. dat->close();
  560. dat->setDatei("data/tmp/m.ip");
  561. dat->open(Datei::Style::lesen);
  562. unsigned char len = 0;
  563. dat->lese((char*)&len, 1);
  564. char* ip = new char[len + 1];
  565. ip[len] = 0;
  566. dat->lese(ip, len);
  567. dat->close();
  568. dat->setDatei("data/tmp/crypt.key");
  569. dat->open(Datei::Style::lesen);
  570. len = 0;
  571. dat->lese((char*)&len, 1);
  572. char* key = new char[len + 1];
  573. key[len] = 0;
  574. dat->lese(key, len);
  575. dat->close();
  576. dat->release();
  577. // Laden des Main Clients
  578. HINSTANCE networkDLL = LoadLibrary("data/bin/KSGNetwork.dll");
  579. if (!networkDLL)
  580. {
  581. WMessageBox(0, new Text("Fehler"), new Text("Die DLL Datei 'data/bin/KSGNetwork.dll' konnte nicht geladen werden. Fallst diese Datei nicht existiert muss das Spiel neu Installiert werden."), MB_ICONERROR);
  582. exit(0);
  583. }
  584. KSGClient::KSGNetworkCreateRegisterdMain getMainClient = (KSGClient::KSGNetworkCreateRegisterdMain)GetProcAddress(networkDLL, KSGNETWORK_CREATE_REGISTERD_MAIN);
  585. if (!getMainClient)
  586. {
  587. WMessageBox(0, new Text("Fehler"), new Text("Der Einstiegspunkt '" KSGNETWORK_CREATE_REGISTERD_MAIN "' wurde in der DLL Datei 'data/bin/KSGNetwork.dll' nicht gefunden. Fallst dieses Problem weiterhin auftritt muss das Spiel neu Installiert werden."), MB_ICONERROR);
  588. exit(0);
  589. }
  590. KSGClient::MainServerClient* mainClient = getMainClient(ip, serverPort, klientNummer, key, len);
  591. if (!mainClient)
  592. {
  593. WMessageBox(0, new Text("Fehler"), new Text("Die DLL Datei 'data/bin/KSGNetwork.dll' scheint fehlerhaft zu sein. Fallst dieses Problem weiterhin auftritt muss das Spiel neu Installiert werden."), MB_ICONERROR);
  594. exit(0);
  595. }
  596. delete[] ip;
  597. delete[] key;
  598. UIInit init = Framework::defaultUI(sNormal, screen);
  599. News* news = new News(init, mainClient->createNewsServerClient());
  600. _aktion = new TextFeld();
  601. _aktion->setStyle(TextFeld::Style::Sichtbar);
  602. _aktion->setSchriftZ(dynamic_cast<Schrift*>(sNormal->getThis()));
  603. _aktion->setSchriftFarbe(0xFFFFFFFF);
  604. _aktion->setText("Ermittle änderungen...");
  605. _aktion->setPosition(49, 403);
  606. _aktion->setSize(502, 20);
  607. screen->addMember(dynamic_cast<Zeichnung*>(_aktion->getThis()));
  608. _kbps = new TextFeld();
  609. _kbps->setStyle(TextFeld::Style::Sichtbar);
  610. _kbps->setSchriftZ(dynamic_cast<Schrift*>(sNormal->getThis()));
  611. _kbps->setSchriftFarbe(0xFFFFFFFF);
  612. _kbps->setText("0 kb/s");
  613. _kbps->setPosition(49, 460);
  614. _kbps->setSize(402, 20);
  615. screen->addMember(dynamic_cast<Zeichnung*>(_kbps->getThis()));
  616. _fortschritt = new FBalken();
  617. _fortschritt->setStyle(FBalken::Style::Sichtbar | FBalken::Style::Hintergrund | FBalken::Style::HBild | FBalken::Style::FBild | FBalken::Style::Rahmen | FBalken::Style::Prozent | FBalken::Style::L_R);
  618. _fortschritt->setRahmenFarbe(0xFFFFFFFF);
  619. _fortschritt->setHintergrundBild(dynamic_cast<Bild*>(systemFortschrittL->getThis()));
  620. _fortschritt->setFBgBild(dynamic_cast<Bild*>(systemFortschrittV->getThis()));
  621. _fortschritt->setSchriftZ(dynamic_cast<Schrift*>(sNormal->getThis()));
  622. _fortschritt->setSFarbe(0xFFFFFFFF);
  623. _fortschritt->setSSize(12);
  624. _fortschritt->setPosition(49, 428);
  625. _fortschritt->setSize(402, 22);
  626. screen->addMember(dynamic_cast<Zeichnung*>(_fortschritt->getThis()));
  627. _play = new Knopf();
  628. _play->setStyle(Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBild);
  629. _play->setMausEreignis(_playME);
  630. _play->setHintergrundBildZ(dynamic_cast<Bild*>(playBild->getThis()));
  631. _play->setKlickBildZ(dynamic_cast<Bild*>(playKlick->getThis()));
  632. _play->setPosition(200, 466);
  633. _play->setSize(101, 30);
  634. screen->addMember(dynamic_cast<Zeichnung*>(_play->getThis()));
  635. _optionenF = new Fenster();
  636. _optionenF->setStyle(Fenster::Style::Erlaubt | Fenster::Style::Closable | Fenster::Style::Titel | Fenster::Style::TitelBuffered |
  637. Fenster::Style::TitelHintergrund | Fenster::Style::BodyHintergrund | Fenster::Style::TitelHAlpha |
  638. Fenster::Style::BodyHAlpha | Fenster::Style::Rahmen | Fenster::Style::ClosingKlickBuffer |
  639. Fenster::Style::ClosingHintergrund | Fenster::Style::ClosingHAlpha | Fenster::Style::Beweglich | Fenster::Style::VScroll);
  640. _optionenF->setSize(300, 330);
  641. _optionenF->setPosition(100, 100);
  642. _optionenF->setVSBMax(300);
  643. _optionenF->zVScrollBar()->setKlickScroll(10);
  644. _optionenF->zVScrollBar()->setFarbe(0xFFFFFFFF);
  645. _optionenF->zVScrollBar()->setBgFarbe(0xF0000000, 1);
  646. _optionenF->setRBreite(2);
  647. _optionenF->setRFarbe(0xFFFFFFFF);
  648. _optionenF->setTSchriftZ(dynamic_cast<Schrift*>(sNormal->getThis()));
  649. _optionenF->zTTextFeld()->addStyle(TextFeld::Style::Sichtbar | TextFeld::Style::Center);
  650. _optionenF->setTitel("Optionen");
  651. _optionenF->zTTextFeld()->setSize(0, 20);
  652. _optionenF->setTBgFarbe(0xF0000000);
  653. _optionenF->setTAfFarbe(0xA0FFFFFF);
  654. _optionenF->setTAfStrength(15);
  655. _optionenF->setTSFarbe(0xFFFFFFFF);
  656. _optionenF->setSBgFarbe(0xF0000000);
  657. _optionenF->setSKAfFarbe(0xFFFFFFFF);
  658. _optionenF->setSKAfStrength(30);
  659. _optionenF->setKBgFarbe(0xF0000000);
  660. _optionenF->setClosingMe(oAbbrechen);
  661. screen->addMember(dynamic_cast<Zeichnung*>(_optionenF->getThis()));
  662. TextFeld* oReihenfolge = new TextFeld();
  663. oReihenfolge->setStyle(TextFeld::Style::Sichtbar | TextFeld::Style::VCenter);
  664. oReihenfolge->setSchriftZ(dynamic_cast<Schrift*>(sNormal->getThis()));
  665. oReihenfolge->setSchriftFarbe(0xFFFFFFFF);
  666. oReihenfolge->setText("Update Reihenfolge:");
  667. oReihenfolge->setPosition(2, 2);
  668. oReihenfolge->setSize(276, 20);
  669. _optionenF->addMember(oReihenfolge);
  670. _o_rt = new ObjTabelle();
  671. _o_rt->setStyle(ObjTabelle::Style::Sichtbar | ObjTabelle::Style::Erlaubt | ObjTabelle::Style::Rahmen |
  672. ObjTabelle::Style::Raster | ObjTabelle::Style::VScroll);
  673. _o_rt->setPosition(2, 24);
  674. _o_rt->setSize(276, 150);
  675. _o_rt->setRahmenBreite(1);
  676. _o_rt->setRahmenFarbe(0xFFFFFFFF);
  677. _o_rt->setRasterBreite(1);
  678. _o_rt->setRasterFarbe(0xFFFFFFFF);
  679. _o_rt->setVertikalKlickScroll(10);
  680. _o_rt->setMausEreignis(_o_rtME);
  681. _o_rt->addSpalte("Spiel");
  682. _o_rt->addSpalte("Erlaubt");
  683. _o_rt->setSpaltenBreite(0, 237);
  684. _o_rt->setSpaltenBreite(1, 20);
  685. _o_rt->addZeile("Überschrift");
  686. _o_rt->setZeilenHeight(0, 15);
  687. TextFeld* ortSpielT = new TextFeld();
  688. ortSpielT->setStyle(TextFeld::Style::Sichtbar | TextFeld::Style::Center);
  689. ortSpielT->setSchriftZ(dynamic_cast<Schrift*>(sNormal->getThis()));
  690. ortSpielT->setSchriftFarbe(0xFFFFFFFF);
  691. ortSpielT->setText("Spiel");
  692. _o_rt->setZeichnungZ(0, 0, ortSpielT);
  693. _optionenF->addMember(dynamic_cast<Zeichnung*>(_o_rt->getThis()));
  694. _o_rno = new Knopf();
  695. _o_rno->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Buffered | Knopf::Style::KlickBuffer | Knopf::Style::Rahmen);
  696. _o_rno->setPosition(76, 176);
  697. _o_rno->setSize(100, 20);
  698. _o_rno->setText("nach Oben");
  699. _o_rno->setSchriftZ(dynamic_cast<Schrift*>(sNormal->getThis()));
  700. _o_rno->setMausEreignis(_o_rnoME);
  701. _optionenF->addMember(dynamic_cast<Zeichnung*>(_o_rno->getThis()));
  702. _o_rnu = new Knopf();
  703. _o_rnu->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Buffered | Knopf::Style::KlickBuffer | Knopf::Style::Rahmen);
  704. _o_rnu->setPosition(178, 176);
  705. _o_rnu->setSize(100, 20);
  706. _o_rnu->setText("nach Unten");
  707. _o_rnu->setSchriftZ(dynamic_cast<Schrift*>(sNormal->getThis()));
  708. _o_rnu->setMausEreignis(_o_rnuME);
  709. _optionenF->addMember(dynamic_cast<Zeichnung*>(_o_rnu->getThis()));
  710. TextFeld* oLimit = new TextFeld();
  711. oLimit->setStyle(TextFeld::Style::Sichtbar | TextFeld::Style::VCenter);
  712. oLimit->setSchriftZ(dynamic_cast<Schrift*>(sNormal->getThis()));
  713. oLimit->setSchriftFarbe(0xFFFFFFFF);
  714. oLimit->setText("Übertragungslimit pro Sekunde:");
  715. oLimit->setPosition(2, 200);
  716. oLimit->setSize(276, 20);
  717. _optionenF->addMember(oLimit);
  718. _o_ülps = new TextFeld();
  719. _o_ülps->setStyle(TextFeld::Style::Sichtbar | TextFeld::Style::Erlaubt | TextFeld::Style::Rahmen | TextFeld::Style::Buffered | TextFeld::Style::VCenter);
  720. _o_ülps->setPosition(2, 222);
  721. _o_ülps->setSize(100, 20);
  722. _o_ülps->setRahmenFarbe(0xFF00FF00);
  723. _o_ülps->setSchriftZ(dynamic_cast<Schrift*>(sNormal->getThis()));
  724. _o_ülps->setText("");
  725. _o_ülps->setSchriftFarbe(0xFFFFFFFF);
  726. _o_ülps->setSchriftSize(12);
  727. _o_ülps->setAlphaFeldFarbe(0x5500FF00);
  728. _o_ülps->setAlphaFeldStrength(-5);
  729. _o_ülps->setTastaturEreignis(_o_ülpsTE);
  730. _optionenF->addMember(dynamic_cast<Zeichnung*>(_o_ülps->getThis()));
  731. _o_üle = new AuswahlBox();
  732. _o_üle->setStyle(AuswahlBox::Style::Sichtbar | AuswahlBox::Style::Erlaubt | AuswahlBox::Style::Rahmen | AuswahlBox::Style::AuswahlBuffer |
  733. AuswahlBox::Style::MausBuffer | AuswahlBox::Style::Hintergrund);
  734. _o_üle->setPosition(104, 222);
  735. _o_üle->setSize(55, 20);
  736. _o_üle->setSchriftZ(dynamic_cast<Schrift*>(sNormal->getThis()));
  737. _o_üle->setRahmenFarbe(0xFFFFFFFF);
  738. _o_üle->setHintergrundFarbe(0xFF000000);
  739. _o_üle->setAuswAlphaFeldFarbe(0x5500FF00);
  740. _o_üle->setAuswAlphaFeldStrength(-5);
  741. _o_üle->setMausAlphaFeldFarbe(0x2200FF00);
  742. _o_üle->setMausAlphaFeldStrength(-5);
  743. _o_üle->setMausEreignis(_ret1ME);
  744. _o_üle->setTastaturEreignis(_ret1TE);
  745. _o_üle->addEintrag("kb/s");
  746. _o_üle->addEintrag("mb/s");
  747. _optionenF->addMember(dynamic_cast<Zeichnung*>(_o_üle->getThis()));
  748. bool exitPatcher = 0;
  749. Knopf* o_repair = new Knopf();
  750. o_repair->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Buffered | Knopf::Style::KlickBuffer | Knopf::Style::Rahmen);
  751. o_repair->setPosition(5, 254);
  752. o_repair->setSize(100, 20);
  753. o_repair->setText("Reparieren");
  754. o_repair->setSchriftZ(dynamic_cast<Schrift*>(sNormal->getThis()));
  755. o_repair->setMausEreignis([mainClient, &exitPatcher](void* p, void* o, MausEreignis me)
  756. {
  757. if (me.id == ME_RLinks)
  758. {
  759. _optionenF->removeStyle(Fenster::Style::Sichtbar);
  760. exitPatcher = 1;
  761. _patcher->warteAufPatch(INFINITE);
  762. KSGTDatei dgs;
  763. dgs.setPfad("data/dg.ksgt");
  764. dgs.laden();
  765. for (int i = 0; i < dgs.getZeilenAnzahl(); i++)
  766. {
  767. if (dgs.zFeld(i, 1)->getLength())
  768. DateiRemove(dgs.zFeld(i, 1)->getText());
  769. }
  770. DateiRemove("data/dg.ksgt");
  771. DateiRemove("data/update");
  772. DateiRemove("data/versionen.ini");
  773. _patcher->release();
  774. exitPatcher = 0;
  775. _patcher = new Patcher(dynamic_cast<FBalken*>(_fortschritt->getThis()), dynamic_cast<TextFeld*>(_aktion->getThis()), dynamic_cast<Knopf*>(_play->getThis()), &exitPatcher, mainClient->createPatchServerClient());
  776. _patcher->startPatch();
  777. }
  778. return 1;
  779. });
  780. _optionenF->addMember(o_repair);
  781. Knopf* o_ok = new Knopf();
  782. o_ok->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Buffered | Knopf::Style::KlickBuffer | Knopf::Style::Rahmen);
  783. o_ok->setPosition(178, 284);
  784. o_ok->setSize(100, 20);
  785. o_ok->setText("Fertig");
  786. o_ok->setSchriftZ(dynamic_cast<Schrift*>(sNormal->getThis()));
  787. o_ok->setMausEreignis(o_okME);
  788. _optionenF->addMember(o_ok);
  789. screen->unlock();
  790. DWORD threadId;
  791. HANDLE handle = CreateThread(NULL, 0, runThread, screen, 0, &threadId);
  792. _patcher = new Patcher(dynamic_cast<FBalken*>(_fortschritt->getThis()), dynamic_cast<TextFeld*>(_aktion->getThis()), dynamic_cast<Knopf*>(_play->getThis()), &exitPatcher, mainClient->createPatchServerClient());
  793. _patcher->startPatch();
  794. StartNachrichtenSchleife();
  795. _exitB = 1;
  796. WaitForSingleObject(handle, INFINITE);
  797. news->warteAufThread(10000);
  798. news->ende();
  799. news->release();
  800. exitPatcher = 1;
  801. _patcher->warteAufPatch(INFINITE);
  802. int returnVal = _patcher->getReturn();
  803. _patcher->release();
  804. _optionenF->release();
  805. _o_rt->release();
  806. _o_rno->release();
  807. _o_rnu->release();
  808. _o_ülps->release();
  809. _o_üle->release();
  810. _fortschritt->release();
  811. _aktion->release();
  812. _kbps->release();
  813. _play->release();
  814. sNormal->release();
  815. patcherRahmen->release();
  816. patcherHintergrund->release();
  817. playBild->release();
  818. playKlick->release();
  819. systemSchließen->release();
  820. systemMinimieren->release();
  821. systemOptionen->release();
  822. systemFortschrittL->release();
  823. systemFortschrittV->release();
  824. screen->release();
  825. _frame->setBildschirm(0);
  826. _frame->zerstören();
  827. _frame->release();
  828. mainClient->release();
  829. userOptions->release();
  830. Network::Exit();
  831. DateiPfadErstellen(new Text("data/tmp/keinabsturz"));
  832. if (_abbruch)
  833. return 0;
  834. return returnVal;
  835. }