#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "Patcher.h" #include "News.h" using namespace Framework; using namespace Network; bool _exitB = 0; WFenster* _frame; FBalken* _fortschritt; TextFeld* _aktion; TextFeld* _kbps; Knopf* _play; Patcher* _patcher; Fenster* _optionenF; ObjTabelle* _o_rt; Knopf* _o_rno; Knopf* _o_rnu; TextFeld* _o_ülps; AuswahlBox* _o_üle; InitDatei* userOptions; bool _newWechsel = 1; bool _abbruch = 0; bool _o_rkkME(void* p, void* obj, MausEreignis me); void _frameSchließen(void* p, void* obj) { } bool _frameME(void* p, void* obj, MausEreignis me) { return 1; } bool _frameTE(void* p, void* obj, TastaturEreignis me) { return 1; } bool closeME(void* p, void* obj, MausEreignis me) { if (me.id == ME_RLinks) { _abbruch = 1; PostQuitMessage(0); } return 1; } bool minimierenME(void* p, void* obj, MausEreignis me) { if (me.id == ME_RLinks) { _frame->setAnzeigeModus(2); } return 1; } bool _playME(void* p, void* obj, MausEreignis me) { if (me.id == ME_Betritt) getMaus().ladeMaus(MausId::hand); if (me.id == ME_Leaves) getMaus().ladeMaus(MausId::normal); getMaus().update(); if (me.id == ME_RLinks) PostQuitMessage(0); return 1; } bool optionenME(void* p, void* obj, MausEreignis me) { if (me.id == ME_RLinks) { _o_rno->removeStyle(Knopf::Style::Erlaubt); _o_rnu->removeStyle(Knopf::Style::Erlaubt); while (_o_rt->getZeilenAnzahl() > 1) _o_rt->removeZeile(1); KSGTDatei* dat = new KSGTDatei("data/dg.ksgt"); // Tabellen Spalten: Id, Pfad, Version, Priorität dat->laden(); int max = -1; for (int i = 0; i < dat->getZeilenAnzahl(); i++) { if (!dat->zFeld(i, 3) || dat->zFeld(i, 3)->istGleich("NICHT") || dat->zFeld(i, 3)->istGleich("")) continue; if (max < (int)TextZuInt(dat->zFeld(i, 3)->getText(), 10)) max = (int)TextZuInt(dat->zFeld(i, 3)->getText(), 10); } for (int i = 0; i <= max; i++) { for (int j = 0; j < dat->getZeilenAnzahl(); j++) { if (!dat->zFeld(j, 1) || dat->zFeld(j, 1)->istGleich("")) continue; Text* iT = new Text(""); iT->append(i); if (dat->zFeld(j, 3) && dat->zFeld(j, 3)->istGleich(iT)) { Text* name = dat->zFeld(j, 1)->getTeilText(dat->zFeld(j, 1)->positionVon("spiele/") + 7); if (!name || !name->getLength() || !dat->zFeld(j, 1)->hat("spiele/")) { if (name) name->release(); name = dat->zFeld(j, 1)->getTeilText(dat->zFeld(j, 1)->positionVon("Spiele/") + 7); } if (!name || !name->getLength() || (!dat->zFeld(j, 1)->hat("Spiele/") && !dat->zFeld(j, 1)->hat("spiele/"))) { if (name) name->release(); name = new Text(dat->zFeld(j, 1)->getText()); if (name->hat('/')) name->remove(0, name->positionVon('/', name->anzahlVon('/') - 1) + 1); } int anz = _o_rt->getZeilenAnzahl(); _o_rt->addZeile(dat->zFeld(j, 0)->getText()); Text* spielN = 0; if (name->positionVon('/') >= 0) spielN = name->getTeilText(0, name->positionVon('/')); else spielN = new Text(name->getText()); name->release(); TextFeld* spiel = new TextFeld(); spiel->setStyle(TextFeld::Style::Sichtbar | TextFeld::Style::Center); spiel->setSchriftZ(_optionenF->getTSchrift()); spiel->setSchriftFarbe(0xFFFFFFFF); spiel->setHintergrundFarbe(0xFF003000); spiel->setText(spielN); _o_rt->setZeichnungZ(0, anz, spiel); KontrollKnopf* erlaubt = new KontrollKnopf(); erlaubt->addStyle(KontrollKnopf::Style::Sichtbar | KontrollKnopf::Style::Erlaubt | KontrollKnopf::Style::KlickBuffer | KontrollKnopf::Style::Selected); erlaubt->setHintergrundFarbe(0xFF003000); erlaubt->setSBgFarbe(0xFF003000); erlaubt->loadData("data/bilder/system.ltdb"); erlaubt->setMausEreignis(_o_rkkME); _o_rt->setZeichnungZ(1, anz, erlaubt); } } } for (int i = 0; i < dat->getZeilenAnzahl(); i++) { if (dat->zFeld(i, 3) && dat->zFeld(i, 3)->istGleich("NICHT")) { Text* name = dat->zFeld(i, 1)->getTeilText(dat->zFeld(i, 1)->positionVon("spiele/") + 7); if (!name || !name->getLength()) { if (name) name->release(); name = dat->zFeld(i, 1)->getTeilText(dat->zFeld(i, 1)->positionVon("Spiele/") + 7); } if (!name || !name->getLength()) { if (name) name->release(); name = new Text(dat->zFeld(i, 1)->getText()); if (name->hat('/')) name->remove(0, name->positionVon('/', name->anzahlVon('/') - 1)); } int anz = _o_rt->getZeilenAnzahl(); _o_rt->addZeile(dat->zFeld(i, 0)->getText()); Text* spielN = 0; if (name->positionVon('/') >= 0) spielN = name->getTeilText(0, name->positionVon('/')); else spielN = new Text(name->getText()); name->release(); TextFeld* spiel = new TextFeld(); spiel->setStyle(TextFeld::Style::Sichtbar | TextFeld::Style::Center); spiel->setSchriftZ(_optionenF->getTSchrift()); spiel->setSchriftFarbe(0xFFFFFFFF); spiel->setHintergrundFarbe(0xFF003000); spiel->setText(spielN); _o_rt->setZeichnungZ(0, anz, spiel); KontrollKnopf* erlaubt = new KontrollKnopf(); erlaubt->addStyle(KontrollKnopf::Style::Sichtbar | KontrollKnopf::Style::Erlaubt | KontrollKnopf::Style::KlickBuffer); erlaubt->setHintergrundFarbe(0xFF003000); erlaubt->loadData("data/bilder/system.ltdb"); erlaubt->setMausEreignis(_o_rkkME); _o_rt->setZeichnungZ(1, anz, erlaubt); } } dat->release(); InitDatei* ini = new InitDatei("data/patch/po.ini"); ini->laden(); if (ini->wertExistiert("ülps")) _o_ülps->setText(ini->zWert("ülps")->getText()); if (ini->wertExistiert("üle")) _o_üle->setAuswahl(_o_üle->getEintragPos(ini->zWert("üle")->getText())); ini->release(); _optionenF->setPosition(100, 100); _optionenF->addStyle(Fenster::Style::Sichtbar); } return 1; } bool oAbbrechen(void* p, void* obj, MausEreignis me) { if (me.id == ME_RLinks) _optionenF->removeStyle(Fenster::Style::Sichtbar); return 1; } bool _o_rtME(void* p, void* obj, MausEreignis me) { if (me.id == ME_RLinks) { for (int i = 1; i < _o_rt->getZeilenAnzahl(); i++) { if (_o_rt->zZeichnung(0, i)) ((TextFeld*)_o_rt->zZeichnung(0, i))->removeStyle(TextFeld::Style::Hintergrund); if (_o_rt->zZeichnung(1, i)) ((KontrollKnopf*)_o_rt->zZeichnung(1, i))->removeStyle(KontrollKnopf::Style::Hintergrund | KontrollKnopf::Style::SelectFarbe); } int zeile = (int)_o_rt->getMausZeile(me.my - _o_rt->getVertikalScrollPos()); if (zeile <= 0) { _o_rno->removeStyle(Knopf::Style::Erlaubt); _o_rnu->removeStyle(Knopf::Style::Erlaubt); } else { if (_o_rt->zZeichnung(0, zeile)) ((TextFeld*)_o_rt->zZeichnung(0, zeile))->addStyle(TextFeld::Style::Hintergrund); if (_o_rt->zZeichnung(1, zeile)) ((KontrollKnopf*)_o_rt->zZeichnung(1, zeile))->addStyle(KontrollKnopf::Style::Hintergrund | KontrollKnopf::Style::SelectFarbe); if (zeile > 1) _o_rno->addStyle(Knopf::Style::Erlaubt); else _o_rno->removeStyle(Knopf::Style::Erlaubt); int max = 0; for (int i = 1; i < _o_rt->getZeilenAnzahl(); i++) { if (!_o_rt->zZeichnung(1, i) || ((KontrollKnopf*)_o_rt->zZeichnung(1, i))->hatStyleNicht(KontrollKnopf::Style::Selected)) break; max = i; } if (zeile < max) _o_rnu->addStyle(Knopf::Style::Erlaubt); else _o_rnu->removeStyle(Knopf::Style::Erlaubt); if ((_o_rt->zZeichnung(1, zeile) && ((KontrollKnopf*)_o_rt->zZeichnung(1, zeile))->hatStyleNicht(KontrollKnopf::Style::Selected))) { _o_rno->removeStyle(Knopf::Style::Erlaubt); _o_rnu->removeStyle(Knopf::Style::Erlaubt); } } } return 1; } bool _o_rnoME(void* p, void* obj, MausEreignis me) { if (me.id == ME_RLinks) { int zeile = -1; for (int i = 1; i < _o_rt->getZeilenAnzahl(); i++) { if (_o_rt->zZeichnung(0, i) && ((TextFeld*)_o_rt->zZeichnung(0, i))->hatStyle(TextFeld::Style::Hintergrund)) { zeile = i; break; } } if (zeile > 1) { _o_rt->setZeilePosition(zeile, zeile - 1); _o_rnu->addStyle(Knopf::Style::Erlaubt); } if (zeile - 1 <= 1) _o_rno->removeStyle(Knopf::Style::Erlaubt); } return 1; } bool _o_rnuME(void* p, void* obj, MausEreignis me) { if (me.id == ME_RLinks) { int zeile = -1; for (int i = 1; i < _o_rt->getZeilenAnzahl(); i++) { if (_o_rt->zZeichnung(0, i) && ((TextFeld*)_o_rt->zZeichnung(0, i))->hatStyle(TextFeld::Style::Hintergrund)) { zeile = i; break; } } int max = 0; for (int i = 1; i < _o_rt->getZeilenAnzahl(); i++) { if (!_o_rt->zZeichnung(1, i) || ((KontrollKnopf*)_o_rt->zZeichnung(1, i))->hatStyleNicht(KontrollKnopf::Style::Selected)) break; max = i; } if (zeile > 0 && zeile < max) { _o_rt->setZeilePosition(zeile, zeile + 1); _o_rno->addStyle(Knopf::Style::Erlaubt); } if (zeile + 1 >= _o_rt->getZeilenAnzahl() - 1) _o_rnu->removeStyle(Knopf::Style::Erlaubt); } return 1; } bool _o_rkkME(void* p, void* obj, MausEreignis me) { if (me.id == ME_RLinks) { if (((KontrollKnopf*)obj)->hatStyleNicht(KontrollKnopf::Style::Hintergrund | KontrollKnopf::Style::SelectFarbe)) { ((KontrollKnopf*)obj)->setStyle(KontrollKnopf::Style::Selected, ((KontrollKnopf*)obj)->hatStyleNicht(KontrollKnopf::Style::Selected)); return 1; } if (((KontrollKnopf*)obj)->hatStyle(KontrollKnopf::Style::Selected)) { _o_rno->removeStyle(Knopf::Style::Erlaubt); _o_rnu->removeStyle(Knopf::Style::Erlaubt); int zeile = -1; for (int i = 1; i < _o_rt->getZeilenAnzahl(); i++) { if (_o_rt->zZeichnung(1, i) == obj) { zeile = i; break; } } int max = 0; for (int i = 1; i < _o_rt->getZeilenAnzahl(); i++) { if (!_o_rt->zZeichnung(1, i) || ((KontrollKnopf*)_o_rt->zZeichnung(1, i))->hatStyleNicht(KontrollKnopf::Style::Selected)) break; max = i; } _o_rt->setZeilePosition(zeile, max); } else { int zeile = -1; for (int i = 1; i < _o_rt->getZeilenAnzahl(); i++) { if (_o_rt->zZeichnung(1, i) == obj) { zeile = i; break; } } int max = 0; for (int i = 1; i < _o_rt->getZeilenAnzahl(); i++) { if (!_o_rt->zZeichnung(1, i) || ((KontrollKnopf*)_o_rt->zZeichnung(1, i))->hatStyleNicht(KontrollKnopf::Style::Selected)) break; max = i; } _o_rt->setZeilePosition(zeile, max + 1); if (max > 1) _o_rno->addStyle(Knopf::Style::Erlaubt); } } return 1; } bool _o_ülpsTE(void* p, void* obj, TastaturEreignis te) { if (te.taste == T_Links || te.taste == T_Rechts || te.taste == T_Entf || te.taste == T_BackSpace || (te.taste >= '0' && te.taste <= '9')) return 1; return 0; } bool o_okME(void* p, void* obj, MausEreignis me) { if (me.id == ME_RLinks) { KSGTDatei* dat = new KSGTDatei("data/dg.ksgt"); dat->laden(); for (int i = 0; i < dat->getZeilenAnzahl(); i++) { for (int j = 0; j < _o_rt->getZeilenAnzahl(); j++) { if (!_o_rt->zZeichnung(1, j)) continue; if (!_o_rt->zZeilenName(j)->istGleich(dat->zFeld(i, 0)->getText())) continue; if (((KontrollKnopf*)_o_rt->zZeichnung(1, j))->hatStyle(KontrollKnopf::Style::Selected)) { Text* t = new Text(); t->append(j); dat->zFeld(i, 3)->setText(t); } else dat->zFeld(i, 3)->setText("NICHT"); break; } } dat->speichern(); dat->release(); InitDatei* ini = new InitDatei("data/patch/po.ini"); ini->addWert("ülps", _o_ülps->zText()->getText()); ini->addWert("üle", _o_üle->zEintragText(_o_üle->getAuswahl())->getText()); ini->speichern(); ini->release(); _optionenF->removeStyle(Fenster::Style::Sichtbar); } return 1; } DWORD WINAPI runThread(void* args) { Bildschirm* screen = (Bildschirm*)args; double i = 0; double tickVal = 1.0 / 60.0; ZeitMesser* tstop = new ZeitMesser(); while (!_exitB) { tstop->messungStart(); screen->render(); screen->tick(tickVal); Sleep(10); if (_kbps) { i += tickVal * 60; if (i >= 60 && _kbps) { screen->lock(); _kbps->setText(""); _kbps->zText()->append(_patcher ? (_patcher->getDownload() / 1024) : 0); _kbps->zText()->append(" kb/s, "); _kbps->zText()->append((unsigned int)((_fortschritt->getAktionAnzahl() - _fortschritt->getAktion()) / 1024)); _kbps->zText()->append(" kb verbleibend..."); screen->unlock(); i -= 60; } } tstop->messungEnde(); tickVal = tstop->getSekunden() + tstop->getSekunden() - tickVal; } tstop->release(); return 0; } int KSGStart Framework::Start(Startparam p) { _abbruch = 0; Network::Start(10); if (!DateiExistiert("data/user_options.ini")) { userOptions = new InitDatei("data/default_options.ini"); userOptions->laden(); userOptions->setPfad("data/user_options.ini"); userOptions->speichern(); } else { userOptions = new InitDatei("data/user_options.ini"); userOptions->laden(); } LTDBDatei* patcherBilder = new LTDBDatei(); patcherBilder->setDatei(new Text("data/patch/bilder/patcher.ltdb")); patcherBilder->leseDaten(0); Bild* patcherRahmen = patcherBilder->laden(0, new Text("patcherrahmen.")); Bild* patcherHintergrund = patcherBilder->laden(0, new Text("patcher.png")); Bild* playBild = patcherBilder->laden(0, new Text("play.png")); Bild* playKlick = patcherBilder->laden(0, new Text("playklick.png")); patcherBilder->release(); LTDBDatei* systemBilder = new LTDBDatei(); systemBilder->setDatei(new Text("data/bilder/system.ltdb")); systemBilder->leseDaten(0); Bild* systemSchließen = systemBilder->laden(0, new Text("schließen.png")); Bild* systemMinimieren = systemBilder->laden(0, new Text("minimieren.png")); Bild* systemOptionen = systemBilder->laden(0, new Text("optionen.png")); Bild* systemFortschrittL = systemBilder->laden(0, new Text("fortschrittleh")); Bild* systemFortschrittV = systemBilder->laden(0, new Text("fortschrittvol")); systemBilder->release(); LTDSDatei* normalSchrift = new LTDSDatei(); normalSchrift->setPfad(new Text("data/schriften/normal.ltds")); normalSchrift->leseDaten(); Schrift* sNormal = normalSchrift->ladeSchrift(); normalSchrift->release(); Monitor m = getMonitor(userOptions->wertExistiert("Monitor") ? (int)*userOptions->zWert("Monitor") : 0); WNDCLASS wc = F_Normal(p.hinst); wc.lpszClassName = "Kolja-Strohm Games Patcher"; _frame = new WFenster(); _frame->setVerschiebbar(1); _frame->erstellen(WS_POPUP, wc); _frame->setSize(Punkt(500, 500)); _frame->setPosition(Bildschirmmitte(dynamic_cast(_frame->getThis()), m.existiert ? (userOptions->wertExistiert("Monitor") ? (int)*userOptions->zWert("Monitor") : 0) : 0)); _frame->ladeRahmenFenster(patcherRahmen, p.hinst); _frame->setMausAktion(_frameME); _frame->setTastaturAktion(_frameTE); _frame->setVSchließAktion(_frameSchließen); Bildschirm* screen = 0; if (userOptions->wertExistiert("GraphicAPI") && userOptions->zWert("GraphicAPI")->istGleich("DX9")) screen = new Bildschirm3D(dynamic_cast(_frame->getThis()), DIRECTX9); else if (userOptions->wertExistiert("GraphicAPI") && userOptions->zWert("GraphicAPI")->istGleich("DX11")) screen = new Bildschirm3D(dynamic_cast(_frame->getThis()), DIRECTX11); else if (userOptions->wertExistiert("GraphicAPI") && userOptions->zWert("GraphicAPI")->istGleich("DX12")) screen = new Bildschirm3D(dynamic_cast(_frame->getThis()), DIRECTX12); else screen = new Bildschirm3D(dynamic_cast(_frame->getThis())); screen->update(); screen->render(); _frame->setBildschirm(dynamic_cast(screen->getThis())); _frame->setAnzeigeModus(1); screen->lock(); BildZ* hintergrund = new BildZ(); hintergrund->setStyle(BildZ::Style::Sichtbar); hintergrund->setBildZ(dynamic_cast(patcherHintergrund->getThis())); hintergrund->setPosition(0, 0); hintergrund->setSize(patcherHintergrund->getBreite(), patcherHintergrund->getHeight()); screen->addMember(hintergrund); Knopf* close = new Knopf(); close->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer); close->setHintergrundBildZ(dynamic_cast(systemSchließen->getThis())); close->setKBFarbe(0xFF000000); close->setHintergrundFarbe(0); close->setKBStrength(30); close->setPosition(475, 5); close->setSize(20, 20); close->setMausEreignis(closeME); screen->addMember(close); Knopf* minimieren = new Knopf(); minimieren->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer); minimieren->setHintergrundBildZ(dynamic_cast(systemMinimieren->getThis())); minimieren->setHintergrundFarbe(0); minimieren->setKBFarbe(0xFF000000); minimieren->setKBStrength(30); minimieren->setPosition(454, 5); minimieren->setSize(20, 20); minimieren->setMausEreignis(minimierenME); screen->addMember(minimieren); Knopf* optionen = new Knopf(); optionen->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer); optionen->setHintergrundBildZ(dynamic_cast(systemOptionen->getThis())); optionen->setHintergrundFarbe(0); optionen->setKBFarbe(0xFF000000); optionen->setKBStrength(30); optionen->setPosition(433, 5); optionen->setSize(20, 20); optionen->setMausEreignis(optionenME); screen->addMember(optionen); // Main Server Adresse Laden Datei* dat = new Datei(); dat->setDatei("data/tmp/k.id"); int klientNummer = 0; dat->open(Datei::Style::lesen); dat->lese((char*)&klientNummer, 4); dat->close(); dat->setDatei("data/tmp/m.port"); int serverPort = 0; dat->open(Datei::Style::lesen); dat->lese((char*)&serverPort, 4); dat->close(); dat->setDatei("data/tmp/m.ip"); dat->open(Datei::Style::lesen); unsigned char len = 0; dat->lese((char*)&len, 1); char* ip = new char[len + 1]; ip[len] = 0; dat->lese(ip, len); dat->close(); dat->setDatei("data/tmp/crypt.key"); dat->open(Datei::Style::lesen); len = 0; dat->lese((char*)&len, 1); char* key = new char[len + 1]; key[len] = 0; dat->lese(key, len); dat->close(); dat->release(); // Laden des Main Clients HINSTANCE networkDLL = LoadLibrary("data/bin/KSGNetwork.dll"); if (!networkDLL) { 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); exit(0); } KSGClient::KSGNetworkCreateRegisterdMain getMainClient = (KSGClient::KSGNetworkCreateRegisterdMain)GetProcAddress(networkDLL, KSGNETWORK_CREATE_REGISTERD_MAIN); if (!getMainClient) { 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); exit(0); } KSGClient::MainServerClient* mainClient = getMainClient(ip, serverPort, klientNummer, key, len); if (!mainClient) { 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); exit(0); } delete[] ip; delete[] key; UIInit init = Framework::defaultUI(sNormal, screen); News* news = new News(init, mainClient->createNewsServerClient()); _aktion = new TextFeld(); _aktion->setStyle(TextFeld::Style::Sichtbar); _aktion->setSchriftZ(dynamic_cast(sNormal->getThis())); _aktion->setSchriftFarbe(0xFFFFFFFF); _aktion->setText("Ermittle änderungen..."); _aktion->setPosition(49, 403); _aktion->setSize(502, 20); screen->addMember(dynamic_cast(_aktion->getThis())); _kbps = new TextFeld(); _kbps->setStyle(TextFeld::Style::Sichtbar); _kbps->setSchriftZ(dynamic_cast(sNormal->getThis())); _kbps->setSchriftFarbe(0xFFFFFFFF); _kbps->setText("0 kb/s"); _kbps->setPosition(49, 460); _kbps->setSize(402, 20); screen->addMember(dynamic_cast(_kbps->getThis())); _fortschritt = new FBalken(); _fortschritt->setStyle(FBalken::Style::Sichtbar | FBalken::Style::Hintergrund | FBalken::Style::HBild | FBalken::Style::FBild | FBalken::Style::Rahmen | FBalken::Style::Prozent | FBalken::Style::L_R); _fortschritt->setRahmenFarbe(0xFFFFFFFF); _fortschritt->setHintergrundBild(dynamic_cast(systemFortschrittL->getThis())); _fortschritt->setFBgBild(dynamic_cast(systemFortschrittV->getThis())); _fortschritt->setSchriftZ(dynamic_cast(sNormal->getThis())); _fortschritt->setSFarbe(0xFFFFFFFF); _fortschritt->setSSize(12); _fortschritt->setPosition(49, 428); _fortschritt->setSize(402, 22); screen->addMember(dynamic_cast(_fortschritt->getThis())); _play = new Knopf(); _play->setStyle(Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBild); _play->setMausEreignis(_playME); _play->setHintergrundBildZ(dynamic_cast(playBild->getThis())); _play->setKlickBildZ(dynamic_cast(playKlick->getThis())); _play->setPosition(200, 466); _play->setSize(101, 30); screen->addMember(dynamic_cast(_play->getThis())); _optionenF = new Fenster(); _optionenF->setStyle(Fenster::Style::Erlaubt | Fenster::Style::Closable | Fenster::Style::Titel | Fenster::Style::TitelBuffered | Fenster::Style::TitelHintergrund | Fenster::Style::BodyHintergrund | Fenster::Style::TitelHAlpha | Fenster::Style::BodyHAlpha | Fenster::Style::Rahmen | Fenster::Style::ClosingKlickBuffer | Fenster::Style::ClosingHintergrund | Fenster::Style::ClosingHAlpha | Fenster::Style::Beweglich | Fenster::Style::VScroll); _optionenF->setSize(300, 330); _optionenF->setPosition(100, 100); _optionenF->setVSBMax(300); _optionenF->zVScrollBar()->setKlickScroll(10); _optionenF->zVScrollBar()->setFarbe(0xFFFFFFFF); _optionenF->zVScrollBar()->setBgFarbe(0xF0000000, 1); _optionenF->setRBreite(2); _optionenF->setRFarbe(0xFFFFFFFF); _optionenF->setTSchriftZ(dynamic_cast(sNormal->getThis())); _optionenF->zTTextFeld()->addStyle(TextFeld::Style::Sichtbar | TextFeld::Style::Center); _optionenF->setTitel("Optionen"); _optionenF->zTTextFeld()->setSize(0, 20); _optionenF->setTBgFarbe(0xF0000000); _optionenF->setTAfFarbe(0xA0FFFFFF); _optionenF->setTAfStrength(15); _optionenF->setTSFarbe(0xFFFFFFFF); _optionenF->setSBgFarbe(0xF0000000); _optionenF->setSKAfFarbe(0xFFFFFFFF); _optionenF->setSKAfStrength(30); _optionenF->setKBgFarbe(0xF0000000); _optionenF->setClosingMe(oAbbrechen); screen->addMember(dynamic_cast(_optionenF->getThis())); TextFeld* oReihenfolge = new TextFeld(); oReihenfolge->setStyle(TextFeld::Style::Sichtbar | TextFeld::Style::VCenter); oReihenfolge->setSchriftZ(dynamic_cast(sNormal->getThis())); oReihenfolge->setSchriftFarbe(0xFFFFFFFF); oReihenfolge->setText("Update Reihenfolge:"); oReihenfolge->setPosition(2, 2); oReihenfolge->setSize(276, 20); _optionenF->addMember(oReihenfolge); _o_rt = new ObjTabelle(); _o_rt->setStyle(ObjTabelle::Style::Sichtbar | ObjTabelle::Style::Erlaubt | ObjTabelle::Style::Rahmen | ObjTabelle::Style::Raster | ObjTabelle::Style::VScroll); _o_rt->setPosition(2, 24); _o_rt->setSize(276, 150); _o_rt->setRahmenBreite(1); _o_rt->setRahmenFarbe(0xFFFFFFFF); _o_rt->setRasterBreite(1); _o_rt->setRasterFarbe(0xFFFFFFFF); _o_rt->setVertikalKlickScroll(10); _o_rt->setMausEreignis(_o_rtME); _o_rt->addSpalte("Spiel"); _o_rt->addSpalte("Erlaubt"); _o_rt->setSpaltenBreite(0, 237); _o_rt->setSpaltenBreite(1, 20); _o_rt->addZeile("Überschrift"); _o_rt->setZeilenHeight(0, 15); TextFeld* ortSpielT = new TextFeld(); ortSpielT->setStyle(TextFeld::Style::Sichtbar | TextFeld::Style::Center); ortSpielT->setSchriftZ(dynamic_cast(sNormal->getThis())); ortSpielT->setSchriftFarbe(0xFFFFFFFF); ortSpielT->setText("Spiel"); _o_rt->setZeichnungZ(0, 0, ortSpielT); _optionenF->addMember(dynamic_cast(_o_rt->getThis())); _o_rno = new Knopf(); _o_rno->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Buffered | Knopf::Style::KlickBuffer | Knopf::Style::Rahmen); _o_rno->setPosition(76, 176); _o_rno->setSize(100, 20); _o_rno->setText("nach Oben"); _o_rno->setSchriftZ(dynamic_cast(sNormal->getThis())); _o_rno->setMausEreignis(_o_rnoME); _optionenF->addMember(dynamic_cast(_o_rno->getThis())); _o_rnu = new Knopf(); _o_rnu->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Buffered | Knopf::Style::KlickBuffer | Knopf::Style::Rahmen); _o_rnu->setPosition(178, 176); _o_rnu->setSize(100, 20); _o_rnu->setText("nach Unten"); _o_rnu->setSchriftZ(dynamic_cast(sNormal->getThis())); _o_rnu->setMausEreignis(_o_rnuME); _optionenF->addMember(dynamic_cast(_o_rnu->getThis())); TextFeld* oLimit = new TextFeld(); oLimit->setStyle(TextFeld::Style::Sichtbar | TextFeld::Style::VCenter); oLimit->setSchriftZ(dynamic_cast(sNormal->getThis())); oLimit->setSchriftFarbe(0xFFFFFFFF); oLimit->setText("Übertragungslimit pro Sekunde:"); oLimit->setPosition(2, 200); oLimit->setSize(276, 20); _optionenF->addMember(oLimit); _o_ülps = new TextFeld(); _o_ülps->setStyle(TextFeld::Style::Sichtbar | TextFeld::Style::Erlaubt | TextFeld::Style::Rahmen | TextFeld::Style::Buffered | TextFeld::Style::VCenter); _o_ülps->setPosition(2, 222); _o_ülps->setSize(100, 20); _o_ülps->setRahmenFarbe(0xFF00FF00); _o_ülps->setSchriftZ(dynamic_cast(sNormal->getThis())); _o_ülps->setText(""); _o_ülps->setSchriftFarbe(0xFFFFFFFF); _o_ülps->setSchriftSize(12); _o_ülps->setAlphaFeldFarbe(0x5500FF00); _o_ülps->setAlphaFeldStrength(-5); _o_ülps->setTastaturEreignis(_o_ülpsTE); _optionenF->addMember(dynamic_cast(_o_ülps->getThis())); _o_üle = new AuswahlBox(); _o_üle->setStyle(AuswahlBox::Style::Sichtbar | AuswahlBox::Style::Erlaubt | AuswahlBox::Style::Rahmen | AuswahlBox::Style::AuswahlBuffer | AuswahlBox::Style::MausBuffer | AuswahlBox::Style::Hintergrund); _o_üle->setPosition(104, 222); _o_üle->setSize(55, 20); _o_üle->setSchriftZ(dynamic_cast(sNormal->getThis())); _o_üle->setRahmenFarbe(0xFFFFFFFF); _o_üle->setHintergrundFarbe(0xFF000000); _o_üle->setAuswAlphaFeldFarbe(0x5500FF00); _o_üle->setAuswAlphaFeldStrength(-5); _o_üle->setMausAlphaFeldFarbe(0x2200FF00); _o_üle->setMausAlphaFeldStrength(-5); _o_üle->setMausEreignis(_ret1ME); _o_üle->setTastaturEreignis(_ret1TE); _o_üle->addEintrag("kb/s"); _o_üle->addEintrag("mb/s"); _optionenF->addMember(dynamic_cast(_o_üle->getThis())); bool exitPatcher = 0; Knopf* o_repair = new Knopf(); o_repair->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Buffered | Knopf::Style::KlickBuffer | Knopf::Style::Rahmen); o_repair->setPosition(5, 254); o_repair->setSize(100, 20); o_repair->setText("Reparieren"); o_repair->setSchriftZ(dynamic_cast(sNormal->getThis())); o_repair->setMausEreignis([mainClient, &exitPatcher](void* p, void* o, MausEreignis me) { if (me.id == ME_RLinks) { _optionenF->removeStyle(Fenster::Style::Sichtbar); exitPatcher = 1; _patcher->warteAufPatch(INFINITE); KSGTDatei dgs; dgs.setPfad("data/dg.ksgt"); dgs.laden(); for (int i = 0; i < dgs.getZeilenAnzahl(); i++) { if (dgs.zFeld(i, 1)->getLength()) DateiRemove(dgs.zFeld(i, 1)->getText()); } DateiRemove("data/dg.ksgt"); DateiRemove("data/update"); DateiRemove("data/versionen.ini"); _patcher->release(); exitPatcher = 0; _patcher = new Patcher(dynamic_cast(_fortschritt->getThis()), dynamic_cast(_aktion->getThis()), dynamic_cast(_play->getThis()), &exitPatcher, mainClient->createPatchServerClient()); _patcher->startPatch(); } return 1; }); _optionenF->addMember(o_repair); Knopf* o_ok = new Knopf(); o_ok->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Buffered | Knopf::Style::KlickBuffer | Knopf::Style::Rahmen); o_ok->setPosition(178, 284); o_ok->setSize(100, 20); o_ok->setText("Fertig"); o_ok->setSchriftZ(dynamic_cast(sNormal->getThis())); o_ok->setMausEreignis(o_okME); _optionenF->addMember(o_ok); screen->unlock(); DWORD threadId; HANDLE handle = CreateThread(NULL, 0, runThread, screen, 0, &threadId); _patcher = new Patcher(dynamic_cast(_fortschritt->getThis()), dynamic_cast(_aktion->getThis()), dynamic_cast(_play->getThis()), &exitPatcher, mainClient->createPatchServerClient()); _patcher->startPatch(); StartNachrichtenSchleife(); _exitB = 1; WaitForSingleObject(handle, INFINITE); news->warteAufThread(10000); news->ende(); news->release(); exitPatcher = 1; _patcher->warteAufPatch(INFINITE); int returnVal = _patcher->getReturn(); _patcher->release(); _optionenF->release(); _o_rt->release(); _o_rno->release(); _o_rnu->release(); _o_ülps->release(); _o_üle->release(); _fortschritt->release(); _aktion->release(); _kbps->release(); _play->release(); sNormal->release(); patcherRahmen->release(); patcherHintergrund->release(); playBild->release(); playKlick->release(); systemSchließen->release(); systemMinimieren->release(); systemOptionen->release(); systemFortschrittL->release(); systemFortschrittV->release(); screen->release(); _frame->setBildschirm(0); _frame->zerstören(); _frame->release(); mainClient->release(); userOptions->release(); Network::Exit(); DateiPfadErstellen(new Text("data/tmp/keinabsturz")); if (_abbruch) return 0; return returnVal; }