Ja, so hab ich es jetzt auch. Aber wie nutzt man den Datentyp "u" richtig??
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
-
-
"u" ist ein spezieller Typ mit dem man Automatisch die Spieler ID bekommt.Bei dem Typ ist es egal ob man den Namen oder die ID direkt angibt,der Typ u würde bei der Eingabe von einem Namen diesen automatisch in die ID der Spielers umwandeln.
Ich sehe jetzt auf den ersten blick keinen Fehler bei deinem Code,habs deshalb mal selber fix runtergeschrieben.
public OnPlayerCommandText(playerid, cmdtext[]) {
dcmd(heal,4,cmdtext);
return 0;
}
dcmd_heal(playerid,params[]) {
new
giveid;
if(sscanf(params,"u",giveid)) {
return SendClientMessage(playerid,COLOR_RED,"Benutzung: /heal [Name / ID]");
}
if(!IsPlayerConnected(giveid)) {
return SendClientMessage(playerid,COLOR_RED,"Spieler nicht gefunden!");
}
SetPlayerHealth(giveid,100.0);
SendClientMessage(giveid,COLOR_YELLOW,"Du wurdest von einem Admin geheilt!");
return 1;
} -
wie viele dcmd cmds darf man eig haben? DU sagtest ja das dcmd resorcen(oder wie mans schreibt) schonender is, aber ab wann wirds wieder kritisch??? ich habe ca 25 dcmd befehle drin aber es kommen noch viele hinzu. UNd sollte man dcmd auch für cmds ohne paramas verwenden??
-
ich arbeite jetz schon lange mit dcmd und ich muss ned so viel schreiben
-
ich verwende auch dcmd finde ich wersentlich einfacher
//ja man kann kauch dcmd für befehle ohne params verwenden mach unter dem befehl einfach
dcmd_wasweissich(playerid,params[])
#pragma unused params -
JA klar, nur dcmd ist ja nicht die "vorgesehne " variante von sa-mp du wurde ja erst von Y_Less hinzugefügt aber wenn ich die ohne paramas verwende is das auch egal?? naja dann ma los dachte das könnten vll zu viele werden
-
dcmd wurde von DracoBlue entwickelt, nicht von Y_Less. Y_Less hat "lediglich" sscanf gecodet.
Es gibt kein Limit wieviele dcmd Commands man haben darf, da die Funktion ja lediglich aufgerufen wird, wenn man den dazu gehörigen Command eingibt.
Was Cmds ohne Parameter betrifft, da ist dcmd auch schneller, jedoch kann es sein, dass die strcmp Variante genauso schnell ist.
-
//EDIT//
hat sich gelöst//EDIT2//
dcmd_test(playerid,params[])
{
new pID;
if(sscanf(params, "d", pID))
{
return SendClientMessage(playerid,COLOR_RED, "Benutze: /test");
}
if(IsPlayerConnected(pID))
{
SendClientMessage(playerid,COLOR_RED,"Dies ist ein test, ID %d",pID);
return 1;
}
}habe jetzt soeinen befehl drinne,
müsste ja eig. alles richtig sein oder?
wenn man /test macht muss doch der text kommen oder muss ich da nochwas machen?und jetzt mein richtiges problem:
C:\Dokumente und Einstellungen\lukas \Desktop\Lukas\SA-MP Server\gamemodes\DM.pwn(468) : error 017: undefined symbol "dcmd_test"
C:\Dokumente und Einstellungen\lukas \Desktop\Lukas\SA-MP Server\gamemodes\DM.pwn(471) : error 017: undefined symbol "params"
C:\Dokumente und Einstellungen\lukas \Desktop\Lukas\SA-MP Server\gamemodes\DM.pwn(475) : warning 217: loose indentation
C:\Dokumente und Einstellungen\lukas \Desktop\Lukas\SA-MP Server\gamemodes\DM.pwn(477) : warning 202: number of arguments does not match definition
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase2 Errors.
2 Errors ; 2 Warnings
wenn ich
new dcmd_test;
mache kommen nochmehr errors WARUM
bitte um schnelle hilfe
-
bei public OnPlayerCommandText(playerid,cmdtext[])
{
dcmd(test,4,cmdtext);
return 0
};
und hast du das #define dcmd(%1,%2,%3) if (!strcmp((%3)[1], #%1, true, (%2)) && ((((%3)[(%2) + 1] == '\0') && (dcmd_%1(playerid, ""))) || (((%3)[(%2) + 1] == ' ') && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1 im Script oben?Ausserdem is es sinnlos diesen Command mit sscanf zu machen, da der Command keine Parameter hat. Ich weiß gar nicht, ob das dann überhaupt geht
-
C:\Dokumente und Einstellungen\lukas \Desktop\Lukas\SA-MP Server\gamemodes\DM.pwn(370) : error 017: undefined symbol "dcmd_test"
C:\Dokumente und Einstellungen\lukas \Desktop\Lukas\SA-MP Server\gamemodes\DM.pwn(377) : warning 225: unreachable code
C:\Dokumente und Einstellungen\lukas \Desktop\Lukas\SA-MP Server\gamemodes\DM.pwn(471) : error 017: undefined symbol "dcmd_test"
C:\Dokumente und Einstellungen\lukas \Desktop\Lukas\SA-MP Server\gamemodes\DM.pwn(476) : error 017: undefined symbol "params"
C:\Dokumente und Einstellungen\lukas \Desktop\Lukas\SA-MP Server\gamemodes\DM.pwn(478) : warning 202: number of arguments does not match definition
C:\Dokumente und Einstellungen\lukas\Desktop\Lukas\SA-MP Server\gamemodes\DM.pwn(473) : warning 203: symbol is never used: "pID"
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase3 Errors.
//EDIT//
pls help
//EDIT2//
bitte brauche hilfe
-
-
Dann ließ das Tutorial noch einmal,irgendwo wirst du wohl etwas falsch gemacht haben.
Grob sieht das immer so aus:
#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 1public OnPlayerCommandText(playerid,cmdtext[])
{
dcmd(test,4,cmdtext);
return 0;
}dcmd_test(playerid,params[]) {
// hier code
return 1;
} -
#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
public OnPlayerCommandText(playerid, cmdtext[])//-----(Befehle)---------------//
{
//-----(test)-----------------------------------------------------------------//
dcmd(test,4,cmdtext);
return 0;dcmd_test(playerid,params[])
{
new pID;
if(sscanf(params, "d", pID))
{
return SendClientMessage(playerid,COLOR_RED, "Benutze: /test");
}
if(IsPlayerConnected(pID))
{
SendClientMessage(playerid,COLOR_RED,"Dies ist ein test, ID %d",pID);
return 1;
}
}
return 1;
}so habe ich das (sind noch na ppar befehle dazwichen aber ist ja egal)
-
Ok, du hast nicht gründlich gelesen. War klar.....
Der eigentliche Command muss AUSSERHALB eines Callbacks (für die Unwissenden: "public") sein.
-
wie meinst du das?
(bin unwissende)^^//EDIT//
du meinst:
unter on playerkommand text?aber wie soll der das dann als command ansehen?
wenn ich /test mache kommt das dann oder wie?
-
[...]für die Unwissenden: "public"[...]
Lesen tut nicht weh.....
Wenn du es immernoch nicht kapierst solltest du dir mal was anderes als Pawn überlegen.
// AUSSERHALB, was ist daran so schwer zu verstehen? -.-
Man muss sein Hirn auch selber mal benutzen....
-
Du musst es außerhalb eines Callbacks hinpacken z.B. ganz unten im Skript^^
-
okay habe ich jetzt und dann bekomme ich jetzt 1 warning (die restlichen 3 habe ich weg gemacht)
dcmd_test(playerid,params[])
{
new pID;
if(sscanf(params, "d", pID))
{
SendClientMessage(playerid ,COLOR_RED,"Dies ist ein test, ID %d", pID);
SendClientMessage(playerid , COLOR_RED,"Benutze /test");
}
return 1;
}C:\Dokumente und Einstellungen\lukas\Desktop\Lukas\SA-MP Server\gamemodes\DM.pwn(477) : warning 202: number of arguments does not match definition
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase1 Warning.
-
So kann es auch iwie nicht gehen oder?
new pID;
if(sscanf(params, "d", pID))
{
SendClientMessage(playerid ,COLOR_RED,"Dies ist ein test, ID %d", pID);
SendClientMessage(playerid , COLOR_RED,"Benutze /test");?
-
hä?
da fehlt doch voll viel^^
//EDIT//
also ich habe es so gemacht, und wenn ich /test eingebe steht da nur "Benutze /test" mehr nicht, kann mir keiner helfen?
-
SendClientMessage(playerid ,COLOR_RED,"Dies ist ein test, ID %d", pID);
Ähm, wie bitte soll das gehen?
Schau dir mal SendClientMessage im Wiki an ;).
Mach es so:
dcmd_test(playerid,params[])
{
new
pID,
string[128];
if(sscanf(params, "d", pID))
{
SendClientMessage(playerid, COLOR_INFO, "Benutze bitte: /test[ID]");
return 1;
}
format(string, sizeof(string), "Dies ist ein Test. ID %d", pID);
SendClientMessage(playerid ,COLOR_RED, string);
return 1;
}