In diesem Beitrag möchte ich einige Commands zur "Verfügung" stellen. Für Neulinge oder auch für euch falls ihr einen vergessen habt.
Befehle werden sein:
/heal [ID]
/kill [ID]
/ban [ID]
/givemoney [ID]
Als erstes brauchen wir einen Stock "IstSpielerAdmin" um abzufragen ob der Spieler Admin ist. Denn solche Befehle wie /heal, /kill usw. sollte kein normaler User können (bis auf /givemoney aber das habe ich noch unter Admin-Rechte stehen)
Der Stock sollte so aussehen:
stock IstSpielerAdmin(playerid,level) //mit "level" bestimmen wir welchen Adminrang der Nutzer haben soll um dies benutzen zu können
{
if(sSpieler[playerid][Adminlevel] >= level) return 1; // Wenn vom Spieler das Adminlevel genausogroß ist wie level (oben erklärt) dann soll was passieren
return 0;
}
Gut. Haben wir das schonmal geschafft. Nun kommen wir zu dem Befehl /heal
Den Befehl habe ich mit dcmd geschrieben.
#define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
Einfach nach den Includes schreiben und dann könnt ihr schon mit dcmd arbeiten.
Zuerst gehen wir zu "OnPlayerCommandText" und schreiben nach den { }
dcmd(heal,4,cmdtext); //die 4 steht für die Anzahl der Buchstaben in dem Wort (h-e-a-l) also 4
Jetzt können wir wirklich unseren Befehl schreiben.
Wir gehen dazu unter die letzte geschweifte Klammer von den OnPlayerCommandText und schreiben:
dcmd_heal(playerid,params[]) //die Parameter werden später noch festgelegt
{
new i;
if(strlen(params))
{
i=strval(params); //der Parameter wird festgelegt
if(IsPlayerConnected(i)) //wenn der Spieler eingeloggt ist (i - steht für den Spieler den wir heilen wollen)
{
if(sSpieler[playerid][Adminlevel]>=2) //der Spieler der heilen möchte den Adminrang 2 hat
{
SetPlayerHealth(i,100); //soll der von dem angegebenen Spieler das Leben auf 100 machen
SendClientMessage(i,gelb,"Du wurdest geheilt."); //Diese Message wird an die ID wiedergegeben
SendClientMessage(playerid,gelb,"Du hast jemanden geheilt."); //Diese Message wird dir wiedergegeben
}
else //sollte aber der Adminrang 0 oder 1 sein
{
SendClientMessage(playerid,rot,"Du bist kein Admin! Oder dein Adminlevel ist zu niedrig!"); //wird die Message dir ausgegeben
}
}
}
return 1;
}
Die Kommentare sollten euch alles erklären.
Kommen wir nun zu /kill dazu müssen wir unter "OnPlayerCommandText" nach der ersten geschweiften Klammer (da wo unser heal steht) dies schreiben:
dcmd(kill,4,cmdtext); //die 4 steht wieder für die Anzahl der Buchstaben (k-i-l-l)
Nun fügt ihr unter den OnPlayerCommandText und UNTER dem Befehl "dcmd_heal" dies ein:
dcmd_kill(playerid,params[]) //die Parameter werden später noch festgelegt
{
new i;
if(strlen(params))
{
i=strval(params); //wir legen gerade den Parameter fest
if(IsPlayerConnected(i)) //wenn der angegebene Spieler eingeloggt ist
{
if(sSpieler[playerid][Adminlevel]>=3) //und der User der ihn töten möchte den Adminrang 3 hat
{
SetPlayerHealth(i,0); //soll er das leben auf 0 setzen (also töten)
SendClientMessage(i,rot,"Du wurdest getötet."); //diese Nachricht wird an dem Spieler der getötet wurde ausgegeben
SendClientMessage(playerid,gelb,"Du hast jemanden getötet."); //diese Nachricht wird an dir ausgegeben
}
else //wenn er aber Adminrang 0,1 oder 2 ist
{
SendClientMessage(playerid,rot,"Du bist kein Admin! Oder dein Adminlevel ist zu niedrig!"); //soll diese Message ausgegeben werden
}
}
}
return 1;
}
Nun kommen wir zu /ban. Dies tun wir ebenfalls mit dcmd. Wir gehen wieder unter "OnPlayerCommandText" und schreiben unter "kill" und "heal"
dcmd(ban,3,cmdtext); // die 3 steht für die Anzahl der Buchstaben (b-a-n)
Nun geht ihr unter die letzte geschweifte Klammer von OnPlayerCommandText und dort sehen wir die anderen dcmd Befehle.
Nun sucht ihr einen freien Platz unter den dcmd kill und schreibt dies:
dcmd_ban(playerid,params[]) //der Parameter wird später noch festgelegt
{
new i;
if(strlen(params))
{
i=strval(params); //hier wird der Parameter festgelegt
if(IsPlayerConnected(i)) //wenn der angegebene Spieler den wir bannen wollen eingeloggt ist
{
if(sSpieler[playerid][Adminlevel]>=5) //und der Spieler der ihn bannen möchte den Adminrang 5 hat
{
SendClientMessage(i,gelb,"Du wurdest gebannt."); //Diese Message wird an die ID wiedergegebe
SendClientMessage(playerid,gelb,"Du hast jemanden gebannt."); //Diese Message wird dir wiedergegeben
Ban(i); //soll er diesen Spieler bannen
// macht nicht zuerst Ban(i) ansonsten bekommt er die Nachricht nicht mehr!!
}
else //sollte dies nicht funktionieren
{
SendClientMessage(playerid,rot,"Du bist kein Admin! Oder dein Adminlevel ist zu niedrig!"); //wird diese Message ausgegeben
}
}
else
{
SendClientMessage(playerid,rot,"Der angegebene Spieler konnte nicht gefunden werden."); //ist der Spieler nicht eingeloggt kommt diese Message
}
}
return 1;
}
Als letztes kommen wir zu /givemoney. /givemoney ist auch ein dcmd Befehl.
Ihr geht wieder zu OnPlayerCommandText und schreibt unter dcmdban dies:
dcmd(givemoney,9,cmdtext); //die 9 steht für die Anzahl der Buchstaben in dem Wort (g-i-v-e-m-o-n-e-y)
Danach geht ihr zu den anderen dcmd Befehlen und schreibt unter den letzten (also ban) das hier:
dcmd_givemoney(playerid, params[])
{
if(IstSpielerAdmin(playerid,3)) //wenn der Spieler den Adminrang 3 hat
{
new
giveplayerid, //hier legen wir Strings fest (berichtigt mich wenn ich was falsches sage)
amount;
if (sscanf(params, "ud", giveplayerid, amount)) SendClientMessage(playerid, 0xFF0000AA, "Benutzung: /givemoney [ID] [SUMME]"); //wenn bei SSCANF die parameter "u" und "d" vorkommen (u steht für den Spieler und d für einen Integer)
else if (giveplayerid == INVALID_PLAYER_ID) SendClientMessage(playerid, 0xFF0000AA, "Spieler nicht gefunden"); //sollte die PlayerID nicht vorhanden sein dann kommt die Message
else if (amount == GetPlayerMoney(playerid)) SendClientMessage(playerid, 0xFF0000AA, "Geld konnte nicht übertragen werden.");
else
{
GivePlayerMoney(giveplayerid, amount); //dann soll das Geld übertragen werden
//GivePlayerMoney(playerid, 0 - amount); - ausgeklammert lassen sonst funktioniert der Befehl nicht mehr!
SendClientMessage(playerid, gelb, "Geld gesendet!"); //an uns
SendClientMessage(giveplayerid, gelb, "Geld erhalten!"); //an den angegebenen Spieler
}
}
return 1;
}
Bei /givemoney habe ich mir Hilfe von SA:MP Wikipedia geholt da ich den Befehl selber gesucht habe und dauernd nur "Geld konnte nicht übertragen werden." Befehl bekam. (Wurde von mir auf Deutsch frei übersetzt)
Also einfach GivePlayerMoney(playerid, 0 - amount); weg lassen!
Die Befehle habe ich natürlich selber geschrieben (außer /givemoney)
dann habe ich noch Befehle wie /makeberuf (einen Spieler in den Beruf tun - war mir vor 1 Tag noch nötig)
und weitere Befehle wie /stats , /quitjob, /binichadmin, /tellspd (teleport-lspd), /gmx (Serverneustart), usw.