start.cpp 28 KB

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