Problem mit Patcher



  • erstmal danke für die hilfe, werd ich dann gleich mal probieren, aber wie ich das dann per "throw" ausgeben kann weiß du das?^^

    Badestrand schrieb:

    Zu deiner zweiten Frage: Da hast du was falsch verstanden, settings.szPatchURL ist nur ein Array von Buchstaben, da kann also nur eine Zeichenkette drinstehen, nicht mehrere.

    mhh gibts den eine möglichkeit das zu einem array zu machen wo ich mehrere strings reinbringen kann? wenn ja wie den ungefair?^^
    weil brauch ich ja dann später bei Problemstelle2 weil ich diese ja durch ne while-schleife (ich hoff mal das die wenigstens die gleiche bedeutung wie bei php,vb,java hat xD ) mehrfach durchlaufen lassen möchte^^

    mfg
    Warkiller102



  • Warkiller102 schrieb:

    erstmal danke für die hilfe, werd ich dann gleich mal probieren, aber wie ich das dann per "throw" ausgeben kann weiß du das?^^

    "throw" gehört zum Ausnahme-Modell, ist dir das auch geläufig? Jedenfalls kannst du die Ausnahmen, die geworfen werden, auch wieder fangen, mit catch ( const char* error ) . In dem nachfolgendem Block kannst du dann mit std::cout , std::cerr oder std::clog den Fehler in dem entsprechenden Stream ausgeben (was dann in der Konsole landet, wenn du mit einer arbeitest).
    Ich sehe übrigens grad, in der main.cpp-Datei, die du hochgeladen hast, werden die Fehlermeldungen doch einer Zeile mit catch(LPCSTR message) gefangen und mit einer MessageBox ausgegeben.

    Warkiller102 schrieb:

    mhh gibts den eine möglichkeit das zu einem array zu machen wo ich mehrere strings reinbringen kann? wenn ja wie den ungefair?^^
    weil brauch ich ja dann später bei Problemstelle2 weil ich diese ja durch ne while-schleife (ich hoff mal das die wenigstens die gleiche bedeutung wie bei php,vb,java hat xD ) mehrfach durchlaufen lassen möchte^^

    Theoretisch gibt's die Möglichkeit, klar. Ungefähr (man beachte die Schreibweise ;)) könntest du es so machen, dass du ein paar Strings reinbringst und durch ein Null-Terminierungszeichen trennst, der letzte String bekommt eine Doppel-Null. Ich würde das aber nicht empfehlen.

    Ich finde übrigens, dass der Quelltext deines ausgewählten Patchers nicht unbedingt toll ist. Eventuell solltest du dich nach einem anderen umsehen, oder aber, wenn du ihn behalten willst, nicht darin rumpfuschen, sondern einen Wrapper dafür schreiben. Ich weiß nicht, inwiefern das funktioniert (hab jetzt keine Lust den kompletten Quelltext zu analysieren), aber du eventuell könntest die Funktionalität des Patchers kapseln (in einer Klasse o.ä.) und für jede der zu patchenden Dateien einzeln aufrufen/ausführen.

    Jedenfalls kommt mir der Patcher wirklich sehr frickelig vor. Aber ich will dich nicht vom Fragen abhalten, sollte ja nicht unmöglich sein, das Ding umzuschreiben 😉

    edit: Oh man, wie soll man eigentlich eine Funktion mit 675 Zeilen überblicken.. 😕
    edit2: Btw ist das Ding eher in C geschrieben 😕
    edit3: Und du solltest dir vielleicht den neueren Quelltext holen, der sieht immerhin etwas besser aus.



  • Badestrand schrieb:

    Warkiller102 schrieb:

    mhh gibts den eine möglichkeit das zu einem array zu machen wo ich mehrere strings reinbringen kann? wenn ja wie den ungefair?^^
    weil brauch ich ja dann später bei Problemstelle2 weil ich diese ja durch ne while-schleife (ich hoff mal das die wenigstens die gleiche bedeutung wie bei php,vb,java hat xD ) mehrfach durchlaufen lassen möchte^^

    Theoretisch gibt's die Möglichkeit, klar. Ungefähr (man beachte die Schreibweise ;)) könntest du es so machen, dass du ein paar Strings reinbringst und durch ein Null-Terminierungszeichen trennst, der letzte String bekommt eine Doppel-Null. Ich würde das aber nicht empfehlen.

    mhh also wirds nicht so einfach wie bei php/java, dass man einfach die jeweiligen wörter, o.a. in ein array bringt und diesen dann per Array[0], Array[1],... abrufen kann?

    Badestrand schrieb:

    Ich finde übrigens, dass der Quelltext deines ausgewählten Patchers nicht unbedingt toll ist. Eventuell solltest du dich nach einem anderen umsehen, oder aber, wenn du ihn behalten willst, nicht darin rumpfuschen, sondern einen Wrapper dafür schreiben. Ich weiß nicht, inwiefern das funktioniert (hab jetzt keine Lust den kompletten Quelltext zu analysieren), aber du eventuell könntest die Funktionalität des Patchers kapseln (in einer Klasse o.ä.) und für jede der zu patchenden Dateien einzeln aufrufen/ausführen.

    Jedenfalls kommt mir der Patcher wirklich sehr frickelig vor. Aber ich will dich nicht vom Fragen abhalten, sollte ja nicht unmöglich sein, das Ding umzuschreiben 😉

    nunja ich hab mir den neoncube eigentlich gewählt da er einer der besten patcher ist, was die funktionen von rar/grf dateien angeht. die meisten anderen haben sowas garnicht die patchen meist nur in die jeweilige grf.

    mhh kannst mir erklären bzw ein beispiel für einen wrapper geben? kann mir darunter noch nicht viel vorstellen.

    Badestrand schrieb:

    edit2: Btw ist das Ding eher in C geschrieben 😕

    nunja ich hab echt nicht viel ahnung von c/c++ deshalb weiß/wusste ich es nicht genau

    Badestrand schrieb:

    edit3: Und du solltest dir vielleicht den neueren Quelltext holen, der sieht immerhin etwas besser aus.

    mhh wen du den 1.2 meinst, das ist genau der den ich hier gepostet habe^^"

    if(GetPrivateProfileString("server", str.str().c_str(), NULL, settings.szPatchURL, sizeof(settings.szPatchURL) / sizeof(settings.szPatchURL[0]), INIFILE) <= 0)/*str.str().c_str() hat den wert patch_site1 (bzw die jeweile Zahl von der Var GRFNumbers)*/
        throw "Invalid key in NeonCube.ini: patch_site"; /*statt patch_site soll hier patch_site1 (bzw die jeweilige Zahl von der Var GRFNumbers stehen)*/
    

    und bei dem "throw" meinte ich eigentlich den abschnitt, wenn z.b. der eintrag in der .ini datei fehlt bringt er per msg box das "Invalid key in NeonCube.ini: patch_site", das kann man wohl nicht mit ner variable erweitern das er halt z.b. das ausgibt: "Invalid key in NeonCube.ini: patch_siteX" (wobei X die jeweilige zahl von "GRFNumbers" wäre?

    aber nochmals vielen dank^^

    mfg
    Warkiller102



  • Warkiller102 schrieb:

    mhh also wirds nicht so einfach wie bei php/java, dass man einfach die jeweiligen wörter, o.a. in ein array bringt und diesen dann per Array[0], Array[1],... abrufen kann?

    Doch doch, nur muss dafür eben auch die entsprechende Datenstruktur zur Verfügung stehen 😉
    Settings.szPatchURL ist deklariert als TCHAR szPatchURL[MAXARRSIZE]; , also als eine feste Anzahl 'char's, also Zeichen. Um ein statisches Array von Strings zu deklarieren, eignet sich z.B. std::string patch_urls[100]; . Da ist die Array-Größe aber nicht veränderbar, also kann man auch den C++-Typ 'vector' nehmen: std::vector<std::string> patch_urls . Mit patch_urls.push_back( "Hallo" ); kannst du einen String hinzufügen, patch_urls.size() gibt dir die Anzahl zurück und mit patch_urls[10] greifst du auf's zehnte Element zu. Also alles ganz einfach, nur musst du die Datenstruktur von 'Settings' anpassen oder deine Strings in einer anderen Datenstruktur speichern, jedenfalls nicht in einem char-Array 😉

    WarKiller102 schrieb:

    mhh kannst mir erklären bzw ein beispiel für einen wrapper geben? kann mir darunter noch nicht viel vorstellen.

    Wenn der Patcher nur einzelne Dateien patcht, wäre es evtl eine Möglichkeit, einen Skript oder ein kleines Programm zu schreiben, dass den Patcher für jede einzelne Datei aufruft.

    WarKiller102 schrieb:

    Badestrand schrieb:

    edit2: Btw ist das Ding eher in C geschrieben 😕

    nunja ich hab echt nicht viel ahnung von c/c++ deshalb weiß/wusste ich es nicht genau

    Hab mich geirrt, ist aber eher C-Stil; macht ja aber nix 🙂

    Wegen dem 'throw': Du musst dir den String dann halt zusammenbasteln oder was anderes werfen. Zwei Möglichkeiten:

    int patch_site = ...;
    if ( ! bla )
    {
        std::stringstream msg;
        msg << "Invalid key in NeonCube.ini: " << patch_site;
        throw std::string( msg.str() );
    }
    
    ..
    
    catch ( const std::string& err )
    {
        MessageBox( ..., err.c_str(), ... );
    }
    

    oder

    class InvalidKeyException : public std::exception // Erbt von der Standard-exception-Klasse
    {
        public:
            InvalidKeyException( const unsigned int nr )
            {
                std::stringstream ss;
                ss << "Invalid key in NeonCube.ini: " << nr;
                ss >> m_err;
            }
    
            std::string what() const
            {
                return m_err;
            }
    
        private:
            std::string m_err;
    };
    
    int patch_site = ...;
    if ( ! bla )
        throw InvalidKeyException( patch_site );
    
    ..
    
    catch ( const InvalidKeyException& err )
    {
        MessageBox( ..., err.what(), ... );
    }
    


  • Badestrand schrieb:

    Doch doch, nur muss dafür eben auch die entsprechende Datenstruktur zur Verfügung stehen 😉
    Settings.szPatchURL ist deklariert als TCHAR szPatchURL[MAXARRSIZE]; , also als eine feste Anzahl 'char's, also Zeichen. Um ein statisches Array von Strings zu deklarieren, eignet sich z.B. std::string patch_urls[100]; . Da ist die Array-Größe aber nicht veränderbar, also kann man auch den C++-Typ 'vector' nehmen: std::vector<std::string> patch_urls . Mit patch_urls.push_back( "Hallo" ); kannst du einen String hinzufügen, patch_urls.size() gibt dir die Anzahl zurück und mit patch_urls[10] greifst du auf's zehnte Element zu. Also alles ganz einfach, nur musst du die Datenstruktur von 'Settings' anpassen oder deine Strings in einer anderen Datenstruktur speichern, jedenfalls nicht in einem char-Array 😉

    also demzufolge müsste ich suchen wo er "szPatchURL" mit den daten aus der .ini datei deklariert und diese dann auf sowas ähnliches umändern das er daraus ein "richtiges" array macht oder seh ich das jetzt falsch und müsste dann komplett alles ändern?

    *hinzufüg*
    er deklariert das ja auch bei dem:

    if(GetPrivateProfileString("server", "...", NULL, settings.sz..., sizeof(settings.sz...) / sizeof(settings.sz...[0]), INIFILE) <= 0)
    

    oder ist das nur zum prüfen da, bzw der msgbox danach?

    Badestrand schrieb:

    Wegen dem 'throw': Du musst dir den String dann halt zusammenbasteln oder was anderes werfen. Zwei Möglichkeiten:

    nunja es wird ja derzeit so gemacht:

    try
    {
    if(GetPrivateProfileString("server", "grf_number", NULL, settings.szGRFNumber, sizeof(settings.szGRFNumber) / sizeof(settings.szGRFNumber[0]), INIFILE) <= 0)
    	throw "Invalid key in NeonCube.ini: grf_number";
    
    if(GetPrivateProfileString("server", "patch_site1", NULL, settings.szPatchURL, sizeof(settings.szPatchURL) / sizeof(settings.szPatchURL[0]), INIFILE) <= 0)
    	throw "Invalid key in NeonCube.ini: patch_site";
    }
    catch(LPCSTR message)
    {
    	MessageBoxA(NULL, message, "Error", MB_OK | MB_ICONERROR);
    	AddErrorLog("%s\n", message);
    	return -1;
    }
    

    ich hab das jetzt mal bei mir so gemacht und funktioniert auch, jedoch sobald der wert aber richtig ist bringt er mir dann am ende nur eine leere msgbox.

    try
    {
    if(GetPrivateProfileString("server", "grf_number", NULL, settings.szGRFNumber, sizeof(settings.szGRFNumber) / sizeof(settings.szGRFNumber[0]), INIFILE) <= 0)
    	throw "Invalid key in NeonCube.ini: grf_number";
    
    int GRFNumbers = 1;
    std::stringstream str;
    if(GetPrivateProfileString("server", "patch_site1", NULL, settings.szPatchURL, sizeof(settings.szPatchURL) / sizeof(settings.szPatchURL[0]), INIFILE) <= 0)
    	str << "Invalid key in NeonCube.ini: patch_site" << GRFNumbers;
    	throw std::string ( str.str() );
    }
    catch(const std::string& message)
    {
    	MessageBox(NULL, message.c_str(), "Error", MB_OK | MB_ICONERROR);
    	AddErrorLog("%s\n", message);
    	return -1;
    }
    


  • Warkiller102 schrieb:

    also demzufolge müsste ich suchen wo er "szPatchURL" mit den daten aus der .ini datei deklariert und diese dann auf sowas ähnliches umändern das er daraus ein "richtiges" array macht oder seh ich das jetzt falsch und müsste dann komplett alles ändern?

    Ich hab grad mal geguckt, ist nicht viel was du ändern musst - nur in der main.h die Datenstruktur inisettings anpassen; und diese Struktur wird nur in der main.cpp benutzt, als dateiglobale Variable.

    Warkiller102 schrieb:

    er deklariert das ja auch bei dem:

    if(GetPrivateProfileString("server", "...", NULL, settings.sz..., sizeof(settings.sz...) / sizeof(settings.sz...[0]), INIFILE) <= 0)
    

    oder ist das nur zum prüfen da, bzw der msgbox danach?

    Huh? Versteh ich nicht und da wird nix deklariert 🙂 Er verwendet es da, klar, den Aufruf zu GetPrivateProfileString musst du anpassen, bzw du musst wahrscheinlich auch die Struktur der Ini-Datei ändern, wenn da mehrere Pfade statt nur einem drin sein soll.

    Warkiller102 schrieb:

    if(GetPrivateProfileString("server", "patch_site1", NULL, settings.szPatchURL, sizeof(settings.szPatchURL) / sizeof(settings.szPatchURL[0]), INIFILE) <= 0)
        str << "Invalid key in NeonCube.ini: patch_site" << GRFNumbers;
        throw std::string ( str.str() );
    

    Prinzipiell richtig, nur werden Blöcke mit {} gekennzeichnet, nicht mit Einrückungen 😉 Konkret: Nach dem if müssen geschweifte Klammern die zwei eingerückten Zeilen umgeben. Ohne geschweifte Klammern wird nur der erste Ausdruck nach dem if ausgeführt, dass throw dann so oder so. Aber wieso hast du noch das "patch_site" in dem String drin?



  • Badestrand schrieb:

    Ich hab grad mal geguckt, ist nicht viel was du ändern musst - nur in der main.h die Datenstruktur inisettings anpassen; und diese Struktur wird nur in der main.cpp benutzt, als dateiglobale Variable.

    also bei der main.h müsste ich das "TCHAR szPatchURL[MAXARRAYSIZE];" zu "std::vectorstd::string szPatchURL;" umschreiben oder?

    Badestrand schrieb:

    Warkiller102 schrieb:

    er deklariert das ja auch bei dem:

    if(GetPrivateProfileString("server", "...", NULL, settings.sz..., sizeof(settings.sz...) / sizeof(settings.sz...[0]), INIFILE) <= 0)
    

    oder ist das nur zum prüfen da, bzw der msgbox danach?

    Huh? Versteh ich nicht und da wird nix deklariert 🙂 Er verwendet es da, klar, den Aufruf zu GetPrivateProfileString musst du anpassen, bzw du musst wahrscheinlich auch die Struktur der Ini-Datei ändern, wenn da mehrere Pfade statt nur einem drin sein soll.

    nunja ich meinte irgendwo muss er ja den inhalt von der .ini datei in die variable bringen oder?^^
    achja die .ini datei sieht ungefähr so aus:

    [server]
    patch_site1 = www.example.de
    patch_site2 = www.example2.de
    

    Badestrand schrieb:

    Warkiller102 schrieb:

    if(GetPrivateProfileString("server", "patch_site1", NULL, settings.szPatchURL, sizeof(settings.szPatchURL) / sizeof(settings.szPatchURL[0]), INIFILE) <= 0)
        str << "Invalid key in NeonCube.ini: patch_site" << GRFNumbers;
        throw std::string ( str.str() );
    

    Prinzipiell richtig, nur werden Blöcke mit {} gekennzeichnet, nicht mit Einrückungen 😉 Konkret: Nach dem if müssen geschweifte Klammern die zwei eingerückten Zeilen umgeben. Ohne geschweifte Klammern wird nur der erste Ausdruck nach dem if ausgeführt, dass throw dann so oder so. Aber wieso hast du noch das "patch_site" in dem String drin?

    ok jetzt funktionierts^^ bin ich dank der vb/php lehrer so gewöhnt das man alles was nach dem if kommt auch ohne {} schreiben kann, obwohl ichs sonst auch nich mache 😕 ^^

    und vielen dank das du mir so sehr hilfst, würde sonst immer noch am anfang sitzen^^



  • Warkiller102 schrieb:

    also bei der main.h müsste ich das "TCHAR szPatchURL[MAXARRAYSIZE];" zu "std::vectorstd::string szPatchURL;" umschreiben oder?

    Richtig, aber das einfachste ist, du arbeitest dann erstmal nur mit Multibyte (also in den Projektoptionen irgendwo einstellen), sonst musst du std::wstring nehmen.

    Warkiller102 schrieb:

    nunja ich meinte irgendwo muss er ja den inhalt von der .ini datei in die variable bringen oder?^^
    achja die .ini datei sieht ungefähr so aus:

    [server]
    patch_site1 = www.example.de
    patch_site2 = www.example2.de
    

    Achso, ja, klar! Gut, ich würde der Einfachheit noch ein oder zwei kleine Hilfsfunktionen reinbringen, um das Einlesen zu vereinfachen, etwa so:

    // Ungetestet:
    string getPatchFile( const string& section, const unsigned int nr, const string& ini_path )
    {
        stringstream key;
        key << "patch_site" << nr;
    
        char ret[1000];
        GetPrivateProfileString( section, key.str().c_str(), "", ret, 1000, ini_path.c_str() );
        return string( ret );
    }
    
    // Und dann, zum auslesen:
    string path = "a"; // Damit beim ersten mal die Bedingung der for-Schleife erfüllt ist. Etwas unschön.. :D
    for ( unsigned int nr=1; path.size()>0; nr++ )
    {
        path = getPatchFile( "server", nr, INIFILE );
        if ( path.size() > 0 )
            settings.urls.push_back( path ); // Zur Liste hinzufügen
    }
    

    Warkiller102 schrieb:

    und vielen dank das du mir so sehr hilfst, würde sonst immer noch am anfang sitzen^^

    Nicht der Rede wert 🙂 Ist auch immer wieder interessant zu sehen, an was andere so arbeiten.



  • Badestrand schrieb:

    Achso, ja, klar! Gut, ich würde der Einfachheit noch ein oder zwei kleine Hilfsfunktionen reinbringen, um das Einlesen zu vereinfachen, etwa so:

    // Ungetestet:
    string getPatchFile( const string& section, const unsigned int nr, const string& ini_path )
    {
        stringstream key;
        key << "patch_site" << nr;
    
        char ret[1000];
        GetPrivateProfileString( section, key.str().c_str(), "", ret, 1000, ini_path.c_str() );
        return string( ret );
    }
    
    // Und dann, zum auslesen:
    string path = "a"; // Damit beim ersten mal die Bedingung der for-Schleife erfüllt ist. Etwas unschön.. :D
    for ( unsigned int nr=1; path.size()>0; nr++ )
    {
        path = getPatchFile( "server", nr, INIFILE );
        if ( path.size() > 0 )
            settings.urls.push_back( path ); // Zur Liste hinzufügen
    }
    

    mhh gut aber wie bind ich das nun in das schon vorhande ein, auch das mit dem "TCHAR ...;" bringt mir dann nur fehler wenn ich es in "std::vector...;" schreibe? 😕

    hab nun auch noch ein anderes (aber eher kleines problem^^)
    und zwar hier:

    if(GetPrivateProfileString(\"server\", \"grf_number\", NULL, settings.szGRFNumber, sizeof(settings.szGRFNumber) / sizeof(settings.szGRFNumber[0]), INIFILE) <= 0)
    	throw \"Invalid key in NeonCube.ini: grf_number\";
    
    int GRFNumbers = 1;
    std::stringstream grfnumb;
    std::stringstream numb;
    std::stringstream str;
    grfnumb << GRFNumbers;
    while(grfnumb.str() >= settings.szGRFNumber)
    	{
    	str << \"patch_site\" << GRFNumbers;
    	if(GetPrivateProfileString(\"server\", str.str().c_str(), NULL, settings.szPatchURL, sizeof(settings.szPatchURL) / sizeof(settings.szPatchURL[0]), INIFILE) <= 0)
    	{
    		numb << \"Invalid key in NeonCube.ini: patch_site\" << GRFNumbers;
    		throw std::string ( numb.str() );
    	}
    	++GRFNumbers;
    	grfnumb << GRFNumbers;
    }
    

    hier ist mein problem die while schleife, da es ja char und strings sind behandelt er die zahlen nicht als zahlen und bekommt irgendwie nicht mit wenn ich ihm sag er soll sie solange durchführen bis grfnumb = settings.GRFNumber ist, wie kann ich das beheben?

    mhh soll ich vieleicht mal die ganzen dateien hochstellen die (wie ich glaube) für den hauptteil verantwortlich sind?



  • Warkiller102 schrieb:

    mhh gut aber wie bind ich das nun in das schon vorhande ein, auch das mit dem "TCHAR ...;" bringt mir dann nur fehler wenn ich es in "std::vector...;" schreibe? 😕

    Also ich hab's bei mir mal ausprobiert, ich bekomme nur 4 Fehler, alle in der Art error C2039: 'szPatchURL': Ist kein Element von 'inisetting' .
    Drei der Fehler sind in der Zeile mit GetProfileString, wo halt die Patch-URLs aus der Ini-Datei gelesen werden. Da kannst du das einsetzen, was ich im Post eins drüber vorgeschlagen hab. Also die Funktion "getPatchFile" muss halt irgendwo drüber, da der std-Namensraum nicht mit using benutzt wird, musst du in "getPatchFile" halt auch noch ein paar mal "std::" einbauen 🙂

    Warkiller102 schrieb:

    hab nun auch noch ein anderes (aber eher kleines problem^^)
    und zwar hier:

    if(GetPrivateProfileString(\"server\", \"grf_number\", NULL, settings.szGRFNumber, sizeof(settings.szGRFNumber) / sizeof(settings.szGRFNumber[0]), INIFILE) <= 0)
    	throw \"Invalid key in NeonCube.ini: grf_number\";
    
    int GRFNumbers = 1;
    std::stringstream grfnumb;
    std::stringstream numb;
    std::stringstream str;
    grfnumb << GRFNumbers;
    while(grfnumb.str() >= settings.szGRFNumber)
    	{
    	str << \"patch_site\" << GRFNumbers;
    	if(GetPrivateProfileString(\"server\", str.str().c_str(), NULL, settings.szPatchURL, sizeof(settings.szPatchURL) / sizeof(settings.szPatchURL[0]), INIFILE) <= 0)
    	{
    		numb << \"Invalid key in NeonCube.ini: patch_site\" << GRFNumbers;
    		throw std::string ( numb.str() );
    	}
    	++GRFNumbers;
    	grfnumb << GRFNumbers;
    }
    

    hier ist mein problem die while schleife, da es ja char und strings sind behandelt er die zahlen nicht als zahlen und bekommt irgendwie nicht mit wenn ich ihm sag er soll sie solange durchführen bis grfnumb = settings.GRFNumber ist, wie kann ich das beheben?

    Ich verstehe nicht genau, was die Schleife machen soll - wenn du mir die Soll-Funktionalität erklärst, fällt uns bestimmt was gutes ein.

    Warkiller102 schrieb:

    mhh soll ich vieleicht mal die ganzen dateien hochstellen die (wie ich glaube) für den hauptteil verantwortlich sind?

    Ja, das wäre nicht schlecht, die Zeile mit GetPrivateProfileString(\"server\", \"grf_number\",...) finde ich im Original-Code nicht und weiß ja generell nicht, auf welchem Stand dein Code grad ist.



  • nunja die schleife soll dann dafür dasein, das man "unendliche" viele einträge machen kann, die er dann halt jeweils in die szPatchURL bringt, bzw checkt ob das richtig ist oder nicht^^ aber sollte man wohl eher dann machen wenn das mit dem array richtig klappt oder?^^

    habs mal hier: http://bdw-server.servebbs.com/Cplusplus/Patcher.rar hochgeladen
    (zum richtig testen müssteste dir nurnoch 2 exen und eine .grf (einfach irgendeine datei nehmen und umbenennen zu ner .grf) machen, am besten vorher nochma in "neoncube/neoncube.ini" gucken^^)



  • Warkiller102 schrieb:

    nunja die schleife soll dann dafür dasein, das man "unendliche" viele einträge machen kann, die er dann halt jeweils in die szPatchURL bringt, bzw checkt ob das richtig ist oder nicht^^ aber sollte man wohl eher dann machen wenn das mit dem array richtig klappt oder?^^

    Ja, besser erstmal das Array in Schwung bringen 😃 Wofür steht eigentlich das GRF? Und so ganz versteh ich die Schleife immer noch nicht, wer macht denn Einträge? Und jedesmal wird geschaut, ob "patch_sitexy" schon in der Ini-Datei eingetragen ist? Eventuell könntest du in der Ini-Section [server] auch einfach die Anzahl der URLs speichern, irgendwie "patch_site_count=xy" oder so?

    Warkiller102 schrieb:

    habs mal hier: http://bdw-server.servebbs.com/Cplusplus/Patcher.rar hochgeladen
    (zum richtig testen müssteste dir nurnoch 2 exen und eine .grf (einfach irgendeine datei nehmen und umbenennen zu ner .grf) machen, am besten vorher nochma in "neoncube/neoncube.ini" gucken^^)

    Die Seite geht bei mir irgendwie nicht 😕



  • Badestrand schrieb:

    Ja, besser erstmal das Array in Schwung bringen 😃 Wofür steht eigentlich das GRF? Und so ganz versteh ich die Schleife immer noch nicht, wer macht denn Einträge? Und jedesmal wird geschaut, ob "patch_sitexy" schon in der Ini-Datei eingetragen ist? Eventuell könntest du in der Ini-Section [server] auch einfach die Anzahl der URLs speichern, irgendwie "patch_site_count=xy" oder so?

    GRF ist sowas wie ein "rar" verzeichnis also nen container für dateien^^
    die anzahl ist ja gespeichert in der GRFNumbers, die heißt in der .ini "grf_number"^^

    und ja er soll halt prüfen ob ein wert vorliegt und wenn ja dann soll er weitermachen oder halt den throw wert ausgeben^^

    Badestrand schrieb:

    Die Seite geht bei mir irgendwie nicht 😕

    lag am provider, bzw internet das war seit heut früh irgendwie down, ebenfalls der server dürft jetzt aber wieder gehen^^



  • grüße
    hast du/hat schon jemand vielleicht einen anderen/neuen lösungsvorschlag? komm allein irgendwie nicht weiter.

    mfg
    Warkiller102



  • Ich guck morgen irgendwann nochmal in den Code, wenn ich Zeit finde 🙂



  • Haste schon Zeit gefunden?^^

    Oder hat vielleicht noch jemand anders eine Idee?

    MfG
    Warkiller102



  • grüße
    hab den patcher nochma neu hochgeladen, mir ist aufgefallen das da einige dateien nich mit drin waren.

    hier nochma der link: http://bdw-server.servebbs.com/Cplusplus/Patcher.rar

    hat aber vieleicht schon jemand eine idee?

    mfg
    Warkiller102


Anmelden zum Antworten