Noobschutz ganz einfach

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 möchte euch mal vorstellen wie man ganz simpel einen Noobschutz erstellen kann.


    Was wird benötigt? Man benötigt dazu einfach nur:


    public OnPlayerGiveDamage(playerid, damagedid, Float: amount, weaponid)


    Weiter gehts:


    Man fragt einfach das LvL des Users ab und bestimmt was passieren soll.
    Darauf hin gibt man die folgenden Aktionen zu, ich zB habe es so, das der User, welchen den Neuling angreift, HP + Geld verliert und dazu 5sec gefreezed wird.
    Als Beispiel so:
    public OnPlayerGiveDamage(playerid, damagedid, Float: amount, weaponid)


    if(SpielerInfo[damagedid][SpielerLevel] == 1) //Das Level des Angegriffenen Users wird abgefragt
    {
    new Float:health;
    GetPlayerHealth(playerid,health); //Hier wird die HP erkannt
    SendClientMessage(playerid,COLOR_RED,"Spieler hat Noobschutz, Angriff verboten!! Strafe: Freeze, HP Abzug, Geldstrafe"); //Die Warnung die der Angreifer bekommt. Kann man ja gestalten wie man möchte
    TogglePlayerControllable(playerid,0); //Angreifer wird hier gefreezed
    SetTimerEx("ufz", 5000, 0, "d", playerid); //Timer zum unfreeze
    SetPlayerHealth(playerid, health-30); //HP Abzug des Angreifers
    GivePlayerMoney(playerid,-2500); //Geldabzug des Angreifers
    }
    Damagedid ist der User welcher Schaden bekommt,
    Playerid ist der User welcher Schaden "austeilt"


    Hier das Entfreeze, falls man es so nutzen möchte, einfach ganz unten ins Script, oder halt zu den anderen forwards. nicht IN eine Funktion.


    forward ufz(playerid);
    public ufz(playerid)
    {
    TogglePlayerControllable(playerid,true); //Hier wird der Angreifer nach 5Sec entfreezed
    return 1;
    }




    Natürlich muss auch abgefragt werden, ob der Neuling Wanteds hat, und Cops damit angreifen können. Das ist auch recht einfach zu machen.
    Einfach eine Abfrage mit:


    if(SpielerInfo[damagedid][SpielerLevel] == 1 && SpielerInfo[damagedid][Wantedsl] < 1 )
    Oder ggf so:
    if(SpielerInfo[damagedid][SpielerLevel] == 1 && !SpielerIstCop(playerid) )


    Da müsst ihr halt alle Fraks wie PD, FBI und so weiter in "SpielerIstCop" zuweisen, oder Abfragen ob "playerid" in der Fraktion Leader/Member ist.


    Ihr müsst nur alles anpassen, so wie es euer Script erfordert. Ich habe Extra nicht die OrginalCodes gepostet, um C&P zu vermeiden.


    Mit " OnPlayerGiveDamage" und " OnPlayerTakeDamage" kann man natürlich auch viele weitere Dinge realisieren, zB AFK, Aduty und Spawnschutz als Beispiel.


    //Edit: Wie ein freundlicher User mitteilte, ist
    public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid)
    besser dafür geeignet. Dazu braucht ihr logischerweise nur im darauf folgenden Code "playerid" und "issuerid" richtig einsetzen.
    playerid: das "Opfer"
    issuerid: der Angreifer
    Vielen dank an XeroX für den Hinweis.
    Viel Spaß beim Scripten.

  • An sich ist das Tutorial in Ordnung! Jedoch müsste man, falls man das System verwendet, viele Anpassungen vornehmen, da sonst einige Sachen mit anderen Systemen zu Komplikationen führen könnten.
    Aber das kannst du ja nicht vorhersehen, was für Systeme man verwendet.


    Das Grundgerüst ist gut, die Erklärung auch!


    Weiter so.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • SendClientMessage(playerid,COLOR_RED,"Spieler hat Noobschutz, Angriff verboten!!\nStrafe: Freeze, HP Abzug, Geldstrafe"); //Die Warnung die der Angreifer bekommt
    Diese Zeile kannst du so nicht schreiben, da \n nicht im SCM (SendClientMessage) erkannt wird.
    Ich denke, du wolltest dem Spieler erst einen Dialog zeigen, was dir dann zu umständlich war (?).
    Müsstest du eventuell ergänzen.