Health erst nach 300sek wieder aufheben können

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,
    ich würde gerne ein Health PickUp haben, wo man 100Health bekommt wenn man rein geht, aber man kann da nur jede 300 Sekunden reingehen, und wenn noch keine 300 Sekunden um ist, steht da: Du darfst erst nach 300 Sekunden wieder Health holen.


    LG

  • Dann lass das Pickup doch nur alle 300 Sekunden erscheinen!


    //edit: Ansonsten einfach eine Variable oben unter den New´s schreiben. Bsp: PlayerDarfheal[MAX_PLAYERS]; , dann unter OnPlayerPickupPickup kommt ne Begrenzung if(PlayerDarfHeal[playerid] == 0) unten drunter dann PlayerDarfHeal[playerid] =1 SetTimerEx("Darfwiederheal", 300000, 0 ,"d", playerid) und dann in dem Public setzte die Variable PlayerDarfHeal wieder auf PlayerDarfHeal[playerid] = 0;

    Einmal editiert, zuletzt von Scriptor ()

  • Scriptor das ist zu Resourcenfressend, benutze doch lieber PVars.
    Aber das mit dem Timer um die Var auf 0 zu setzen passt, da würde aber eine Pvar oder wenigstens ein bool ausreichen.

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

  • Ohaa , ich glaube , da muss ich mir nochmal was genauer ansehen;)

  • OnPlayerConnect:
    SetPVarInt(playerid,"PickUpErlaubnis",0);


    OnGameModeInit:
    SetTimer("PickUpErlaubnisTimer",10000,1);


    Neuer Public:
    public PickUpErlaubnisTimer()
    {
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(GetPVarInt(i,"PickUpErlaubnis")!=0)
    {
    SetPVarInt(i,"PickUpErlaubnis",-10);
    }
    }
    return 1;
    }


    Bei deinem Pickup unter OnPlayerPickupPickup:


    if(GetPVarInt(playerid,"PickUpErlaubnis")==0)
    {
    //Aktion mit dem Heal geben
    SetPVarInt(playerid,"PickUpErlaubnis",300);
    }
    else
    {
    //Aktion die wenn er nicht darf passieren soll
    }


    //Edit: for Schleife hinzugefügt.

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

    Einmal editiert, zuletzt von TPO ()

  • Ein OnGameModeInit Timer? Ich dachte pro Person immer die 300 Sekunden...

  • Geht auch aber bei mehreren Spielern gibt es dadurch mehrere Timer sagen wir 100Spieler => 100Timer. So haben wir nur einen aber meins ist Fail überarbeite es nochmal .. =D

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

  • Betreff 100 Spieler => 100 Timer.
    Die Timer laufen ja nur, wenn er schon im Pickup war.

  • Ja klar, aber wenn alle ins PickUp laufen gibts 100Timer.. die nicht gleichzeitig rumhantieren. Deswegen wäre ein allgemeiner mit wenig Interval perfekt.

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

  • Code
    C:\Dokumente und Einstellungen\Marc\Eigene Dateien\Downloads\LosAngelesReallife0.3b! (1)\LosAngelesReallife0.3b!\gamemodes\TDM.pwn(96) : warning 235: public function lacks forward declaration (symbol "PickUpErlaubnisTimer")
    C:\Dokumente und Einstellungen\Marc\Eigene Dateien\Downloads\LosAngelesReallife0.3b! (1)\LosAngelesReallife0.3b!\gamemodes\TDM.pwn(98) : error 017: undefined symbol "i"
    C:\Dokumente und Einstellungen\Marc\Eigene Dateien\Downloads\LosAngelesReallife0.3b! (1)\LosAngelesReallife0.3b!\gamemodes\TDM.pwn(100) : error 017: undefined symbol "i"
    C:\Dokumente und Einstellungen\Marc\Eigene Dateien\Downloads\LosAngelesReallife0.3b! (1)\LosAngelesReallife0.3b!\gamemodes\TDM.pwn(171) : error 017: undefined symbol "i"
    C:\Dokumente und Einstellungen\Marc\Eigene Dateien\Downloads\LosAngelesReallife0.3b! (1)\LosAngelesReallife0.3b!\gamemodes\TDM.pwn(307) : error 017: undefined symbol "i"


    public PickUpErlaubnisTimer()
    if(GetPVarInt(i,"PickUpErlaubnis")!=0)
    SetPVarInt(i,"PickUpErlaubnis",-10);
    SetPVarInt(i,"PickUpErlaubnis",0);
    SetPVarInt(i,"PickUpErlaubnis",300);

  • Benutzt doch einfach eine Abfrage mit GetTickCount().
    Und übrigens. Solche Codes sind überhaupt nicht ressourcenfressend. Das ist ein Fliegenschiss auf dem Erdball... zudem sind PVars viel langsamer als gescriptete Variablen.
    Und viele Timer sind erst schlimm, wenn sie auch viel ausführen müssen.

  • #define PICKUP_TYPE_NONE (0)
    #define PICKUP_TYPE_HEALTH (1)


    new PickupType[MAX_PICKUPS];
    new LastPickup[MAX_PLAYERS];


    stock AddHealthPickup(Float:x,Float:y,Float:z,modelid=1240,virtualworld=0)
    {
    new pickupid=AddStaticPickup(modelid,19,x,y,z,virtualworld);
    PickupType[pickupid]=PICKUP_TYPE_HEALTH;
    return pickupid;
    }


    public OnPlayerPickUpPickup(playerid,pickupid)
    {
    switch(PickupType[pickupid])
    {
    case PICKUP_TYPE_HEALTH:
    {
    new t=GetTickCount();
    if((t-LastPickup[playerid])>300000)//300 Sekunden sind verstrichen
    {
    SetPlayerHealth(playerid,100.0);
    LastPickup[playerid]=t;
    }
    else
    SendClientMessage(playerid,0xFF0000FF,"Du musst erst 5 Minuten warten, bevor du dich erneut heilen kannst!");
    }
    }
    return 1;
    }