CONFIG.INI

  • #1, by SethosThursday, 22. March 2012, 23:45 14 years ago
    Im Menü Optionen meines Spiels nehme ich die entsprechenden Einstellungen vor. Der oder die Buttons leuchten dann als aktiv auf. Die Buttons sind zu diesem Zweck an Werte oder Bedingungen geknüpft. Anschließend schreibe ich diese in die config.ini. Das ist auch alles kein Problem, aber...

    Wenn ich jetzt das Spiel neu starte, werden die Einstellungen zwar übernommen, aber in meinem Menü leuchten die entsprechend aktivierten Buttons nicht mehr. Der Spieler kann also nicht sehen, wie alles eingestellt ist.

    Beispiel (config.ini):

    
    local iniFilename = localAppDir .. 'config.ini'
    local iniFile = io.open(iniFilename, 'r')
    local newIniFilename = localAppDir .. 'config.ini.bak'
    local newIniFile = io.open(newIniFilename, 'w')

    print(iniFilename) print(newIniFilename) local fullscreen = getObject('Conditions[Vollbildmodus]'):getBool(VConditionValue) local subtitles = getObject('Conditions[Untertitel]'):getBool(VConditionValue) local resolution = getObject('Values[resolution]'):getStr(VValueString) local hotspots = getObject('Conditions[Hotspots]'):getBool(VConditionValue) if iniFile ~= nil then print('ini file exists') for line in iniFile:lines() do print(line) local lineLowercase = line:lower() if not string.find(lineLowercase, 'fullscreen') and not string.find(lineLowercase, 'resolution') and not string.find(lineLowercase, 'subtitles') and not string.find(lineLowercase, 'hotspots') then newIniFile:write(line .. '\n') end end iniFile:close() end

    if fullscreen then newIniFile:write('Fullscreen = Yes\n') else newIniFile:write('Fullscreen = No\n') end

    if subtitles then newIniFile:write('Subtitles = Yes\n') else newIniFile:write('Subtitles = No\n') end

    if hotspots then newIniFile:write('Hotspots = Yes\n') else newIniFile:write('Hotspots = No\n') end

    newIniFile:write('Resolution = ' .. resolution .. '\n')

    newIniFile:close()

    os.remove(iniFilename) os.rename(newIniFilename, iniFilename)

    Also, ich habe folgendes Problem. Wie kann ich die Einträge der "config.ini" beim Start des Spiels wieder in Bedingungen oder Werte übersetzen, damit beim start des Spiels alle Änderungen im Optionsmenü wieder angezeigt werden?

    1. Bild: Optionsmenü nach dem Neustart des Spiels: 2. Bild: Optionsmenü nach dem die Einträge vorgenommen wurden:

    Newbie

    5 Posts


  • #2, by mowrenSunday, 25. March 2012, 12:09 14 years ago
    Um die Bedingungen setzen zu können musst du natürlich die config.ini auslesen. Dazu kannst du nach dem Öffnen der Datei ebenfalls eine Schleife laufen lassen und für jede Zeile nach den Inhalten suchen. Wurde dann eine entsprechende Einstellung gefunden setzt du mit setValue die Bedingung oder den Wert die bei dir für die Anzeige zuständig sind.

    Newbie

    10 Posts

  • #3, by SethosSunday, 25. March 2012, 14:18 14 years ago
    Hallo mowren,

    das habe ich mir auch schon so vorgestellt. Meine Frage wäre nun aber, wie ich das praktisch umsetze. Leider bin ich in LUA nicht allzu bewandert. Für das schreiben der Config an sich habe ich schon Ewigkeiten gebraucht...

    config.ini: (aktuelle config.ini meines Projektes mit den dazu gehörigen "Schalter ist aktiv" Bedingungen")

    Resolution = 1600x900 Bedingung "_schalter3_aktiv" Fullscreen = No Bedingung "_schalter5_aktiv" 3D Effects = Yes Bedingung "_schalter6_aktiv" Surround = No Bedingung "_schalter7_aktiv" Language = German Bedingung "_schalter8_aktiv" Subtitles = Yes Bedingung "_schalter9_aktiv" Hotspots = No Bedingung "_schalter10_aktiv" MusicVolume = 30 SoundVolume = 60 SpeechVolume = 90

    Kannst Du mir anhand von Zeile 1 und 2 meiner config ein Beispiel für das Ausführungscript zum auslesen und des setzens der entsprechenden Bedingung geben?

    Newbie

    5 Posts

  • #4, by mowrenSunday, 25. March 2012, 14:58 14 years ago
    Das ist im wesentlich fast das gleiche was du beim schreiben machst. Nur mit Abfragen für den Inhalt der Zeile. VConditionValue setzen für Boolsche Wert, VValueInt für Integer wie die Lautstärke.

    
    local loc_fullscreen = getObject('Conditions[_schalter5_aktiv]'):getBool(VConditionValue)

    if iniFile ~= nil then for line in iniFile:lines() do local lineLowercase = line:lower() if lineLowercase == "fullscreen = no" then loc_fullscreen:setValue(VConditionValue, false) elseif lineLowercase == XY then ... end end iniFile:close() end

    Newbie

    10 Posts

  • #5, by SethosSunday, 25. March 2012, 15:03 14 years ago
    Besten Dank für Deine schnelle Hilfe. Hatte ganz gut damit zu kämpfen...

    Newbie

    5 Posts

  • #6, by afrlmeThursday, 11. October 2012, 18:08 13 years ago
    Könnte jemand schreiben ein vollständiges Beispiel für was dies bitte aussehen würde? in Englisch vorzugsweise!

    Cheers wink

    * I have no idea if what I typed is correct! (used bing translator) ** I figured if I asked in this German thread more people would see my post smile

    Imperator

    7286 Posts

  • #7, by afrlmeThursday, 11. October 2012, 18:16 13 years ago
    0ok forgot to type the English too razz

    Could anyone post a full working example of this please?

    Safe smile

    Imperator

    7286 Posts