Hanf System

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
  • Ciao,


    Jeffry:


    sobald ich eine Hanf Pflanze erstelle wird die erste Pflanze nicht richtig angezeigt und auch nicht wie gewollt aktualisiert durch das public Hanf().
    Aber wenn ich mehr als eine Pflanze erstelle funktionieren alle bis auf die erste erstellte Pflanze.


    Bild

    Die rechte Pflanze ist die erste Pflanze die ich erstellt habe.




    enum HanfEnum {
    Float:h_X,
    Float:h_Y,
    Float:h_Z,
    h_Wasser,
    h_Zustand,
    h_Prozent,
    h_Pflanze,
    bool:h_Gepflanzt,
    h_ID,
    Text3D:h_Label,
    h_Besitzer[MAX_PLAYER_NAME]
    }
    new HanfInfo[MAX_HANF][HanfEnum];



    ocmd:planthanf(playerid, params[])
    {
    new Float:x, Float:y, Float:z, str[145], query[256];
    GetPlayerPos(playerid, x, y, z);
    if(PlayerInfo[playerid][pHanf] < 1)return SendClientMessage(playerid, -1, " Du hast keine Hanfsamen mehr übrig");
    new i = getFreeHanfID();
    if(HanfInfo[i][h_Gepflanzt])return 1;
    HanfInfo[i][h_X] = x;
    HanfInfo[i][h_Y] = y;
    HanfInfo[i][h_Z] = z;
    HanfInfo[i][h_Gepflanzt] = true;
    HanfInfo[i][h_Wasser] = 35;
    HanfInfo[i][h_Zustand] = 75;
    HanfInfo[i][h_Prozent] = 1;
    format(HanfInfo[i][h_Besitzer], MAX_PLAYER_NAME, "%s", PlayerInfo[playerid][pName]);
    format(str, sizeof(str), "[Besitzer: %s]\nWasser: %i\nZustand: %i\nProzent: %i%",
    HanfInfo[i][h_Besitzer], HanfInfo[i][h_Wasser], HanfInfo[i][h_Zustand], HanfInfo[i][h_Prozent]);
    HanfInfo[i][h_Label] = Create3DTextLabel(str, -1, HanfInfo[i][h_X], HanfInfo[i][h_Y], HanfInfo[i][h_Z]+1, 10, 0, 1);
    HanfInfo[i][h_Pflanze] = CreateObject(822, x, y, z, 0, 0, 0, 75);
    PlayerInfo[playerid][pHanf] -= 1;
    format(query, sizeof(query), "INSERT INTO weed (besitzer, x, y, z, wasser, zustand, prozent) VALUES ('%s', '%f', '%f', '%f', '%i', '%i', '%i')", HanfInfo[i][h_Besitzer], x, y, z,
    HanfInfo[i][h_Wasser], HanfInfo[i][h_Zustand], HanfInfo[i][h_Prozent]);
    mysql_function_query(handle, query, true, "OnHanfCreated", "i", i);
    return SendClientMessage(playerid, -1, " Hanf wurde gepflanzt");
    }


    Wird durch ein Timer jede Minute aufgerufen.

    forward Hanf();
    public Hanf()
    {
    for(new i=0; i < sizeof(HanfInfo); i++)
    {
    new str[145], query[256];
    HanfInfo[i][h_Wasser] --;
    if(HanfInfo[i][h_Wasser] == 0)
    {
    HanfInfo[i][h_Zustand] -= 10;
    if(HanfInfo[i][h_Zustand] == 0)
    {
    HanfInfo[i][h_X] = 0;
    HanfInfo[i][h_Y] = 0;
    HanfInfo[i][h_Z] = 0;
    HanfInfo[i][h_Gepflanzt] = false;
    Delete3DTextLabel(HanfInfo[i][h_Label]);
    DestroyObject(HanfInfo[i][h_Pflanze]);
    }
    } else if(HanfInfo[i][h_Wasser] > 0 && HanfInfo[i][h_Wasser] < 30) {
    HanfInfo[i][h_Zustand] -= 5;
    HanfInfo[i][h_Prozent] +=1;
    } else if(HanfInfo[i][h_Wasser] > 30 && HanfInfo[i][h_Wasser] < 50) {
    HanfInfo[i][h_Zustand] -= 4;
    HanfInfo[i][h_Prozent] +=2;
    } else if(HanfInfo[i][h_Wasser] > 50 && HanfInfo[i][h_Wasser] < 70) {
    HanfInfo[i][h_Zustand] -= 3;
    HanfInfo[i][h_Prozent] +=3;
    } else if(HanfInfo[i][h_Wasser] > 70 && HanfInfo[i][h_Wasser] < 90) {
    HanfInfo[i][h_Zustand] -= 2;
    HanfInfo[i][h_Prozent] +=4;
    } else if(HanfInfo[i][h_Wasser] > 90 && HanfInfo[i][h_Wasser] < 100) {
    HanfInfo[i][h_Zustand] --;
    HanfInfo[i][h_Prozent] +=5;
    }
    format(query, sizeof(query), "UPDATE weed SET zustand='%i', wasser='%i', prozent='%i' WHERE id='%i'", HanfInfo[i][h_Zustand], HanfInfo[i][h_Wasser], HanfInfo[i][h_Prozent], HanfInfo[i][h_ID]);
    mysql_function_query(handle, query, false, "", "");
    format(str, sizeof(str), "[Besitzer: %s]\nWasser: %i\nZustand: %i\nProzent: %i%", HanfInfo[i][h_Besitzer], HanfInfo[i][h_Wasser], HanfInfo[i][h_Zustand], HanfInfo[i][h_Prozent]);
    Update3DTextLabelText(HanfInfo[i][h_Label], -1, str);
    }
    }


    Dann hab ich noch ein Problem das mein Hanf nicht richtig geladen wird ( 3DTextLabel ).
    Das Object ( Pflanze ) wird erstellt aber das Label wird nicht erstellt. Außer bei der ersten Pflanze.


    Bild

    Da wird das aber auch wieder mit falschen Werten angezeigt.



    forward OnHanfLoad();
    public OnHanfLoad()
    {
    new num_fields,num_rows, str[145];
    cache_get_data(num_rows, num_fields, handle);
    if(!num_rows)return 1;
    for(new i=0; i<num_rows; i++)
    {
    new id = getFreeHanfID();
    HanfInfo[id][h_X] = cache_get_field_content_float(i, "x", handle);
    HanfInfo[id][h_Y] = cache_get_field_content_float(i, "y", handle);
    HanfInfo[id][h_Z] = cache_get_field_content_float(i, "z", handle);
    HanfInfo[id][h_Gepflanzt] = true;
    HanfInfo[id][h_Wasser] = cache_get_field_content_int(i, "wasser", handle);
    HanfInfo[id][h_Zustand] = cache_get_field_content_int(i, "zustand", handle);
    HanfInfo[id][h_Prozent] = cache_get_field_content_int(i, "prozent", handle);
    new tmp_name[MAX_PLAYER_NAME];
    cache_get_field_content(i, "besitzer", tmp_name, handle);
    strmid(HanfInfo[id][h_Besitzer], tmp_name, 0, sizeof(tmp_name), sizeof(tmp_name));
    format(str, sizeof(str), "[Besitzer: %s]\nWasser: %i\nZustand: %i\nProzent: %i%",
    HanfInfo[i][h_Besitzer], HanfInfo[i][h_Wasser], HanfInfo[i][h_Zustand], HanfInfo[i][h_Prozent]);
    HanfInfo[i][h_Label] = Create3DTextLabel(str, -1, HanfInfo[i][h_X], HanfInfo[i][h_Y], HanfInfo[i][h_Z]+1, 10, 0, 1);
    HanfInfo[id][h_Pflanze] = CreateObject(822, HanfInfo[id][h_X], HanfInfo[id][h_Y], HanfInfo[id][h_Z], 0, 0, 0, 75);
    }
    return 1;
    }


    Ich hoffe es fehlt nichts und jemand kann mir helfen.


    //Edit
    noch ein Bild eingefügt
    public Hanf geändert & stock OnHanfSaved gelöscht da es nun im public vorkommt

    4 Mal editiert, zuletzt von malE ()

  • Das mit dem Speichern ist aber nicht logisch durchdacht. Du kannst ja mehrere Hanf Pflanzen besitzen, sprich es gibt mehrere Pflanzen mit deinem Namen als Besitzer.


    Beim Speichern lässt du aber alle Pflanzen speichern, die auf deinem Namen eingetragen sind.

    SQL
    "UPDATE weed SET zustand='%i', wasser='%i', prozent='%i', x='%f', y='%f', z='%f', WHERE besitzer='%s'"


    Beim eintragen sollte das vom Script aus zwar keine Probleme bereiten, aber in der Datenbank die richtige Zeile zu finden, welche Pflanze jetzt abgespeichert wird, da es ja mehrere Pflanzen mit dem selben Namen gibt.


    Dort solltest du eventuell mal überlegen auf IDs umzusteigen, damit man das dann besser zu ordnen kann.


    /edit
    Außerdem hast du ein Fehler in der Query drin.
    Das Komma vor WHERE muss weg, weil dahinter nichts mehr kommt was zum SET gehört.

  • bei OnHanfLoad
    format(str, sizeof(str), "[Besitzer: %s]\nWasser: %i\nZustand: %i\nProzent: %i%",
    HanfInfo[i][h_Besitzer], HanfInfo[i][h_Wasser], HanfInfo[i][h_Zustand], HanfInfo[i][h_Prozent]);
    HanfInfo[i][h_Label] = Create3DTextLabel(str, -1, HanfInfo[i][h_X], HanfInfo[i][h_Y], HanfInfo[i][h_Z]+1, 10, 0, 1);
    zu
    format(str, sizeof(str), "[Besitzer: %s]\nWasser: %i\nZustand: %i\nProzent: %i%",
    HanfInfo[id][h_Besitzer], HanfInfo[id][h_Wasser], HanfInfo[id][h_Zustand], HanfInfo[id][h_Prozent]);
    HanfInfo[id][h_Label] = Create3DTextLabel(str, -1, HanfInfo[id][h_X], HanfInfo[id][h_Y], HanfInfo[id][h_Z]+1, 10, 0, 1);


    //edit
    und poste noch getFreeHanfID (ist übrigens beim Laden nicht nötig)

    6 Mal editiert, zuletzt von DreameR ()

  • Danke erstmal!
    So das Laden der Pflanze funktioniert nun. Aber sobald das Callback Hanf() aufgerufen wird spinnt das Label wieder aber auch nur bei der ersten ( rechten ) Pflanze.



    stock getFreeHanfID()
    {
    for(new i=0; i < sizeof(HanfInfo); i++)
    {
    if(HanfInfo[i][h_ID] == 0)return i;
    }
    return 0;
    }


    Du meinst getFreeHanfID wird beim Laden nicht benötigt? Wie soll ich dann aber die Pflanze laden. HanfInfo[][h_beispiel] das ( erste ) Array bleibt dann wohl leer? Wenn ich diese nicht mit dem i fülle.