start.cpp 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894
  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 = 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 = 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" )->getThis() ) );
  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" ) ? *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( _frame->getThis(), m.existiert ? ( userOptions->wertExistiert( "Monitor" ) ? *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( _frame->getThis(), DIRECTX9 );
  501. else if( userOptions->wertExistiert( "GraphicAPI" ) && userOptions->zWert( "GraphicAPI" )->istGleich( "DX11" ) )
  502. screen = new Bildschirm3D( _frame->getThis(), DIRECTX11 );
  503. else if( userOptions->wertExistiert( "GraphicAPI" ) && userOptions->zWert( "GraphicAPI" )->istGleich( "DX12" ) )
  504. screen = new Bildschirm3D( _frame->getThis(), DIRECTX12 );
  505. else
  506. screen = new Bildschirm3D( _frame->getThis() );
  507. screen->update();
  508. screen->render();
  509. _frame->setBildschirm( screen->getThis() );
  510. _frame->setAnzeigeModus( 1 );
  511. screen->lock();
  512. BildZ *hintergrund = new BildZ();
  513. hintergrund->setStyle( BildZ::Style::Sichtbar );
  514. hintergrund->setBildZ( 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( 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( 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( 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. News *news = new News( screen, sNormal, mainClient->createNewsServerClient() );
  599. _aktion = new TextFeld();
  600. _aktion->setStyle( TextFeld::Style::Sichtbar );
  601. _aktion->setSchriftZ( sNormal->getThis() );
  602. _aktion->setSchriftFarbe( 0xFFFFFFFF );
  603. _aktion->setText( "Ermittle änderungen..." );
  604. _aktion->setPosition( 49, 403 );
  605. _aktion->setSize( 502, 20 );
  606. screen->addMember( _aktion->getThis() );
  607. _kbps = new TextFeld();
  608. _kbps->setStyle( TextFeld::Style::Sichtbar );
  609. _kbps->setSchriftZ( sNormal->getThis() );
  610. _kbps->setSchriftFarbe( 0xFFFFFFFF );
  611. _kbps->setText( "0 kb/s" );
  612. _kbps->setPosition( 49, 460 );
  613. _kbps->setSize( 402, 20 );
  614. screen->addMember( _kbps->getThis() );
  615. _fortschritt = new FBalken();
  616. _fortschritt->setStyle( FBalken::Style::Sichtbar | FBalken::Style::Hintergrund | FBalken::Style::HBild | FBalken::Style::FBild | FBalken::Style::Rahmen | FBalken::Style::Prozent | FBalken::Style::L_R );
  617. _fortschritt->setRahmenFarbe( 0xFFFFFFFF );
  618. _fortschritt->setHintergrundBild( systemFortschrittL->getThis() );
  619. _fortschritt->setFBgBild( systemFortschrittV->getThis() );
  620. _fortschritt->setSchriftZ( sNormal->getThis() );
  621. _fortschritt->setSFarbe( 0xFFFFFFFF );
  622. _fortschritt->setSSize( 12 );
  623. _fortschritt->setPosition( 49, 428 );
  624. _fortschritt->setSize( 402, 22 );
  625. screen->addMember( _fortschritt->getThis() );
  626. _play = new Knopf();
  627. _play->setStyle( Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBild );
  628. _play->setMausEreignis( _playME );
  629. _play->setHintergrundBildZ( playBild->getThis() );
  630. _play->setKlickBildZ( playKlick->getThis() );
  631. _play->setPosition( 200, 466 );
  632. _play->setSize( 101, 30 );
  633. screen->addMember( _play->getThis() );
  634. _optionenF = new Fenster();
  635. _optionenF->setStyle( Fenster::Style::Erlaubt | Fenster::Style::Closable | Fenster::Style::Titel | Fenster::Style::TitelBuffered |
  636. Fenster::Style::TitelHintergrund | Fenster::Style::BodyHintergrund | Fenster::Style::TitelHAlpha |
  637. Fenster::Style::BodyHAlpha | Fenster::Style::Rahmen | Fenster::Style::ClosingKlickBuffer |
  638. Fenster::Style::ClosingHintergrund | Fenster::Style::ClosingHAlpha | Fenster::Style::Beweglich | Fenster::Style::VScroll );
  639. _optionenF->setSize( 300, 330 );
  640. _optionenF->setPosition( 100, 100 );
  641. _optionenF->setVSBMax( 300 );
  642. _optionenF->zVScrollBar()->setKlickScroll( 10 );
  643. _optionenF->zVScrollBar()->setFarbe( 0xFFFFFFFF );
  644. _optionenF->zVScrollBar()->setBgFarbe( 0xF0000000, 1 );
  645. _optionenF->setRBreite( 2 );
  646. _optionenF->setRFarbe( 0xFFFFFFFF );
  647. _optionenF->setTSchriftZ( sNormal->getThis() );
  648. _optionenF->zTTextFeld()->addStyle( TextFeld::Style::Sichtbar | TextFeld::Style::Center );
  649. _optionenF->setTitel( "Optionen" );
  650. _optionenF->zTTextFeld()->setSize( 0, 20 );
  651. _optionenF->setTBgFarbe( 0xF0000000 );
  652. _optionenF->setTAfFarbe( 0xA0FFFFFF );
  653. _optionenF->setTAfStrength( 15 );
  654. _optionenF->setTSFarbe( 0xFFFFFFFF );
  655. _optionenF->setSBgFarbe( 0xF0000000 );
  656. _optionenF->setSKAfFarbe( 0xFFFFFFFF );
  657. _optionenF->setSKAfStrength( 30 );
  658. _optionenF->setKBgFarbe( 0xF0000000 );
  659. _optionenF->setClosingMe( oAbbrechen );
  660. screen->addMember( _optionenF->getThis() );
  661. TextFeld *oReihenfolge = new TextFeld();
  662. oReihenfolge->setStyle( TextFeld::Style::Sichtbar | TextFeld::Style::VCenter );
  663. oReihenfolge->setSchriftZ( sNormal->getThis() );
  664. oReihenfolge->setSchriftFarbe( 0xFFFFFFFF );
  665. oReihenfolge->setText( "Update Reihenfolge:" );
  666. oReihenfolge->setPosition( 2, 2 );
  667. oReihenfolge->setSize( 276, 20 );
  668. _optionenF->addMember( oReihenfolge );
  669. _o_rt = new ObjTabelle();
  670. _o_rt->setStyle( ObjTabelle::Style::Sichtbar | ObjTabelle::Style::Erlaubt | ObjTabelle::Style::Rahmen |
  671. ObjTabelle::Style::Raster | ObjTabelle::Style::VScroll );
  672. _o_rt->setPosition( 2, 24 );
  673. _o_rt->setSize( 276, 150 );
  674. _o_rt->setRahmenBreite( 1 );
  675. _o_rt->setRahmenFarbe( 0xFFFFFFFF );
  676. _o_rt->setRasterBreite( 1 );
  677. _o_rt->setRasterFarbe( 0xFFFFFFFF );
  678. _o_rt->setVertikalKlickScroll( 10 );
  679. _o_rt->setMausEreignis( _o_rtME );
  680. _o_rt->addSpalte( "Spiel" );
  681. _o_rt->addSpalte( "Erlaubt" );
  682. _o_rt->setSpaltenBreite( 0, 237 );
  683. _o_rt->setSpaltenBreite( 1, 20 );
  684. _o_rt->addZeile( "Überschrift" );
  685. _o_rt->setZeilenHeight( 0, 15 );
  686. TextFeld *ortSpielT = new TextFeld();
  687. ortSpielT->setStyle( TextFeld::Style::Sichtbar | TextFeld::Style::Center );
  688. ortSpielT->setSchriftZ( sNormal->getThis() );
  689. ortSpielT->setSchriftFarbe( 0xFFFFFFFF );
  690. ortSpielT->setText( "Spiel" );
  691. _o_rt->setZeichnungZ( 0, 0, ortSpielT );
  692. _optionenF->addMember( _o_rt->getThis() );
  693. _o_rno = new Knopf();
  694. _o_rno->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Buffered | Knopf::Style::KlickBuffer | Knopf::Style::Rahmen );
  695. _o_rno->setPosition( 76, 176 );
  696. _o_rno->setSize( 100, 20 );
  697. _o_rno->setText( "nach Oben" );
  698. _o_rno->setSchriftZ( sNormal->getThis() );
  699. _o_rno->setMausEreignis( _o_rnoME );
  700. _optionenF->addMember( _o_rno->getThis() );
  701. _o_rnu = new Knopf();
  702. _o_rnu->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Buffered | Knopf::Style::KlickBuffer | Knopf::Style::Rahmen );
  703. _o_rnu->setPosition( 178, 176 );
  704. _o_rnu->setSize( 100, 20 );
  705. _o_rnu->setText( "nach Unten" );
  706. _o_rnu->setSchriftZ( sNormal->getThis() );
  707. _o_rnu->setMausEreignis( _o_rnuME );
  708. _optionenF->addMember( _o_rnu->getThis() );
  709. TextFeld *oLimit = new TextFeld();
  710. oLimit->setStyle( TextFeld::Style::Sichtbar | TextFeld::Style::VCenter );
  711. oLimit->setSchriftZ( sNormal->getThis() );
  712. oLimit->setSchriftFarbe( 0xFFFFFFFF );
  713. oLimit->setText( "Übertragungslimit pro Sekunde:" );
  714. oLimit->setPosition( 2, 200 );
  715. oLimit->setSize( 276, 20 );
  716. _optionenF->addMember( oLimit );
  717. _o_ülps = new TextFeld();
  718. _o_ülps->setStyle( TextFeld::Style::Sichtbar | TextFeld::Style::Erlaubt | TextFeld::Style::Rahmen | TextFeld::Style::Buffered | TextFeld::Style::VCenter );
  719. _o_ülps->setPosition( 2, 222 );
  720. _o_ülps->setSize( 100, 20 );
  721. _o_ülps->setRahmenFarbe( 0xFF00FF00 );
  722. _o_ülps->setSchriftZ( sNormal->getThis() );
  723. _o_ülps->setText( "" );
  724. _o_ülps->setSchriftFarbe( 0xFFFFFFFF );
  725. _o_ülps->setSchriftSize( 12 );
  726. _o_ülps->setAlphaFeldFarbe( 0x5500FF00 );
  727. _o_ülps->setAlphaFeldStrength( -5 );
  728. _o_ülps->setTastaturEreignis( _o_ülpsTE );
  729. _optionenF->addMember( _o_ülps->getThis() );
  730. _o_üle = new AuswahlBox();
  731. _o_üle->setStyle( AuswahlBox::Style::Sichtbar | AuswahlBox::Style::Erlaubt | AuswahlBox::Style::Rahmen | AuswahlBox::Style::AuswahlBuffer |
  732. AuswahlBox::Style::MausBuffer | AuswahlBox::Style::Hintergrund );
  733. _o_üle->setPosition( 104, 222 );
  734. _o_üle->setSize( 55, 20 );
  735. _o_üle->setSchriftZ( sNormal->getThis() );
  736. _o_üle->setRahmenFarbe( 0xFFFFFFFF );
  737. _o_üle->setHintergrundFarbe( 0xFF000000 );
  738. _o_üle->setAuswAlphaFeldFarbe( 0x5500FF00 );
  739. _o_üle->setAuswAlphaFeldStrength( -5 );
  740. _o_üle->setMausAlphaFeldFarbe( 0x2200FF00 );
  741. _o_üle->setMausAlphaFeldStrength( -5 );
  742. _o_üle->setMausEreignis( _ret1ME );
  743. _o_üle->setTastaturEreignis( _ret1TE );
  744. _o_üle->addEintrag( "kb/s" );
  745. _o_üle->addEintrag( "mb/s" );
  746. _optionenF->addMember( _o_üle->getThis() );
  747. bool exitPatcher = 0;
  748. Knopf *o_repair = new Knopf();
  749. o_repair->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Buffered | Knopf::Style::KlickBuffer | Knopf::Style::Rahmen );
  750. o_repair->setPosition( 5, 254 );
  751. o_repair->setSize( 100, 20 );
  752. o_repair->setText( "Reparieren" );
  753. o_repair->setSchriftZ( sNormal->getThis() );
  754. o_repair->setMausEreignis( [ mainClient, &exitPatcher ]( void *p, void *o, MausEreignis me )
  755. {
  756. if( me.id == ME_RLinks )
  757. {
  758. _optionenF->removeStyle( Fenster::Style::Sichtbar );
  759. exitPatcher = 1;
  760. _patcher->warteAufPatch( INFINITE );
  761. KSGTDatei dgs;
  762. dgs.setPfad( "data/dg.ksgt" );
  763. dgs.laden();
  764. for( int i = 0; i < dgs.getZeilenAnzahl(); i++ )
  765. {
  766. if( dgs.zFeld( i, 1 )->getLength() )
  767. DateiRemove( dgs.zFeld( i, 1 )->getText() );
  768. }
  769. DateiRemove( "data/dg.ksgt" );
  770. DateiRemove( "data/update" );
  771. DateiRemove( "data/versionen.ini" );
  772. _patcher->release();
  773. exitPatcher = 0;
  774. _patcher = new Patcher( (FBalken *)_fortschritt->getThis(), (TextFeld *)_aktion->getThis(), (Knopf *)_play->getThis(), &exitPatcher, mainClient->createPatchServerClient() );
  775. _patcher->startPatch();
  776. }
  777. return 1;
  778. } );
  779. _optionenF->addMember( o_repair );
  780. Knopf *o_ok = new Knopf();
  781. o_ok->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Buffered | Knopf::Style::KlickBuffer | Knopf::Style::Rahmen );
  782. o_ok->setPosition( 178, 284 );
  783. o_ok->setSize( 100, 20 );
  784. o_ok->setText( "Fertig" );
  785. o_ok->setSchriftZ( sNormal->getThis() );
  786. o_ok->setMausEreignis( o_okME );
  787. _optionenF->addMember( o_ok );
  788. screen->unlock();
  789. DWORD threadId;
  790. HANDLE handle = CreateThread( NULL, 0, runThread, screen, 0, &threadId );
  791. _patcher = new Patcher( (FBalken*)_fortschritt->getThis(), (TextFeld*)_aktion->getThis(), (Knopf*)_play->getThis(), &exitPatcher, mainClient->createPatchServerClient() );
  792. _patcher->startPatch();
  793. StartNachrichtenSchleife();
  794. _exitB = 1;
  795. WaitForSingleObject( handle, INFINITE );
  796. news->release();
  797. exitPatcher = 1;
  798. _patcher->warteAufPatch( INFINITE );
  799. int returnVal = _patcher->getReturn();
  800. _patcher->release();
  801. _optionenF->release();
  802. _o_rt->release();
  803. _o_rno->release();
  804. _o_rnu->release();
  805. _o_ülps->release();
  806. _o_üle->release();
  807. _fortschritt->release();
  808. _aktion->release();
  809. _kbps->release();
  810. _play->release();
  811. sNormal->release();
  812. patcherRahmen->release();
  813. patcherHintergrund->release();
  814. playBild->release();
  815. playKlick->release();
  816. systemSchließen->release();
  817. systemMinimieren->release();
  818. systemOptionen->release();
  819. systemFortschrittL->release();
  820. systemFortschrittV->release();
  821. screen->release();
  822. _frame->setBildschirm( 0 );
  823. _frame->zerstören();
  824. _frame->release();
  825. mainClient->release();
  826. userOptions->release();
  827. Network::Exit();
  828. DateiPfadErstellen( new Text( "data/tmp/keinabsturz" ) );
  829. if( _abbruch )
  830. return 0;
  831. return returnVal;
  832. }