/veh falsche id

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


    habe ein Problem mit dem Command /veh (siehe spoiler)



    Spoiler anzeigen
    if(strcmp(cmd, "/veh", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    if (PlayerInfo[playerid][pAdmin] < 5)
    {
    SendClientMessage(playerid, COLOR_GRAD1, " Du bist kein Admin!");
    return 1;
    }
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_GRAD2, "Benutze: /veh [carid] [color1] [color2]");
    return 1;
    }
    new car;
    car = strval(tmp);
    if(car < 400 || car > 611) { SendClientMessage(playerid, COLOR_GREY, " Auto Nummer nicht weniger als 400 oder höher als 611 sein !"); return 1; }
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_GRAD2, "Benutze: /veh [carid] [color1] [color2]");
    return 1;
    }
    new color1;
    color1 = strval(tmp);
    if(color1 < 0 || color1 > 299) { SendClientMessage(playerid, COLOR_GREY, " Nicht Weniger als 0 oder höher 126 !"); return 1; }
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_GRAD2, "Benutze: /veh [carid] [color1] [color2]");
    return 1;
    }
    new color2;
    color2 = strval(tmp);
    if(color2 < 0 || color2 > 166) { SendClientMessage(playerid, COLOR_GREY, " Nicht weniger als 0 oder höher als 126 !"); return 1; }
    new Float:X,Float:Y,Float:Z;
    GetPlayerPos(playerid, X,Y,Z);
    new i = CreateNumber();
    if(i == -1) return SendClientMessage(playerid, Grey, "Fehler! Meld dich bei einem Admin!");
    PlayerCar[i][px] = X;
    PlayerCar[i][py] = Y;
    PlayerCar[i][pz] = Z;
    PlayerCar[i][pa] = 0;
    PlayerCar[i][c1] = color1;
    PlayerCar[i][c2] = color2;
    PlayerCar[i][model] = car;
    PlayerCar[i][NSID] = i;
    PlayerCar[i][Job] = 999;
    PlayerCar[i][Frak] = 999;
    PlayerCar[i][Fuel] = 100;
    PlayerCar[i][JobCar] = 0;
    PlayerCar[i][FrakCar] = 0;
    format(PlayerCar[i][Key], MAX_PLAYER_NAME, "Ad");
    PlayerCar[i][Lock] = 1;

    Spoiler anzeigen
    format(str, sizeof str, "/Cars/%d.ini", i);
    dini_Create(str);
    format(str, sizeof str, "%s-%d", PlayerCar[i][ABC], PlayerCar[i][NSID]);
    PlayerCar[i][vid] = CreateVehicle(car, X,Y,Z, 0.0, color1, color2, 60000);
    SaveCar(i);
    new carid = PlayerCar[i][vid];
    CreatedCars[CreatedCar] = carid;
    CreatedCar++;
    VehInfo[carid][Motor] = 1;
    //Gas[carid] = GetGasMax(car);
    format(string, sizeof(string), " *Du hast ein Fahrzeug gespawnt! Es hat die ID %d.", carid);
    SendClientMessage(playerid, COLOR_GREY, string);
    format(string, 256, "Admin: %s hat ein Adminfahrzeug erstellt! Carid: %d",sendername, carid);
    AdminNachricht(COLOR_RED,string,1);

    Spoiler anzeigen
    }
    return 1;
    }


    hier die id erstellung:

    Spoiler anzeigen
    public CreateNumber()
    {
    //generate_id:
    new id = vrandom(MIN_ID, MAX_ID);
    new path[128];
    format(path,sizeof path,"/Cars/%d.ini",id);
    if(fexist(path))
    {
    CreateNumber();
    return 1;
    }
    else if(!fexist(path)) { return id; }
    AdminNachricht(COLOR_LIGHTRED, "Achtung: Es können keine weitern Fahrzeuge mehr erstellt werden! MAX_ID Wert erhöhen! [ggf. an ServerLeitung weiterleiten!]", 6);
    return -1;
    }


    sie funktioniert zwar allerdings erstellt /veh cars ab id 499.. es gibt aber schon cars mit 499 500 (...) bis 970
    gibt es eine möglichkeit es so einzustellen das der befehl /veh erst wieder cars ab id 1200 oder 1500 erstellt? also 1500.ini , 1501.ini?


    habe schon versucht den MIN_ID wert zu erhöhen aber hat nicht funktioniert


    hoffe ihr wisst eine lösung..


    mfg mryoo


    keiner eine lösung??? :/


    //push

  • Wenns immer eine id höher gezählt werden soll.
    Einfach eine Variable hochrechnen lassen. Und beim Laden halt immer abfragen ob diese Datei exestiert wenn nicht überspringen. Oder dazu noch eine zweite Funktion bauen die überprüft ob eine ID zwischen 2 anderen Frei ist.
    Beispiel es gibt ID 450 und 452 Die Funktion erkennt dann das 451 nicht exestiert und erstellt diese. Ist so etwas gemeint ?

    RFT


  • for(new i = (DEINE MIN ID); i < DEINE MAX ID; i++)
    {
    format(str, sizeof(str), "%d.ini", i);
    if(!fexists(str))return i;//Würde bedeuten diese ID exestiert nicht und wird daher zurückgegeben.
    }


    Verstanden wie ich das meine ?

    RFT

  • nicht ganz.. verstanden wies geht aber muss ich das jetzt in /veh einfügen?? 8|


    C:\Users\Marcel\Desktop\fgreallife\gamemodes\firstgamers.pwn(39169) : error 017: undefined symbol "str"
    C:\Users\Marcel\Desktop\fgreallife\gamemodes\firstgamers.pwn(39169) : error 017: undefined symbol "str"
    C:\Users\Marcel\Desktop\fgreallife\gamemodes\firstgamers.pwn(39169) : error 029: invalid expression, assumed zero
    C:\Users\Marcel\Desktop\fgreallife\gamemodes\firstgamers.pwn(39169) : fatal error 107: too many error messages on one line


    Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    4 Errors.


    public CreateNumber()
    {
    //generate_id:
    for(new i = (MIN_ID); i < MAX_ID; i++)
    {
    format(str, sizeof(str), "Cars/%d.ini", i);
    if(!fexists(str))return i;//Würde bedeuten diese ID exestiert nicht und wird daher zurückgegeben.
    }
    if(fexist(path))
    {
    CreateNumber();
    return 1;
    }
    else if(!fexist(path)) { return id; }
    AdminNachricht(COLOR_LIGHTRED, "Achtung: Es können keine weitern Fahrzeuge mehr erstellt werden! MAX_ID Wert erhöhen! [ggf. an ServerLeitung weiterleiten!]", 6);
    return -1;
    }

  • C:\Users\Marcel\Desktop\Lifeplayfgreallife\gamemodes\firstgamers.pwn(39171) : error 017: undefined symbol "fexists"
    C:\Users\Marcel\Desktop\Lifeplayfgreallife\gamemodes\firstgamers.pwn(39178) : error 017: undefined symbol "id"


    public CreateNumber()
    {
    new path[258];
    for(new i = (MIN_ID); i < MAX_ID; i++)
    {
    format(path, sizeof(path), "Cars/%d.ini", i);
    if(!fexists(path))return i;//Würde bedeuten diese ID exestiert nicht und wird daher zurückgegeben.
    }
    if(fexist(path))
    {
    CreateNumber();
    return 1;
    }
    else if(!fexist(path)) { return id; }
    AdminNachricht(COLOR_LIGHTRED, "Achtung: Es können keine weitern Fahrzeuge mehr erstellt werden! MAX_ID Wert erhöhen! [ggf. an ServerLeitung weiterleiten!]", 6);
    return -1;
    }


    geht immernoch nicht :/

  • thx :D


    noch einer
    C:\Users\Marcel\Desktop\Lifeplayfgreallife\gamemodes\firstgamers.pwn(39178) : error 017: undefined symbol "id"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Error.


    Spoiler anzeigen
    public CreateNumber()
    {
    new path[258];
    for(new i = (MIN_ID); i < MAX_ID; i++)
    {
    format(path, sizeof(path), "Cars/%d.ini", i);
    if(!fexist(path))return i;//Würde bedeuten diese ID exestiert nicht und wird daher zurückgegeben.
    }
    if(fexist(path))
    {
    CreateNumber();
    return 1;
    }
    else if(!fexist(path)) { return id; }
    AdminNachricht(COLOR_LIGHTRED, "Achtung: Es können keine weitern Fahrzeuge mehr erstellt werden! MAX_ID Wert erhöhen! [ggf. an ServerLeitung weiterleiten!]", 6);
    return -1;
    }

  • wofür soll das id da sein?


    versuch mal statt id ein I zu nehmen
    kann klappen muss aber nicht

  • ok bin weiter gerkommen aber jetzt ist noch ein warning:


    C:\Users\Marcel\Desktop\Lifeplayfgreallife\gamemodes\firstgamers.pwn(39187) : warning 209: function "CreateNumber" should return a value
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Warning.


    hab schon getestet ob es funktioniert geht aber immernoch nicht
    der befehl /veh erstellt immernoch cars ab id 492


    public CreateNumber()
    {
    new path[258];
    //new id[258];
    for(new i = (MIN_ID); i < MAX_ID; i++)
    {
    format(path, sizeof(path), "Cars/%d.ini", i);
    if(!fexist(path))return i;//Würde bedeuten diese ID exestiert nicht und wird daher zurückgegeben.
    if(fexist(path))
    {
    CreateNumber();
    return 1;
    }
    }
    }

  • kein warn mehr..
    werde es mal testen


    danke :)


    geht nochimmer nicht..
    also die id von /dl ändert sich zwar
    aber bei dem script werden andere ids verwendet
    die sieht man mit /nearid


    Spoiler anzeigen
    if(!strcmp(cmdtext, "/nearid", true))
    {
    if(PlayerInfo[playerid][pAdmin] >= 2)
    {
    for(new i = 0; i<MAX_VEHICLES; i++)
    {
    format(str, sizeof str, "/Cars/%d.ini", i);
    if(fexist(str))
    {
    new Float:xx,Float:yy, Float:zz;
    GetVehiclePos(PlayerCar[i][vid], xx, yy, zz);
    if(IsPlayerInRangeOfPoint(playerid, 2.5, xx, yy, zz))
    {
    format(str, sizeof str, "Dieses Fahrzeug hat die ID: %d!", PlayerCar[i][NSID]);
    SendClientMessage(playerid, COLOR_RED, str);
    return 1;
    }
    }
    }
    }
    return 1;
    }


    allerdings kann ich /nearid erst verwenden wenn ich das car mit /savens gespeichert habe
    nur ich kann es nicht speichern weil bei /veh immer eine id die schon gespeichert ist angezeigt wird.. (cars bis id 990 gespeichert)