HP von Spieler jederzeit abfragen

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 weiß nicht wie genau ich das machen muss aber,


    ich würde gerne die HP eines Spielers jederzeit abchecken lassen.
    Also ich möchte dies gerne nutzen falls der Wert über 99 ist dass ich ihn dann bannen kann.



    @Jeffry

  • Hab das jetzt so , aber der Pawno Compiler crasht deswegen.. also beim compilen :


    Code
    if(Leben > 99.0)return
    	{
    		new logstr[128];
    		format(logstr,sizeof(logstr),"Der Spieler %s wurde vom System gebannt. Grund: Heal-Hack", PlayerName(playerid));
    		AddLog("log_ban.txt",logstr);
    		KickEx(playerid);
    		return 1;
    	}

    Und oben bei den Variablen halt :



    Code
    new Float:Leben = GetPlayerHealth(playerid, Leben);

    Kann mir wer helfen und sagen warum es crasht ?

  • Code
    new Float:Leben;
    GetPlayerHealth(playerid, Leben);
    if(Leben > 100.0){
    	new logstr[128];
    	format(logstr,sizeof(logstr),"Der Spieler %s wurde vom System gebannt. Grund: Heal-Hack", PlayerName(playerid));
    	AddLog("log_ban.txt",logstr);
    	KickEx(playerid);
    	return 1;
    }
  • So , habs jetzt getan.


    Aber habe die 100.0 durch 99.0 ersetzt.


    Aber wenn ich InGame komme werde ich sofort gebannt.


    Habe durchs ganze Script gesucht nach "SetPlayerHealth" und alle Sets waren auf 99...


    Weiß jemand vielleichst sonst was?

  • Der Spieler verbindet sich automatisch mit 100 HP, es kann sein das es daran liegt. Hast du eine Variable die prüft ob der Spieler eingeloggt ist?

    Wie meinst du das genau mit der Variable?


    Bei OnPlayerLogin?

  • Z.b. PlayerInfo[playerid][pLoggedIn] diese Variable wird dann auf true gesetzt sobald der Spieler eingeloggt ist (wichtig eingeloggt und nicht auf dem server connected).
    Allerdings verstehe ich nicht warum du es nicht über 100 HP machst.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Z.b. PlayerInfo[playerid][pLoggedIn] diese Variable wird dann auf true gesetzt sobald der Spieler eingeloggt ist (wichtig eingeloggt und nicht auf dem server connected).
    Allerdings verstehe ich nicht warum du es nicht über 100 HP machst.

    Warum ich es nicht über 100 HP mache?
    Weil die meisten Health Cheats die HP auf 100 setzen.
    Und die normale HP dann auf meinem Server 99 ist, also weiß man logischerweise dass dieser cheatet, weil dieser über 99 HP ist.


    // Thema abgelenkt xD


    Ehm ja also ich habe als Variable loggedin.
    also das hier habe ich jetzt :



    Also sollte ich da irgendwo die Spieler-HP auf 99 setzen?

  • Die Überprüfung ob der Spieler ÜBER 99 HP hat. Wenn ja wird er gebannt.


    Aber bei mir wird man gebannt, weil man JA beim LOGIN automatisch 100 HP kriegt.


    Dies möchte ich allerdings vermeiden, und die Spieler HP vor dem Login / Spawn auf 99 SETZEN..



    Daher meine Frage, muss ich das dann da OnPlayerRequestClass hinzufügen mit der SetPlayerHealth(playerid,99); oder nicht?


    Also ich habe ja das wegen dem loggedin hast du ja gesagt :


  • Müsste so funktionieren.

    Code
    // OnPlayerConnect
    SetPVarFloat(playerid, "HP", 99);
    Code
    public OnPlayerUpdate(playerid)
    {
    	new Float:currentHP;
    	GetPlayerHealth(playerid, currentHP);
    	if(currentHP != GetPVarFloat(playerid, "HP")){
    		OnPlayerHealthHasChange(playerid, GetPVarFloat(playerid, "HP"), currentHP);
    		SetPVarFloat(playerid, "HP", currentHP);
    	}
    	return 1;
    }


    Code
    forward OnPlayerHealthHasChange(playerid, Float:oldHealth, Float:newHealth);
    public OnPlayerHealthHasChange(playerid, Float:oldHealth, Float:newHealth)
    {
    	if(pInfo[playerid][loggedin] && newHealth > 99){
    		// Spieler wird gebannt
    	}
    	return 1;
    }

  • Ich würde von dieser Strategie abraten.
    Der Spieler ist vollkommen in der Lage, sein HP an einem Automaten (oder nach Death und so weiter) auf 100.00 zu setzen. Daher musst du die Automaten auch ggf. entfernen oder durch die Automatenpositionen ggf. Ausnahmestellen errichten, da sonst sinlose Bans entstehen.

  • Der selben Meinung bin ich auch, danke Pascal! ^^
    Es gibt nämlich auch eine coolere Lösung.

    Wüsste leider nicht wie genau.


    Habe mir vorgenommen mein Variante zu ändern.
    Wisst ihr eventuell wie und mit welchen Funktionen?


    Habe da leider wirklich gesagt 0 Plan.