Beiträge von Jeffry

    Das ist zurzeit die Dialog funktion und wie ich schon oben gesagt habe Egal ob ich auf den Infernus oder Sultan drücke es kommt immer der Infernus raus

    Da habe ich im Code, den ich dir gegeben habe, noch etwas vergessen.
    if(count == listitem)
    {
    slot = i;
    break;
    }
    zu:
    if(count == listitem)
    {
    slot = i;
    break;
    }
    count++;


    Was bei mir auch nicht Funktionieren wird ist diese Funktion sobald ich den wert auf 0 stelle passiert mit dem Auto nichts

    Das kommt drauf an, ob das Fahrzeug schon einen Slot hat, oder nicht. Die 0 kannst du nur angeben, wenn das Fahrzeug noch keinen Slot hat.

    Im enum gibt es keinen Wert der "Kokain" heißt, daher der Fehler.
    "qualitaet" nehme ich an, ist eine Variable, die lokal definiert wurde.


    Versuche es so:
    if(Inventar[playerid][Cocaine][qualitaet] >= menge)


    Falls es nicht geht, poste bitte, wie "qualitaet" deklariert ist und wo/wie es seinen Wert bekommt.

    if(Inventar[playerid][Kokain][qualitaet] >= menge)

    Wie hast du denn "Inventar" und dessen enums jetzt deklariert? Oben waren es noch zwei Arrays, wenn das immernoch so ist, dann passt das hier mit drei Arrays nicht.



    Ich scripte zwar erst seit gestern und bin gerade eig. noch der größte noob dabei, ABER ich würde sagen, dass die Fehler hier sind:

    Die Fehler darfst du nicht immer wörtlich nehmen, oft sind das Folgefehler, die der Compiler auswirft, weil etwas anderes nicht passt.
    Hier ist die Vermutung, dass auf ein zweidimensionales Array mit drei Dimensionen zugegriffen wird. Kommt drauf an, wie das Array und enum deklariert ist.

    Das sieht schon besser aus, das ist auch dynamisch, gut!


    Dann kannst du die Daten - anstatt im enum - hier eintragen:
    new InventarRPPlus[RPPlus_Daten];
    zu:
    new InventarRPPlus[RPPlus_Daten] = {
    1,
    10,
    5,
    //...
    3
    }

    Du hast das Prinzip von enums nicht verstanden.
    Ein enum ist lediglich eine Sammlung von Zeigern innerhalb eines Arrays.


    Wenn du 5 Werte im enum hast, und einen davon auf 10 setzt, dann klappt das nicht, da es keinen Index 10 zwischen 0 und 4 gibt.
    Daher ist es (in den meisten Fällen) nicht ratsam, enum-Werte zu verändern.


    Für deinen Fall macht es gar keinen Sinn.
    Dynamisch ist das was du vor hast ohnehin nicht. Das was ich dir vorgeschlagen habe, hat genau den gleichen Coding-Aufwand, funktioniert aber und ist korrekt so.


    Wenn du es dynamisch machen willst, zeige bitte die Stellen, die deiner Meinung nach dynamisch aufgebaut sind, und wie du das dort einbauen willst.

    Die Wertzuweisungen im enum sind falsch, das darfst du so nicht machen.
    Zumal das Konstanten sind, wie es aussieht, macht auch ein [playerid] Array hier keinen Sinn.


    Am besten du machst die Konstanten einfach so fest:
    #define RP_PLUS_CrystalMeth 10
    #define RP_PLUS_Sprunk 1
    //etc...


    Und dann:
    Info[playerid][RpPoints] += RP_PLUS_CrystalMeth;

    enum e_inventar
    {
    PolosChickenwings,
    FreddysMargarithaPizaa,
    Sprunk,
    Cannabis,
    CrystalMeth,
    Heroin,
    Kokain
    }
    new InventarName[e_inventar][64];
    #define MAX_INVENTAR sizeof(InventarName)


    Zuweisungsbeispiel:
    format(InventarName[Sprunk], sizeof(InventarName[]), "Inventar aus Snackautomaten");


    Abfrage wie viele Items es gibt:
    printf("Es gibt %d Inventar Items.", MAX_INVENTAR);

    Zeile 216 dürfte diese sein:

    if(Inventar[playerid][Inventar_Daten:i] >= menge)

    Hier fehlt noch ein Array Index, das müsste sowas wie
    if(Inventar[playerid][Inventar_Daten:i][invmenge] >= menge)
    sein, da es auch [qualitaet] gibt.

    Aus Performancegründen solltest du nur ein Query absenden.
    Dann kannst du es so schreiben:
    public SaveHouses(id)
    {
    if(HouseInfo[id][h_ID] == 0) return 0; //Haus existiert nicht, speichere es auch nicht.
    printf("[MySQL] Saving House %d", id);
    mysql_format(handle, query, sizeof(query), "UPDATE `housedata` SET Owner = '%s', EnterPosX = '%f', EnterPosY = '%f', EnterPosZ = '%f', ExitPosX = '%f', ExitPosY = '%f', ExitPosZ = '%f', Interior = '%i', VirtualWorld = '%i', Price = '%i', Type = '%i', Locked = '%i', Rent = '%i', Description = '%s',",
    HouseInfo[id][hEnterX], HouseInfo[id][hEnterY], HouseInfo[id][hEnterZ], HouseInfo[id][hExitX], HouseInfo[id][hExitY], HouseInfo[id][hExitZ], HouseInfo[id][hInteriorID], HouseInfo[id][hVirtualWorldID], HouseInfo[id][hPrice], HouseInfo[id][hType], HouseInfo[id][hLocked], HouseInfo[id][hRent], HouseInfo[id][hDescription]);
    mysql_format(handle, query, sizeof(query), "%s Garage = '%i', GaragePosX = '%f', GaragePosY = '%f', GaragePosZ = '%f', MaxVehicles = '%i', VehiclesInside = '%i' WHERE ID = '%d'",
    query, HouseInfo[id][hGarage], HouseInfo[id][gPosX], HouseInfo[id][gPosY], HouseInfo[id][gPosZ], HouseInfo[id][gMaxVehicles], HouseInfo[id][gVehiclesInside], HouseInfo[id][h_ID]);
    printf("[MySQL] %s", query);
    mysql_pquery(handle, query);
    printf("[MySQL] Done.");
    return 1;
    }

    Wie speicher ich die Daten am besten wenn ich sehr viele Spieler Var's habe?

    Das kannst du so schreiben:
    mysql_format(handle, query, sizeof(query), "UPDATE users SET level = '%d', money = '%d',", PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pMoney]);
    mysql_format(handle, query, sizeof(query), "%s kills = '%d', deaths = '%d'", query, PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths]);
    mysql_format(handle, query, sizeof(query), "%s WHERE id = '%d'", query, PlayerInfo[playerid][p_id]);


    Dann wird es immer aneinander gehängt.
    Geht so natürlich mit beliebig vielen Zeilen und Variablen.

    Schreiben sollte er laut deinem Code nur, wenn der Wert > 0.00 ist.
    Achte aber darauf, dass wenn der Wert in der Datei nicht 0.00 ist, im Spieler aber auf 0.00 geändert wurde, er den neuen Wert (0.00) dann nicht speichert.
    Eventuell macht es dort auch Sinn, die if-Abfrage zu entfernen.

    Das klappt schon, nur liest du den Wert 2 mal aus der Datei.
    Einmal in der Abfrage, ob der Wert > 0.00 ist und dann nochmal, um den Wert in die Variable zu schreiben.


    Du kannst es ohne die if-Abfrage schreiben, wenn 0 drin steht, schreibt er halt 0 in deine Variable.