Abend Leute
Ich hätte gerne dass man mit /put eine Person in mein Auto ziehen kann.
Dazu sollte man kein Cop sein müssen & er auch nicht in der Nähe.
Also keine konkreten Bedingungen. Einfach ins Auto ziehen.
lg.Mario
Abend Leute
Ich hätte gerne dass man mit /put eine Person in mein Auto ziehen kann.
Dazu sollte man kein Cop sein müssen & er auch nicht in der Nähe.
Also keine konkreten Bedingungen. Einfach ins Auto ziehen.
lg.Mario
PutPlayerInVehicle(playerid,vehicleid,seatid)
heisst das zauberwort
Ist doch leicht!;)
ocmd:put(playerid,params[])
{
new pID;
if(sscanf(params,"u",pID))
{
return SendClientMessage(playerid,COLOR_GREY,"Bitte gebe die PlayerID ein!");
}
if(!IsPlayerConnected(pID))
{
return SendClientMessage(playerid,COLOR_GREY,"Spieler ist nicht online!");
}
PutPlayerInVehicle(pID,GetPlayerVehicleID(playerid),1);
return 1;
}
Hab ich grad von Freihand geschrieben also ungetestet!
Dürfte aber funktionieren sofern Du ocmd und sscanf benutzt!
Mfg, Hardcore
//Edit:
Code verbessert
//Edit2:
Code nochmal verbessert..sry
PutPlayerInVehicle(playerid,vehicleid,seatid)
heisst das zauberwort
ok & wie kann ich das in einem Befehl verpacken?
also /put
Wenn ich das so mach kann ich nicht die Playerid auswählen oder?
Kann ich das so lassen?
if(strcmp(cmdtext,"/put",true)==0) { new carid = GetPlayerVehicleID(playerid); PutPlayerInVehicle(playerid,carid, 1); }
Falke
1. Doppelpost ist verboten!
2. Ich hab's Dir doch geschrieben wie es funktioniert!
Hier haste SSCANF
stock sscanf(string[], format[], {Float,_}:...)
{
#if defined isnull
if (isnull(string))
#else
if (string[0] == 0 || (string[0] == 1 && string[1] == 0))
#endif
{
return format[0];
}
#pragma tabsize 4
new
formatPos = 0,
stringPos = 0,
paramPos = 2,
paramCount = numargs(),
delim = ' ';
while (string[stringPos] && string[stringPos] <= ' ')
{
stringPos++;
}
while (paramPos < paramCount && string[stringPos])
{
switch (format[formatPos++])
{
case '\0':
{
return 0;
}
case 'i', 'd':
{
new
neg = 1,
num = 0,
ch = string[stringPos];
if (ch == '-')
{
neg = -1;
ch = string[++stringPos];
}
do
{
stringPos++;
if ('0' <= ch <= '9')
{
num = (num * 10) + (ch - '0');
}
else
{
return -1;
}
}
while ((ch = string[stringPos]) > ' ' && ch != delim);
setarg(paramPos, 0, num * neg);
}
case 'h', 'x':
{
new
num = 0,
ch = string[stringPos];
do
{
stringPos++;
switch (ch)
{
case 'x', 'X':
{
num = 0;
continue;
}
case '0' .. '9':
{
num = (num << 4) | (ch - '0');
}
case 'a' .. 'f':
{
num = (num << 4) | (ch - ('a' - 10));
}
case 'A' .. 'F':
{
num = (num << 4) | (ch - ('A' - 10));
}
default:
{
return -1;
}
}
}
while ((ch = string[stringPos]) > ' ' && ch != delim);
setarg(paramPos, 0, num);
}
case 'c':
{
setarg(paramPos, 0, string[stringPos++]);
}
case 'f':
{
new changestr[16], changepos = 0, strpos = stringPos;
while(changepos < 16 && string[strpos] && string[strpos] != delim)
{
changestr[changepos++] = string[strpos++];
}
changestr[changepos] = '\0';
setarg(paramPos,0,_:floatstr(changestr));
}
case 'p':
{
delim = format[formatPos++];
continue;
}
case '\'':
{
new
end = formatPos - 1,
ch;
while ((ch = format[++end]) && ch != '\'') {}
if (!ch)
{
return -1;
}
format[end] = '\0';
if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)
{
if (format[end + 1])
{
return -1;
}
return 0;
}
format[end] = '\'';
stringPos = ch + (end - formatPos);
formatPos = end + 1;
}
case 'u':
{
new
end = stringPos - 1,
id = 0,
bool:num = true,
ch;
while ((ch = string[++end]) && ch != delim)
{
if (num)
{
if ('0' <= ch <= '9')
{
id = (id * 10) + (ch - '0');
}
else
{
num = false;
}
}
}
if (num && IsPlayerConnected(id))
{
setarg(paramPos, 0, id);
}
else
{
#if !defined foreach
#define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
#define __SSCANF_FOREACH__
#endif
string[end] = '\0';
num = false;
new
name[MAX_PLAYER_NAME];
id = end - stringPos;
foreach (Player, playerid)
{
GetPlayerName(playerid, name, sizeof (name));
if (!strcmp(name, string[stringPos], true, id))
{
setarg(paramPos, 0, playerid);
num = true;
break;
}
}
if (!num)
{
setarg(paramPos, 0, INVALID_PLAYER_ID);
}
string[end] = ch;
#if defined __SSCANF_FOREACH__
#undef foreach
#undef __SSCANF_FOREACH__
#endif
}
stringPos = end;
}
case 's', 'z':
{
new
i = 0,
ch;
if (format[formatPos])
{
while ((ch = string[stringPos++]) && ch != delim)
{
setarg(paramPos, i++, ch);
}
if (!i)
{
return -1;
}
}
else
{
while ((ch = string[stringPos++]))
{
setarg(paramPos, i++, ch);
}
}
stringPos--;
setarg(paramPos, i, '\0');
}
default:
{
continue;
}
}
while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ')
{
stringPos++;
}
while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' '))
{
stringPos++;
}
paramPos++;
}
do
{
if ((delim = format[formatPos++]) > ' ')
{
if (delim == '\'')
{
while ((delim = format[formatPos++]) && delim != '\'') {}
}
else if (delim != 'z')
{
return delim;
}
}
}
while (delim > ' ');
return 0;
}
kürzer:
ocmd:put(playerid,params[])
{
new pID;
if(sscanf(params,"u",pID)) return SendClientMessage(playerid,COLOR_GREY,"Bitte gebe die PlayerID ein!");
else if(IsPlayerConnected(pID)) return SendClientMessage(playerid,COLOR_GREY,"Spieler ist nicht online!");
else
{
PutPlayerInVehicle(pID,GetPlayerVehicleID(playerid),1);
}
return 1;
}
Besser:
if(strcmp(cmd, "/put", true) == 0)
{
tmp = strtok(cmdtext, idx);
if(!tmp[0])return SendClientMessage(playerid, DEINE_FARBE, "Verwendung: /put [playerid/Name]");
new pId = ReturnUser(tmp);
if(!IsPlayerConnected(pId))return SendClientmessage(playerid, DEINE_FARBE, "Dieser Spieler ist offline.");
if(!IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid, DEINE_FARBE, "Du sitzt in keinem Fahrzeug.");
PutPlayerInVehicle(pId, GetPlayerVehicleID(playerid), 1);
return true;
}
soviel besser würd ich noch nicht mal sagen sscanf ist beste
soviel besser würd ich noch nicht mal sagen sscanf ist beste
Wie mans nimmt.
Dennoch würde ich kein ocmd benutzen. Testergebnisse bestätigen das OCMD nicht so schnell ist wie im Thread erzählt wird.
Meins ist dazu noch kürzer.
MFG RFT =)