Blitzer Problem

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
  • Ich möchte einen Blitzer erstellen. Soweit so gut es lassen sich welche erstellen, aber es funktioniert nur der den ich erstellt habe. Habe ich z.B. 3 gespawnt funktioniert der 3 nur und nicht alle 3. Lass ich die Blitzer Speichern, dann
    speichert er nur die Datei: 0.txt egal wie viel Blitzer ich erstelle.


    ocmd:blitzer(playerid,params[])
    {
    new str[128],name[MAX_PLAYER_NAME],geschw,strafe,Float:x,Float:y,Float:z,Float:a,Datei[64];
    if(IsPlayerConnected(playerid))
    if(GetPVarInt(playerid,"loggedin") == 0)return SendClientMessage(playerid,Grau,"Bitte logge dich zuerst ein.");
    if(IsPlayerFraktRang(playerid, 7, 1))
    {
    for(new i; i < MAX_BLITZER; i++)
    {
    if(sscanf(params,"dd",geschw,strafe))return SendClientMessage(playerid,Grau,"Benutze: /blitzer [Geschw.] [Strafe/Kmh]");
    if(IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid,Grau,"Du darfst nicht in einem Fahrzeug sitzen.");
    if(IsPlayerInRangeOfPoint(playerid,60.0,Blitzer[i][xpos],Blitzer[i][ypos],Blitzer[i][zpos]))return SendClientMessage(playerid,Grau,"In der Nähe steht bereits ein Blitzer.");
    if(geschw < 40 || geschw > 160)return SendClientMessage(playerid,Grau,"Die Geschwindigkeit darf min. 40Km/h und max. 160Km/h betragen.");
    if(strafe < 2 || strafe > 20)return SendClientMessage(playerid,Grau,"Die Geldstrafe pro Km/h muss zwischen 2$ und 20$ liegen.");
    format(Datei,sizeof(Datei),"/Blitzer/%d.txt",i);
    dini_Create(Datei);
    GetPlayerPos(playerid,x,y,z);
    GetPlayerName(playerid,name,sizeof(name));
    GetPlayerFacingAngle(playerid,a);
    Blitzer[i][xpos] = x;
    Blitzer[i][ypos] = y;
    Blitzer[i][zpos] = z;
    Blitzer[i][apos] = a;
    Blitzer[i][Geschw] = geschw;
    Blitzer[i][Radius] = 30;
    Blitzer[i][Strafe] = strafe;
    Blitzer[i][ID] += 1;
    CreateObject(18880,x+1.0,y+1.0,z-2.0,0.0,0.0,a,400);
    SendClientMessage(playerid,Grün,"Du hast erfolgreich einen Blitzer aufgestellt.");
    format(str,sizeof(str),"%s hat einen Blitzer erstellt. (%.2f,%.2f,%.2f)",name,x,y,z);
    printf("%s",str);
    SaveBlitzer();
    return 1;
    }
    }
    return 1;
    }


    #define MAX_BLITZER (20)
    enum bInfo{
    ID,
    Strafe,
    Geschw,
    Float:xpos,
    Float:ypos,
    Float:zpos,
    Float:apos,
    Radius,
    };
    new Blitzer[MAX_BLITZER][bInfo];


    MfG

  • Du hattest keine Abfrage in der Schleife, ob der Blitzer bereits existiert.
    Versuche es so:
    ocmd:blitzer(playerid,params[])
    {
    new str[128],name[MAX_PLAYER_NAME],geschw,strafe,Float:x,Float:y,Float:z,Float:a,Datei[64];
    if(IsPlayerConnected(playerid))
    if(GetPVarInt(playerid,"loggedin") == 0)return SendClientMessage(playerid,Grau,"Bitte logge dich zuerst ein.");
    if(IsPlayerFraktRang(playerid, 7, 1))
    {
    if(sscanf(params,"dd",geschw,strafe))return SendClientMessage(playerid,Grau,"Benutze: /blitzer [Geschw.] [Strafe/Kmh]");
    if(IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid,Grau,"Du darfst nicht in einem Fahrzeug sitzen.");
    if(IsPlayerInRangeOfPoint(playerid,60.0,Blitzer[i][xpos],Blitzer[i][ypos],Blitzer[i][zpos]))return SendClientMessage(playerid,Grau,"In der Nähe steht bereits ein Blitzer.");
    if(geschw < 40 || geschw > 160)return SendClientMessage(playerid,Grau,"Die Geschwindigkeit darf min. 40Km/h und max. 160Km/h betragen.");
    if(strafe < 2 || strafe > 20)return SendClientMessage(playerid,Grau,"Die Geldstrafe pro Km/h muss zwischen 2$ und 20$ liegen.");
    for(new i; i < MAX_BLITZER; i++)
    {
    if(Blitzer[i][Strafe] != 0) continue;
    format(Datei,sizeof(Datei),"/Blitzer/%d.txt",i);
    dini_Create(Datei);
    GetPlayerPos(playerid,x,y,z);
    GetPlayerName(playerid,name,sizeof(name));
    GetPlayerFacingAngle(playerid,a);
    Blitzer[i][xpos] = x;
    Blitzer[i][ypos] = y;
    Blitzer[i][zpos] = z;
    Blitzer[i][apos] = a;
    Blitzer[i][Geschw] = geschw;
    Blitzer[i][Radius] = 30;
    Blitzer[i][Strafe] = strafe;
    Blitzer[i][ID] = i;
    CreateObject(18880,x+1.0,y+1.0,z-2.0,0.0,0.0,a,400);
    SendClientMessage(playerid,Grün,"Du hast erfolgreich einen Blitzer aufgestellt.");
    format(str,sizeof(str),"%s hat einen Blitzer erstellt. (%.2f,%.2f,%.2f)",name,x,y,z);
    printf("%s",str);
    SaveBlitzer();
    return 1;
    }
    }
    return 1;
    }

  • Du hattest keine Abfrage in der Schleife, ob der Blitzer bereits existiert.
    Versuche es so:


    Alles klar hat geklappt, noch eine kleine Frage: Ich wollt jetzt eine Liste erstellen wo er mir die Blitzer anzeigt, jedoch zeigt er mir nur den an den ich aktuell erstellt habe.


    ocmd:showbl(playerid,params[])
    {
    new string[256];
    if(IsPlayerConnected(playerid))
    if(IsPlayerFraktRang(playerid, 7, 1))
    {
    if(GetPVarInt(playerid,"loggedin") == 0)return SendClientMessage(playerid,Grau,"Bitte logge dich zuerst ein.");
    if(BusDuty[playerid] >= 1 || PilotDuty[playerid] >= 1 || fischfuhr[playerid] >= 1 || PlayerLieferung[playerid] >= 1 || ElektroDuty[playerid] >= 1)return SendClientMessage(playerid,Grau,"Du bist zur Zeit bei der Arbeit.");
    for(new i; i < MAX_BLITZER; i++)
    {
    if(Blitzer[i][Erstellt] == 1)
    {
    format(string,sizeof string,"Blitzer %d || Aufgestellt von: %s\n",Blitzer[i][ID],Blitzer[i][Aufsteller]);
    ShowPlayerDialog(playerid,DIALOG_BLITZER,DIALOG_STYLE_LIST,"Aktive Blitzer",string,"Orten","Schließen");
    return 1;
    }
    else { SendClientMessage(playerid,Grau,"Momentan sind keine Blitzer aufgestellt."); return 1; }
    }
    }
    return 1;
    }


    Orten kann ich den auch ohne Probleme, aber es ist halt immer nur einer aufgelistet obwohl ich 3 ertsellt habe oder so.


    MfG

  • ocmd:showbl(playerid,params[])
    {
    new string[512];
    if(IsPlayerConnected(playerid))
    if(IsPlayerFraktRang(playerid, 7, 1))
    {
    if(GetPVarInt(playerid,"loggedin") == 0)return SendClientMessage(playerid,Grau,"Bitte logge dich zuerst ein.");
    if(BusDuty[playerid] >= 1 || PilotDuty[playerid] >= 1 || fischfuhr[playerid] >= 1 || PlayerLieferung[playerid] >= 1 || ElektroDuty[playerid] >= 1)return SendClientMessage(playerid,Grau,"Du bist zur Zeit bei der Arbeit.");
    for(new i; i < MAX_BLITZER; i++)
    {
    if(Blitzer[i][Erstellt] == 1)
    {
    format(string,sizeof string,"%sBlitzer %d || Aufgestellt von: %s\n",string,Blitzer[i][ID],Blitzer[i][Aufsteller]);
    }
    }
    if(strlen(string)) ShowPlayerDialog(playerid,DIALOG_BLITZER,DIALOG_STYLE_LIST,"Aktive Blitzer",string,"Orten","Schließen");
    else SendClientMessage(playerid,Grau,"Momentan sind keine Blitzer aufgestellt.");
    }
    return 1;
    }


  • Klappt schon mal, ein Problem gibts noch, nämlich wenn ich die Orten will klappts erstmal. Erstell ich 2 und lösch ich den ersten den ich erstellt habe und lass den 2 Orten zeigt er mir ein Checkpoint bei den Koordinaten 0.0,0.0,0.0.


    if(dialogid == DIALOG_BLITZER)
    {
    if(response)
    {
    for(new i; i < MAX_BLITZER; i++)
    if(listitem == i)
    {
    SetPlayerCheckpoint(playerid,Blitzer[i][xpos],Blitzer[i][ypos],Blitzer[i][zpos],3.0);
    SendClientMessage(playerid,Grün,"Der Blitzer wurde dir auf der Karte markiert.");
    Navi[playerid] = 1;
    }
    }
    }


    MfG

  • if(dialogid == DIALOG_BLITZER)
    {
    if(response)
    {
    for(new i; i < MAX_BLITZER; i++)
    {
    if(Blitzer[i][Erstellt] == 1)
    {
    if(listitem == count)
    {
    SetPlayerCheckpoint(playerid,Blitzer[i][xpos],Blitzer[i][ypos],Blitzer[i][zpos],3.0);
    SendClientMessage(playerid,Grün,"Der Blitzer wurde dir auf der Karte markiert.");
    Navi[playerid] = 1;
    return 1;
    }
    count++;
    }
    }
    }
    return 1;
    }


    PS: Lasse bitte die Vollzitate samt Code, das macht keinen Sinn.