Hi. wirklich ne peinliche frage, habe das aber ne verstanden .
kann mir einer genau erklären wie ich n command mit parameter erstelle?
MfG
Hi. wirklich ne peinliche frage, habe das aber ne verstanden .
kann mir einer genau erklären wie ich n command mit parameter erstelle?
MfG
kannste das net im originialen thread schreiben?!?! ich glaub ma das verstößt gegen die regeln oda?
original thread? du meinst den pinned thread. finde ich nicht mehr.
warum sollte das gegen ne regel verstoßen?
aber die frage steht immernoch
> STRTOK
strtok(const string[], &index)
{
new length = strlen(string);
while ((index < length) && (string[index] <= ' '))
{
index++;
}
new offset = index;
new result[20];
while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
}
Dann bei OnPlayerCommandText
new tmp[128],cmd[128],index;
if (strcmp(cmd, "/healme", true) ==0 )
{
tmp = strtok(cmdtext,index);
if(!strlen(tmp)){return 1;} // er geht zurück sobald der Inhalt von tmp nix war
new health = strval(tmp);
SetPlayerHealth(playerid,health);
return 1;
}
falls du noch einen Parameter willst unter dem new health = ... also die Zwischenspeicherung nochmal
tmp = strtok(cmdtext,index); dann die abfrage wegen dem Inhalt und noch ne Zwischenspeicherung dann den Wert dort einsetzen wo
er gebraucht wird
thx blackfox
Klick mich <--- das is echt sau einfach mit dcmd und sscanf
ich hätte es mit dcmd gemacht gibs auch ein tut von
Fox du tust mir weh mit deinem strtok.
Mario2323, benutz am besten dcmd in Verbindung mit sscanf. Hat viele Vorteile, zum einen bessere Übersichtlichkeit, kürzerer Code, weniger Buganfällig, ressourcenschonender und auch leicht verständlich.
strtok ist zwar umständlich aber auch nicht schwer wenn man es kann, aber klinsen muss dir recht geben dcmd ist schneller vorallem da es ja scanff nutzt
habe noch ne frage.
ich hab dcmd kapiert(teilweise).
was ich nicht verstehe, wie werden die parameter in die vars gepackt?
ich mein:
dcmd_kick(playerid,params[]) {
new sGrund[128], pID;
if(sscanf(params, "ds",pID,sGrund)) {
return SendClientMessage(playerid,COLOR_RED,"USAGE: /kick [playerid] [grund]");
}
if(!IsPlayerConnected(pID)) {
return SendClientMessage(playerid,COLOR_RED,"Kein Spieler mit angegebener ID Online");
}
new ThePlayer[MAX_PLAYER_NAME], string[128];
GetPlayerName(pID,ThePlayer,sizeof(ThePlayer));
format(string,sizeof(string),"%s (ID %d) wurde vom Server gekickt,Grund: %s",ThePlayer,pID,sGrund);
Kick(pID);
return 1;
}
new sGrund[128], pID; müssten doch leer sein und Theplayer auch.
warum werden die dann da rein geschrieben?
ich mein sscanf(params, "ds",pID,sGrund) kann doch nicht das darein setzten, weil es doch inne if anweisung steht
Diese if Bedingung bei if(sscanf.... gibt nur an dass sscanf benutzt wird und die Message die in diesem Fall bei dir dasteht an den Player gesendet wird wenn sGrund bzw. pID leer sind, also 0 Stellen haben.
dasweiß ich doch wenn die leer sind
mir gehts nur darum zu wissen, ob
sscanf(params, "ds",pID,sGrund)
auch automatisch die vars setzt, wenn nicht comandos <> garnichts ist
Passiert schon irgendwie, durch denn sscanf Code^^
Wie wird allen Pawn Scriptern, die sich nicht mit C++ beschäftigen, nie erfahren. Ich selbst auch nicht.
Das ist sehr komplex, der sscanf Code. Auf jeden Fall funktioniert es und da nichts anderes den Variablen die Eingaben zuteilen könnte, kommt nur sscanf in Frage.
Naja, solange es funktioniert ist es mir auch recht gleichgültig
Du kannst dir ja mal den stock sscanf Code anschauen. Vielleicht erfährst du dadurch was du wissen willst.
thx