mhm sollte eigentlich nicht am dialog menu liegen ich hatte auch eins das ging (kann mich auch irren)
vllt hast du einjen timer drin der das verzögert?
mhm sollte eigentlich nicht am dialog menu liegen ich hatte auch eins das ging (kann mich auch irren)
vllt hast du einjen timer drin der das verzögert?
hey
weis jemand warum das nich geht oder obs ne andere zeile gibt um spieler rauszuschmeißen
hier die stelle
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
if(vehicleid == fs1)
{
if(drivelesson[playerid] == 1)
{
}
else
{
RemovePlayerFromVehicle(playerid);
SendClientMessage(playerid,rot,"Du bist kein Fahrschüler");
}
}
}
hi
ich bräuchte schnell die ispassenger abfrage
also es soll halt bei
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
abgefragt werden ob der spieler ein beifahrer ist ich brauch das für mein führerschein system
thx
EDIT:
hat sich erledigt xD
if(ispassenger)
einfacher gehts nich oder
danke klappt super
hey
kann man bei der user.ini auch nach dem key abfragen?
also praktisch eine if-abfrage (oder so) bei der nur abgefragt ob zb. bei admin=1338 steht, oder ob admin=0 steht..
sollte es doch geben oder?
thx
danke ich werd das noch testen
ja ich versteh das genau das mit dem string hat mir gefehlt schätz ich
EDIT: danke gold jetzt gehts perfekt
EDIT vom EDIT: kann mir noch jemand die abfrage sagen, also eine if abfrage oder so bei der eben überprüft wird ob bei admin 1338 oder 0 steht
so das problem is großteils behoben
wenn ich die zeile
dini_Set("/Spieler/[LSDR]Bl4der.ini", "Admin", "1338");
schreibe wird in der userdatei von [LSDR]Bl4der Admin=1338 gespeichert...
aber dann hab ich ja eine bestimmte datei.
ich will aber dass das admin=1338 immer in der userdatei von dem user gespeichert wird, der zum admin gewählt werden soll, also von der angegebenen id...
kann mir das jemand posten?
ausserdem wäre noch gut zu wissen wie die abfrage aussieht also wo abgefragt wird ob admin=1338 da drin steht
thx
EDIT:
dcmd_makeadmin(playerid,params[])
{
if(!strlen(params))
{
return SendClientMessage(playerid,rot,"Nutze: /makeadmin [playerid]");
}
new
pID=strval(params);
if(!IsPlayerConnected(pID))
{
return SendClientMessage(playerid,rot,"Kein Spieler mit angegebener ID Online");
}
dini_Set("/Spieler/[LSDR]Bl4der.ini", "Admin", "1338");
SendClientMessage(playerid,grün,"Der spieler wurde zum Admin gemacht");
return 1;
}
das is mein makeadmin command
hi breadfischer...
ich möcht mir grad ein adminsystem zusammenscripten...
das sollte so aussehen das ich beim makeadmin command in die user datei admin=1338 reinschreibe und danach bei den befehlen halt abfrage ob das da drin steht.
hier is mein scriptausschnitt
dcmd_makeadmin(playerid,params[])
{
if(!strlen(params))
{
return SendClientMessage(playerid,rot,"Nutze: /makeadmin [playerid]");
}
new
pID=strval(params);
if(!IsPlayerConnected(pID))
{
return SendClientMessage(playerid,rot,"Kein Spieler mit angegebener ID Online");
}
dini_IntSet("/Spieler/file.ini", "Admin", "1338");
SendClientMessage(playerid,grün,"Der spieler wurde zum Admin gemacht");
return 1;
}
das einzige problem damit ist, dass es immer wieder in die user datei admin=0 reinschreibt...weis jemand wieso würd mir echt weiterhelfen
wie baue ich die dcmd und sccanf in den gm ein? also es funktioniert wenn ich es als filterscript unter onplayercommandtext mach, aber wenn ichs in den gm reinmachen will muss ichs ja irgendwie unter die commands ohne parameter bekommen...kann da jemand ein scriptbeispiel posten, oder sonst helfen?
hab auch schon überlegt ein eigenes public dafür zu erstellen public dcmd oder so ähnlich
thx
danke euch jetzt funktionierts perfekt
die dcmd's funktionieren dann nich...
hab immer jeweils die eine dcmd zeile ins onplayercommand public unten reingeschrieben, und den rest des dcmds ausserhalb eines publics...so geht es aber nicht
wie kann ich das dcmd in mein gm einbauen?
ja ich probier das jetzt gleich mal es gibt mal keine errors..
die normalen commands sind ja dann oben drüber, und von jedem dcmd command is nur noch 1 zeile im public
EDIT: So gehts leider nicht
also wenn ich das richtig verstehe hp, dann muss ich nur die zeile dcmd(kick,4,cmdtext); unter das commandpublic einfach reinschreiben und den rest zum kick dcmd irgendwo ins script reinmachen?
hä?
ich hatte das immer so
public OnPlayerCommandText(playerid, cmdtext[])
{
dcmd(kick,4,cmdtext);
return 0;
}
dcmd_kick(playerid,params[]) {
new
sGrund[128],
pID;
if(sscanf(params, "ds",pID,sGrund)) {
return SendClientMessage(playerid,COLOR_RED,"USAGE: /kick [playerid] [grund]");
}
if(!IsPlayerConnected(pID)) {
return SendClientMessage(playerid,COLOR_RED,"Kein Spieler mit angegebener ID Online");
}
new
ThePlayer[MAX_PLAYER_NAME],
string[128];
GetPlayerName(pID,ThePlayer,sizeof(ThePlayer));
format(string,sizeof(string),"%s (ID %d) wurde vom Server gekickt,Grund: %s",ThePlayer,pID,sGrund);
Kick(pID);
return 1;
}
wo kann ich sie sonst reinmachen?
hey
also ich hab ein kleines problem
ich benutze in meinem selfmade 1. die ganzen normalen commands...und für die parameter benutze ich dcmd
das problem ist wie bekomme ich beides in das onplayercommandtext public rein?
deswegen wollte ich ein neues public erstellen...
onplayerdcmdcommand oder sowas ähnliches
ich hab nämlich keine lust mehr auf blöde fiterscripts
kann mir jemand erklären wie man ein solches public erstellt
hi
also ich bräuchte bitte schnelle hilfe für meinen selfmade
ich hab im script drinne dass der spieler nach seinem tod ans krankenhaus kommt,
public OnPlayerDeath(playerid, killerid, reason)
{
SetPlayerPos(playerid,1108.6257,-1796.3427,16.5938);
SendClientMessage(playerid,COLOR_RED,"Dein Arztbesuch kostet dich $200");
SetPlayerHealth(playerid, 100.0);
GivePlayerMoney(playerid,-200);
SetPlayerWantedLevel(killerid,2);
return 1;
}
es funktioniert soweit, also die nachricht wird angezeigt, das leben aufgefüllt, die 200 euro abgezogen...
blos kommt der spieler immer wieder zurück zu dem spawn seiner fraktion...
kennt das problem jemand oder kann mir helfen?
danke schonmal
shorty
das untere hat damit nichts zu tuhn...wenn du den oberen teil genau so drin hast wie du ihn gepostet hast, haste nur die klammer vergessen
{
dcmd(kick,4,cmdtext);
return 0;
}
noch ein tipp...
mach die commands bei denen mann die id angeben muss in ein filterscript...ich bekomme auch errors wenn ichs in meinen gm reinmach..
poste mal die zeilen deiner class selection..zu den commands könnte sein das die nich funcen weil die classauswahl n bug hat oder sonst was
das is nich schwehr
unter onplayercommandtext
{
dcmd(kick,4,cmdtext);
return 0;
}
dcmd_kick(playerid,params[]) {
new
sGrund[128],
pID;
if(sscanf(params, "ds",pID,sGrund)) {
return SendClientMessage(playerid,COLOR_RED,"USAGE: /kick [playerid] [grund]");
}
if(!IsPlayerConnected(pID)) {
return SendClientMessage(playerid,COLOR_RED,"Kein Spieler mit angegebener ID Online");
}
new
ThePlayer[MAX_PLAYER_NAME],
string[128];
GetPlayerName(pID,ThePlayer,sizeof(ThePlayer));
format(string,sizeof(string),"%s (ID %d) wurde vom Server gekickt,Grund: %s",ThePlayer,pID,sGrund);
Kick(pID);
return 1;
}
*/
und um dcmd zu definieren noch das einfach ganz unten ins script reinkopieren das is die definierung
/*----------------------------------------------------------------------------*-
Function:
sscanf
Params:
string[] - String to extract parameters from.
format[] - Parameter types to get.
{Float,_}:... - Data return variables.
Return:
0 - Successful, not 0 - fail.
Notes:
A fail is either insufficient variables to store the data or insufficient
data for the format string - excess data is disgarded.
A string in the middle of the input data is extracted as a single word, a
string at the end of the data collects all remaining text.
The format codes are:
c - A character.
d, i - An integer.
h, x - A hex number (e.g. a colour).
f - A float.
s - A string.
z - An optional string.
pX - An additional delimiter where X is another character.
'' - Encloses a litteral string to locate.
u - User, takes a name, part of a name or an id and returns the id if they're connected.
Now has IsNumeric integrated into the code.
Added additional delimiters in the form of all whitespace and an
optioanlly specified one in the format string.
-*----------------------------------------------------------------------------*/
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;
}
und zu den defines noch
#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
das waS ICH jetzt geschrieben hab, kannsch reinkopieren und schon hast n kickbefehl