SetTimer nicht Ausgelöst

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
  • SetTimerEx("oamtheal",2000,1,"i",playerid);


    public oamtheal(playerid)
    {
    if(GetPlayerHealth(playerid) < 100)
    {
    new string[128];
    format(string,sizeof(string),"Du wurdest von der O-Amt Base geheilt! Du hast nun %i%% Leben",GetPlayerHealth(playerid));
    SendClientMessage(playerid,0xFF0000FF,string);
    SetPlayerHealth(playerid,GetPlayerHealth(playerid)+10);
    }else{
    SendClientMessageToAll(0xFF0000FF,"Du wurdest nicht von der O-Amt Base geheilt!");
    }
    return 1;
    }


    Der Timer löst sich irgendwie nicht aus. habs auch schon so probiert:
    SetTimer("oamtheal",2000,1);


    Brauche für den Heal halt die Playerid....


    Ohne Playerid geht der Timer aber mit leider nicht


    Hoffe ihr könnt Helfen

  • SetTimerEx("oamtheal",2000,1,"i",playerid);wo steht das?

  • Das steht in OnPlayerKeyStateChange in einer Abfrage ob der Spieler an einem Punkt steht also:



    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    if (newkeys & 16)
    {
    if(IsPlayerInRangeOfPoint(playerid,1.5,2525.8484,-2134.7136,13.5469))
    {
    SetPlayerInterior(playerid,3);
    SetPlayerPos(playerid, 1494.4463, 1304.0757, 1093.2891);
    /*oamthealing = */ SetTimerEx("oamtheal",2000,1,"i",playerid);
    print("O-Amt Base healt einen User");
    }
    }
    return 1;
    }


    EDIT:


    Es soll halt beim Betreten der Base ausgeführt werden und beim rausgehen Gekillt werden :) deswegen steht da auch


    /*oamthealing = */


    das ist dann zum Killen gedacht


    PS:

    Zitat

    Hmmm wenn der Timer funktioniert wird alle 2 Sekunden "Du wurdest nicht von der O-Amt Base geheilt!" an alle Spieler gesendet ? :huh:

    Das war nur zum testen gedacht an was es liegt :P Es soll eigentlich den O-Amtler in seiner Base alle 5 Sekunden 10 Leben geben :)

  • Ansonsten kannst du auch über einen ganz normalen Timer und eine for Schleife das Problem lösen:




    forward oamtheal();




    SetTimer("oamtheal",2000,1);





    public oamtheal()
    {
    for(new i = 0;i<MAX_PLAYERS;i++)
    {
    new Float:phealth;
    GetPlayerHealth(i,phealth);
    if(phealth < 100.0)
    {
    SetPlayerHealth(i,phealth+10);
    new Float:newphealth;
    GetPlayerHealth(i,newphealth);
    new string[128];
    format(string,sizeof(string),"Du wurdest von der O-Amt Base geheilt! Du hast nun %f Leben",newphealth));
    SendClientMessage(i,0xFF0000FF,string);
    }
    }
    return 1;
    }




    Ich habs jetzt als Float gemacht, da GetPlayerHealth eine Float und keinen Integer ausgiebt.



    @dit: Wie Rotten schneller war. Aber meins noch Text ausgiebt.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • :love: sry xD ja hatte ich ich teste es mal


    EDIT:


    Es passiert etwas. Aber nicht das was passieren soll XD Ich bekomme das Leben gesetzt und nicht gehealt. Gesetzt auf 10


    EDIT:


    Hagi mit deinem Geht es aber:


    Du hast nun 45.000000000 Leben


    :/

  • Es sollte funktionieren, denn das sagt:




    SetPlayerHealth(i,phealth+10);




    Nehme die alten Leben des Spielers (phealth) und addiere 10. Da ist also kein Fehler drin. Hast du es genau so übernommen ?




    PS: Deine Leben steigen dadurch aber kontinuirlich um 10 HP, wodurch du irgentwann mehr als 100 HP hast.




    Um dem vorzubeugen einfach das so ändern:





    public oamtheal()
    {
    for(new i = 0;i<MAX_PLAYERS;i++)
    {
    new Float:phealth;
    GetPlayerHealth(i,phealth);
    if(phealth < 100.0)
    {
    if(phealth <= 90.0)
    {
    SetPlayerHealth(i,phealth+10.0);
    }
    else
    {
    SetPlayerHealth(i,100.0);
    }
    new Float:newphealth;
    GetPlayerHealth(i,newphealth);
    new string[128];
    format(string,sizeof(string),"Du wurdest von der O-Amt Base geheilt! Du hast nun %f Leben",newphealth));
    SendClientMessage(i,0xFF0000FF,string);
    }
    }
    return 1;
    }




    Für die ohne Komma ausgabe probier das mal, bin mir aber nicht sicher, da dort ein Integer genommen wird aber eine Float gegeben wird.


    Einfach mal testen ^^



    format(string,sizeof(string),"Du wurdest von der O-Amt Base geheilt! Du hast nun %i Leben",newphealth));