Daten werden nicht aus einer Datei ausgelesen

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


    Ich bin irgendwie grad etwas am Verzweifeln. Ich möchte einen Integer und 4 Floatwerte aus einer Date auslesen und mit dieser dann eine Gangzone erstellen. Wenn och einfach so im Kopfbereich des OnGameModeInit eine vom System unabhängige Zone erstelle und sie anzeigen lasse, geht dies. Wenn ich jedoch mit meinem System eine laden möchte, kommt garnichts. Es liegt anscheinend an der if(gop... Abfrage, da ich darüber eine Gangzone gemacht habe und diese ging (keine Systemgangzone). Ich weiss nicht, der Datepfad sollte stimmen, auch der Aufbau.


    Die Farbe wird aus einem Array ausgelesen, jedoch kann es daran nicht liegen, da er überhaupt nicht bis zum printf vorher kommt. Wäre um Hilfe sehr froh.


    #define GangZoneDatei "Zones/Gangzones.ini"



    //Gangzonen
    new GFraktion,Float:GKoord1,Float:GKoord2,Float:GKoord3,Float:GKoord4;
    new File:gop = fopen(GangZoneDatei,io_read);
    new geingabe[256];
    if(gop)
    {
    while(fread(gop,geingabe))
    {
    printf(geingabe);
    sscanf(geingabe,"p<,>iffff",GFraktion,GKoord1,GKoord2,GKoord3,GKoord4);
    printf(geingabe);
    GangZoneInfo[ZoneAmount][gFraktion] = GFraktion;
    GangZoneInfo[ZoneAmount][gFarbe] = FraktionColor[GFraktion][0];
    GangZoneInfo[ZoneAmount][gKoord1] = GKoord1;
    GangZoneInfo[ZoneAmount][gKoord2] = GKoord2;
    GangZoneInfo[ZoneAmount][gKoord3] = GKoord3;
    GangZoneInfo[ZoneAmount][gKoord4] = GKoord4;
    printf("Frak: %d",GFraktion);
    printf("K1: %f",GKoord1);
    printf("K2: %f",GKoord2);
    printf("K3: %f",GKoord3);
    printf("K4: %f",GKoord4);
    GangZoneInfo[ZoneAmount][gZoneID] = GangZoneCreate(GangZoneInfo[ZoneAmount][gKoord1],GangZoneInfo[ZoneAmount][gKoord2],GangZoneInfo[ZoneAmount][gKoord3],GangZoneInfo[ZoneAmount][gKoord4]);
    ZoneAmount ++;
    SendClientMessageToAll(COLOR_GREEN,"Gangzone geladen");
    }
    fclose(gop);
    }


    Inhalt der Datei:


    Code
    10,1379.583, -1634.489, 1748.458, -1413.416
    10,1820.712, -1610.802, 2345.503, -1429.206
    10,1775.078, -2001.629, 2041.276, -1638.437


    Nachtrag:


    Die Gangzones werden per Public gepaintet, teste grad eine etwas umgebaute Version


    Edit: Dateiinhalt hinzugefügt
    Edit 2: Nachtrag


    MfG dUDA

  • Dann knall doch den Code voll mit print() bzw Debug-Notes.


    //Gangzonen
    new GFraktion,Float:GKoord1,Float:GKoord2,Float:GKoord3,Float:GKoord4;
    new File:gop = fopen(GangZoneDatei,io_read);
    new geingabe[256];
    if(gop)
    {
    printf("gop geöffnet!");
    while(fread(gop,geingabe))
    {
    // StripNL(geingabe) wäre hier gut
    printf("geingabe '%s'",geingabe);
    if( sscanf(geingabe,"p<,>iffff",GFraktion,GKoord1,GKoord2,GKoord3,GKoord4) ) {
    printf("-- Fehler bei sscanf");
    }
    printf("ZoneAmount %d",ZoneAmount);
    GangZoneInfo[ZoneAmount][gFraktion] = GFraktion;
    GangZoneInfo[ZoneAmount][gFarbe] = FraktionColor[GFraktion][0];
    GangZoneInfo[ZoneAmount][gKoord1] = GKoord1;
    GangZoneInfo[ZoneAmount][gKoord2] = GKoord2;
    GangZoneInfo[ZoneAmount][gKoord3] = GKoord3;
    GangZoneInfo[ZoneAmount][gKoord4] = GKoord4;
    printf("Frak: %d",GFraktion);
    printf("K1: %f",GKoord1);
    printf("K2: %f",GKoord2);
    printf("K3: %f",GKoord3);
    printf("K4: %f",GKoord4);
    GangZoneInfo[ZoneAmount][gZoneID] = GangZoneCreate(GangZoneInfo[ZoneAmount][gKoord1],GangZoneInfo[ZoneAmount][gKoord2],GangZoneInfo[ZoneAmount][gKoord3],GangZoneInfo[ZoneAmount][gKoord4]);
    ZoneAmount ++;
    SendClientMessageToAll(COLOR_GREEN,"Gangzone geladen");
    }
    fclose(gop);
    }
    else {
    printf("gop konnte nicht geöffnet werden");
    }
    Versuch es auch mal so:
    #define GangZoneDatei "/Zones/Gangzones.ini"
    Ich würde auch schauen ob der Ordner wirklich Zones heisst und nicht zones oder Gangzones.ini und nicht gAnGzOnEs.INI.Groß & Klein-Schreibung kann wichtig sein.

  • Hallo


    Ja habe vorhin alles vollgeprintet, er lädt alles, jedoch zeigt er keine Zone an. Ich schau mal, ob ich GangZoneShowForPlayer unterOnGameModeInit nicht wirklich verwenden kann. Der Ordner heisst Zones, da hab ich 4 mal geschaut, alles stimmt - will mich wegen sowas nicht blamieren ;)
    Meld mich nachher


    MfG dUDA

  • Hallo


    In der Konsole kommt das folgende raus. Ich lass die Zone jetzt noch zusätzlich bei OnPlayerSpawn anzeigen:


    Code
    [16:58:34] gop geöffnet!
    [16:58:34] geingabe '10,1160.214721,-877.017517,1240.978881,-950.182922
    '
    [16:58:34] ZoneAmount 0
    [16:58:34] Frak: 10
    [16:58:34] K1: 1160.214721
    [16:58:34] K2: -877.017517
    [16:58:34] K3: 1240.978881
    [16:58:34] K4: -950.182922


    In der Datei ist folgender Inhalt:
    10,1160.214721,-877.017517,1240.978881,-950.182922


    Die Zone wird ingame nicht angezeigt
    MfG dUDALUS

  • //Gangzonen
    new GFraktion,Float:GKoord1,Float:GKoord2,Float:GKoord3,Float:GKoord4;
    new File:gop = fopen(GangZoneDatei,io_read);
    new geingabe[256];
    if(gop)
    {
    printf("gop geöffnet!");
    while(fread(gop,geingabe))
    {
    // StripNL(geingabe) wäre hier gut
    printf("geingabe '%s'",geingabe);
    if( sscanf(geingabe,"p<,>iffff",GFraktion,GKoord1,GKoord2,GKoord3,GKoord4) ) {
    printf("-- Fehler bei sscanf");
    }
    printf("ZoneAmount %d",ZoneAmount);
    GangZoneInfo[ZoneAmount][gFraktion] = GFraktion;
    GangZoneInfo[ZoneAmount][gFarbe] = FraktionColor[GFraktion][0];
    GangZoneInfo[ZoneAmount][gKoord1] = GKoord1;
    GangZoneInfo[ZoneAmount][gKoord2] = GKoord2;
    GangZoneInfo[ZoneAmount][gKoord3] = GKoord3;
    GangZoneInfo[ZoneAmount][gKoord4] = GKoord4;
    printf("Frak: %d",GFraktion);
    printf("K1: %f",GKoord1);
    printf("K2: %f",GKoord2);
    printf("K3: %f",GKoord3);
    printf("K4: %f",GKoord4);
    GangZoneInfo[ZoneAmount][gZoneID] = GangZoneCreate(GangZoneInfo[ZoneAmount][gKoord1],GangZoneInfo[ZoneAmount][gKoord2],GangZoneInfo[ZoneAmount][gKoord3],GangZoneInfo[ZoneAmount][gKoord4]);
    printf("gZoneID %d",GangZoneInfo[ZoneAmount][gZoneID]); // <- NEU
    ZoneAmount ++;
    SendClientMessageToAll(COLOR_GREEN,"Gangzone geladen");
    }
    fclose(gop);
    }
    else {
    printf("gop konnte nicht geöffnet werden");
    }
    Bei dir ist aber auch miny mit maxy vertauscht.
    10,1160.214721,-877.017517,1240.978881,-950.182922
    -877.017517 ist größer als -950.182922 , daher musst du es auch vertauschen in der Datei. Du könntest natürlich auch n bischen scripten damit es automatisch getauscht wird, falls es falsch herrum angegenen wird.


    Also müsste in der Datei stehen:

    Zitat

    10,1160.214721,-950.182922 ,1240.978881,-877.017517


    Sollte es immernoch nicht angezeigt werden, schau nach ob du auch wirklich GangZoneShowForPlayer benutzt wenn der Spieler den Server betritt und es auch eine Farbe ist,die nicht unsichtbar ist.


    Poste auch direkt die Log falls es nicht geht.

  • Hallo


    Ok, jetzt hab ich eine Beschäftigung....Tutorialersteller hauen. B2T


    Ich habe vorhin die Koordinaten getestet und es ging nicht, werde es mit den richtigen Koordinaten versuchen. Meld mich nochmals


    MfG dUDA


    Edit:
    Ich benutze jetzt die 3 Zonen,aber ich sehe ingame noch keine Zonen, teste es schnell per Filterscript, um zu schauen, ob es wirklich im Script liegt. Die Zonen werden beim Spawnen dem Spieler angezeigt (sollten):


    10,1379.583, -1634.489, 1748.458, -1413.416
    10,1820.712, -1610.802, 2345.503, -1429.206
    10,1775.078, -2001.629, 2041.276, -1638.437

    Edit 2:
    Problem wurde gelöst, es lag an einer extrem hellen Farbe, keine Ahnung warum die so hell ist. Ich stelle mal auf erledigt. Danke ;)


    MfG dUDA