Beiträge von Keine_Person

    Ne ist auch in 3 Dimensionen:

    enum Inventar_Daten
    {
    //Bedarf Inventar
    Float:PolosChickenwings,
    Float:FreddysMargarithaPizza,
    Float:Sprunk,
    //Illegales Inventar
    Float:Cannabis[101],
    Float:CrystalMeth[101],
    Float:Heroin[101],
    Float:Cocaine[101],
    //Normales Inventar
    pMarkeOfficer,
    pSateliteHandy,
    pUniformOfficer,
    };
    new Inventar[MAX_PLAYERS][Inventar_Daten];


    Denke jedenfalls das es so klappen sollte.


    else if(!strcmp(produkt, InventarName[playerid][Kokain]))
    {
    if(Inventar[playerid][Kokain][qualitaet] >= menge) //<-Hier ist der Error
    {
    Inventar[playerid][Kokain][qualitaet] -= menge;
    Info[playerid][RpPoints] += InventarRPPlus[Kokain];
    return 1;
    }
    else return SCM(playerid,rot,"Nicht genügend vorhanden!");
    }

    Jetzt habe ich hier einen Error obwohl die selbe Funktion mit den anderen Drogen klappt. Keine Ahnung was da spuckt.


    enum Inventar_Name
    {
    PolosChickenwings[128],
    FreddysMargarithaPizza[128],
    Sprunk[128],
    Cannabis[128],
    CrystalMeth[128],
    Heroin[128],
    Kokain[128]
    }
    enum RPPlus_Daten
    {
    PolosChickenwings,
    FreddysMargarithaPizza,
    Sprunk,
    Cannabis,
    CrystalMeth,
    Heroin,
    Kokain
    }
    enum Inventar_Daten
    {
    //Bedarf Inventar
    Float:PolosChickenwings,
    Float:FreddysMargarithaPizza,
    Float:Sprunk,
    //Illegales Inventar
    Float:Cannabis[101],
    Float:CrystalMeth[101],
    Float:Heroin[101],
    Float:Cocaine[101],
    //Normales Inventar
    pMarkeOfficer,
    pSateliteHandy,
    pUniformOfficer,
    };
    };




    new Info[MAX_PLAYERS][Account_Daten];
    new Inventar[MAX_PLAYERS][Inventar_Daten];
    new InventarName[MAX_PLAYERS][Inventar_Name];
    new InventarRPPlus[RPPlus_Daten];




    else
    {
    for(new i = 0; i<MAX_INVENTAR; i++)
    {
    if(!strcmp(produkt, InventarName[playerid][Inventar_Name:i]) /*&& !isnull(produkt) && !isnull(InventarName[playerid][Inventar_Name:i])*/)
    {
    if(Inventar[playerid][Inventar_Daten:i] >= menge)
    {
    Inventar[playerid][Inventar_Daten:i] -= menge;
    Info[playerid][RpPoints] += InventarRPPlus[RPPlus_Daten:i];
    return 1;
    }
    else return SCM(playerid,rot,"Nicht genügend dabei!");
    }
    if(i == MAX_INVENTAR)
    {
    SCM(playerid,rot,"Produkt nicht bekannt!");
    return 1;
    }
    }
    }

    Ich brauch es in einem Enum damit ich es dynamisch abzählen kann für die vielen Inventare die keine Drogen sind sondern einfach nur Produkte zum Essen und trinken. Bei der Cannabis Funktion und der dynamischen Funktion klappt es auch wunderbar, aber nur hier nicht. Gibt es sonst eine andere Möglichkeit oder findest du den Fehler beim CrystelMeth?


    Edit: Wenn ich auf 5 runtergehe klappt es irgendwie.
    Edit 2: Irgendwie bekomme ich Errors bei Funktionen die anders genau so klappen?

    Hab einen neuen Fehler. Bei der ersten Funktion klappt es ohne Probleme, hier jedoch macht er Macken:

    enum RPPlus_Daten
    {
    PolosChickenwings = 1,
    FreddysMargarithaPizza = 1,
    Sprunk = 1,
    Cannabis = 3,
    CrystalMeth = 10,
    Heroin = 10,
    Kokain = 5
    }


    else if(!strcmp(produkt, InventarName[playerid][CrystalMeth]))
    {
    if(Inventar[playerid][CrystalMeth][qualitaet] >= menge)
    {
    Inventar[playerid][CrystalMeth][qualitaet] -= menge;
    Info[playerid][RpPoints] += InventarRPPlus[playerid][CrystalMeth];
    return 1;
    }
    }

    In der Zeile: Info[playerid][RpPoints] += InventarRPPlus[playerid][CrystalMeth];


    Code
    C:\Program Files\Grand Theft Auto San Andreas\gamemodes\bigcitylife.pwn(224) : error 032: array index out of bounds (variable "InventarRPPlus")
    Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase
    
    
    
    
    1 Error.

    Man soll die Droge, Qualitätsstufe und die Menge angeben und dies soll dann entsprechend genutzt werden. Irgendwie habe ich leider einen Error dabei:

    enum Inventar_Daten
    {
    //Bedarf Inventar
    Float:PolosChickenwings,
    Float:FreddysMargarithaPizza,
    Float:Sprunk,
    //Illegales Inventar
    Float:Cannabis[101],
    Float:CrystalMeth[101],
    Float:Heroin[101],
    Float:Cocaine[101],
    //Normales Inventar
    pMarkeOfficer,
    pSateliteHandy,
    pUniformOfficer,
    };


    else if(!sscanf(params,"sdf",produkt,qualitaet,menge))
    {
    for(new i = 0; i<MAX_INVENTAR; i++)
    {
    if(!strcmp(produkt, InventarName[playerid][Inventar_Name:i]) /*&& !isnull(produkt) && !isnull(InventarName[playerid][Inventar_Name:i])*/)
    {
    if(Inventar[playerid][Inventar_Daten:i] >= menge)
    {
    Inventar[playerid][Inventar_Daten:i][qualitaet] -= menge;
    Info[playerid][RpPoints] += InventarRPPlus[playerid][RPPlus_Daten:i];
    return 1;
    }
    else SCM(playerid,rot,"Nicht genügend dabei!");
    }
    if(i == MAX_INVENTAR)
    {
    SCM(playerid,rot,"Produkt nicht bekannt!");
    return 1;
    }
    }
    }

    Das sind extra Enums und jedes Objekt im Inventar ist dann dort aufgelistet. Wenn ich also alle Objekte im Enum auslesen kann und damit die Max der Liste (wie lang die Liste zu dem Zeitpunkt ist) auslesen kann wäre das genau richtig.

    Ich möchte aus einem Enum herauslesen wie hoch das Maximal ist. Habs mir so gedacht aber das geht nicht:

    #define MAX_INVENTAR Inventar_Name
    enum Inventar_Name
    {
    PolosChickenwings[128],
    FreddysMargarithaPizaa[128],
    Sprunk[128],
    Cannabis[128],
    CrystalMeth[128],
    Heroin[128],
    Kokain[128]
    }



    Finde die Funktion zum auszählen nicht falls es nicht leichter geht. Jemand schnelle Hilfe parat?

    Ah da war der Fehler, ich danke dir!
    Irgendwas failt da noch
    case DIALOG_LOGIN_1: { if(!response)return CON_CLOSE; new key[128]; //new file[128]; format(file,sizeof(file),"/Accounts/%s.inc",GetName(playerid)); format(key,sizeof(key), dini_Get(file, "key")); if(key[0] != EOS && inputtext[0] != EOS && !strcmp(inputtext, key)) { /*new string[128]; format(Info[playerid][CharacterName1],sizeof(string),dini_Get(file, "CharacterName1")); format(Info[playerid][CharacterName2],MAX_PLAYER_NAME,dini_Get(file, "CharacterName2")); format(Info[playerid][CharacterName3],MAX_PLAYER_NAME,dini_Get(file, "CharacterName3")); format(string,sizeof(string),"%s\n%s\n%s",Info[playerid][CharacterName1],Info[playerid][CharacterName2],Info[playerid][CharacterName3]); print(string); print(Info[playerid][CharacterName1]); print(Info[playerid][CharacterName2]); print(Info[playerid][CharacterName3]); ShowPlayerDialog(playerid,DIALOG_LOGIN_2,DIALOG_STYLE_LIST,"Charaktere:",string,"Login","Abbrechen");*/ new ch[3][MAX_PLAYER_NAME],string[128]; format(Info[playerid][CharacterName1],MAX_PLAYER_NAME,dini_Get(file, "CharacterName1")); format(Info[playerid][CharacterName2],MAX_PLAYER_NAME,dini_Get(file, "CharacterName2")); format(Info[playerid][CharacterName3],MAX_PLAYER_NAME,dini_Get(file, "CharacterName3")); if(Info[playerid][CharacterName1][0] == EOS) ch[0] = "/"; else strcat(ch[0],Info[playerid][CharacterName1]); if(Info[playerid][CharacterName2][0] == EOS) ch[1] = "/"; else strcat(ch[1],Info[playerid][CharacterName2]); if(Info[playerid][CharacterName3][0] == EOS) ch[2] = "/"; else strcat(ch[2],Info[playerid][CharacterName3]); format(string,sizeof(string),"%s\n%s\n%s",ch[0],ch[1],ch[2]); ShowPlayerDialog(playerid,DIALOG_LOGIN_2,DIALOG_STYLE_LIST,"Charaktere:",string,"Login","Abbrechen"); print(string); print(Info[playerid][CharacterName1]); print(Info[playerid][CharacterName2]); print(Info[playerid][CharacterName3]); return 1; } }


    Code
    Character free0=1
    Character free1=0
    Character free2=0
    CharacterName1=Arnold
    CharacterName2=Leer
    CharacterName3=Leer
    key=weeder77
    Password Given=1


    C:\Program Files\Grand Theft Auto San Andreas\gamemodes\ganmore.pwn(535) : warning 219: local variable "ch" shadows a variable at a preceding level

    Da war das doch nur das Problem das der String leer war. Daher hab ich mir gedacht ich schreib einfach was rein. Hab ich doch so oben erklärt, sorry wenn es nicht zu erkennen war. Ich werde mal dein Code nutzen.



    new ch[3][MAX_PLAYER_NAME],string[128];
    format(Info[playerid][CharacterName1],MAX_PLAYER_NAME,dini_Get(file, "CharacterName1"));
    format(Info[playerid][CharacterName2],MAX_PLAYER_NAME,dini_Get(file, "CharacterName2"));
    format(Info[playerid][CharacterName3],MAX_PLAYER_NAME,dini_Get(file, "CharacterName3"));
    if(Info[playerid][CharacterName1][0] == EOS) ch[0] = "/";
    else strcat(ch[0],Info[playerid][CharacterName1]);
    if(Info[playerid][CharacterName2][0] == EOS) ch[1] = "/";
    else strcat(ch[1],Info[playerid][CharacterName2]);
    if(Info[playerid][CharacterName3][0] == EOS) ch[2] = "/";
    else strcat(ch[2],Info[playerid][CharacterName3]);
    format(string,sizeof(string),"%s\n%s\n%s",ch[0],ch[1],ch[2]);
    ShowPlayerDialog(playerid,DIALOG_LOGIN_2,DIALOG_STYLE_LIST,"Charaktere:",string,"Login","Abbrechen");
    print(string);
    print(Info[playerid][CharacterName1]);
    print(Info[playerid][CharacterName2]);
    print(Info[playerid][CharacterName3]);


    Print:
    /
    /
    /
    <null>
    <null>
    <null>


    if(!response)return CON_CLOSE;
    new key[128];
    new file[128];
    format(file,sizeof(file),"/Accounts/%s.inc",GetName(playerid));
    format(key,sizeof(key), dini_Get(file, "key"));
    if(key[0] != EOS && inputtext[0] != EOS && !strcmp(inputtext, key))
    {
    new string[128];
    format(Info[playerid][CharacterName1],sizeof(string),dini_Get(file, "CharacterName1"));
    format(Info[playerid][CharacterName2],MAX_PLAYER_NAME,dini_Get(file, "CharacterName2"));
    format(Info[playerid][CharacterName3],MAX_PLAYER_NAME,dini_Get(file, "CharacterName3"));
    format(string,sizeof(string),"%s\n%s\n%s",Info[playerid][CharacterName1],Info[playerid][CharacterName2],Info[playerid][CharacterName3]);
    print(string);
    print(Info[playerid][CharacterName1]);
    print(Info[playerid][CharacterName2]);
    print(Info[playerid][CharacterName3]);
    ShowPlayerDialog(playerid,DIALOG_LOGIN_2,DIALOG_STYLE_LIST,"Charaktere:",string,"Login","Abbrechen");
    return 1;
    }



    Der Pfad stimmt, andere Dinge werden ja auch geladen wie das Passwort.