Objekt nach Timer entfernen

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
  • Moin,


    durch einen ausgewählten Dialog werden folgende Timer aktiv:
    forward rbone(playerid);
    public rbone(playerid)
    {
    new one = CreateObject(2780, GetPVarFloat(playerid,"xpos"),GetPVarFloat(playerid,"ypos"),GetPVarFloat(playerid,"zpos")-2, 0, 0, 0);
    SetTimer("rb30sek2",30000,false);
    return 1;
    }


    forward rbtwo(playerid);
    public rbtwo(playerid)
    {
    new two = CreateObject(2780, GetPVarFloat(playerid,"xpos"),GetPVarFloat(playerid,"ypos"),GetPVarFloat(playerid,"zpos")-2, 0, 0, 0);
    SetTimer("rb60sek2",60000,false);
    return 1;
    }


    Das erste Objekt soll nach 30 Sekunden entfernt werden.
    Das zweite Objekt soll nach 60 Sekunden entfernt werden.
    Dabei werden folgende Timer verwendet:
    forward rb30sek2(playerid,one);
    public rb30sek2(playerid,one)
    {
    DestroyObject(one);
    return 1;
    }


    forward rb60sek2(playerid,two);
    public rb60sek2(playerid,two)
    {
    DestroyObject(two);
    return 1;
    }


    Das Objekt wird nicht entfernt, ich bekomme auch keine Errors.


    MfG

  • Eigentlich müsstest du sogar Errors bekommen.
    Entweder, du machst die beiden Arrays global, oder du machst die Timer so:
    SetTimerEx("rb30sek2",30000,false,"d",one);
    und
    SetTimerEx("rb60sek2",60000,false,"d",two);

  • Eigentlich müsstest du sogar Errors bekommen.
    Entweder, du machst die beiden Arrays global, oder du machst die Timer so:
    SetTimerEx("rb30sek2",30000,false,"d",one);
    und
    SetTimerEx("rb60sek2",60000,false,"d",two);


    Erstmal danke für die schnelle Antwort,


    jedoch werden das/die Objekt/e immer noch nicht entfernt. Liegt es eventuell an DestroyObject?

  • forward rbone(playerid);
    public rbone(playerid)
    {
    new one = CreateObject(2780, GetPVarFloat(playerid,"xpos"),GetPVarFloat(playerid,"ypos"),GetPVarFloat(playerid,"zpos")-2, 0, 0, 0);
    SetTimerEx("rb30sek2",30000,false,"d",one);
    return 1;
    }


    forward rbtwo(playerid);
    public rbtwo(playerid)
    {
    new two = CreateObject(2780, GetPVarFloat(playerid,"xpos"),GetPVarFloat(playerid,"ypos"),GetPVarFloat(playerid,"zpos")-2, 0, 0, 0);
    SetTimerEx("rb60sek2",60000,false,"d",two);
    return 1;
    }


    forward rb30sek2(playerid,one);
    public rb30sek2(playerid,one)
    {
    DestroyObject(one);
    return 1;
    }


    forward rb60sek2(playerid,two);
    public rb60sek2(playerid,two)
    {
    DestroyObject(two);
    return 1;
    }

  • forward rb30sek2(playerid,one);
    public rb30sek2(playerid,one)
    {
    DestroyObject(one);
    print("Objekt-One wurde gelöscht!");
    return 1;
    }


    forward rb60sek2(playerid,two);
    public rb60sek2(playerid,two)
    {
    DestroyObject(two);
    print("Objekt-Two wurde gelöscht!");
    return 1;
    }
    Was wird gedebuggt?

  • public rb30sek2(playerid,one)
    {
    printf("%d",one);
    DestroyObject(one);
    print("Objekt-One wurde gelöscht!");
    return 1;
    }
    Lass dir das mal so debuggen,was kommt raus? Hast du dich auch mal bewegt, ich glaube das hilft. Kann auch sein, dass das nur bei Objekten waren, die man erstellt hat.

  • new one,two;//Global im Script


    forward rbone(playerid);
    public rbone(playerid)
    {
    one = CreateObject(2780, GetPVarFloat(playerid,"xpos"),GetPVarFloat(playerid,"ypos"),GetPVarFloat(playerid,"zpos")-2, 0, 0, 0);
    SetTimer("rb30sek2",30000,false);
    return 1;
    }


    forward rbtwo(playerid);
    public rbtwo(playerid)
    {
    two = CreateObject(2780, GetPVarFloat(playerid,"xpos"),GetPVarFloat(playerid,"ypos"),GetPVarFloat(playerid,"zpos")-2, 0, 0, 0);
    SetTimer("rb60sek2",60000,false);
    return 1;
    }


    forward rb30sek2();
    public rb30sek2()
    {
    printf("%d",one);
    DestroyObject(one);
    return 1;
    }


    forward rb60sek2();
    public rb60sek2()
    {
    DestroyObject(two);
    return 1;
    }
    Ok, dann schreib das so.
    #edit:
    Außerdem brauchst du den Parameter "playerid" in den letzten beiden Callbacks gar nicht. :)