Sirene Sound Funktioniert Perfekt! Aber wie mache ich das mit dem Timer?

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
  • Guten Tag! Ich habe ein /Sirene Befehl, wozu ich noch einen Sound abspielen möchte. Kann mir jemand helfen einen Timer für den Sound zu machen, der jede Sekunde den Sound wiederholt, solange die Sirene aktiviert ist? Ist das möglich?


    Hier mal der befehl:


    if(IsPlayerInAnyVehicle(playerid))
    {
    if(PlayerInfo[playerid][pLeader] == 1 || PlayerInfo[playerid][pLeader] == 2 || PlayerInfo[playerid][pLeader] == 3)
    {
    new vehicleid = GetPlayerVehicleID(playerid);
    if(sirene[vehicleid] == 0)
    {
    sirene[vehicleid] = CreateObject(18646, 0, 0, 0, 0, 0, 0, 0);
    AttachObjectToVehicle(sirene[vehicleid], vehicleid, 0-0.5, 0, 0+0.68, 0, 0, 0);
    GameTextForPlayer(playerid,"~r~Sirene Aktiviert",5000, 1);
    PlayerPlaySound(playerid, 1147, 0.0, 0.0, 10.0);
    return 1;
    }
    else if(sirene[vehicleid] != 0)
    {
    GameTextForPlayer(playerid,"~r~Sirene Deaktiviert",5000, 1);
    DestroyObject(sirene[GetPlayerVehicleID(playerid)]);
    sirene[vehicleid] = 0;
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED2,"Du bist kein Leader der Staatsgewalt!");
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED2,"Du sitzt in keinem Auto!");
    }


    Hoffe mir kann jemand helfen! :huh:


    Mfg Big_Pump2


    Edit: Halbwegs eingerückt!
    Edit2: Rechtschreibung!

    3 Mal editiert, zuletzt von Big_Pump2 ()

  • Gaaaanz leicht!



    Einfach mit GetVehicleParamsEx und SetVehicleParamsEx arbeiten!
    Bei SetVehicleParamsEx einfach bei "alarm"
    VEHICLE_PARAMS_ON
    hinschreiben und schon geht die Sirene an!


    Link zum Wiki: KLICK



    Lg
    Hardcore

  • Danke erstmal für die Antwort, ich werde es mal versuchen in meinen Befehl einzubauen. Nur weiß ich nciht genau, was ich alles von dem was dort steht brauche und was nicht.
    Werde es nun versuchen! Thx nochmal! :thumbup:


    Mfg Big_Pump2

  • Hier,habe es für Dich mal angefertigt!


    if(sirene[vehicleid] == 0)
    {
    new engine,lights,alarm,doors,bonnet,boot,objective;
    GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(vehicleid,engine,lights,VEHICLE_PARAMS_ON,doors,bonnet,boot,objective);
    sirene[vehicleid] = CreateObject(18646, 0, 0, 0, 0, 0, 0, 0);
    AttachObjectToVehicle(sirene[vehicleid], vehicleid, 0-0.5, 0, 0+0.68, 0, 0, 0);
    GameTextForPlayer(playerid,"~r~Sirene Aktiviert",5000, 1);
    PlayerPlaySound(playerid, 1147, 0.0, 0.0, 10.0);
    return 1;
    }


    Müsste funktionieren...
    Aber denk dran,dass die Sirene bzw. der Alarm nach ich glaube 20 Sekunden wieder ausgeht!
    Hierbei hilft z.b ein Timer der prüft ob die Sirene noch an ist,oder der die Sirene einfach neu startet oder sowas.
    Habe mich damit noch nicht befasst was die PARAMS etc. angeht!



    Hoffe ich konnte helfen.


    Mfg, Hardcore

  • Ich habe es jetzt so:


    if(sirene[vehicleid] == 0)
    {
    sirene[vehicleid] = CreateObject(18646, 0, 0, 0, 0, 0, 0, 0);
    AttachObjectToVehicle(sirene[vehicleid], vehicleid, 0-0.5, 0, 0+0.68, 0, 0, 0);
    GetVehicleParamsEx(vehicleid,lights,alarm);
    SetVehicleParamsEx(vehicleid,lights,alarm);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "Sirene Aktiviert!");
    return 1;
    }
    else if(sirene[vehicleid] != 0)
    {
    DestroyObject(sirene[GetPlayerVehicleID(playerid)]);
    sirene[vehicleid] = 0;
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "Sirene Deaktiviert!");
    }


    Ich bekomme aber in diesen 2 Zeilen mit "ParamsEx" 1 Warning und 2 Errors!


    G:\Dokumente und Einstellungen\BigPump\Desktop\sirene und neon update\gamemodes\Bing.pwn(12285) : error 035: argument type mismatch (argument 2)
    G:\Dokumente und Einstellungen\BigPump\Desktop\sirene und neon update\gamemodes\Bing.pwn(12286) : error 035: argument type mismatch (argument 2)
    G:\Dokumente und Einstellungen\BigPump\Desktop\sirene und neon update\gamemodes\Bing.pwn(41668) : warning 219: local variable "lights" shadows a variable at a preceding level
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    2 Errors.



    Könnte mir bitte jemand helfen? Ich verstehe das einfach nicht. ;(


    Mfg Big_Pump2

    3 Mal editiert, zuletzt von Big_Pump2 ()

  • new engine,lights,alarm,doors,bonnet,boot,objective;
    GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(vehicleid,engine,lights,1,doors,bonnet,boot,objective);


    reicht ... das einfach in einem Befehl unterbringen und fertig !!

    Why do programmers always mix up Halloween and Christmas?
    Oct 31 == Dec 25

  • Aber wie bekomme ich das mit dem Timer hin, der alle 20 Sekunden abfragt, ob die Sirene noch an ist. Und wenn ja, wie mache ich das, das er das nach 20 Sekunden neustartet, damit der Alarm wieder abgespielt wird?
    Dasselbe mit /Sirene wenns aus ist, das der auch den Alarm stoppt.



    Kann mir da keiner helfen? ;(
    Ich bin damit total überfordert, sorry! :wacko:


    Mfg Big_Pump2

    3 Mal editiert, zuletzt von Big_Pump2 ()

  • einfach z.b new AlarmTimer[MAX_PLAYERS];
    new AlarmOn[MAX_PLAYERS];


    if(sirene[vehicleid] == 0)
    {
    new engine,lights,alarm,doors,bonnet,boot,objective;
    GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(vehicleid,engine,lights,VEHICLE_PARAMS_ON,doors,bonnet,boot,objective);
    sirene[vehicleid] = CreateObject(18646, 0, 0, 0, 0, 0, 0, 0);
    AttachObjectToVehicle(sirene[vehicleid], vehicleid, 0-0.5, 0, 0+0.68, 0, 0, 0);
    GameTextForPlayer(playerid,"~r~Sirene Aktiviert",5000, 1);
    AlarmTimer[playerid] = SetTimerEx("CheckAlarm",20000,1,"i",playerid);
    AlarmOn[playerid] = 1;
    return 1;
    }


    forward CheckAlarm(playerid);
    public CheckAlarm(playerid)
    {
    new vid = GetPlayerVehicleID(playerid);
    if(AlarmOn[playerid] == 1)
    {
    SetVehicleParamsEx(vehicleid,engine,lights,1,doors,bonnet,boot,objective);
    }
    else
    {
    return SetVehicleParamsEx(vid,engine,lights,0,doors,bonnet,boot,objective);
    DestroyObject(sirene[vid]);
    sirene[vid] = 0;
    }


    Bei OnPlayerConnect/Disconnect musst Du halt noch "AlarmOn[playerid] = 0;" machen...zur Sicherheit!;)


    !!!UNGETESTET!!!


    Mfg, Hardcore

  • Ich würd lieber aufpassen das Du keine Verwarnung für den Beitrag bekommst!
    Das trägt nicht zum Thema bei!


    B2T:
    Bei Polizeiwagen wo Standartgemäß die Sirenen-Sounds drinne sind,haben auch den Sirenensound mit den SetVehicleParamsEx!
    Nur die normalen Fahrzeuge haben ne Hupe+Licht!

  • So habe ich es jetzt!



    Oben:


    new AlarmTimer[MAX_PLAYERS];
    new AlarmOn[MAX_PLAYERS];




    Der Befehl:


    new vehicleid = GetPlayerVehicleID(playerid);
    if(sirene[vehicleid] == 0)
    {
    sirene[vehicleid] = CreateObject(18646, 0, 0, 0, 0, 0, 0, 0);
    AttachObjectToVehicle(sirene[vehicleid], vehicleid, 0-0.5, 0, 0+0.68, 0, 0, 0);
    new engine,lights,alarm,doors,bonnet,boot,objective;
    GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(vehicleid,engine,1,1,doors,bonnet,boot,objective);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "Sirene Aktiviert!");
    AlarmTimer[playerid] = SetTimerEx("CheckAlarm",24000,1,"i",playerid);
    AlarmOn[playerid] = 1;
    return 1;
    }
    else if(sirene[vehicleid] != 0)
    {
    sirene[vehicleid] = 0;
    AlarmOn[playerid] = 0;
    DestroyObject(sirene[GetPlayerVehicleID(playerid)]);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "Sirene Deaktiviert!");
    }



    Und im Callbackbereich:


    forward CheckAlarm(playerid);
    public CheckAlarm(playerid)
    {
    new vehicleid = GetPlayerVehicleID(playerid);
    if(AlarmOn[playerid] == 1)
    {
    new engine,lights,alarm,doors,bonnet,boot,objective;
    GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(vehicleid,engine,1,1,doors,bonnet,boot,objective);
    }
    else if(AlarmOn[playerid] == 0)
    {
    new engine,lights,alarm,doors,bonnet,boot,objective;
    GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(vehicleid,engine,0,0,doors,bonnet,boot,objective);
    }
    }



    Meine Frage ist nun, ob ich das so machen kann, dass wenn ich /sirene eingebe und diese dann = 0 ist, dass dann sofort der Alarm bzw. das Licht ausgeht?


    ;)


    Mfg Big_Pump2

    Einmal editiert, zuletzt von Big_Pump2 ()

  • Theoretisch ja!


    Einfach wieder mit SetVehicleParams arbeiten und den "alarm" auf 0 stellen!;)
    Oh,habe vergessen das du den Timer noch killen musst!


    Das geht so:
    KillTimer(AlarmTimer[playerid]);
    Musst Du dort reinmachen wo die Sirene ausgeschaltet wird!



    Mfg, Hardcore



    P.s
    Die Variablen musst Du natürlich noch anpassen und einschreiben da es sonst zu einer Fehfunktion kommen kann oder der Befehl garnicht mehr geht weil die Variable x nicht den richtigen Wert beträgt!

  • Ja den "KillTimer" habe ich drinne. Und was meinst du mit x? Habe doch alles definiert oder nicht?


    Mfg Big_Pump2

  • Hast Du bestimmt!


    "X" ist ein Wert mit dem man alles möglich meinen kann.
    Oder eher gesagt X = unbekannt.


    Beispiel:
    Spieler gibt CMD ein --> Variable X = 1;


    Wenn Variable X nun nirgens wieder auf 0 gesetzt wird und in dem CMD eine Abfrage vorhanden ist ob die Variable X = 0 ist,dann hat man ein Problem!


    Verstehst Du?

  • Nicht wirklich, sorry! xD
    Stehe gerade voll auf dem Schlauch! :D
    Hab auch ein Problem mit dem Befehl bekommen, die Sirene Destroyed sich nicht mehr! :cursing:


    Habs so jetzt:


    if(sirene[vehicleid] == 0)
    {
    sirene[vehicleid] = CreateObject(18646, 0, 0, 0, 0, 0, 0, 0);
    AttachObjectToVehicle(sirene[vehicleid], vehicleid, 0-0.5, 0, 0+0.68, 0, 0, 0);
    new engine,lights,alarm,doors,bonnet,boot,objective;
    GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(vehicleid,engine,1,1,doors,bonnet,boot,objective);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "Sirene Aktiviert!");
    AlarmTimer[playerid] = SetTimerEx("CheckAlarm",24000,1,"i",playerid);
    AlarmOn[playerid] = 1;
    return 1;
    }
    else if(sirene[vehicleid] == 1)
    {
    DestroyObject(sirene[GetPlayerVehicleID(playerid)]);
    sirene[vehicleid] = 0;
    AlarmOn[playerid] = 0;
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "Sirene Deaktiviert!");
    }


    Wieso wird die nicht mehr Destroyed? O.o



    Edit: Bevor ich den KillTimer drinne hatte, lief es aber lief dann erst zuende der Sound, bis die 20 Sekunden um waren. Also wenn ich nach 12 Sekunden wieder /Sirene eingegeben haben um es auszuschalten, lief es noch 8 Sekunden. Jetzt läuft es nur noch 20 Sekunden und die Sirene geht nicht mehr weg, "SendClientMessage(playerid,COLOR_LIGHTBLUE,"Sirene Deaktiviert");" kommt gar nicht mehr.
    Ohje ich glaube ich bekomme das nie hin! :cursing::thumbdown:


    Mfg Big_Pump2



    Edit: Hat sich erledigt so funzt es doch, nur die Hupe(Alarm) läuft halt solange ich will und wenn ich wieder /Sirene mache, läuft er im intervall von 20 Sekunden. (jenachdem wann ich es drücke) :D

    2 Mal editiert, zuletzt von Big_Pump2 ()