Problem beim starten des Motors per Befehl!

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,


    als Gamemode habe ich momentan grandlarc und dazu folgende Filterscripts:
    GPS <- Funktioniert. - Ist halt einfach ein GPS und hat nichts mit Fahrzeugen zutun.
    Event <- Funktioniert. - Zum erstellen von Events und hat nichts mit Fahrzeugen zutun.
    Spawnerect <- Funktionert. - Zum spawnen einer NRG, damit ich nicht ständig Fahrzeuge suchen muss.
    TachoMotor <- Das Tacho funktioniert, das starten abschalten von Motoren allerdings nicht.


    Zum Problem:
    Ich habe mir ein System zum starten und abschalten von Motoren geschrieben.
    Da es allerdings nicht funktioniert hat, habe ich das ganze wieder verworfen und
    mir einfach mal ein Video von MrMonat geschnappt worauf ich dann aufbauen wollte.


    Folgendes kam dann bei mir raus:
    public OnFilterScriptInit()
    {
    ManualVehicleEngineAndLights();
    return 1;
    }
    ocmd:motor(playerid,params[])
    {
    if(GetPlayerState(playerid)!=PLAYER_STATE_DRIVER)return
    SendClientMessage(playerid,-1,"Du bist in keinen Fahrzeug oder nicht der Fahrer des Fahrzeugs!");


    new vID=GetPlayerVehicleID(playerid),engine,lights,alarm,doors,bonnet,boot,objectiv;
    GetVehicleParamsEx(vID,engine,lights,alarm,doors,bonnet,boot,objectiv);
    if(engine==1) { engine=0; } else { engine=0; }
    SetVehicleParamsEx(vID,engine,lights,alarm,doors,bonnet,boot,objectiv);
    return 1;
    }


    Daraufhin einfach mal getestet und siehe da, eigentlich passiert gar nichts.
    Wenn ich InGame rumlaufe und "/motor" eingebe, wird mir zwar im Chat "Du bist in
    keinen Fahrzeug oder nicht der Fahrer des Fahrzeugs!" angezeigt, aber wenn ich
    dann in ein Fahrzeug als Fahrer einsteige, passert mit "/motor" rein gar nichts.


    Bin ich jetzt etwa schon unfähig abzuschreiben, oder liegt es am Filterscript?
    Es wäre echt nett, wenn mir da jemand helfen könnte!



    Gruß und vorab schon einmal vielen Dank!


  • ocmd:motor(playerid,params[])
    {
    if(GetPlayerState(playerid)!=PLAYER_STATE_DRIVER)return SendClientMessage(playerid,COLOR_RED,"Du bist der Fahrer eines Fahrzeuges.");
    new vID=GetPlayerVehicleID(playerid),tmp_engine,tmp_lights,tmp_alarm,tmp_doors,tmp_bonnet,tmp_boot,tmp_objective;
    if(tank[vID]<1)return SendClientMessage(playerid, COLOR_HELLBLAU, "Der Tank ist leer.");
    //Motor an/ausschalten
    GetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    if(tmp_engine==1){
    tmp_engine = 0;
    }else{
    tmp_engine = 1;
    }
    SetVehicleParamsEx(vID,tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    return 1;
    }

  • Okay, das mit den Tank habe ich rausgemacht, da ich momentan noch kein Tanksystem habe.


    Ich habe wohl richtig gefailt, denn ich bin davon ausgegangen,
    dass es überhaupt keinen unterschied macht wenn ich
    anstatt "tmp_engine" einfach "engine" schreibe.


    Vielen Dank, es funktioniert nun!

  • Okay, das mit den Tank habe ich rausgemacht, da ich momentan noch kein Tanksystem habe.


    Ich habe wohl richtig gefailt, denn ich bin davon ausgegangen,
    dass es überhaupt keinen unterschied macht wenn ich
    anstatt "tmp_engine" einfach "engine" schreibe.


    Vielen Dank, es funktioniert nun!

    Es macht auch kein unterschied ob du tmp_engine oder engine schreibst, dein Fehler liegt/lag woanders.


    if(engine==1) { engine=0; } else { engine=0; }
    // ok ok ok fehler
    Der Wert wert engine wir immer auf 0 gesetzt egal welchen Wert er vorher hatte.
    Richitg wäre es so:
    if(engine==1) { engine=0; } else { engine=1; }


    Oder etwas kürzer:
    SetVehicleParamsEx(vID,(engine == 1) ? (0) : (1), lights, alarm, doors, bonnet, boot, objective);

  • Okay, vielen Dank!


    Nun würde ich das ganze gerne mit einer Taste machen, was aber mal wieder überhaupt nicht funktioniert.
    Wenn ich nämlich eine beliebe Taste (w, a, s, d, strg, alt, z, h, ect.) drücke, wird der Befehl trotzdem
    ausgeführt als ob das Script den unterschied zwischen den Tasten nicht erkennen würde.
    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    if(GetPlayerState(playerid)==PLAYER_STATE_DRIVER)
    {
    if(newkeys == KEY_WALK)
    {
    new vID=GetPlayerVehicleID(playerid),tmp_engine,tmp_lights,tmp_alarm,tmp_doors,tmp_bonnet,tmp_boot,tmp_objective;
    GetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    if(tmp_engine==1)
    {
    tmp_engine = 0;
    }
    else
    {
    tmp_engine = 1;
    }
    SetVehicleParamsEx(vID,tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    }
    }
    return 1;
    }

    2 Mal editiert, zuletzt von Syneroz ()

  • Folgendermaßen habe ich es nun, aber es hat sich nichts verändert.



    Tachohintergrund = TextDrawCreate(623.000000, 384.000000, " .");
    TextDrawBackgroundColor(Tachohintergrund, 255);
    TextDrawFont(Tachohintergrund, 1);
    TextDrawLetterSize(Tachohintergrund, 27.410072, 1.000000);
    TextDrawColor(Tachohintergrund, 0x000000FF);
    TextDrawSetOutline(Tachohintergrund, 0);
    TextDrawSetProportional(Tachohintergrund, 1);
    TextDrawSetShadow(Tachohintergrund, 1);
    TextDrawUseBox(Tachohintergrund, 1);
    TextDrawBoxColor(Tachohintergrund, 50);
    TextDrawTextSize(Tachohintergrund, 511.000000, -7.000000);

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • PlayerTextDrawBoxColor(playerid, tankLabel[playerid], 255);
    zu:
    PlayerTextDrawBoxColor(playerid, tankLabel[playerid], 50);


    Oder eben mit dem entsprechenden HEX Wert.
    PlayerTextDrawBoxColor(playerid, tankLabel[playerid], 0x00000032);

  • Irgendwie wird breadfish bei mir manchmal einfach nicht geladen.
    Firefox lädt und lädt bis irgendwann eine Fehlermeldung kommt.


    Habt ihr das auch? Stimmt da irgendwas bei breadfish oder bei mir nicht?



    Btt:
    Der Tipp von Red_Romeo hat mich auf Anhieb zum Ergebnis geführt.

    TextDrawBoxColor(Tachohintergrund, 0x000000FF);

    Mittlerweile habe ich wieder neue Fragen;


    Momentan wird der Zustand eines Fahrzeuges folgendermaßen angezeigt:
    "100", "99.", "98.", "97." etc.
    soll aber wie folgt angezeigt werden:
    "100%", "99.93%", "98.52%", "97.75%"


    Hier ein Ausschnitt aus den Timer:

    public UpdateTacho()
    {
    for(new i = 0;i<MAX_PLAYERS;i++)
    {
    if(GetPlayerState(i)==PLAYER_STATE_DRIVER)
    {
    new Float:vHealth, stringschaden[16];
    GetPlayerPos(i, xfloat, yfloat, zfloat);
    format(stringschaden, sizeof(stringschaden), "Zustand: %.1f", vHealth/10);
    TextDrawSetString(TachoZustand[i],stringschaden);
    }
    }
    return 1;
    }


    Ansonsten frage ich mich, ob es eine Möglichkeit gibt den Zustand der Reifen abzufragen,
    am liebsten wäre mir hierbei die einzelnen Reifen abzufragen (z.B. Beim Auto VL, VR, HL, HR
    und beim Motorrad Vorne und Hinten).



    Gruß :)

  • 2 Nachkommastellen und ein % Zeichen (In Textdraws müssen 2 %% angeben werden wenn man ein % Zeichen haben will)
    format(stringschaden, sizeof(stringschaden), "Zustand: %.2f%%", vHealth/10);


    Und hiermit kannst du abfragen ob die Reifen kaputt sind:
    https://wiki.sa-mp.com/wiki/GetVehicleDamageStatus
    Der Reifenstatus wird im Dualsystem (2er System) angegeben.
    2^0 = 1 = Reifen hinten rechts
    2^1 = 2 = Reifen vorne rechts
    2^2 = 4 = Reifen hinten links
    2^3 = 8 = Reifen vorne links

    einfaches Beispiel
    new panels, doors, lights, tires;
    GetVehicleDamageStatus(GetPlayerVehicleID(playerid), panels, doors, lights, tires);
    if(tires == 0)SendClientMessage(playerid, -1, "Alle Reifen sind heile.");
    else {
    if(tires >= 8){
    tires -= 8;
    SendClientMessage(playerid, -1, "Der Reifen vorne links ist kaputt.");
    }
    if(tires >= 4){
    tires -= 4;
    SendClientMessage(playerid, -1, "Der Reifen hinten links ist kaputt.");
    }
    if(tires >= 2){
    tires -= 2;
    SendClientMessage(playerid, -1, "Der Reifen vorne rechts ist kaputt.");
    }
    if(tires >= 1){
    tires -= 1;
    SendClientMessage(playerid, -1, "Der Reifen hinten rechts ist kaputt.");
    }
    }

    //edit einfaches Beispiel hinzugefügt

    5 Mal editiert, zuletzt von Red_Romeo ()

  • Schon wieder ne knappe Stunde kein Zugriff auf breadfish...


    sagen wir mal ich habe 3 Fahrzeuge die ich aussortieren möchte.
    1. vID: 417
    2. vID: 425
    3. vID: 430


    Wie mach ich das jetzt nochmal?


    if(vID != 417 /*blablabla*/ != 425 /*blablabla*/ != 425)
    {
    /*blablabla*/
    }

  • Okay, "&&" hatte ich schon probiert, aber es funktioniert/e nicht, weshalb ich es dann verworfen haben.


    Ich habe die Zeilen vom Timer mal zusammengefasst wo das drin steht.


    "vID != 522" ist eine NRG und ich teste alles mit einer NRG,
    da die NRG aber 2 anstatt 4 Reifen hat habe ich sie vorerst aussortiert um
    später extra TextDraws für Fahrzeuge mit 2 Reifen zu erstellen,
    dennoch wird das ganze bei den aussortieren Fahrzeugen angezeigt.

    public UpdateTacho()
    {
    for(new i = 0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i))
    {
    if(GetPlayerState(i)==PLAYER_STATE_DRIVER)
    {
    new vID=GetPlayerVehicleID(i), stringreifen[48];
    new panels, doors, lights, tires;
    GetVehicleDamageStatus(vID, panels, doors, lights, tires);
    if (vID != 417 && vID != 425 && vID != 430 && vID != 435 && vID != 441 && vID != 446 && vID != 447 && vID != 448 && vID != 449 && vID != 450 && vID != 452
    && vID != 453 && vID != 454 && vID != 460 && vID != 461 && vID != 462 && vID != 463 && vID != 464 && vID != 465 && vID != 468 && vID != 469 && vID != 472
    && vID != 473 && vID != 476 && vID != 481 && vID != 484 && vID != 487 && vID != 488 && vID != 493 && vID != 497 && vID != 501 && vID != 509 && vID != 510
    && vID != 511 && vID != 512 && vID != 513 && vID != 519 && vID != 520 && vID != 521 && vID != 522 && vID != 523 && vID != 537 && vID != 538 && vID != 539
    && vID != 548 && vID != 553 && vID != 563 && vID != 564 && vID != 569 && vID != 570 && vID != 577 && vID != 581 && vID != 584 && vID != 586 && vID != 590
    && vID != 591 && vID != 592 && vID != 593 && vID != 594 && vID != 595 && vID != 606 && vID != 607 && vID != 608 && vID != 610 && vID != 611)
    {
    if(tires == 0)
    {
    format(stringreifen, sizeof(stringreifen), "VL: ~g~Ok!");
    TextDrawSetString(TachoReifenVL[i],stringreifen);
    format(stringreifen, sizeof(stringreifen), "VR: ~g~Ok!");
    TextDrawSetString(TachoReifenVR[i],stringreifen);
    format(stringreifen, sizeof(stringreifen), "HL: ~g~Ok!");
    TextDrawSetString(TachoReifenHL[i],stringreifen);
    format(stringreifen, sizeof(stringreifen), "HR: ~g~Ok!");
    TextDrawSetString(TachoReifenHR[i],stringreifen);
    }
    }
    }
    }
    }
    return 1;
    }

  • vID != modelid
    new vID=GetPlayerVehicleID(i), stringreifen[48],modelid=GetVehicleModel(GetPlayerVehicleID(i));
    new panels, doors, lights, tires;
    GetVehicleDamageStatus(vID, panels, doors, lights, tires);
    if(modelid != 522 && modelid != ...)
    {


    }

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen