Tutorial für ein funktionierendes Maskensystem

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, Community!


    Vorab möchte ich sagen, dass dieses Masken System für jedes Script angepasst werden muss!
    Für Support des Maskensystems bin ich nicht zuständig!


    Man könnte dieses Maskensystem für einen Reallife Server gebrauchen oder für jede andere Art des versteckten Namens.


    Ich werde warscheinlich nicht mehr in diesen Thread gehen, da ich vorerst inaktiv werden.
    Ich bitte um Verständniss. Erklärungen stehen hinter den Befehlen


    Fangen wir an:
    //Als aller erstes brauchen wir eine Variable für jeden Spieler, damit die Maske zum späteren Zeitpunkt keine Probleme hat.
    //Diese Variable erstellen wir mit:
    new Maske[MAX_PLAYERS];



    //Beim nächsten Schritt, setzen wir die Maske bei "OnPlayerConnect" und "OnPlayerSpawn" auf 0, damit die Maske beim Connecten & beim
    //Spawnen nicht benutzt wird.
    //Dies machen wir mit folgendem Text:
    Maske[playerid] = 0;



    //Als nächtes müssen wir dafür sorgen, dass bei der Maske Leben abgezogen wird, sobald man verletzt wird.
    //Dazu benutze ich OnPlayerUpdate
    //Wer diese Funktion zu aufwändig findet, kann sich auch einen Timer erstellen! Dazu folgt keine Anleitung!
    public OnPlayerUpdate(playerid)
    {
    if(Maske[playerid] == 1)
    {
    new string[128], Float:hp, Float:am; //Wie brauchen diese Zeile, damit das HP ausgegeben und abgefragt werden kann!
    GetPlayerHealth(playerid,hp);//Hier fragen wir das Leben ab
    GetPlayerArmour(playerid,am);//Hier wird die Rüstung abgefragt
    floatround(hp,floatround_tozero);//Das ganze wird gerundet
    floatround(am,floatround_tozero);//Erneut gerundet
    format(string,sizeof(string),"Unbekannter\nL:%.0f R:%.0f",hp,am);//Der Name undbekannt wird gesetzt, Leben & Rüstung wird eingesetzt
    SetPlayerChatBubble(playerid,string,rot,40.0,10000);//Das ganze steht über dem Namen
    }
    return 1;
    }



    //Gehen wir zu OnPlayerStreamIn
    //Sobald ein Spieler bei einem anderen Spieler erscheint, werden ihm die Rüstung, die Maske, das Leben und der Name erneut gesetzt
    if(Maske[forplayerid]==1)
    {
    SetPlayerAttachedObject(forplayerid, 1, 19036, 2, 0.107, 0.035, 0.0, 90, 90, 0);//Object wird auf den Character gesetzt
    ShowPlayerNameTagForPlayer(playerid,forplayerid,false);//Der Name verschwindet
    }



    //Der eigentliche Befehl:
    ocmd:maske(playerid,params[])//Das, was eingegeben wird
    {
    if(SpielerInfo[playerid][pTeam] != 2)return SendClientMessage(playerid,rot,"Fehler: Du bist nicht bei den Terroristen.");//Die Abfrage der Fraktion
    if(Maske[playerid]==1)//wenn die Maske schon auf dem Gesicht war
    {
    GameTextForPlayer(playerid,"~r~Du setzt deine Maske ab.",100,0);//Eine Nachricht an den Spieler
    Maske[playerid] = 0;//Variable wird auf "Abgesetzt" gestellt
    RemovePlayerAttachedObject(playerid, 1);//Die Maske wird vom Gesicht genommen
    for(new i=0; i<MAX_PLAYERS; i++)//Schleife durch alle Spieler
    {
    ShowPlayerNameTagForPlayer(i,playerid,true);//Name wird wieder gezeigt
    }
    }
    else if(Maske[playerid]==0)//Wenn er keine Maske auf hatte
    {
    new Float:health, Float:armour, string[128];//Leben & Rüstung wird abgefragt
    GetPlayerHealth(playerid,health);//Lebensabfrage
    GetPlayerArmour(playerid,armour);//Rüstungsabfrage
    floatround(health,floatround_tozero);//Runden
    floatround(armour,floatround_tozero);//Runden
    format(string,128,"Unbekannter\nL:%.0f R:%.0f",health,armour);//Leben & Rüstung wird formatiert
    SetPlayerChatBubble(playerid,string,rot,40.0,10000);//Leben wird über den Kopf gesetzt
    GameTextForPlayer(playerid,"~r~Du setzt deine Maske auf.",100,0);//Nachricht an den Spieler
    Maske[playerid] = 1;//Maske wird auf "tragen" gesetzt
    SetPlayerAttachedObject(playerid, 1, 19036, 2, 0.107, 0.035, 0.0, 90, 90, 0);//Objekt erscheint
    for(new i=0; i<MAX_PLAYERS; i++)//Schleife durch alle Spieler
    {
    ShowPlayerNameTagForPlayer(i,playerid,false);//Name verschwindet
    }
    }
    return 1;
    }

  • Sollte / willst du das hier :
    public OnPlayerUpdate(playerid)
    {
    if(Maske[playerid] == 1)
    {
    new string[128], Float:hp, Float:am; //Wie brauchen diese Zeile, damit das HP ausgegeben und abgefragt werden kann!
    GetPlayerHealth(playerid,hp);//Hier fragen wir das Leben ab
    GetPlayerArmour(playerid,am);//Hier wird die Rüstung abgefragt
    floatround(hp,floatround_tozero);//Das ganze wird gerundet
    floatround(am,floatround_tozero);//Erneut gerundet
    format(string,sizeof(string),"Unbekannter\nL:%.0f R:%.0f",hp,am);//Der Name undbekannt wird gesetzt, Leben & Rüstung wird eingesetzt
    SetPlayerChatBubble(playerid,string,rot,40.0,10000);//Das ganze steht über dem Namen
    }
    return 1;
    }


    Nicht lieber bei OnPlayerTakeDamage oder so hinmachen, denn OnPlayerUpdate(playerid); ist sehr Rescourcen Fressend...


    Nur ein gut gemeinter Rat an dich.


    MFG
    Raphael

    Stahlbau Azubi deswegen kaum Aktiv