GangZone | MySQL + Schleife

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
  • Guten Tag,


    Mein Name lautet CIBERKILLER.
    Und zwar habe ich ein Problem mit meinem Gangzonen "System".


    Quellcode:


    (OnGameModeInit)
    //Gangzonen
    for(new j, i = sizeof(gZone); j<i; j++) {gZone[j][zCreated] = false; if(j == sizeof(gZone))break;}
    mysql_pquery(dbhandle, "SELECT * FROM `Gangzones` WHERE `Frakname` = 'Ballas'", "LoadGFZonesFromDB", "");


    public LoadGFZonesFromDB()
    {
    cache_get_data(num[0], num[1], dbhandle);
    if(num[0]!=-1&&num[0]!=0)
    {
    for(new j;j<sizeof(gZone);j++)
    {
    if(gZone[j][zCreated])continue;
    gZone[j][zPos][0] = cache_get_field_content_float(0, "zX", dbhandle);
    gZone[j][zPos][1] = cache_get_field_content_float(0, "zY", dbhandle);
    gZone[j][zPos][2] = cache_get_field_content_float(0, "zZ", dbhandle);
    gZone[j][zPos][3] = cache_get_field_content_float(0, "zA", dbhandle);
    gZone[j][zID] = GangZoneCreate(gZone[j][zPos][0], gZone[j][zPos][1], gZone[j][zPos][2], gZone[j][zPos][3]);
    format(gZone[j][zName], 45 + 5, "Ballas");
    gZone[j][zCreated] = true;
    printf("Created: %d | ID: %d | pos: %f,%f,%f,%f | j: %d | content: %s", gZone[j][zCreated], gZone[j][zID], gZone[j][zPos][0], gZone[j][zPos][1], gZone[j][zPos][2], j, gZone[j][zName]);
    if(j == num[0])break;
    }
    }
    return 1;
    }


    Print:

    Code
    [15:13:55] Created: 1 | ID: 0 | pos: 1520.010009,-1592.219970,1422.010009,0.000000 | j: 66 | content: 
    [15:13:55] Created: 1 | ID: 1 | pos: 1520.010009,-1592.219970,1422.010009,0.000000 | j: 66 | content:


    mfg :thumbup:

  • Warum speicherst du nur 3 Variablen für die Positionen? Im Grunde brauchst du doch XY für 1 und XY für 2.. wären 4 für die Zone, an Stelle des "Namens" mach dir ne ID und dann sollte das funktionieren..


    Ich hab das bei mir als stock:

    Code
    stock LoadGangGebiete()
    {
         for(new i; i<sizeof(Gebiete); i++)
         {
           Gebiete[i][gOwner] = getint(i);
           Gebiet[i] = GangZoneCreate(Gebiete[i][gMinX],Gebiete[i][gMinY],Gebiete[i][gMaxX],Gebiete[i][gMaxY]);
         }
         return 1;
    }
  • Warum speicherst du nur 3 Variablen für die Positionen? Im Grunde brauchst du doch XY für 1 und XY für 2.. wären 4 für die Zone, an Stelle des "Namens" mach dir ne ID und dann sollte das funktionieren..


    Ich hab das bei mir als stock:

    Code
    stock LoadGangGebiete()
    {
         for(new i; i<sizeof(Gebiete); i++)
         {
           Gebiete[i][gOwner] = getint(i);
           Gebiet[i] = GangZoneCreate(Gebiete[i][gMinX],Gebiete[i][gMinY],Gebiete[i][gMaxX],Gebiete[i][gMaxY]);
         }
         return 1;
    }


    Ich weis nicht was du hast!


    gZone[j][zPos][0] = cache_get_field_content_float(0, "zX", dbhandle);
    gZone[j][zPos][1] = cache_get_field_content_float(0, "zY", dbhandle);
    gZone[j][zPos][2] = cache_get_field_content_float(0, "zZ", dbhandle);
    gZone[j][zPos][3] = cache_get_field_content_float(0, "zA", dbhandle);


    mfg :thumbup:

    Einmal editiert, zuletzt von Kasakow ()

  • Dein Print ist falsch, da fehlt die 4. Koordinate.


    printf("Created: %d | ID: %d | pos: %f,%f,%f,%f | j: %d | content: %s", gZone[j][zCreated], gZone[j][zID], gZone[j][zPos][0], gZone[j][zPos][1], gZone[j][zPos][2], gZone[j][zPos][3], j, gZone[j][zName]);
    So.

  • Dein Print ist falsch, da fehlt die 4. Koordinate.


    printf("Created: %d | ID: %d | pos: %f,%f,%f,%f | j: %d | content: %s", gZone[j][zCreated], gZone[j][zID], gZone[j][zPos][0], gZone[j][zPos][1], gZone[j][zPos][2], gZone[j][zPos][3], j, gZone[j][zName]);
    So.


    Dies habe ich bereits ausgebessert.
    Jetzt printet er es richtig, halt 2x.
    1x wurde die Zone sogar erstellt, jetzt iwi nicht mehr!


    Quellcode:
    public LoadGFZonesFromDB()
    {
    cache_get_data(num[0], num[1], dbhandle);
    if(num[0]!=-1&&num[0]!=0)
    {
    static j;
    for(;j<sizeof(gZone);j++)
    {
    if(gZone[j][zCreated])continue;
    if(!strcmp(gZone[j][zName], "Ballas", true))continue;
    gZone[j][zPos][0] = cache_get_field_content_float(0, "zX", dbhandle);
    gZone[j][zPos][1] = cache_get_field_content_float(0, "zY", dbhandle);
    gZone[j][zPos][2] = cache_get_field_content_float(0, "zZ", dbhandle);
    gZone[j][zPos][3] = cache_get_field_content_float(0, "zA", dbhandle);
    gZone[j][zID] = GangZoneCreate(gZone[j][zPos][0], gZone[j][zPos][1], gZone[j][zPos][2], gZone[j][zPos][3]);
    format(gZone[j][zName], 45 + 5, "Ballas");
    gZone[j][zCreated] = true;
    printf("Created: %d | ID: %d | pos: %f,%f,%f,%f | j: %d | content: %s", gZone[j][zCreated], gZone[j][zID], gZone[j][zPos][0], gZone[j][zPos][1], gZone[j][zPos][2], gZone[j][zPos][3], j, gZone[j][zName]);
    if(j == num[0])break;
    }
    }
    return 1;
    }


    Print:
    [16:02:03] Created: 1 | ID: 0 | pos: 1520.010009,-1592.219970,1422.010009,-1718.219970 | j: 0 | content: Ballas
    [16:02:03] Created: 1 | ID: 1 | pos: 1520.010009,-1592.219970,1422.010009,-1718.219970 | j: 1 | content: Ballas


    mfg :thumbup:

  • Wieso liesst du das nicht in einem Zug aus ?


    Unvollständiges Beispiel:



    mysql_pquery(dbhandle, "SELECT * FROM `Gangzones`;", "LoadGFZonesFromDB", "");



    public LoadGFZonesFromDB()
    {
    cache_get_data(num[0], num[1], dbhandle);
    for(new i, j = cache_get_row_count(); i != j; ++i){
    gZone[i][zPos][0] = cache_get_field_content_float(i, "zX", dbhandle);
    gZone[i][zPos][1] = cache_get_field_content_float(i, "zY", dbhandle);
    gZone[i][zPos][2] = cache_get_field_content_float(i, "zZ", dbhandle);
    gZone[i][zPos][3] = cache_get_field_content_float(i, "zA", dbhandle);
    gZone[i][zID] = GangZoneCreate(gZone[j][zPos][0], gZone[j][zPos][1], gZone[j][zPos][2], gZone[j][zPos][3]);
    gZone[i][zCreated] = true;
    }
    return 1;
    }


    Der Name wurde extra weggelassen dafür kannst du entweder eine extrafunktion schreiben um den Namen der Fraktion auszugeben und in der Datenbank
    die ID speichern oder du speicherst direkt den Namen in der Datenbank, was ich eher nicht so empfehle.


    Ebenso solltest du deinem Datensatz falls dieser bearbeitet wird eine eindeutige ID zuweisen und wenn du irgendwelche Informationen angeben möchtest in der Zone erstell
    doch zusätzlich einen Bereich mit dem streamer plugin so sparst du dir auch die Speicherplatzbelegung durch die zusätzlich deklarierten Floats.



    Also auf mich wirkt dein Code eher planlos und als hättest du keine Ahnung davon was du tust, da fehlt jegliche sinnvolle Struktur.


    //edit


    wenn du wirklich sinnvolle hilfe suchst dann beschreib mal in diesem Thread was dein System für eine funktion haben und in wiefern es verwaltbar sein soll

  • Gut, wenn es richtig lädt passt es ja mal soweit.
    Dein Print zeigt jetzt, dass die Variablen vertauscht sind.


    Mach es so:
    gZone[j][zID] = GangZoneCreate(gZone[j][zPos][2], gZone[j][zPos][3], gZone[j][zPos][0], gZone[j][zPos][1]);


    Und anstatt den 0 bei den Cache Abfragen, muss ein i hin.


    Edit:
    Das muss so sein, damit es nicht zwei mal erstellt wird.
    if(j == num[0]-1)break;

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()

  • Gut, wenn es richtig lädt passt es ja mal soweit.
    Dein Print zeigt jetzt, dass die Variablen vertauscht sind.


    Mach es so:
    gZone[j][zID] = GangZoneCreate(gZone[j][zPos][2], gZone[j][zPos][3], gZone[j][zPos][0], gZone[j][zPos][1]);


    Jeffry die Cords passen soweit (Da muss nichts verändert werden)


    IPrototypeI


    Das klappt genau so wenig!
    Ich weis dass man das so machen kann, dies hatte ich vorher so! - Ich kenne mich mit der Version recht "gut" aus.



    mfg :thumbup:

  • Habs mir mal angeschaut Jeffry!


    Die Cords sollten passen (habe das mal ohne auslesen der db prob) sprich zone=GangZoneCreate(...



    Und dazu kommt es dass ich dafür den Editor hier geschrieben habe!


    ocmd:czone(playerid)
    {
    if(GetPlayerAdmin(playerid) < 7)return SendClientMessage(playerid, Orange, "Fehler: {FFFFFF}Du bist nicht berechtigt für diesen Befehl!");
    if(!GetPVarInt(playerid, "cturf"))
    {
    SendClientMessage(playerid, Orange, "Zone-Creator: {FFFFFF}Du bist in den Zone Modus gegangen!");
    SendClientMessage(playerid, Gruen, "Info: {FFFFFF}Makiere auf der Karte 2 Punkte und gebe erneut /czone ein!");
    SetPVarInt(playerid, "cturf", 1);
    }
    else if(GetPVarInt(playerid, "cturf")>=1)
    {
    if(GetPVarInt(playerid, "cturf") != 3)return SendClientMessage(playerid, Orange, "Fehler: {FFFFFF}Du hast keine 2 Punkte auf der Karte gewählt!");
    static Float:tmp_pos[5];
    for(new i;i<5;i++)
    {
    format(string, sizeof(string), "turf_%d", i);
    tmp_pos[i] = GetPVarFloat(playerid, string);
    SetPVarFloat(playerid, string, 0.0);
    }
    SendClientMessage(playerid, Orange, "Zone-Creator: {FFFFFF}Du hast erfolgreich eine Zone erstellt!");
    format(string, sizeof(string), "Info: {FFFFFF}Die Daten wurden in /%s/%s.%s gespeichert!", ZONE_FOLDER, ZONE_FILENAME, ZONE_FILETYPE);
    SendClientMessage(playerid, Gruen, string);
    format(string, sizeof(string), "/%s/%s.%s", ZONE_FOLDER, ZONE_FILENAME, ZONE_FILETYPE);
    new File:zFile = fopen(string, io_append);
    SetPVarInt(playerid, "cturf", 0);
    if(zFile)
    {
    static str[128] = "";
    format(str, sizeof(str), "Zone: %f,%f,%f,%f\r\n", tmp_pos[3], tmp_pos[1], tmp_pos[0], tmp_pos[4]);
    fwrite(zFile, str);
    fclose(zFile);
    }
    }
    return 1;
    }


    public OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ)
    {
    switch(GetPVarInt(playerid, "cturf"))
    {
    case 1:
    {
    SendClientMessage(playerid, Orange, "Zone - Creator: {FFFFFF}Du hast den 1. Punkt makiert, makiere nun den 2. Punkt!");
    format(string, sizeof(string), "Info: {FFFFFF}Position des 1. Punktes (%f,%f,%f)", Float:fX, Float:fY, Float:fZ);
    SendClientMessage(playerid, Gruen, string);
    SetPVarInt(playerid, "cturf", 2);
    SetPVarFloat(playerid, "turf_0", fX),SetPVarFloat(playerid, "turf_1", fY),SetPVarFloat(playerid, "turf_2", fZ);
    }
    case 2:
    {
    SendClientMessage(playerid, Orange, "Zone - Creator: {FFFFFF}Du hast den 2. Punkt makiert, gebe nun erneut /cturf ein!");
    format(string, sizeof(string), "Info: {FFFFFF}Position des 2. Punktes (%f,%f,%f)", Float:fX, Float:fY, Float:fZ);
    SendClientMessage(playerid, Gruen, string);
    SetPVarInt(playerid, "cturf", 3);
    SetPVarFloat(playerid, "turf_3", fX),SetPVarFloat(playerid, "turf_4", fY),SetPVarFloat(playerid, "turf_5", fZ);
    }
    }
    return 1;
    }


    mfg :thumbup:

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • [16:02:03] Created: 1 | ID: 0 | pos: 1520.010009,-1592.219970,1422.010009,-1718.219970 | j: 0 | content: Ballas


    Schau dir doch die Koordinaten hier an. Zuerst kommen die großen, dann die kleinen. Es muss aber genau anders herum sein. Erst die kleinen, dann dir großen.


    Versuche es doch einfach mal.

  • [16:02:03] Created: 1 | ID: 0 | pos: 1520.010009,-1592.219970,1422.010009,-1718.219970 | j: 0 | content: Ballas


    Schau dir doch die Koordinaten hier an. Zuerst kommen die großen, dann die kleinen. Es muss aber genau anders herum sein. Erst die kleinen, dann dir großen.


    Versuche es doch einfach mal.


    Habe ich gemacht, aber es kommt aktuell kein Print.


    mfg :thumbup:

  • Wie sieht der aktuelle Code aus?
    Hast du auch Daten in der Datenbank?
    Du könntest auch einfach den Code von deinem ersten Post nehmen und die Änderungen machen, die ich dir gesagt habe, dann sollte es gehen.


    Jap Jeffry, in der Tat es funkt!


    Print:

    Code
    [21:09:16] Created: 1 | ID: 0 | pos: 1520.010009,-1592.219970,1422.010009,-1718.219970 | j: 0 | content: Ballas


    Screen:


    IPrototypeI
    Dein Code war auch Sinngemäß, aber leider nicht funktional!



    mfg :thumbup: