ZitatWie kann mann z.b. mit sscanf ein command machen mit der [playerid] [licenses] [Grund]
if(sccanf(params, "uus", pID, license, string)) // Der String ist der Grund
ZitatWie kann mann z.b. mit sscanf ein command machen mit der [playerid] [licenses] [Grund]
if(sccanf(params, "uus", pID, license, string)) // Der String ist der Grund
if(sccanf(params, "uus", pID, license, string)) // Der String ist der Grund
Wieso denn uus
Zitat[playerid] [licenses] [Grund]
Kommt darauf an,wass du mit licenses meinst. Könnte man sowohl mit einer Zahl als auch einem Text realisieren.
Beispiel für Zahl wäre z.B.
1 = Führerschein-Klasse B // PKW
2 = Führerschein-Klasse A // Motorrad
3 = Führerschein-Klasse C // LKW
...
new
pID,
iLicence,
sGrund[32];
if(sccanf(params, "uis", pID, iLicence, sGrund))
Mit einem String ist das ähnlich.
new
pID,
sLicence[32],
sGrund[32];
if(sccanf(params, "uss", pID, sLicence, sGrund))
An dieser Stelle müsstest du aber wohl mit strcmp arbeiten. Denn du willst bestimmt aus dem String eine Variable ableiten bzw am String erkennen, mit welcher Variable du arbeiten sollst.
Okay ich würde es so machen..
new
pID,
iLicence,
sGrund[32];
if(sccanf(params, "uis", pID, iLicence, sGrund))
Wie kann ich aber jetzt die iLicence festelegen und sGrund?
also z.b. pID= 2 iLicence = 2 sGrund = Falsche Straßenseite
also iLicence und sGrund fest gesetzt sein..
wie kann ich dass machen?
lg M4rciii
Das hat jetzt weniger mit dem Tutorial zu tun. Verstehe auch nichtwas du meinst bzw möchtest. Machst dafür am besten einen eigenen Thread.
Moin,
dcmd_hkaufen(playerid, params[])
{
for(new h = 1,string[125],sUnterbefehl[16]; h < MAX_HOUSE; h ++)
{
if(IsPlayerInRangeOfPoint(playerid,5.0,Haus[h][hX],Haus[h][hY],Haus[h][hZ]) && Haus[h][bereit] == 0)
{
if(sscanf(params,"s",sUnterbefehl)){
SendClientMessage(playerid,COLOR_RED,"Benutze: /hkaufen [Premium/Normal]");
}
if(strfind(sUnterbefehl, "Premium", true) != -1)
{
GetPlayerName(playerid,pName,sizeof pName);
SendClientMessage(playerid,COLOR_YELLOW,"Du hast das Haus für Premiumpunkte gekauft.");
Spieler[playerid][lastx] = Haus[h][hX];
Spieler[playerid][lasty] = Haus[h][hY];
Spieler[playerid][lastz] = Haus[h][hZ];
strmid(Haus[h][besitzer], pName,0, sizeof(pName)-1, MAX_PLAYER_NAME);
DestroyPickup(Haus[h][ID]);
Delete3DTextLabel(Haus[h][hlabel]);
format(string,sizeof string,"Besitzer: %s\nLevel: %d\nPreis: %d $\nPremiumpunkte: %d",Haus[h][besitzer],Haus[h][level],Haus[h][preis],Haus[h][punkte]);
Haus[h][hlabel] = Create3DTextLabel(string,COLOR_WHITE,Haus[h][hX],Haus[h][hY],Haus[h][hZ]+0.75,40.0,0,1);
Haus[h][ID] = CreatePickup(1272, 1, Haus[h][hX], Haus[h][hY], Haus[h][hZ], -1);
}
else if(strfind(sUnterbefehl, "Normal", true) != -1)
{
GetPlayerName(playerid,pName,sizeof pName);
SendClientMessage(playerid,COLOR_YELLOW,"Du hast das Haus für Geld gekauft.");
Spieler[playerid][lastx] = Haus[h][hX];
Spieler[playerid][lasty] = Haus[h][hY];
Spieler[playerid][lastz] = Haus[h][hZ];
DestroyPickup(Haus[h][ID]);
Delete3DTextLabel(Haus[h][hlabel]);
strmid(Haus[h][besitzer], pName,0, sizeof(pName)-1, MAX_PLAYER_NAME);
format(string,sizeof string,"Besitzer: %s\nLevel: %d\nPreis: %d $\nPremiumpunkte: %d",Haus[h][besitzer],Haus[h][level],Haus[h][preis],Haus[h][punkte]);
Haus[h][hlabel] = Create3DTextLabel(string,COLOR_WHITE,Haus[h][hX],Haus[h][hY],Haus[h][hZ]+0.75,40.0,0,1);
Haus[h][ID] = CreatePickup(1272, 1, Haus[h][hX], Haus[h][hY], Haus[h][hZ], -1);
}
}
}
return 1;
}
Immer wenn dieser Befehl eingeben wird, kommt die Nachricht vom Server das er diesen Befehl nicht kennt....
EDIT: Fehler behoben, neue Frage
Zeig die zugehörige DCMD-Zeile unter OnPlayerCommandText,sonst kann man nicht sagen,ob der Fehler nicht schon dort liegt.
Wieso fängst du überhaupt bei h = 1 an zu zählen in der Schleife ?
ZitatEDIT: Fehler behoben, neue Frage
Das heisst ?
Hey,
lag an meiner unachtsamkeit -.- der Server hat den Befehl nicht gefunden weil ich statt 7 Buchstaben ausversehen 6 angegeben habe.
Trotzdem danke
MfG: Apoolecu
Was ist daran falsch ?
dcmd_offlinearrest(playerid,params[])
{
new psName[24], pZeit, Knast, string[128];
if(sscanf(params, "dds",pZeit,Knast,psName))
{
return SendClientMessage(playerid,COLOR_BENUTZETEXT,"Benutze: /offlinearrest [Zeit in Minuten] [1 = Knast | 2 = Prison] [Spieler-Name]");
}
if(IsPlayerConnected(playerid))
{
if(IsACop(playerid) && OnDuty[playerid] == 1)
{
for(new i = 0; i < sizeof(//Zensiert); i++)
{
if(Erstellt[i] == 1)
{
if(IsPlayerInRangeOfPoint(playerid, 10,X,Y,Z))
{
if(strcmp(psName, OfflineName, true) == 0)
{
if(//Zensiert)
{
if(pZeit < -1 || pZeit <= 0 || pZeit > 2000)
{
SendClientMessage(playerid,COLOR_BENUTZETEXT,"Die Zeit muss mindestens 1 betragen.");
return 1;
}
if(Knast == 2 || Knast == 1)
{
if(Knast == 2)
{
//Hier setzte er den knast
}
if(Knast == 1)
{
//Hier setzte er den knast
}
format(string, sizeof(string), "* Du hast %s für %d Minuten eingesperrt!", psName, pZeit);
SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
format(string, sizeof(string), "Funk: %s wurde für %d Minuten eingesperrt.(Offlinearrest)", psName, pZeit);
SendCopMessage(COLOR_DBLUE,string);
new sendername[MAX_PLAYER_NAME];
GetPlayerName(playerid, sendername, sizeof(sendername));
if(PlayerInfo[playerid][pMember] == 7 || PlayerInfo[playerid][pLeader] == 7)
{
format(string, sizeof(string), "<< FBI Agent %s hat den Verdächtigen %s eingesperrt >>", sendername, psName);
SendClientMessageToAll(COLOR_LIGHTRED, string);
}
else if(PlayerInfo[playerid][pMember] == 14 || PlayerInfo[playerid][pLeader] == 14)
{
format(string, sizeof(string), "<< LSPD Officer %s hat den Verdächtigen %s eingesperrt >>", sendername, psName);
SendClientMessageToAll(COLOR_LIGHTRED, string);
}
else if(PlayerInfo[playerid][pMember] == 16 || PlayerInfo[playerid][pLeader] == 16)
{
format(string, sizeof(string), "<< SFPD Officer %s hat den Verdächtigen %s eingesperrt >>", sendername, psName);
SendClientMessageToAll(COLOR_LIGHTRED, string);
}
else if(PlayerInfo[playerid][pMember] == 1 || PlayerInfo[playerid][pLeader] == 1)
{
format(string, sizeof(string), "<< LVPD Officer %s hat den Verdächtigen %s eingesperrt >>", sendername, psName);
SendClientMessageToAll(COLOR_LIGHTRED, string);
}
return 1;
}
else
{
SendClientMessage(playerid,COLOR_BENUTZETEXT,"Du kannst nur den Knast 1 oder 2 Auswählen!");
return 1;
}
}
else
{
SendClientMessage(playerid,COLOR_BENUTZETEXT,"Dieser Spieler hatte keine Wanteds oder wurde schon arrestet.");
return 1;
}
}
else
{
SendClientMessage(playerid, COLOR_BENUTZETEXT, "Name Stimmt nicht Überein.");
}
}
}
}
}
else
{
SendClientMessage(playerid, COLOR_BENUTZETEXT, "Du bist kein Polizist oder nicht OnDuty !");
}
}
return 1;
}
wenn ich z.b. /offlinearrest 5 1 asdashdgasdgasjdgasdgasdgashdgasdgasda eingebe Crasht der server. ohne da sich eine Meldung bekommen von wegen ich sein kein cop oder nicht onduty.
kann mir bitte jemand helfen ?
Der Server sollte nicht crashen,er sollte nur die Funktion nicht vollständig ausführen.
psName kann nur 23 Zeichen fassen, "asdashdgasdgasjdgasdgasdgashdgasdgasda" ist definitiv länger.
Hast das Tutorial wohl nicht ganz durchgearbeitet.Es gibt einen extra Platzhalter für Spieler,egal ob dort Name oder ID eingegeben wird.Das ist u. Je nachdem ob du das Plugin benutzt,wäre auch r möglich.
Kleine Anmerkungen.
Danke für das Tutorial (10/10)
Aber ich hätte eine Frage.
Kann man Optionale Integers machen?
(/veh [ID] (color 1) (color 2) () Optional [] Benötigt (color 1 / 2 wird wenn nicht angegeben automatisch generiert))
Ich mach mal einen Auf totengräber damit ich kein neues Thema starten muss
Bei einen string kann man ja "z" als optimalen wert nehmen
Wie ist das bei Intgern?
Das selbe oder ist es anders?
Bei einen string kann man ja "z" als optimalen wert nehmen
Wie ist das bei Intgern?
Das selbe oder ist es anders?
Ich verstehe deine Frage nicht, kannst du das mal pls anders erklären
Sagen wa mal das
Ich gebe /waffe 150 ein
Ich habe aber auch vor, das wenn ich nur /waffe eingebe das es dann auch funktioniert
Verstehen du?
Mit Z kann man Optimale strings machen sprich gibst du danach nix ein soll was vordefiniertes kommen
If(sscanf(...)) Standartwert=10;
{
}
Wenn der Befehl ohne Parameter eingegeben wird und sscanf fault, setzt du einfach den standartwert.
Was du allerdings mit z meinst weiß ich ned...
Mit Z kann man Optimale strings machen
Haha nicht optimale, sondern optionale
und Sry4pwn hat die Lösung schon gesagt nur falsch gemacht, es geht so :
new wert;
if(sscanf(params,"i",wert)) wert = 10;
//Hier keine Klammern mehr ^^
mfg.