Sprachauswahl funktioniert nicht

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • if(dialogid == DIALOG_LANGUAGES_CMD)
    {
    if(!response) return 1;
    if(response)
    {
    if(listitem == 0)
    {
    pInfo[playerid][Language] = "Deutsch";
    SendLanguageMessage(playerid, COLOR_RED, "[SPIELERINFO] Du hast deine Sprache auf 'Deutsch [DE]' gesetzt!", "[PLAYERINFO] You set your language to 'German [GER]'!");
    }
    if(listitem == 1)
    {
    pInfo[playerid][Language] = "English";
    SendLanguageMessage(playerid, COLOR_RED, "[SPIELERINFO] Du hast deine Sprache auf 'Englisch [EN]' gesetzt!", "[PLAYERINFO] You set your language to 'English [EN]'!");
    }
    }
    }


    stock SendLanguageMessage(playerid, color, LanguageDE[], LanguageEN[])
    {
    if(strcmp(pInfo[playerid][Language], "Deutsch", true, strlen(pInfo[playerid][Language]))) return SendClientMessage(playerid, color, LanguageDE);
    if(strcmp(pInfo[playerid][Language], "English", true, strlen(pInfo[playerid][Language]))) return SendClientMessage(playerid, color, LanguageEN);
    return 1;
    }


    Wenn ich "Deutsch" auswähle, wird die Sprache auf Englisch gesetzt, und umgekehrt.
    Jemand eine Idee?
    Falls noch weiterer Code für die Lösung benötigt wird, bitte bescheid sagen.


    Danke!

  • Ok, ich steig seh jetzt mal ab von den strings, und arbeite mit Werten...


    Sprachen Enumerator
    enum Languages
    {
    LANGUAGE_DE,
    LANGUAGE_EN
    }
    new pLanguage[MAX_PLAYERS][Languages];


    Speichern der Userdatei (OnPlayerDisconnect)
    new INI:file = INI_Open(Path(playerid));
    INI_SetTag(file, "User Data");
    INI_WriteString(file, "IP", pInfo[playerid][IP]);
    INI_WriteInt(file, "AdminLevel", pInfo[playerid][AdminLevel]);
    INI_WriteInt(file, "Money", GetPlayerMoney(playerid));
    INI_WriteInt(file, "Bank", pInfo[playerid][Bank]);
    INI_WriteInt(file, "Score", GetPlayerScore(playerid));
    INI_WriteInt(file, "Kills", pInfo[playerid][Kills]);
    INI_WriteInt(file, "Deaths", pInfo[playerid][Deaths]);
    INI_WriteInt(file, "Language", GetPlayerLanguage(playerid));
    INI_Close(file);
    return 1;


    Laden der Userdatei
    public loadaccount_user(playerid, name[], value[])
    {
    INI_String("Password", pInfo[playerid][Password], 129);
    INI_String("IP", pInfo[playerid][IP], 16);
    INI_Int("AdminLevel", pInfo[playerid][AdminLevel]);
    INI_Int("Money", pInfo[playerid][Money]);
    INI_Int("Bank", pInfo[playerid][Bank]);
    INI_Int("Score", pInfo[playerid][Score]);
    INI_Int("Kills", pInfo[playerid][Kills]);
    INI_Int("Deaths", pInfo[playerid][Deaths]);
    INI_Int("Language", GetPlayerLanguage(playerid)); //error 022: must be lvalue (non-constant)
    return 1;
    }


    Ermitteln der Sprache des Spielers
    stock GetPlayerLanguage(playerid)
    {
    if(pLanguage[playerid][LANGUAGE_DE])
    {
    pLanguage[playerid][LANGUAGE_EN] = 0;
    return pLanguage[playerid][LANGUAGE_DE] = 1;
    }
    if(pLanguage[playerid][LANGUAGE_EN])
    {
    pLanguage[playerid][LANGUAGE_DE] = 0;
    return pLanguage[playerid][LANGUAGE_EN] = 1;
    }
    return 1;
    }


    Nun spuckt er mir folgende Fehlermeldung aus: error 022: must be lvalue (non-constant)
    Stimmt was an der stock Funktion nicht?

  • Ich verstehe nicht, was du machen willst?!
    Du musst dich für 1 entscheiden.
    Entweder du machst es mit defines oder mit Integern.
    Aber nicht enum integer irgendwas gemischt....
    Du hast ja sicherlich auch SpielerInfos.
    Mach dort einfach mal ne Array "Language".
    Dieser Teilst du jetzt einen Wert zu...Entweder Integer oder nen define.

  • Ich hab zurzeit Schwierigkeiten die Sprache in der Userfile zu speichern... Ich hab das jetzt mit einem enum gemacht, da ich sehr oft gelesen hab, dass das defines vorgezogen wird.
    Integer bedeutet doch eig "1" (true) oder "0" (false), oder? Wie speicher ich dass dann in der Userfile ab?


    Ich hab mir das im Prinzip so gedacht:
    "Wenn LANGUAGE_DE gleich 1 & LANGUAGE_EN gleich 0, dann speichere LANGUAGE_DE"
    ... und umgekehrt?
    Dann hab ich 2 if-Abfragen, was gespeichert werden soll.
    Wie liefe das mit defines ab? Ich hoffe, ich hab mich verständlicher ausgedrückt...


    ___________________________________________________________________________________________________________________________________________________________


    EDIT: Ich hab mich dumm, wie ein Hornochse angestellt, ich hab es jetzt hingekriegt. Mit den defines ist es am einfachsten.
    Vielen Dank für die Antworten!


    ~ done

    Einmal editiert, zuletzt von Manyula ()