Problem mit Command

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 Morgen ich hänge jetzt seit 22:00 Uhr an mein neues System ich komm da nicht wirklich mehr weiter.


    Es soll folgendes passieren:


    Spieler geht zum Transportertresortür und tippt: /transporttresorsprengen ein.
    Dann kommt ein Dynamit was nach 30Seckunden hoch gehen soll.


    So sieht mein code dafür aus:


    forward Explosion(playerid,objectid);


    public Explosion(playerid,objectid)
    {
    StopPlayerObject(playerid,2634);
    SetTimerEx("Explosion",2000,false,"i",0);
    SendClientMessage(playerid,rot,"Achtung geht in Deckung das TNT geht in ´%d´hoch!");
    return 1;
    }


    ocmd:transporttresorsprengen(playerid,params[])
    {
    CreateObject(1654, 1550.78955, -1801.41882, 26.45240, 0.00000, 0.00000, -180.00000);
    return 1;
    }


    also Wenn ich transporttresorsprengen eingetippt habe soll nach 30 Sekunden ein timer laufen und
    es soll dann nach den 30 Sekunden das Objekt verschwinden so das man durch gehen kann.
    Ich weiß grade nicht mehr weiter.


    Weil ich will ja in den Befehl: transporttresorsprengen den Timer von Explosion aufrufen und dann das Objekt entfernen nach dem Timer abgelaufen ist.



    Bitte um hilfe

  • habe es so gemacht:


    public Explosion(playerid,objectid)
    {
    CreateObject(1654, 1550.78955, -1801.41882, 26.45240, 0.00000, 0.00000, -180.00000);
    StopPlayerObject(playerid,2634);
    SetTimerEx("Explosion",2000,false,"i",0);
    SendClientMessage(playerid,rot,"Achtung geht in Deckung das TNT geht in ´%d´hoch!");
    DestroyObject(1654);
    return 1;
    }


    ocmd:transporttresorsprengen(playerid,params[])
    {
    SetTimer("Explosion",2000,0);
    return 1;
    }

  • ich muss doch im Befehl:
    ocmd:transporttresorsprengen(playerid,params[])
    {
    SetTimer("Explosion",2000,0);
    return 1;
    }


    public Explosion(playerid,objectid)
    {
    new TNT = CreateObject(1654, 1550.78955, -1801.41882, 26.45240, 0.00000, 0.00000, -180.00000);
    new ExplosiveObject = CreateObject(1654, 1550.78955, -1801.41882, 26.45240, 0.00000, 0.00000, -180.00000);
    StopPlayerObject(playerid,2634);
    SetTimerEx("Explosion",2000,false,"i",0);
    SendClientMessage(playerid,rot,"Achtung geht in Deckung das TNT geht in ´%d´hoch!");
    DestroyObject(ExplosiveObject);
    DestroyObject(TNT);
    return 1;
    }
    aufrufen könne.

  • So würde ich es machen:
    new tmp[MAX_PLAYERS][2];
    public Explosion(playerid,objectid)//wird abgerufen sobald die 2 sek um sind
    {
    DestroyObject(objectid);//zerstörst das objekt
    tmp[playerid][0]=-1;//setzt den array wieder auf -1
    return 1;
    }



    ocmd:transporttresorsprengen(playerid,params[])
    {
    tmp[playerid][0]=CreateObject(1654, 1550.78955, -1801.41882, 26.45240, 0.00000, 0.00000, -180.00000);//speicherst das objekt in einen array nur für den spieler
    SendClientMessage(playerid,rot,"Achtung geht in Deckung das TNT geht in 2 sekunden hoch!");//nachricht wird abgegeben
    SetTimerEx("Explosion",2000,0,"dd",playerid,tmp[playerid][0]);//starte timer für 2sek und übergibst die playerid sowie die objektid an die Funktion "Explosion"
    return 1;
    }

  • Beitrag von Blackshadowscript ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Habe nun das Problem das die Stahltür nicht weg geht:


    new tmp[MAX_PLAYERS][2];
    new tmt[MAX_PLAYERS][2];
    public Explosion(playerid,objectid)//wird abgerufen sobald die 2 sek um sind
    {
    DestroyObject(objectid);//zerstörst das objekt
    tmp[playerid][0]=-1;//setzt den array wieder auf -1
    tmt[playerid][0]=-1;//setzt den array wieder auf -1

    return 1;
    }


    ocmd:transporttresorsprengen(playerid,params[])
    {
    tmp[playerid][0]=CreateObject(1654, 1550.78955, -1801.41882, 26.45240, 0.00000, 0.00000, -180.00000);//speicherst das objekt in einen array nur für den spieler
    tmt[playerid][0]=CreateObject(2634, 1551.63159, -1801.69556, 26.47590, 0.00000, 0.00000, 0.00000);//tresortür
    SendClientMessage(playerid,rot,"Achtung geht in Deckung das TNT geht in 2 sekunden hoch!");//nachricht wird abgegeben
    SetTimerEx("Explosion",2000,0,"dd",playerid,tmp[playerid][0]);//starte timer für 2sek und übergibst die playerid sowie die objektid an die Funktion "Explosion"
    return 1;
    }

  • new tmp[MAX_PLAYERS][2];
    forward Explosion(playerid,objectid,objectid2);
    public Explosion(playerid,objectid,objectid2)
    {
    DestroyObject(objectid);//tnt
    DestroyObject(objectid2);//tresor
    tmp[playerid][0]=-1;//tnt
    tmp[playerid][1]=-1;//tresor
    return 1;
    }



    ocmd:transporttresorsprengen(playerid,params[])
    {
    tmp[playerid][0]=CreateObject(1654, 1550.78955, -1801.41882, 26.45240, 0.00000, 0.00000, -180.00000);//tnt
    tmt[playerid][1]=CreateObject(2634, 1551.63159, -1801.69556, 26.47590, 0.00000, 0.00000, 0.00000);//tresortür
    SendClientMessage(playerid,rot,"Achtung geht in Deckung das TNT geht in 2 sekunden hoch!");
    SetTimerEx("Explosion",2000,0,"ddd",playerid,tmp[playerid][0],tmp[playerid][1]);
    return 1;
    }

  • Beitrag von Blackshadowscript ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • So ich bin jetzt wie folgt vorgegangen:


    OnGamodeInit:
    trsodoor = CreateObject(2634, 1551.63159, -1801.69556, 26.47590, 0.00000, 0.00000, 0.00000);//tresortür


    Timer:
    new tmp[MAX_PLAYERS][2];
    public Explosion(playerid,objectid,objectid2)
    {
    DestroyObject(objectid);//tnt
    DestroyObject(trsodoor);//tresor
    tmp[playerid][0]=-1;//tnt
    tmp[playerid][1]=-1;//tresor
    return 1;
    }


    Mein Befehl:
    ocmd:transporttresorsprengen(playerid,params[])
    {
    tmp[playerid][0]=CreateObject(1654, 1550.78955, -1801.41882, 26.45240, 0.00000, 0.00000, -180.00000);//tnt
    tmp[playerid][1]=-1;//tresor
    SendClientMessage(playerid,rot,"Achtung geht in Deckung das TNT geht in 2 sekunden hoch!");
    SetTimerEx("Explosion",2000,0,"ddd",playerid,tmp[playerid][0],tmp[playerid][1]=-1);
    return 1;
    }


    So nur die Frage wie kann ich es nun mit ein Timer verbinden das wenn die Tür nun zerstört ist nach 3 Minuten da wieder eine Tür steht?

  • new sprenung;
    new trsodoor ;


    public OnGameModeInit(){
    trsodoor = CreateObject(2634, 1551.63159, -1801.69556, 26.47590, 0.00000, 0.00000, 0.00000);//tresortür
    return 1;
    }


    forward Explosion();
    public Explosion()
    {
    CreateExplosion(1551.63159, -1801.69556, 26.47590, 0, 3);
    DestroyObject(sprenung);//tnt
    DestroyObject(trsodoor);//tresortür
    sprenung=-1;//tnt
    trsodoor = -1;
    SetTimer("TresorTuer", 1000*60*3, false);
    return 1;
    }


    forward TresorTuer();
    public TresorTuer(){
    if(IsValidObject(trsodoor))return 1;
    trsodoor = CreateObject(2634, 1551.63159, -1801.69556, 26.47590, 0.00000, 0.00000, 0.00000);//tresortür
    return 1;
    }


    ocmd:transporttresorsprengen(playerid,params[])
    {
    if(IsValidObject(sprenung))return SendClientMessage(playerid, -1, "Die Tür wird bereits gesprengt.");
    if(!IsValidObject(trsodoor))return SendClientMessage(playerid, -1, "Die Tür steht offen.");
    sprenung=CreateObject(1654, 1550.78955, -1801.41882, 26.45240, 0.00000, 0.00000, -180.00000);//tnt
    SendClientMessage(playerid,-1,"Achtung geht in Deckung das TNT geht in 2 sekunden hoch!");
    SetTimer("Explosion", 2000, false);
    return 1;
    }


    //edit1 Abfrage hinzugefügt ob die Tür existiert
    //edit2 Abfrage hinzugefügt ob die Tresortür bereits gesprengt wird
    //edit3 Hatte vergessen an einer stelle die Objectid einzutragen :)
    //edit4 CreateExplosion hinzugefüt

    5 Mal editiert, zuletzt von Red_Romeo ()