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.