start.cpp 28 KB

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