Ergebnis 1 bis 3 von 3

Thema: Hotfix: Mehrsprachige Mods (by Hamers)

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Professional Avatar von Hamers
    Registriert seit
    29.02.2008
    Ort
    Mittendrin
    Beiträge
    2.760

    Standard Hotfix: Mehrsprachige Mods (by Hamers)

    Hey Jungs

    Da die Frage nun schon öfters aufgekommen ist, möchte ich an dieser Stelle kurz beschreiben wie man das Problem behebt, dass Crysis keine Dateien im Localized Ordner einer Mod erkennt und es daher unmöglich ist mehrsprachige Mods mithilfe des Crysis Systems zu realisieren.

    Für den Fix ist eine Code-Änderung erforderlich. Ich gehe daher davon aus, dass Grundkenntnisse in der C++ Programmierung vorhanden sind. Ich kann auch keine Garantien geben für Korrektheit. Ich werde aber versuchen auf Fragen einzugehen, soweit es meine (begrenzte) Zeit erlaubt.

    Ich werde mich daher auch auf das nötigste beschränken und nur zeigen wie man seinen Code anpasst, damit man mehrere Sprachpakete nutzen kann. Wie das Crysis Lokalisations System an sich funktioniert, dauert zu lang zu erklären und sollte jeder für sich selber herausfinden.

    Empfehlenswert dafür sind folgende Seiten des Free SDK:

    http://freesdk.crydev.net/display/SD...ization+System (Achtung: Wie die Seite selber sagt, hat sich einiges geändert mit der Version 3.4.3 des Free SDK. Davor war das System identisch mit Crysis 1 und Crysis Wars)

    http://freesdk.crydev.net/display/SD...+Dialog+System


    Nun aber zum Code Teil
    Ich habe versucht möglichst viel zusammenzufassen und unnötiges wegzulassen, damit es einfacher wird. Ein Teil stammt noch aus der Rainy Days Zeit, daher nicht immer ganz ordentlich und perfekt


    Notwendige Änderung:

    In der Game.cpp in die Funktion CGame::Init vor der Zeile m_pFlashMenuObject = new CFlashMenuObject einfügen:

    Code:
    //Set Mod language based on automatically detected language
    ILocalizationManager* pLocMgr = gEnv->pSystem->GetLocalizationManager();
    
    //Get current language    
    string m_bDetectLanguage = pLocMgr->GetLanguage();
    
    //Wreckage only supports German or English language. Others will be set to English!
    if (m_bDetectLanguage != "German" && m_bDetectLanguage != "English") 
        m_bDetectLanguage = "English";
    
    //Free all data for refresh
    gEnv->pSystem->GetLocalizationManager()->FreeData();
    
    //Set language
    gEnv->pSystem->GetLocalizationManager()->SetLanguage("../../mods/wreckage/game/localized/" + m_bDetectLanguage);
    
    //Add language pak file to FileSystem    
    gEnv->pSystem->GetIPak()->OpenPack( "","Mods/Wreckage/Game/Localized/" + m_bDetectLanguage + ".pak");
    
    //Set CVar for Sub-Systems
    string sCommand = "g_language";
    
    sCommand.append(" ");
    sCommand.append(m_bDetectLanguage);
    gEnv->pConsole->ExecuteString(sCommand.c_str());
        
    //Reload all XmlSpreadsheets
    gEnv->pSystem->GetLocalizationManager()->LoadExcelXmlSpreadsheet("languages/ui_text_messages.xml", true);
    gEnv->pSystem->GetLocalizationManager()->LoadExcelXmlSpreadsheet("languages/ui_dialog_recording_list.xml", true);
    gEnv->pSystem->GetLocalizationManager()->LoadExcelXmlSpreadsheet("languages/ui_credit_list.xml", true);
    gEnv->pSystem->GetLocalizationManager()->LoadExcelXmlSpreadsheet("languages/ps_basic_tutorial_subtitles.xml", true);
    gEnv->pSystem->GetLocalizationManager()->LoadExcelXmlSpreadsheet("languages/movielist.xml", true);
    gEnv->pSystem->GetLocalizationManager()->LoadExcelXmlSpreadsheet("languages/game_text_messages.xml", true);
    gEnv->pSystem->GetLocalizationManager()->LoadExcelXmlSpreadsheet("languages/game_controls.xml", true);
    gEnv->pSystem->GetLocalizationManager()->LoadExcelXmlSpreadsheet("languages/dialog_recording_list.xml", true);
    gEnv->pSystem->GetLocalizationManager()->LoadExcelXmlSpreadsheet("languages/ai_dialog_recording_list.xml", true);
    Der fertige Code sollte so aussehen:

    Code:
    if (!gEnv->pSystem->IsDedicated())
    {
    ---Der Code von oben---
    
    m_pFlashMenuObject = new CFlashMenuObject;
    m_pFlashMenuObject->Load();
    }
    Bitte darauf achten, dass ihr das Wort Wreckage in den Pfadangaben durch den Namen eurer Mod ersetzt!

    Auch gilt es zu beachten, dass in diesem Beispiel der Sprachsupport auf Englisch und Deutsch beschränkt wird. Wenn ihr die eine IF Abfrage entfernt, könnt ihr auch alle Sprachen zulassen, müsst dann aber auch die entsprechenden Sprachpakete bereitstellen. Selbstverständlich kann die Abfrage beliebig erweitert werden, um jede erdenkliche Sprach-Kombination zuzulassen z.B. nur Englisch oder Deutsch, Englisch und Spanisch usw.

    Das sollte es bereits gewesen sein. Für Wreckage wurden noch zahlreiche weitere Modifikationen vorgenommen, die aber wahrscheinlich für die meisten nicht sonderlich interessant sind. Das hier sollte ausreichen, damit Crysis eure gewünschten pak Dateien aus eurem "MeineMod->Game->Localized" Ordner lädt und verwendet.

    Schönes Wochenende noch
    Geändert von Hamers (08.12.2012 um 23:42 Uhr)

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •