Brauche Callback!

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
  • Du kannst abfragen wie viel Health er verloren hat, geht locker durch OnPlayerUpdate aber nicht mit was er beschossen wird bzw. warum er Energie verliert
    ansonsten wäre MTA wohl die bessere Wahl für dein vorhaben

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • naja so als anfang
    OnPlayerKeyStateChange
    GetPlayerWeapon
    for...GetPlayerPos, IsPlayerInRangeOfPoint
    Jo

  • Jedes mal wenn der spieler HP verliert (also auch wenn er runterfællt,geschlagen wird,beschossen wird,wenn er bei einer explosion steht und so):
    new Float:lastHP[MAX_PLAYERS];
    new ActivateHP[MAX_PLAYERS];


    public OnPlayerConnect(playerid)
    {
    ActivatedHP[playerid] = 0;
    return 1;
    }


    public OnPlayerSpawn(playerid)
    {
    ActivatedHP[playerid] = 1;
    return 1;
    }


    public OnPlayerDeath(playerid, killerid, reason)
    {
    ActivatedHP[playerid] = 0;
    return 1;
    }


    public OnPlayerUpdate(playerid)
    {
    if(ActivatedHP[playerid] == 1)
    {
    new Float:currentHP[MAX_PLAYERS];
    GetPlayerHealth(playerid, currentHP[playerid]);
    if(currentHP[playerid] < lastHP[playerid])
    {
    CallLocalFunction("OnPlayerLoseHealth","uff",playerid,lastHP[playerid],currentHP[playerid]);
    lastHP[playerid] = currentHP[playerid];
    }
    }
    return 1;
    }


    und das ist das neue callback den du ganz unten einfügst:
    public OnPlayerLoseHealth(playerid, Float:oldhealth, Float:newhealth)
    {
    /******** BEISPIELS SCRIPT ********/
    new string[64];
    new Float:lost_hp = oldhealth-newhealth;
    format(string,sizeof(string),"Du hast %.2f gesundheit verloren !",lost_hp);
    SendClientMessage(playerid,0xAFAFAFAA,string);
    /******** BEISPIELS SCRIPT ********/
    return 0;
    }
    so könnte man auch einen Anti-Health hack machen :love:


    so würde es doch gehn, oder? ^^:rolleyes:

    Einmal editiert, zuletzt von FoxHound ()

  • ah ja und wie kleinerOpa es gesagt hat, können wir auch abfragen ob der spieler nahe einem spieler ist und die feuertaste drückt ^^
    Aber so würden es auch klitzekleine bugs geben ^^
    und das gibts hier:
    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    if(newkeys == KEY_FIRE)
    {
    if(GetPlayerWeapon(playerid) == 0) //so wird diese funktion nur aufgerufen, wenn der spieler keine waffen hat
    {
    new Float:iX,Float:iY,Float:iZ;
    for(new i = 0; i<MAX_PLAYERS; i++)
    {
    GetPlayerPos(i,iX,iY,iZ);
    if(IsPlayerInRangeOfPoint(playerid, 2.0, iX, iY, iZ)
    {
    CallLocalFunction("OnPlayerPunchPlayer","uu",playerid,i);
    }
    }
    }
    }
    }


    und das hier das callback, ganz unten ins script:
    public OnPlayerPunchPlayer(playerid, punchedplayerid)
    {
    new string[64],playername[MAX_PLAYER_NAME],punchedplayername[MAX_PLAYER_NAME];
    /******************************************** BEISPIELS SCRIPT ********************************************/
    GetPlayerName(playerid,playername,sizeof(playername));
    GetPlayerName(punchedplayerid,punchedplayername,sizeof(punchedplayername));
    format(string,sizeof(string),"Du hast %s geschlagen !",punchedplayername);
    SendClientMessage(playerid,0xFFFFFFAA,string);
    format(string,sizeof(string),"Du wurdest von %s geschlagen !",playername);
    SendClientMessage(punchedplayerid,0xFFFFFFAA,string);
    /******************************************* BEISPIELS SCRIPT *******************************************/
    return 1;
    }
    auch kP ob das so funzt xD

    Einmal editiert, zuletzt von FoxHound ()

  • Das würde nichts nützen stell dir vor jemand nimmt ein Scharfschützen Gewehr außerdem müsste er die Richtige Ausrichtung haben so das er wirklich den Spieler abschießt
    wie gesagt in Sa-mp sind einfach nicht die nötigen Funktionen das um sowas eig. kleines hinzukriegen da wärst du bei MTA besser dran

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • versuchen wir dann mal Anti-HP-Hack ^^
    new Float:lastHP[MAX_PLAYERS];
    new ActivateHP[MAX_PLAYERS];


    public OnPlayerConnect(playerid)
    {
    ActivatedHP[playerid] = 0;
    return 1;
    }


    public OnPlayerSpawn(playerid)
    {
    ActivatedHP[playerid] = 1;
    return 1;
    }


    public OnPlayerDeath(playerid, killerid, reason)
    {
    ActivatedHP[playerid] = 0;
    return 1;
    }


    public OnPlayerUpdate(playerid)
    {
    if(ActivatedHP[playerid] == 1)
    {
    new Float:currentHP[MAX_PLAYERS];
    GetPlayerHealth(playerid, currentHP[playerid]);
    if(currentHP[playerid] > lastHP[playerid])
    {
    CallLocalFunction("OnPlayerRestoreHealth","uff",playerid,lastHP[playerid],currentHP[playerid]);
    lastHP[playerid] = currentHP[playerid];
    }
    }
    return 1;
    }


    public OnPlayerRestoreHealth(playerid, Float:oldhealth, Float:newhealth)
    {
    /****************************** BEISPIEL ******************************/
    SetPlayerHealth(playerid,oldhealth); //macht seine energie wieder auf den alten stand
    /****************************** BEISPIEL ******************************/
    return 1;
    }


    aber man müsste die SetPlayerHealth und so funktionen ein bisschen ændern und auch wenn man das macht, wenn man die originalen NPC's im BSN zum essen benutzt, könnte das das essen verhindern ^^

  • Anti Health Hack :


    forward CheckFuckinHealth();
    public CheckFuckinHealth();
    {
    for(new i = 0;i<MAX_PLAYERS;i++)
    {
    if(!IsPlayerConnected(i) || IsPlayerNPC(i))continue;
    new Floath:health;
    GetPlayerHealth(i,health);
    SetPlayerHealth(i,health+1);
    if(health!=health+1)Kick(i); // Hack
    SetPlayerHealth(i,health-1);
    }
    return 1;
    }



    Unter OnGameModeInit
    SetTimer("CheckFuckinHealth",1000,1);
    Spieler kriegt einmal mehr Health , kann der nicht gesetzt werden wird es als Hack erkannt

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


    Einmal editiert, zuletzt von BlackFoX ()

  • Oder was ganz kluges von mir :>

    public FillHP(playerid)
    {
    SetPlayerHealth(playerid,99);
    return 1;
    }


    und



    public CheckHP(playerid)
    {
    new Floath:health;
    GetPlayerHealth(playerid,health);
    if(health > 99) return Kick(playerid); //hack XD
    SetPlayerHealth(playerid,health+1);
    if(health!=health+1) return Kick(playerid); // Hack
    else return SetPlayerHealth(playerid,health-1);
    return 1;
    }



    :D So Simple wie auch Genial :> xD
    €dit :
    Noch etwas hinzugefügt thx 2 BFX :D


    Einmal editiert, zuletzt von Guest- ()