Hi,
Ich woltle mal wissen wie man erweiterte Befehle macht wie z.B /spectate next .
Zur Info: Ich benutze ZCDM.
Brauche nur ein Beispiel
lg
Hi,
Ich woltle mal wissen wie man erweiterte Befehle macht wie z.B /spectate next .
Zur Info: Ich benutze ZCDM.
Brauche nur ein Beispiel
lg
Du musst strcmp dazu verwenden, um den angegeben string mit etwas zu vergleichen.
Grüße,
tonyalva
Du musst strcmp dazu verwenden, um den angegeben string mit etwas zu vergleichen.
Grüße,
tonyalva
Dann bekomme ich den Warning: undefined Symbol: cmdtext
Wie benutzt du das Ganze denn?
Du benutzt ja ZCMD und ich denke nicht, dass du einen der Parameter in einem Befehl "cmdtext" nennst, sondern es eher auf "OnPlayerCommandText" beziehst.
Grüße,
tonyalva
Hab's jetzt mal so versucht aber es funktioniert nochnicht ganz.
CMD:spec(playerid,params[])
{
if(Player[playerid][Admin] >= 2)
{
if(!IsPlayerSpectating[playerid])
{
SpectateOn(playerid);
}
else
{
SpectateOff(playerid);
return 1;
}
if(!strcmp(params[1], "/next", true, 5))
{
SpectateNext(playerid);
return 1;
}
else if(!strcmp(params[1], "/previous", true, 9))
{
SpectatePrevious(playerid);
return 1;
}
}
return 1;
}
lg
So ungefähr müsste es gehen, ist frei aus dem Kopf:
new selection[10];
if(sscanf(params,"s[10]",selection))
{
// Code, wenn kein Parameter angegeben wird
}
if(strcmp(selection,"next",true) == 0)
{
//Code, wenn "next" als Parameter angegeben wird
}
Du musst halt, wie sonst auch mit sscanf einen Parameter angeben und diesen dann mit etwas vergleichen.
Grüße,
tonyalva
Jetzt habe ich das Problem, dass alle Befehle aufeinmal ausgelöst werden. D.h. wenn ich /spec eingebe macht er auch /spec next ...
Dann poste doch einmal deinen Code.
Grüße,
tonyalva
Ok...
CMD:spectate(playerid,params[])
{
if(Player[playerid][Admin] >= 2)
{
new selection[10];
if(sscanf(params,"s[10]",selection))
{
if(!IsPlayerSpectating[playerid])
{
SpectateOn(playerid);
}
else
{
SpectateOff(playerid);
}
}
if(strcmp(selection,"next",true) == 0)
{
SpectateNext(playerid);
}
if(strcmp(selection,"previous",true) == 0)
{
SpectatePrevious(playerid);
}
}
return 1;
}
Hast du es mal mit einem "return 1;" versucht?
Dann müsste der Rest nicht ausgeführt werden.
Grüße,
tonyalva
Hab's jetzt so, doch immernoch dasselbe Problem:
CMD:spectate(playerid,params[])
{
if(Player[playerid][Admin] >= 2)
{
new selection[10];
if(sscanf(params,"s[10]",selection))
{
if(!IsPlayerSpectating[playerid])
{
SpectateOn(playerid);
}
else
{
SpectateOff(playerid);
}
return 1;
}
if(strcmp(selection,"next",true) == 0)
{
SpectateNext(playerid);
return 1;
}
if(strcmp(selection,"previous",true) == 0)
{
SpectatePrevious(playerid);
return 1;
}
}
return 1;
}
edit:// Weiß jemand die Lösung?
public OnPlayerCommandText(playerid, cmdtext[])
{
if(!strcmp("/spectate next",cmdtext,false)) {
SpectateNext(playerid);
return 1;
}
if(!strcmp("/spectate previous",cmdtext,false)) {
SpectatePrevious(playerid);
return 1;
}
}
Ich möchte es aber zusammen mit ZCMD benutzen,
und unzer ZCMD gibt es kein OnPlayerCommandText
Ich würds so machen (ungetestet)
CMD:spectate(playerid,params[])
{
if(Player[playerid][Admin] >= 2)
{
new selection[10];
if(sscanf(params,"s[10]",selection))
{
if(!IsPlayerSpectating[playerid])
{
SpectateOn(playerid);
}
else
{
SpectateOff(playerid);
}
return 1;
}
if(strcmp(params,"next") == 0)
{
SpectateNext(playerid);
return 1;
}
if(strcmp(params,"previous") == 0)
{
SpectatePrevious(playerid);
return 1;
}
}
return 1;
}
//edit: Oder halt die Kurzform:
CMD:spectate(playerid,params[])
{
if(Player[playerid][Admin] >= 2)
{
new selection[10];
if(sscanf(params,"s[10]",selection))
{
if(!IsPlayerSpectating[playerid]) return SpectateOn(playerid);
else return SpectateOff(playerid);
}
if(strcmp(params,"next") == 0) return SpectateNext(playerid);
if(strcmp(params,"previous") == 0) return SpectatePrevious(playerid);
}
return 1;
}
CMD:spectate(playerid,params[])
{
if(Player[playerid][Admin] <= 2) return 1; // Oder Funktion (z.B. SendClientMessage)
new selection[10];
if(!sscanf(params,"s[10]",selection))
{
if(!IsPlayerSpectating[playerid]) SpectateOn(playerid);
else SpectateOff(playerid);
}
if(!strcmp(selection,"next",true)) return SpectateNext(playerid);
if(!strcmp(selection,"previous",true)) return SpectatePrevious(playerid);
return 1;
}
Ungetestet, müsste aber gehen.
Gibt es eigentlich einen Unterschied zwischen der kurzen und längeren Art?
WÜrde mich mal interessieren ob es was mit den Ressourcen ausmacht, falls ja soltle ich mich mal
umstellen
edit://
Bekomme jetzt Warnings á la ...Should return a vakue.
Ich musste bei den FUnktionen ein return 1; hinzufügen, jedoch werden die immernoch auf einmal ausgeführt.
Welchen hast du den genommen?
Welchen hast du den genommen?
Deine Kurzform:
CMD:spectate(playerid,params[])
{
if(Player[playerid][Admin] >= 2)
{
new selection[10];
if(sscanf(params,"s[10]",selection))
{
if(!IsPlayerSpectating[playerid]) return SpectateOn(playerid);
else return SpectateOff(playerid);
}
if(strcmp(params,"next") == 0) return SpectateNext(playerid);
if(strcmp(params,"previous") == 0) return SpectatePrevious(playerid);
}
return 1;
}
Das ist identisch mit der Langform.