Fragen zu Oparken

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 habe eine frage.


    Hat jemand ahnung wie man das Fahrzeug Löschen lassen kann wen es abgeschleppt wurde?
    Wen der Spieler dann in ein Punkt ist /freikaufen? mit Dialog?


    Man muss den Schlüssel ausgewählt haben um das Fahrzeug dann frei zu kaufen.
    Wen das Fahrzeug abgeschleppt ist sollte unter /carkey in rot stehn (Verwahrstelle)


    Wen der Spieler es per /freikaufen freikauft sollte es 3 verschiedene Stellen geben wo das Fahrzeug dann spawnt.


    Wäre euch sehr dankbar!!



    //E:


    /opark [Kaution]


    Das man die Kaution für das Fahrzeug selber aussuchen kann!

  • Nimms mir nicht übel, aber das Forum ist voll mit solchen Tutorials.
    Wenn du es selbst nicht probierst, kannst du es niemals lernen. ;)


    Ich kann dir aber gerne ein Rezept aufschreiben:
    -Wenn man es oparkt, das Fahrzeug via DestroyVehicle(vehid); löschen (aus dem Array "Vehicle" kriegst du vermutlich auch die vehicleid).
    -Unter Vehicle im Enumator eine neue Kategorie einführen (z.B. bool:opark, wobei ein Integer zum Speichern besser ist :)). Diese musst du dann auch laden und speichern lassen. Ist das geschaft, packst du AddStaticVehicleEx/CreateVehicle oder whatever nach unten mit Funktionen wie VehicleNumberplate etc.
    Ist Vehicle XYZ[opark] == 1 setzt du ein continue und hinderst das Script daran das Fahrzeug zu erstellen, welches DENNOCH geladen wird. (Abfrage vor dem erstelllen des Fahrzeugs natürlich).
    Danach kannst du nebesächliche Sachen wie den Dialog einführen, wo du beim formatieren des Dialoges dann überprüfst, ob opark == 1.
    Darauf dann deine Interaktion mit dem Szenario.
    -Beim opark Befehl musst du dann auch noch beachten, dass du für Vehicle auch noch eine Kategorie in den Enumator einfügst, wo du den Preis festlegst.
    Beim freikaufen musst du u.a. auch die Tunings neu laden, das darfst du nicht vergessen!


    Das war's eigentlich im Großen und Ganzen.
    Melde dich einfach hier, wenn du Probleme bei der Umsetzung hast. ;)



    PS: kannst die MrMonats Tutorialreihe anschauen, die wird dir vermutlich helfen können. :D

  • //E:



    Das Fahrzeug wird nun gelöscht aber der Freikaufen Befehl funktioniert nicht...

  • Ah okay, der Fehler ist, dass du "IsValidVehicle" abfragst.
    Du lässt das Fahrzeug ja löschen -> invalid


    Du solltest zu Scriptbeginn die vehID auf INVALID_VEHICLE_ID setzen und diese sich selbst beim erstellen ändern lassen. Wenn das Fahrzeug "deaktiviert" ist, würde ich vehID auf -1 setzen, damit es zu keinen Verwechslungen kommt.


    Theoretisch kannst du die Zeile dazu umändern:
    if(IsValidVehicle(XYZ) || XYZ == -1)


    (sorry für die Faulheit, schreibe via Handy. :))

  • Wie meinst du das genau....


    Wie soll ich noch dazu am besten abfragen ob er den richtigen Fahrzeugschlüssel auswählen hat. weil es bringt mir nix wen er ein Fahrzeug auswählen tut was nicht abgeschleppt ist.



    //E: Da ich es ja lösche habe ich das Fahrzeug nicht mehr als Carkey

  • okay, also du kannst es so lösen:
    IsValidVehicle MUSST du entfernen, da du das Fahrzeug löschst -> nicht mehr valid.
    Du musst der Fahrzeug ID einen spezifischen Wert zuordnen (z.B. -1) und diesen abfragen, da das Fahrzeug ansonsten nicht existiert.


    LG





  • So habe das nun Rausgenommen wie du gesagt hattest.
    Wie Gebe ich den Fahrzeug jetzt ein wert wie du gesagt hattest -1?


    Habe mir auch noch gedacht das ich



    Vehicle[PrivateVehicle[i][slot][vehID]][vehDestroyed] = true;


    stelle das ich dann beim Carkey herrausfinden kann ob das Fahrzeug in der Verwahrstelle ist oder nicht..




    //E:



    Wollte kurz fragen habe wen das Fahrzeug gelöscht wird habe ich das auf true gesetzt und wollte das jetzt unter carkey einsetzen.


    Sollte dann so aussehn Fahrzeug (Verwahrstelle)
    Wen es nicht abgeschleppt ist einfach nur das Fahrzeug anzeigen.


  • Hey, habe den Code "etwas angepasst" und dir das eben geschrieben. Schau mal bitte, ob das Errors ausspuckt (bin mir aber sicher, dass es korrekt sein sollte (?!)).



    CMD:carkey(playerid)
    {
    if(!IsLoggedIn(playerid)) return 1;
    new string[4][64];
    if(GetPlayerVehicleCount(playerid) == 0)return SendClientMessage(playerid, COLOR_GREY, "Du besitzt keine Autoschlüssel.");
    for( new i = 0; i < 4; i++) {
    if(PrivateVehicle[playerid][i][modelid] >= 400 && PrivateVehicle[playerid][i][modelid] >= 611) {
    format(string[i], sizeof(string[i]), "{FFFFFF}%s\n", VehicleName[PrivateVehicle[playerid][0][modelid]-400]);
    if(Vehicle[PrivateVehicle[i][slot][vehID]][vehDestroyed] == true) {
    new pos = (8 + strlen(VehicleName[PrivateVehicle[playerid][0][modelid]-400]));
    strins(string[i], "(Verwahrstelle)", pos);
    }
    } else {
    string[i] = "{FFFFFF}-\n";
    }
    if( i == 0 ) {
    DialogString = "";
    }
    format(DialogString, sizeof(DialogString), "%s%s", DialogString, string[i]);
    }
    ShowPlayerDialog(playerid, DIALOG_CARKEYS, DIALOG_STYLE_LIST, "Deine Autoschlüssel", DialogString, "Orten", "Schließen");
    return 1;
    }


    Hoffe mal, dass dich die etwas irritierende Schreibweise nicht stört, hab's gerne kompliziert. x)
    //E: Fehler behoben

  • C:\Users\ASUS\Desktop\---\gamemodes\GRR.pwn(12622) : error 001: expected token: "]", but found "-identifier-"
    C:\Users\ASUS\Desktop\---\gamemodes\GRR.pwn(12622) : warning 215: expression has no effect
    C:\Users\ASUS\Desktop\---\gamemodes\GRR.pwn(12622) : error 001: expected token: ";", but found "]"
    C:\Users\ASUS\Desktop\---y\gamemodes\GRR.pwn(12622) : error 029: invalid expression, assumed zero
    C:\Users\ASUS\Desktop\RPG-CIty\gamemodes\happyages.pwn(12622) : fatal error 107: too many error messages on one line

  • Sorry für die späte Antwort, hatte noch etwas zu tun.
    Ich schätze der Fehler kommt dadurch, dass im VehicleName zu viele eckige Klammern sind.


    Probiere das mal:
    [pwn
    CMD:carkey(playerid)
    {
    if(!IsLoggedIn(playerid)) return 1;
    new string[4][64];
    if(GetPlayerVehicleCount(playerid) == 0)return SendClientMessage(playerid, COLOR_GREY, "Du besitzt keine Autoschlüssel.");
    for( new i = 0; i < 4; i++) {
    if(PrivateVehicle[playerid][i][modelid] >= 400 && PrivateVehicle[playerid][i][modelid] >= 611) {
    new funcmodel = (PrivateVehicle[playerid][0][modelid]-400);
    format(string[i], sizeof(string[i]), "{FFFFFF}%s\n", VehicleName[funcmodel]);
    if(Vehicle[PrivateVehicle[i][slot][vehID]][vehDestroyed] == true) {
    new pos = (8 + strlen(VehicleName[PrivateVehicle[playerid][0][modelid]-400]));
    strins(string[i], "(Verwahrstelle)", pos);
    }
    } else {
    string[i] = "{FFFFFF}-\n";
    }
    if( i == 0 ) {
    DialogString = "";
    }
    format(DialogString, sizeof(DialogString), "%s%s", DialogString, string[i]);
    }
    ShowPlayerDialog(playerid, DIALOG_CARKEYS, DIALOG_STYLE_LIST, "Deine Autoschlüssel", DialogString, "Orten", "Schließen");
    return 1;
    }
    [/pwn]
    E: Zeichen vergessen =)


  • CMD:carkey(playerid)
    CMD:carkey(playerid)
    {
    if(!IsLoggedIn(playerid)) return 1;
    new string[128];
    if(GetPlayerVehicleCount(playerid) == 0)return SendClientMessage(playerid, COLOR_GREY, "Du besitzt keine Autoschlüssel.");
    for( new i = 0; i < 4; i++) {
    if(PrivateVehicle[playerid][i][modelid] >= 400 && PrivateVehicle[playerid][i][modelid] >= 611) {
    new funcmodel = (PrivateVehicle[playerid][i][modelid]-400);
    format(string, sizeof(string), "{FFFFFF}%s\n", VehicleName[funcmodel]);
    if(Vehicle[PrivateVehicle[playerid][i][vehID]][vehDestroyed] == true) {
    new pos = (8 + strlen(VehicleName[PrivateVehicle[playerid][i][modelid]-400]) +1);
    strins(string, "(Verwahrstelle)", pos);
    }
    } else {
    string = "{FFFFFF}-\n";
    }
    if( i == 0 ) {
    DialogString = "";
    }
    format(DialogString, sizeof(DialogString), "%s%s", DialogString, string);
    }
    ShowPlayerDialog(playerid, DIALOG_CARKEYS, DIALOG_STYLE_LIST, "Deine Autoschlüssel", DialogString, "Orten", "Schließen");
    return 1;
    }


    Jetzt aber! :)


  • Kurze frage wen ich /opark 5000 mache zeigt er mir Kaution: 65535$ an warum?

  • Danke das klappt nochwas :/

    Code
    C:\Users\ASUS\Desktop\---\gamemodes\GRR.pwn(25494) : warning 213: tag mismatch
    
    
    C:\Users\ASUS\Desktop\---\gamemodes\GRR.pwn(27516) : warning 213: tag mismatch



    PrivateVehicle[playerid][slot][vehDestroyed] = cache_get_field_content_float(0, "vehDestroyed"); //25494


    Vehicle[vehicleid][vehDestroyed] = 0; //27516

  • Danke das klappt nochwas :/

    Code
    C:\Users\ASUS\Desktop\---\gamemodes\GRR.pwn(25494) : warning 213: tag mismatch
    
    
    C:\Users\ASUS\Desktop\---\gamemodes\GRR.pwn(27516) : warning 213: tag mismatch

    PrivateVehicle[playerid][slot][vehDestroyed] = cache_get_field_content_float(0, "vehDestroyed"); //25494Vehicle[vehicleid][vehDestroyed] = 0; //27516

    Also erst einmal möchte deine Variable nur einen boolean zugewiesen bekommen haben und keinen anderen Datentyp. Wenn ich mir deinen Array so anschaue scheint folgendes dein Problem zu lösen:


    Zeile 25494: PrivateVehicle[playerid][slot][vehDestroyed] =!! cache_get_field_content_int(0, "vehDestroyed");
    Zeile 27516: Vehicle[vehicleid][vehDestroyed] = false;


    Wobei ich mir nicht vorstellen kann, dass du den gleichen enum-Bezeichner hast und für deinen Array scheinbar unterschiedliche Namen vergeben hast.

  • Schein gut zusein, was ist die Wirkung von _:



    //E:


    C:\Users\ASUS\Desktop\---\gamemodes\GRR.pwn(27515) : warning 213: tag mismatch






    _:Vehicle[vehicleid][vehDestroyed] = 0;


    Vehicle[vehicleid][vehDestroyed] = 0;



    Hier der selbe fehler:




    PrivateVehicle[playerid][slot][vehDestroyed] = cache_get_field_content_int(0, "vehDestroyed");


    _:PrivateVehicle[playerid][slot][vehDestroyed] = cache_get_field_content_int(0, "vehDestroyed");