start.cpp 28 KB

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