Motor durch das Halten der "2" (Submission) starten

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 habe das Problem: Ich will, dass der Motor startet, wenn ich die "2"-Taste HALTE, dann nach etwa 3sek oder so der Server startet, wenn man los lässt, eine Nachricht kommt, wie mache ich das??


    Probiert habe ich es so:


    if(HOLDING(KEY_SUBMISSION))
    {
    if(IsPlayerConnected(playerid))
    {
    if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
    {
    return ocmd_motor(playerid);
    }
    }
    }


  • Du kannst auch mit einem Timer einstellen, dass wenn die Taste "2" (Submission) gedrückt wurde, der Motor erst nach der angegeben Timer Zeit startet.


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!

  • Versuch mal so:


    new Motor[MAX_VEHICLES] = 0;


    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(newstate == PLAYER_STATE_DRIVER)
    {
    if(Motor[GetPlayerVehicleID(playerid)] == 0)
    {
    SendClientMessage(playerid,COLOR_WHITE,"Starte den Motor mit Taste 2!");
    }
    }
    return 1;
    }


    und unter OnGameModInite()



    ManualVehicleEngineAndLights();
    new engine,lights,alarm,doors,bonnet,boot,objective;
    for (new i=0; i< MAX_VEHICLES; i++)
    {
    GetVehicleParamsEx(i,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(i,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
    Motor[i] = 0;
    }


    und das hier



    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    if(newkeys == KEY_SUBMISSION)
    {
    if(IsPlayerInAnyVehicle(playerid))
    {
    if(GetPlayerVehicleSeat(playerid) == 0)
    {
    new veh = GetPlayerVehicleID(playerid);
    if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER)
    {
    }
    else
    {
    new engine,lights,alarm,doors,bonnet,boot,objective;
    if(Motor[veh] == 0)
    {
    PlayerInfo[playerid][pMotorAn] = 1;
    GetVehicleParamsEx(veh,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(veh,VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective);
    Motor[veh] = 1;
    }
    else
    {
    PlayerInfo[playerid][pMotorAn] = 0;
    GetVehicleParamsEx(veh,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(veh,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
    Motor[veh] = 0;
    }
    }
    }
    }
    }


    e: was ergänzt

  • Gibt ne einfache Lösung:


    if ((newkeys & KEY_SUBMISSION) && !(oldkeys & KEY_SUBMISSION)) //Taste wird gedrückt
    //starte deinen Timer hier


    //erneute Abfrage:


    if ((oldkeys & KEY_SUBMISSION) && !(newkeys & KEY_SUBMISSION)) //Taste wurde losgelassen
    //Nachricht schicken und variable auf 0 setzen, sowie den Timer killen aber daran denken das eine Variable bei deinem Timer gesetzt werden sollte
    //welche auf 1 gesetzt wird wenn er die Taste 3 Sekunden hielt und hier abfragen ob sie 0 oder 1 ist.

  • Code
    C:\Users\Rene\Desktop\Selfmade\gamemodes\Selfmade.pwn(6290) : warning 225: unreachable codeC:\Users\Rene\Desktop\Selfmade\gamemodes\Selfmade.pwn(8164) : error 028: invalid subscript (not an array or too many subscripts): "MotorStarten"C:\Users\Rene\Desktop\Selfmade\gamemodes\Selfmade.pwn(8164) : warning 215: expression has no effectC:\Users\Rene\Desktop\Selfmade\gamemodes\Selfmade.pwn(8164) : error 001: expected token: ";", but found "]"C:\Users\Rene\Desktop\Selfmade\gamemodes\Selfmade.pwn(8164) : error 029: invalid expression, assumed zeroC:\Users\Rene\Desktop\Selfmade\gamemodes\Selfmade.pwn(8164) : fatal error 107: too many error messages on one lineCompilation aborted.Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase4 Errors.


    QuellCode
    if ((newkeys & KEY_SUBMISSION) && !(oldkeys & KEY_SUBMISSION)) //Taste wird gedrückt
    {
    SetTimerEx("MotorStarten",3000,0,"i",playerid);
    startmotor[playerid] = 1;
    }

    QuellCode
    if ((oldkeys & KEY_SUBMISSION) && !(newkeys & KEY_SUBMISSION))
    {
    startmotor[playerid] = 0;
    KillTimer(MotorStarten[playerid]);
    }
    Function MotorStarten(playerid)
    {
    if(startmotor[playerid] == 1)
    {
    ocmd_motor(playerid);
    }
    return 1;
    }

  • Du hast es nicht ganz verstanden wie ich es mit variablen meine, kann das sein?


    Ich meine es so:


    if ((newkeys & KEY_SUBMISSION) && !(oldkeys & KEY_SUBMISSION)) //Taste wird gedrückt
    {
    SetTimerEx("MotorStarten",3000,0,"i",playerid);
    }


    if ((oldkeys & KEY_SUBMISSION) && !(newkeys & KEY_SUBMISSION))
    {
    if(startmotor[playerid] = 0)
    {
    KillTimer(MotorStarten(playerid));
    //Nachricht das er die Taste nicht 3 Sekunden hielt
    }
    }[pwn]


    Dein Timer:


    [pwn]forward MotorStarten(playerid);
    public MotorStarten(playerid)
    {
    if(startmotor[playerid] == 0)
    {
    ocmd_motor(playerid);
    startmotor[playerid]=1;
    }
    return 1;
    }


    Tipp: Sollte er das Fahrzeug verlassen und/oder Server verlassen setze die Variable wieder auf 0, ansonsten kann er jedesmal nur 1 Fahrzeug anmachen und dannach keins mehr.


    Würde wie folgt aussehen:


    public OnPlayerDisconnect(playerid, reason)
    {
    startmotor[playerid]=0;
    return 1;
    }


    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(oldstate == PLAYER_STATE_DRIVER && newstate == PLAYER_STATE_ONFOOT)
    {
    startmotor[playerid]=0;
    }
    return 1;
    }