Health abfrage und dem entsprechend ausrechnen

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


    ich will einen /heilen Befehl machen.
    Mit GetPlayerHealth (oder sowas ähnliches) kann man ausgeben wv leben der Spieler hat.
    Aber, ich will dann das wenn er das eingibt, ausgerechnet wieviel er noch hat, das wird dann auf hundert gesetzt und zB. pro 1 HP 1 Doller zum Beispiel


    Damit man nicht wenn man noch 80% hat, das gleiche zahlt wie bei 10 %


    Ich hab aber nicht die leiseste Ahnung wie man das anstellt.


    Danke im Vorrus.


    lg byBSE


    PS: Kleine Hilfen reichen, wie sich das ausrechnen käßt, und wie man pro 1 HP Punkt zB 1$ bezahlen muss.

  • Lies mit GetPlayerHealth() (siehe englisches Wiki) die Lebenspunkte des Spielers aus, vergiss das Runden nicht. Zieh dann den Betrag von 100 ab und du weißt, wieviel er bezahlen muss. Versuchs mal erstmal alleine. :P

  • Du erstellst doch eine Variable, in der du die HP abspeicherst.
    Und mit Variablen kannst du ganz einfach rechnen, nach dem Prinzip:
    variable = 100 - variable2;
    So hast du die Differenz, also den Preis für das Geld.
    Also den Preis pro HP im gesamten.
    Füllt er damit 60 HP auf, hast du
    variable = 100 - 40;
    variable = 60


    Dann einfach der 'playerid' die 60$ abziehen, GivePlayerMoney(playerid, -variable);

  • Kannst du mir das direkt mit den Funktionen erklären? Ich weiß wie du es meinst, aber ich bekomms net umgesetzte. Das ist bis jetzt rausgekommen.


    if(strcmp(cmdtext,"/heilen",true)==0)
    {
    new health,preis;
    health = GetPlayerHealth(playerid);
    preis = 100 - health(playerid);
    return 1;
    }


    Aber ich glaube so richtig ist das nicht :D



    Einmal editiert, zuletzt von Tomsen ()

  • Nein.

    if(strcmp(cmdtext,"/heilen",true)==0)
    {
    new Float:health,preis;
    GetPlayerHealth(playerid,health);
    preis = 100 - health;
    return 1;
    }


    Ich denke aber das du preis=100 - health in ein format machen musst.

  • So richtig weiß ich danach trotzdem nicht weiter :/


    Wie sag ich ihm dann das zB. die übrigen 60 (100 - 40 HP) als Geld abgezogen werden soll
    Also welche variable vür die 100?


    //edit:


    Ich habs jetzt so:


    if(strcmp(cmdtext,"/heilen",true)==0)
    {
    if(IsPlayerInRangeOfPoint(playerid,3.0,1177.8082,-1320.2924,14.0890))
    {
    new health,preis;
    health = GetPlayerHealth(playerid);
    preis = 100 - health;
    GivePlayerMoney(playerid,-preis);
    SetPlayerHealth(playerid,100);
    }
    return 1;
    }


    Aber da ziehts mir entweder undendlich Geld ab oder zieht unendlich viel drauf.



    3 Mal editiert, zuletzt von Tomsen ()


  • if(strcmp(cmdtext,"/heilen",true)==0)
    {
    if(IsPlayerInRangeOfPoint(playerid,3.0,1177.8082,-1320.2924,14.0890))
    {
    new health,preis;
    health = GetPlayerHealth(playerid);
    floatround(health, floatround_round);
    preis = 100 - health;
    GivePlayerMoney(playerid,-preis);
    SetPlayerHealth(playerid,100);
    }
    return 1;
    }


    Probiers so nochmal ;)

  • Großartig, dass auch jeder Vorschlag so gut wie falsch ist :D



    new Float: health,preis; // Das Leben eines Spieler wird immer in einem Float returnt, daher muss auch health ein Float sein.
    GetPlayerHealth(playerid,health); // Hätten wir nur kurz in die Wiki mal geguckt, hätten wir die Syntax verstanden.
    preis = 100 - floatround(health, floatround_round); (Hier müssen wir die gerundete Zahl einsetzen, da wir hier wieder mit Ints, nicht mit Floats arbeiten (ich glaube, dass du sofort damit arbeiten kannst, wenn nicht vorher nochmal in eine Int: Var speichern und dann damit arbeiten
    GivePlayerMoney(playerid,-preis);
    SetPlayerHealth(playerid,100.0);



    Edit: SetPlayerHealth, habe gerade gesehen, dass da auch ein Int eingetragen wurde, immer besser das gleich als Float zu schrieben mit .0 am Ende.

    nanosMalte


    Zitat

    Zitat von Goldkiller




    Obwohl MiniYoda das Wörtchen "Dynamisch" in der Deutschen SA-MP szene mit durchaus fatalen Folgen verbreitete, so hat er dennoch bewiesen, dass er das Handwerk PAWN hervorragend beherrscht. Er gehört definitiv zu den kompetentesten Scriptern die man bei SA-MP.DE finden kann.

  • Funktioniert soweit. Hab jetzt noch ne Abfrage reingebaut, wo der abfragen soll ob ein spieler 99 HP oder mehr hat.


    new Float: health,preis;
    GetPlayerHealth(playerid,health);
    if(health[playerid]=>99)
    {
    preis = 100 - floatround(health, floatround_round);
    GivePlayerMoney(playerid,-preis);
    SetPlayerHealth(playerid,100.0);
    return 1;
    }
    else SendClientMessage(playerid,rot,"Du hast schon 100 oder mehr HP!");


    Kommen aber diese Errors:


    D:\Spiele\Rockstar Games\San Andreas\Selfmade 0.3eRC7\gamemodes\dmselfmade.pwn(792) : error 028: invalid subscript (not an array or too many subscripts): "health"
    D:\Spiele\Rockstar Games\San Andreas\Selfmade 0.3eRC7\gamemodes\dmselfmade.pwn(792) : warning 215: expression has no effect
    D:\Spiele\Rockstar Games\San Andreas\Selfmade 0.3eRC7\gamemodes\dmselfmade.pwn(792) : error 001: expected token: ";", but found "]"
    D:\Spiele\Rockstar Games\San Andreas\Selfmade 0.3eRC7\gamemodes\dmselfmade.pwn(792) : error 029: invalid expression, assumed zero
    D:\Spiele\Rockstar Games\San Andreas\Selfmade 0.3eRC7\gamemodes\dmselfmade.pwn(792) : fatal error 107: too many error messages on one line


    Alle in der Zeile mit dem if(health...
    //edit: Ich könnte auch if(preis[playerid]=<0 angeben oder? Den Wenn man 100 - hp (also minus 100 oder mehr rechnet) kommt ja 0 oder eine negative zahl raus.



    2 Mal editiert, zuletzt von Tomsen ()

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen

  • new Float:health,preis;
    GetPlayerHealth(playerid,health);
    if(health > 99)
    {
    preis = 100 - floatround(health, floatround_round);
    GivePlayerMoney(playerid,-preis);
    SetPlayerHealth(playerid,100.0);
    return 1;
    }
    else
    {
    SendClientMessage(playerid,0xFFFFFF,"Du hast schon 100 oder mehr HP!");
    }
    return 1;
    Gruss: Sonic

    I didn't hit you. I high fived your face.

  • new Float:health,preis;
    GetPlayerHealth(playerid,health);
    if(health > 99)
    {
    preis = 100 - floatround(health, floatround_round);
    GivePlayerMoney(playerid,-preis);
    SetPlayerHealth(playerid,100.0);
    return 2;
    }
    else
    {
    SendClientMessage(playerid,0xFFFFFF,"Du hast schon 100 oder mehr HP!");
    }
    return 1;

  • Ist meine HP über 99 passiert garnichts. (bzw. man sieht nicht, anzeige von HP ist ja voll)


    Mach ich sie unter 99 dann kommt, "Du hast schon 100 oder mehr HP!"


    //Edit: Ohne einen neuen Thread aufzumachen, wie kann man einen Spieler sterben lassen (sodass der Killer 5 scorepunkte für den kill bekommt) und dann an der stelle mit der Crack animation liegen bleibt, das ein Sanitäter kommen kann (insofern einer online ist) und einen wiederbelebt

  • Komisch. Bei mir geht es :huh:
    Probiere es mal so:
    new Float:health,preis;
    GetPlayerHealth(playerid,health);
    if(floatround(health, floatround_round) > 99)
    {
    preis = 100 - floatround(health, floatround_round);
    GivePlayerMoney(playerid,-preis);
    SetPlayerHealth(playerid,100.0);
    return 1;
    }
    else
    {
    SendClientMessage(playerid,0xFFFFFF,"Du hast schon 100 oder mehr HP!");
    }
    return 1;
    Ich lasse "health" nun in eine Dezimalzahl Runden.


    Gruss: Sonic

    I didn't hit you. I high fived your face.

  • :pinch:
    new Float:health,preis;
    GetPlayerHealth(playerid,health);
    if(floatround(health, floatround_round) < 99)
    {
    preis = 100 - floatround(health, floatround_round);
    GivePlayerMoney(playerid,-preis);
    SetPlayerHealth(playerid,100.0);
    return 1;
    }
    else
    {
    SendClientMessage(playerid,0xFFFFFF,"Du hast schon 100 oder mehr HP!");
    }
    return 1;


    Gruss: Sonic

    I didn't hit you. I high fived your face.

    Einmal editiert, zuletzt von Sonic Hedgehog ()

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen