Befehl funktioniert nur bei der ersten Pflanze

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
  • Hallo
    habe mir aus Testzwecken ein /pushpflanze Befehl erstellt.
    Problem ist aber das der Befehl nur bei der ersten Pflanze funktioniert.

  • Du musst das return aus der Schleife nehmen:
    ocmd:pushpflanze(playerid, params[])
    {
    if(PlayerInfo[playerid][p_Admin] < 6)return 1;
    for(new i=0; i < sizeof(DrugInfo); i++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 1.5, DrugInfo[i][d_PosX], DrugInfo[i][d_PosY], DrugInfo[i][d_PosZ]))
    {
    DrugInfo[i][d_Prozent] = 100;
    new str[145];
    format(str, sizeof(str), " Du hast die Pflanze %i auf 100 Prozent gesetzt.", i);
    SendClientMessage(playerid, 0xFF5559FF, str);
    UpdateDrugLabel(i);
    return 1;
    }
    }
    return SendClientMessage(playerid, COLOR_GREY, "Es ist keine Drogenpflanze in deiner Nähe.");
    }

  • Außerdem wird die Pflanze ID 3 anscheint nicht gespeichert.
    OnGameModeExit:

    Code
    stock SavePlayerDrugs()
    {
        new query[256];
    	for(new i=0; i < sizeof(DrugInfo); i++)
    	{
    	    mysql_format(handle, query, sizeof(query), "UPDATE drugs SET prozent='%d', wasser='%d', zustand='%d' WHERE id='%d'", DrugInfo[i][d_Prozent], DrugInfo[i][d_Wasser], DrugInfo[i][d_Zustand], DrugInfo[i][d_ID]);
    	    mysql_pquery(handle, query);
    	    print(query);
    	}
    }


    Es wird nichts geprintet.

    Einmal editiert, zuletzt von malE ()

  • Debugge den Befehl bitte mal so:
    ocmd:pushpflanze(playerid, params[])
    {
    if(PlayerInfo[playerid][p_Admin] < 6)return 1;
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    printf("%f / %f / %f", x, y, z);
    for(new i=0; i < sizeof(DrugInfo); i++)
    {
    printf("i:%d | %f / %f / %f | %d", i, DrugInfo[i][d_PosX], DrugInfo[i][d_PosY], DrugInfo[i][d_PosZ], IsPlayerInRangeOfPoint(playerid, 1.5, DrugInfo[i][d_PosX], DrugInfo[i][d_PosY], DrugInfo[i][d_PosZ]));
    if(IsPlayerInRangeOfPoint(playerid, 1.5, DrugInfo[i][d_PosX], DrugInfo[i][d_PosY], DrugInfo[i][d_PosZ]))
    {
    printf("Setze zu 100");
    DrugInfo[i][d_Prozent] = 100;
    new str[145];
    format(str, sizeof(str), " Du hast die Pflanze %i auf 100 Prozent gesetzt.", i);
    SendClientMessage(playerid, 0xFF5559FF, str);
    UpdateDrugLabel(i);
    return 1;
    }
    }
    printf("Nicht in der Nähe.");
    return SendClientMessage(playerid, COLOR_GREY, "Es ist keine Drogenpflanze in deiner Nähe.");
    }


    Zwecks der Speicherung:
    Wo rufst du die Funktion auf?

  • C
    stock UpdateDrugLabel(id)
    {
    	for(new i=0; i < sizeof(DrugInfo); i++)
    	{
    		new label[145];
    	    format(label, sizeof(label), "[ Zustand: %d ]\n[ Wasser: %d ]\n[ Prozent: %d ]", DrugInfo[id][d_Zustand], DrugInfo[id][d_Wasser], DrugInfo[id][d_Prozent]);
    	    Update3DTextLabelText(DrugInfo[id][d_Label], 0xFFFFFFFF, label);
    	}
    }
  • Schreibe das so:
    stock UpdateDrugLabel(id)
    {
    new label[145];
    format(label, sizeof(label), "[ Zustand: %d ]\n[ Wasser: %d ]\n[ Prozent: %d ]", DrugInfo[id][d_Zustand], DrugInfo[id][d_Wasser], DrugInfo[id][d_Prozent]);
    Update3DTextLabelText(DrugInfo[id][d_Label], 0xFFFFFFFF, label);
    return 1;
    }


    Und ändere beim Erstellen das
    Create3DTextLabel(str, COLOR_WHITE, DrugInfo[i][d_PosX], DrugInfo[i][d_PosY], DrugInfo[i][d_PosZ], 10.0, 0, 0);
    zu:
    DrugInfo[i][d_Label] = Create3DTextLabel(str, COLOR_WHITE, DrugInfo[i][d_PosX], DrugInfo[i][d_PosY], DrugInfo[i][d_PosZ], 10.0, 0, 0);

  • Okey. Soweit so gut. Es scheint jetzt zufunktionieren.


    Bei dem Befehl wird die Pflanze nicht aus der Datenbank entfernt.


    Außerdem funktioniert die Speicherung leider immer noch nicht.


    -
    Darf ich Fragen wie du den PAWN-Quellcode benutzt?
    Bei mir wird das immer so abgesendet: Bild.

  • Das dürfte am gleichen Fehler liegen, und zwar habe ich gesehen, dass du die id gar nicht lädst.
    Füge das hier beim Laden hinzu:
    DrugInfo[i][d_ID] = cache_get_field_content_int(i, "id", handle);


    Der Befehl kann außerdem so aussehen, damit nicht einfach nichts passiert, wenn dir die Pflanze nicht gehört:
    ocmd:abernten(playerid, params[])
    {
    for(new i=0; i < sizeof(DrugInfo); i++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 1.5, DrugInfo[i][d_PosX], DrugInfo[i][d_PosY], DrugInfo[i][d_PosZ]))
    {
    if(DrugInfo[i][d_Besitzer] != PlayerInfo[playerid][p_ID]) return SendClientMessage(playerid, COLOR_GREY, "Die Pflanze gehört dir nicht.");
    if(DrugInfo[i][d_Prozent] < 90) return SendClientMessage(playerid, COLOR_GREY, "Die Pflanze ist noch nicht ausgereift.");
    DrugInfo[i][d_PosX] = 0;
    DrugInfo[i][d_PosY] = 0;
    DrugInfo[i][d_PosZ] = 0;
    DrugInfo[i][d_Wasser] = 0;
    DrugInfo[i][d_Zustand] = 0;
    DrugInfo[i][d_Prozent] = 0;
    DestroyObject(DrugInfo[i][d_Objekt]);
    Delete3DTextLabel(DrugInfo[i][d_Label]);
    new query[256];
    format(query, sizeof(query), "DELETE FROM drugs WHERE id='%d'", DrugInfo[i][d_ID]);
    mysql_function_query(handle, query, false, "", "");
    return 1;
    }
    }
    return SendClientMessage(playerid, COLOR_GREY, "Du bist nicht in der Nähe einer Pflanze.");
    }



    Darf ich Fragen wie du den PAWN-Quellcode benutzt?

    Ich nutze den BBCode Modus (erster Button in der Post-Forum).

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen