weil du Anzahl als Float, also 'f', definiert hast. Es müsste aber ein d bzw i für integer sein. Es sei denn du vergibst halbe wanteds xD
Befehle mit Übergabewerten
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
-
-
wenn ich bei dcmd ein Command mit dem Befehl /ah UND /adminhelp aufrufen möchte, wie würde das gehen?
-
-
wenn ich den dcmd command /kick im spiel eingebe kommt /kick : You are not a Admin! obwohl ich das nirgents im script habe Oo
-
Wie du aber siehste,ist im Beispielcode nirgendwo ein Text der in die Richtung "You are not an admin" geht ;).
Hast wohl noch ein Anderes Script am laufen, wo es wahrscheinlich schon einen /KICK Befehl gibt. -
ist es auch möglich einen kick befehl ohne sscanf zu machen?
also das mann auch einen grund angeben kann usw? -
Na klar.
strget hilft dir da. -
Danke für das Tutorial, schaue öfters vorbei wenn ich etwas von dcmd vergesse.
Hätte jetzt eine Frage. Dieser Command hier soll einen Supportchat darstellen. Das ganze geht auch, allerdings fehlt oft der größte Teil des Textes. Bedeutet es werden Nach meinem Namen nur etwa 25 Buchstaben vom Text Angezeigt. Wieso?
dcmd_supchat(playerid,params[])
{
if(SupChat[playerid] != -1)
{
new sAnnounce[256];
if(sscanf(params, "s",sAnnounce)) {
return SendClientMessage(playerid,COLOR_RED,"Verwendung: /supchat [Text]");
}
new string[256];
format(string,256,"[SUPCHAT]%s: %s",SpielerInfo[playerid][pName],sAnnounce);
for(new i=0; i<MAX_PLAYERS; i++)
{
if(SupChat[i] == playerid && SupChat[playerid] == i)
{
SendClientMessage(playerid,COLOR_CBLUE,string);
SendClientMessage(i,COLOR_CBLUE,string);
}
}}
else
{
SendClientMessage(playerid,COLOR_RED,"Du hast keinen Supportchat gestartet.");
}
return 1;
} -
´Der Text + Name ist maximal 256 Zeichen lang ( siehe das Array von der Variable string.
Natürlich solltest du keine Romane schreiben
-
Das sind Insgesamt aber nichtmal 100 Buchstaben
-
Also ich seh den Fehler nicht....benutzt du die Plugin-Version von SSCANF? Dann musst du noch die String-Länge mit angeben.
-
Genau das wars. Danke, den Fehler hätte ich nicht gefunden.
-
und bedenke das hier Why you should not use 256
-
troz allem ganz nice und danke für das TUT
-
Hallöchen,
ich hab heute mal wieder bissl rum geschaut was man verbessern kann und wollte mal zcmd ausprobieren, weil das ja nicht mit OnPlayerCommandText geht hab ich es so gemacht:
public OnPlayerCommandPerformed(playerid,cmdtext[],success) {
if(!success)
{
CMD:changepass(playerid,params[]) {
new passwort[32],string[128];
if(sscanf(params, "s",passwort)) {
return SendClientMessage(playerid,COLOR_RED,"FEHLER: /changepass [Neues Passwort]");
}
format(string,sizeof(string),"Passwort erfolgreich geändert. Das Passwort lautet nun: '%s'",passwort);
SendClientMessage(playerid,COLOR_YELLOW,string);
SpielerInfo[playerid][pKey] = passwort;
SaveAcc(playerid);
return 1;
}
}
return 1;
}und erhalte dabei leider folgenden error den ich nirgends zu ordnen kann:
C:\Users\HEiTZER\Desktop\GF-edit\gamemodes\DDG.pwn(16658) : error 029: invalid expression, assumed zero
C:\Users\HEiTZER\Desktop\GF-edit\gamemodes\DDG.pwn(16658) : error 017: undefined symbol "cmd_changepass"
C:\Users\HEiTZER\Desktop\GF-edit\gamemodes\DDG.pwn(16658) : error 029: invalid expression, assumed zero
C:\Users\HEiTZER\Desktop\GF-edit\gamemodes\DDG.pwn(16658) : fatal error 107: too many error messages on one lineCompilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
4 Errors.
Was hab ich Falsch gemacht bzw. woher kommt das cmd_changepass?
-
Versuch mal COMMAND:changepass(playerid,params[]) {
-
Selbes Problem sind genau die selben errors
-
Durch ZCMD werden die befehle ein eigenständiges Public ausserhalb aller normalen Publics. Also musst du es nicht innerhalb OnPlayerCommanText oder so machen.
OnPlayerCommandPerformed ist dafür da, um z.b zu Loggen wenn ein Spieler einen Befehl benutzt hat.
public OnPlayerCommandPerformed(playerid,cmdtext[],success)
{
if(success)
{
printf("ID %d hat den Befehl %s erfolgreich ausgeführt.",playerid, cmdtext);
}
else if(!success)
{
printf("ID %d hat einen nicht Existierenden Befehl (%s) ausgeführt.",playerid, cmdtext);
}
return true;
}Den befehl selbst kann du einfach irgendwo ins script (aber ausserhalb eines Publics) packen.
CMD:changepass(playerid,params[])
{
new passwort[32],string[128];
if(sscanf(params, "s",passwort)) return SendClientMessage(playerid,COLOR_RED,"FEHLER: /changepass [Neues Passwort]");
format(string,sizeof(string),"Passwort erfolgreich geändert. Das Passwort lautet nun: '%s'",passwort);
SendClientMessage(playerid,COLOR_YELLOW,string);
SpielerInfo[playerid][pKey] = passwort;
SaveAcc(playerid);
return 1;
} -
hab ma ne frage..
Wie kann mann z.b. mit sscanf ein command machen mit der [playerid] [licenses] [Grund]
wie kann mann dass z.b. machen dass mann licenses festlegen kann auf etwas bestimmtes und der grund auch?
dass mann z.b. 21 Auto STVO
und dann soll was pasieren.
lg M4rciii
-
Meinst du dass es sich dann abspeichert, fest im Account?