Ich war mir war im Klaren, dass er GodFather verwendet. Doch sollte ihn eben ein Sinneswandel durchfahren und er sich entscheiden, kein GF zu nehmen, helfe ich ihm gerne ;D
Beiträge von KornChief
-
-
Kann surrender nur zustimmen. Wenn es kein GF sein sollte, kann ich dir helfen
-
Klar.
Es ist allgemein so:" Wörter statt Zahlen"
zB:
enum Mahlzeiten
{
Abendessen,
Mittagessen,
Frühstück
};Nun kannst du machen:
new Gewohnheiten[MAX_PLAYERS][Mahlzeiten];
Ebenso wäre dafür möglich:
new Gewohnheiten[MAX_PLAYERS][3];Vorteil vom Enum:
- Gewohneit[playerid][Mittagessen] = 1;
statt: Gewohnheit[playerid][1] = 1;
denn weißt du nach einiger Zeit noch,was 1,oder 2, oder 0 nochmal war? Es dient, wie gesagt, zur besseren Orientierung.Allg. ist es ein Arry.
-
Vergleich das
ShowPlayerDialog(playerid,1,DIALOG_STYLE_LIST,"Teleports","Du befindest dich in /teleports /n benutze /hj für einen jump.","Schließen");
mit
ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Login to your account",s,"Login","Cancel"); ( http://wiki.sa-mp.com/wiki/ShowPlayerDialog )Dir fehlt das "Login" bzw Button Nr. 1
-
Nur der sscanf Code daran ist kompliziert ;>.
Führerschein kann man mit Grundkenntnissen, zB so:
// Ganz oben:
#define rot 0xAA3333AA
new Fuhrerschein[MAX_PLAYERS];// Unter OnPlayerCommandText
if(strcmp("/schein",cmdtext,false,7) == 0) // Einfache Variante,ausschmücken kannst denk ich selber ;D
{
new tmp[130];
tmp = zcmd(1,cmdtext);
new id = strval(tmp);
if(!strlen(tmp)) return SendClientMessage(playerid,rot,"Keine ID angegegeben!");
if(!IsPlayerConnected(id)) return SendClientMessage(playerid,rot,"Angegebene ID nicht on!");
Fuhrerschein[id] = 1;
SendClientMessage(playerid,rot,"Führerschein vergeben!");
SendClientMessage(id,rot,"Führerschein erhalten!");
return 1;
}
// Unter OnPlayerEnterVehicle
if(Fuhrerschein[playerid] == 0)
{
RemovePlayerFromVehicle(playerid);
SendClientMessage(playerid,rot,"Du hast keinen Führerschein ;D!");
}
// Und nun bei OnPlayerDisconnect
Fuhrerschein[playerid] == 0// Falls du den zcmd Cod nicht hast, hier:
zcmd(param, cmdtext[])
{
new string[128], pos, var;
format(string, sizeof(string), "%s ", cmdtext);
while((pos = strfind(string, " ", true)) != -1)
{
if(var == param) return string;
var++;
strdel(string, 0, pos + 1);
if(strcmp(string, " ", true, pos) == 0) goto end;
}
end:
string[0] = '\0';
return string;
}Teste mal
-
Du deklarierst
new vehcar;
new vehcar2;
immer wieder neu bei jedem Befehl.
Lösche dies und füg oben
enum Cars
{
vehcar,
vehcar2,
};
stock PlayCarInfo[MAX_PLAYERS][Cars]; //ersetz natürlich dann im Command vehcar mit PlayerCarInfo[playerid][vehcar] zB DestroyVehicle(PlayerCar...);// ======= oder da es nur wenige sind:
const Cars = 2;
stock PlayCarInfo[MAX_PLAYERS][Cars]; // dafür dann PlayCarInfo[playerid][0]; und 1
Teste das mal -
-
Dein Code würde wenn niemand mit dem Namen on ist und es auch KEINE ID ist 0 returnen, also playerid 0.
Return -1, dann dürfte alles passen.
hmm....sicher?
Return's:
Wenn kein Name gefunden = (Count = 1) = INVALID_PLAYER_ID;
Wenn Name gefunden = playerid;
Wenn kein Name (bzw. eine ID) = strval(string);
oder? Trotzdem geändert, thx. -
Update: Nun wird, wenn es 3 Zeichen lang ist, erst als Name hergenommen, dann als ID.
stock ReturnUser(string[])
{
static i;
new count = 0;
new len = strlen(string);
if(len >= 3)
{
while(i++<MAX_PLAYERS)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(i,name,sizeof(name));
if(strcmp(name,string,false) == 0)
{
return i;
}
else
{
if(len == 3)
{
count = 2;
}
else
{
count = 1;
}
}
}
}
else
{
return strval(string);
}
return (count == 1) ? (INVALID_PLAYER_ID) : (strval(string));
} -
Damit ein User beispielsweise "/kick 4" und "/kick Bright" kann
-
Vielen Dank, hab dennoch ein paar Fragen dazu:
if(slen < 3) return INVALID_PLAYER_ID;
Was ist, wenn er Beispielsweise eingibt: "/cmd 4" ? Durch strtok oder zcmd gibt er ja "4" oder auch " 4" als String wieder, der jedoch in diesem Fall kleiner 3 ist - somit INVALID_PLAYER_ID returnt wird, was aber nicht der Fall sein soll. Insgesamt wird ja nur "Falsch(INVALID_PLAYER_ID) - ID(durch Namen) - Falsch(INVALID_PLAYER_ID) " wiedergegeben, aber eine Zahl (bzw. die Eingabe einer ID) wird nicht berücksichtigt.
Geht es nicht zudem darum, dass das Script nicht mind. 3 Zeichen, sondern 3 Buchstaben finden soll (wodurch wir ausgehen können, dass es ein Name ist und weitere Überprüfung der Zeichen nicht nötig ist) und dann diesen mit den Namen vergleichen soll und schließlich dessen ID wiedergeben soll?
Bitte klärt mir auf -
Hallo,
da ich den "ReturnUser" Code nicht gefunden habe, habe ich selbst mal versucht es scripten und nun möchte ich wissen, ob er auf funktionieren würde.
Es soll bewirken, dass der eingegebene String (bei strtok/zcmd üblich "tmp" genannt") überprüft wird, ob....
... er nur eine Zahl ist (diese wird dann zurückgegeben)
... ein Name (wenn der Name einem User zugeordnet werden kann,wird dessen ID zurückgegeben, wenn nicht, wird zurückgegeben, dass diese falsch ist).
stock ReturnUser(string[])
{
static i;
new ID;
new s = 0;
new Val = 0;
for(;s < strlen(string); s++)
{
if(string[s] >= 'A' && string[s] <= 'Z' || string[s] >= 'a' && string[s] <= 'z' || string[s] == '[' || string[s] == ']' || string[s] == '_')
{
Namen++;
}
if(Namen == 3)
{
Val = 1;
break;
}
}
if(Val == 1)
{
i = 0;
while(i++< MAX_PLAYERS)
{
new name[MAX_PLAyER_NAME];
GetPlayerName(i,name,sizeof(name));
if(strcmp(string,name,false) == 0)
{
Val = 2
ID = i;
break;
}
else
{
Val = 3;
}
}
}
return (Val == 2) ? (ID) : (Val == 3) ? (INVALID_PLAYER_ID) : (Val == 0) ? (strval(strings));
}// Keiner eine Lösung?
-
-
Finde gut, dass jemand soetwas macht, nur strtok ist nicht allzuvorteilhaft..
-
GodFather? oder Selfmade? Ist ja nicht im "Godfather" Bereich....
-
Ich glaube, dass dies eine sehr einfache und geschickte Lösung ist, denn wo sonst (ausgenommen meine 2 genannten CallBacks) sollte man überprüfen, ob jemand in ein Auto steigt (bzw. ist) - ein Timer, der das prüft, wäre ungeeignet. u könntest statt "if" nur "?" verwenden, läuft aber auf's selber hinaus
-
Ein Ansatz wäre bei ... public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger) oder public OnPlayerStateChange(playerid, newstate, oldstate)
bei der Abfrage zB
if(!Fahrstunde[playerid] && !IsPlayerBauer (playerid)) //wenn er NICHT Bauer ist und wenn er NICHT in einer Fahrstunde ist
{
RemovePlayerFromVehicle(playerid);
SendClientMessage(playerid,FARBE,"Du bist kein Bauer!"); //bzw. kein Fahrlehrer, der eine Fahrstunde macht
}Natürlich brauchst du dann auch new bool:Fahrstunde[MAX_PLAYERS];
Beim CMD eben wie "/fahrstunde ID" das Fahrstunde[ID] = true; setzen. Unterscheidet sich je nach System (dcmd,zcmd,strtok,..). -
Würde mich auf die Fortsetzung freuen, DMA.
-
Aber was soll man machen?
Diese Baustellen sind Müll, meiner Meinung nach.Stunt Maps
-
Schön, 10/10:) wenn alles klappt