dveh (Deletevehicle) funktioniert nicht.

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


    Ich hab mir ein /veh & /dveh-Befehl erbastelt.
    Leider, wird das Fahrzeug beim eintippen von /dveh nicht gelöscht...


    Hier der Code:

    Spoiler anzeigen
    new Inhaber[MAX_VEHICLES];

    Spoiler anzeigen
    ocmd:veh(playerid,params[])
    {
    if(!isPlayerAFK(playerid))
    {
    if(isPlayerAnAdmin(playerid,2))
    {
    if(GetPVarInt(playerid,"Admincar") == 0)
    {
    new carid,c1,c2;
    if(sscanf(params,"iii",carid,c1,c2))return SCM(playerid,COLOR_GREY,"Benutze: /veh [Fahrzeug-ID] [Farbe 1] [Farbe 2]");
    {
    new Float:X,Float:Y,Float:Z;
    GetPlayerPos(playerid,X,Y,Z);
    AddStaticVehicleEx(carid,X+3,Y,Z,0,c1,c2,-1);
    Inhaber[carid] = playerid;
    SetPVarInt(playerid,"Admincar",1);
    Echo COLOR_LIGHTGREEN,"Du hast dir ein Adminfahrzeug erstellt. Dieses kannst du mit /dveh löschen!");
    return 1;
    }
    }
    }
    }
    else
    {
    SCM(playerid,AFK,"Du bist Abwesend gemeldet. Mit dem Befehl /back kannst du dich wieder Anwesend melden!");
    }
    return 1;
    }

    Spoiler anzeigen
    ocmd:dveh(playerid,params[])
    {
    if(!isPlayerAFK(playerid))
    {
    if(isPlayerAnAdmin(playerid,2))
    {
    if(GetPVarInt(playerid,"Admincar") == 1)
    {
    for(new v;v<MAX_VEHICLES;v++)
    {
    if(Inhaber[v] == playerid)
    {
    DestroyVehicle(v);
    SetPVarInt(playerid,"Admincar",0);
    Echo COLOR_LIGHTGREEN,"Du hast dein Adminfahrzeug gelöscht!");
    return 1;
    }
    }
    }
    }
    }
    else
    {
    SCM(playerid,AFK,"Du bist Abwesend gemeldet. Mit dem Befehl /back kannst du dich wieder Anwesend melden!");
    }
    return 1;
    }

  • Hier mach es folgendermaßen
    Ich hab das gane noch etwas abgeändert ich schreibe gleich was
    new Inhaber[MAX_PLAYERS];


    ocmd:veh(playerid,params[])
    {
    if(!isPlayerAFK(playerid))
    {
    if(isPlayerAnAdmin(playerid,2))
    {
    if(GetPVarInt(playerid,"Admincar") == 0)
    {
    new carid,c1,c2;
    if(sscanf(params,"iii",carid,c1,c2))return SCM(playerid,COLOR_GREY,"Benutze: /veh [Fahrzeug-ID] [Farbe 1] [Farbe 2]");
    {
    new Float:Pos[3];
    GetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]);
    Inhaber[playerid] = CreateVehicle(carid,Pos[0]+3,Pos[1],Pos[2],0,c1,c2,-1);
    SetPVarInt(playerid,"Admincar",1);
    Echo COLOR_LIGHTGREEN,"Du hast dir ein Adminfahrzeug erstellt. Dieses kannst du mit /dveh löschen!");
    return 1;
    }
    }
    }
    }
    else
    {
    SCM(playerid,AFK,"Du bist Abwesend gemeldet. Mit dem Befehl /back kannst du dich wieder Anwesend melden!");
    }
    return 1;
    }


    ocmd:dveh(playerid,params[])
    {
    if(!isPlayerAFK(playerid))
    {
    if(isPlayerAnAdmin(playerid,2))
    {
    if(GetPVarInt(playerid,"Admincar") == 1)
    {
    DestroyVehicle(Inhaber[playerid]);
    SetPVarInt(playerid,"Admincar",0);
    Echo COLOR_LIGHTGREEN,"Du hast dein Adminfahrzeug gelöscht!");
    return 1;
    }
    }
    }
    else
    {
    SCM(playerid,AFK,"Du bist Abwesend gemeldet. Mit dem Befehl /back kannst du dich wieder Anwesend melden!");
    }
    return 1;
    }


    1. Du kannst kein AddStaticVehicle benutzen, weil man während der Serverlaufzeit Fahrzeuge nur durch CreateVehicle erstellen kann
    2. Ich hab dein Float:X, Float:Y, Float:Z zu Float: Pos[3] also ein eindimensionaler Array das ist etwas ressourcenschonender
    3. das wichtigste Ich hab deine Inhaber Variable in eine "Max_Player" Variable geändert und für den der den Befehl sendet wird ein Auto erstellt und wenn man /dveh eingibt wird "mein" Fahrzeug wieder gelöscht dadurch fällt diese unnötige for-Schleife durch alle Vehicles weg das wären nämlich wenn man es nicht umdefiniert 2000!
    4. Du musst das Fahrzeug beim Disconnecten aber auch noch löschen also DestroyVehicle(Inhaber[playerid]); und die Variable beim connecten auf -1 setzen also Inhaber[playerid] = -1;

    3 Mal editiert, zuletzt von [COE]CodeX ()

  • Wenn du eh mit PVars arbeitest, speicher die Fahrzeug ID doch einfach darin.
    ocmd:veh(playerid,params[])
    {
    //blabla, abfragen usw
    if(GetPVarInt(playerid,"Admincar") == -1) //-1 beduetet kein Fahrzeug
    {
    //der rest vom code
    new veh = CreateVehicle(carid,Pos[0]+3,Pos[1],Pos[2],0,c1,c2,-1);
    SetPVarInt(playerid,"Admincar",veh);
    }
    }
    ocmd:dveh(playerid,params[])
    {
    if(GetPVarInt(playerid,"Admincar") != -1)
    {
    DestroyVehicle(GetPVarInt(playerid,"Admincar"));
    SetPVarInt(playerid,"Admincar",-1);
    }
    }


    //Edit: vergiss aber nicht, bei OnPlayerDisconnect abzufragen ob der Spieler ein Frahrzeug hat, und es, falls vorhanden, zu löschen. Und eben die PVar bei OnPlayerConnect auf -1 setzen.

    The fact is, I am right. And if you think I'm wrong, you are wrong.