na ja hab jetzt nicht alles Durch gegukt aber Hier mla was gutes
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
new output1[40];
format(output1,40,"** vehicleid: %d modelid: %d",vehicleid,GetVehicleModel(vehicleid));
SendClientMessage(playerid,Farbe,output1);
return 1;
}
Nützliche Codeschnipsel
- breadfish
- Geschlossen
In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
jo jetzt noch Kürzer
unter
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
SendEx(playerid,weiß,"**VehicleId:%d ModelId:%d",vehicleid,GetVehicleModel(vehicleid));
mit der Funktion(nich von mir habs nur bischen gemodet )
SendClientMessageEx(playerid, color, string[], {Float,_}:...);
SendClientMessageEx(playerid, color, string[], {Float,_}:...); //hier lang xD ||<--von[ Rafelder ] rest von seinem selbst gemacht
SendEx(playerid, color, string[], {Float,_}:...); //hier lurz
SendClientMessageToAllEx(playerid, color, string[], {Float,_}:...); //lang
SendToAllEx(playerid, color, string[], {Float,_}:...); //kurz
jo ist eig ne ini aber muste auf txt umwandeln toffes Uploud ding da aber egal -
So, dann poste ich auch mal eine Funktion.
Damit kann man ganz leicht überprüfen ob der Spieler den Clantag hat, nützlich für DM Server.
Code:
forward DoesPlayerHasTag(playerid,tag[])
public DoesPlayerHasTag(playerid,tag[]) {
new name[MAX_PLAYER_NAME]; GetPlayerName(playerid,name,sizeof(name));
return (strfind(name,tag,true) != -1) ? 1 : 0;
}Anwendung:
if(strcmp(cmdtext, "/ganghaus", true) == 0)
{
if(DoesPlayerHasTag(playerid,"[GR]")
{
SendClientMessage(playerid, 0xFF00AAFF, "Du darfst in das Haus");
}
return 1;
}P.S.: Der Code ist nicht von mir
-
Naja, ist halt immer ne Sache mit einem Return-Wert von entweder 1 oder 0, da würde der Übersicht halber eher ein bool in Frage kommen.
bool:PlayerHasTag(playerid, tag[]);
bool:PlayerHasTag(playerid, tag[])
{
new
gName[MAX_PLAYER_NAME];
GetPlayerName(playerid, gName, sizeofgName));
return (strfind(gName, tag, true) != -1) ? true : false;
}Kommt im Prinzip auf (fast) dasselbe hinaus, mir gefällt aber letztere Variante besser.
/* IsPlayerIp(playerid, ip[] = "127.0.0.1") {
new gIp[16]; GetPlayerIp(playerid, gIp, sizeof(gIp));
if(!strcmp(gIp, ip, true)) return true;
return false;
}Anwendungsbeispiel:
public OnPlayerConnect(playerid)
{
if(IsPlayerIp(playerid, "127.0.0.1")) return SendClientMessage(playerid, 0xFFAAAAFF, "Willkommen Master >:D");
return 1;
} -
getstr(format[], const getfrom[], edit[], const pos, const sizet = sizeof edit)
{
new a, b, c = 0;
for(new i = 0; i < strlen(getfrom); i++)
{
if(i+1 == strlen(getfrom))
{
i = strlen(getfrom);
goto FnEndAccept;
}
if(b < strlen(format))
{
if(format[b] == '%')
{
if(b+1 < strlen(format))
{
++b;
switch(format[b])
{
case 'w':
{
format[b] = ' ';
}
case 't':
{
format[b] = '\t';
}
}
}
}
if(getfrom[i] == format[b])
{
++b;
if(a < pos)
{
c = i + 1;
++a;
}
else if(a == pos)
{
FnEndAccept:
for(new j = c, q = 0; j < i; j++, q++)
{
if(j < sizet)
{
edit[q] = getfrom[j];
}
}
return 1;
}
}
}
}
return 0;
}Praktische Mustersuche.
-
Sehr gut für Leute, die nachm GC der CJ Skin nervt: (Eher für Fun oder Freeroam Server gedacht)
if( strcmp( cmdtext, "/andererskin", true) == 0)
{
SetPlayerSkin(playerid, 164);
}// PROCESS OTHER COMMANDS
return 0;
}Einfach bei OnPlayerCommands unten ranhägen
Ihr könnt auch andere ID´s bei SetPlayerSkin einsetzen, nur is das mein Lieblins-Skin
Command könnt ihr auch ändern, is mir Schnuppe -
Immer nitro im car haben
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger) {
darunter
SetTimer("NitroReset", 5000, 1);//5Sekunden nach wie viel zeit man nitro bekommen solldann ganz unter oder so auserhalb von nem public
forward NitroReset();
public NitroReset()
{
for(new i = 0; i<MAX_PLAYERS; i++)
{
if (IsPlayerInAnyVehicle(i)){
if(Nitro(GetVehicleModel(GetPlayerVehicleID(i)))) {
new vehicle = GetPlayerVehicleID(i);
AddVehicleComponent(vehicle, 1010);
}
}}
}dann ganz unten oder auch wieder auserhalb von nem public
stock Nitro(vehicleid)
{
if(vehicleid==581||vehicleid==523||vehicleid==462||vehicleid==521||vehicleid ==463|| vehicleid==522||vehicleid==461||vehicleid==448
|| vehicleid == 468 || vehicleid == 586 || vehicleid == 509 || vehicleid == 481 || vehicleid == 510
|| vehicleid == 472 || vehicleid == 473 || vehicleid == 493 || vehicleid == 595 || vehicleid == 484
|| vehicleid == 430 || vehicleid == 453 || vehicleid == 452 || vehicleid == 446 || vehicleid == 454
|| vehicleid == 590 || vehicleid == 569 || vehicleid == 537 || vehicleid == 538 || vehicleid == 570 || vehicleid == 449) {
return 1; }
else return 0; }Funktioniert perfekt bei mir
und noch paar stocks
Spoiler anzeigen 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':
{
setarg(paramPos, 0, _:floatstr(string[stringPos]));
}
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;
}Spoiler anzeigen stock strget(strx[], pos, search = ' ') {
new arg, ret[128], idxx;
for (new i = 0; i < strlen(strx); i++) {
if(strx[i] == search || i == strlen(strx) || strx[i + 1] == 10) {
arg++;
if (arg == pos + 1){
ret[i-idxx] = EOS;
return ret;
} else if (arg == pos)
idxx= i+1;
}
else if (arg == pos)
ret[i - idxx] = strx[i];
}
return ret;
}Spoiler anzeigen stock IsNumeric(string[])
{
for (new i = 0, j = strlen(string); i < j; i++)
{
if (string[i] > '9' || string[i] < '0') return 0;
}
return 1;
}
stock ReturnPlayerID(PlayerName[])
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(strfind(pName(i),PlayerName,true)!=-1) return i;
}
}
return INVALID_PLAYER_ID;
}Spoiler anzeigen public PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z)
{
if(IsPlayerConnected(playerid))
{
new Float:oldposx, Float:oldposy, Float:oldposz;
new Float:tempposx, Float:tempposy, Float:tempposz;
GetPlayerPos(playerid, oldposx, oldposy, oldposz);
tempposx = (oldposx -x);
tempposy = (oldposy -y);
tempposz = (oldposz -z);
if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
{
return 1;
}
}
return 0;
} -
da geht alles verkehrt rumm. boote und bikes haben nitro = crash und autos und wo nitro haben sollten ist keins xD
// das es richtig geht müsst ihr:
forward NitroReset();
public NitroReset()
{
for(new i = 0; i<MAX_PLAYERS; i++)
{
if (IsPlayerInAnyVehicle(i)){
if(Nitro(GetVehicleModel(GetPlayerVehicleID(i)))) {
new vehicle = GetPlayerVehicleID(i);
AddVehicleComponent(vehicle, 1010);
}
}}
}
in:
forward NitroReset();
public NitroReset()
{
for(new i = 0; i<MAX_PLAYERS; i++)
{
if (IsPlayerInAnyVehicle(i)){
if(Nitro(GetVehicleModel(GetPlayerVehicleID(i)))) {} else {
new vehicle = GetPlayerVehicleID(i);
AddVehicleComponent(vehicle, 1010);
}
}}
}
machen^^ -
Ganz tolle Sache , find ich auch sehr Lustig , vllt braucht es jemand
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if (newkeys & KEY_FIRE)
{
if(GetPlayerSpecialAction(playerid) == SPECIAL_ACTION_DRINK_BEER)SetPlayerDrunkLevel(playerid,GetPlayerDrunkLevel(playerid)+2000);
if(GetPlayerSpecialAction(playerid) == SPECIAL_ACTION_DRINK_WINE)SetPlayerDrunkLevel(playerid,GetPlayerDrunkLevel(playerid)+2500);
}
}new cmd[128],tmp[128],idx;
if (strcmp(cmd, "/trinken", true) ==0 )
{
tmp = strtok(cmdtext,idx);
if(strcmp(tmp,"bier",true))SetPlayerSpecialAction(playerid,SPECIAL_ACTION_DRINK_BEER);
else if(strcmp(tmp,"wein",true))SetPlayerSpecialAction(playerid,SPECIAL_ACTION_DRINK_WINE);
else
{
SendClientMessage(playerid,0xFFFFFFFF,"Nutze: /trinken bier/wein");
}
return 1;
}Habs nich getestet aber müsste gehen , Viel Spaß damit.
- strtok wird gebraucht
-
da geht alles verkehrt rumm. boote und bikes haben nitro = crash und autos und wo nitro haben sollten ist keins xD
// das es richtig geht müsst ihr:
forward NitroReset();
public NitroReset()
{
for(new i = 0; i<MAX_PLAYERS; i++)
{
if (IsPlayerInAnyVehicle(i)){
if(Nitro(GetVehicleModel(GetPlayerVehicleID(i)))) {
new vehicle = GetPlayerVehicleID(i);
AddVehicleComponent(vehicle, 1010);
}
}}
}
in:
forward NitroReset();
public NitroReset()
{
for(new i = 0; i<MAX_PLAYERS; i++)
{
if (IsPlayerInAnyVehicle(i)){
if(Nitro(GetVehicleModel(GetPlayerVehicleID(i)))) {} else {
new vehicle = GetPlayerVehicleID(i);
AddVehicleComponent(vehicle, 1010);
}
}}
}
machen^^Ja, und wer hat des gemacht xD
-
stock GetPlayerIDbyIP(ip[]) {
new
_ip[16],
i,
player = -1;
for(;i<MAX_PLAYERS;i++) {
if(GetPlayerIp(i, _ip, sizeof(_ip))) {
if(!strcmp(_ip, ip, true)) {
player = i;
break;
}
}
}
return player;
}Was kleines.
-
Um zu überprüfen ob in der Nähe von dem Spieler ein Wagen ist.
Für 0.3:PlayerIsAtAnyCar(playerid,Float:radius)
{
new Float:vx,Float:vy,Float:vz;
for(new v = 0; v <= MAX_VEHICLES; v++)
{
GetVehiclePos(v,vx,vy,vz);
if(IsPlayerInRangeOfPoint(playerid,radius,vx,vy,vz)) return 1;
}
return 0;
}0.2 und 0.3:
PlayerIsAtAnyCar(playerid,Float:radius)
{
new Float:vx,Float:vy,Float:vz;
for(new v = 0; v <= MAX_VEHICLES; v++)
{
GetVehiclePos(v,vx,vy,vz);
if(PlayerToPoint(radius,playerid,vx,vy,vz)) return 1;
}
return 0;
}PlayerToPoint wird benötigt.
Beispiel:
if(strcmp(cmd,"/test",true) == 0)
{
if(PlayerIsAtAnyCar(playerid,4.0)
{
SendClientMessage(playerid,"Es sind ein oder mehrere Wagen in Ihrer Nähe!");
}
return 1;
} -
Hallo,
ich habe hier eine kleine Alternative zu strtok bzw. strget gescriptet.( Dies ist die BETA-Version und wurde nur auf meinem HomeServer getestet. Falls Bugs vorhanden sind, melden, ich setzte mich dann gleich ran um sie zu beheben. )
// ====> Code <====
// Irgendwo einfügen
retstr(const sstr[], desstr[][],args, del = ' ')
{
new
s,Num,start,argnum;
do
{
if((sstr== del && sstr[s+1] != del) || s == strlen(sstr))
{
if(args == 0 && argnum == 0)
{
strmid(desstr[0],sstr,start,s,128);
break;
}
strmid(desstr[Num],sstr,start,s,128);
start = s+1;
Num++;
argnum++;
if(argnum == args && sstr != EOS )
{
strmid(desstr[Num],sstr,start,strlen(sstr),128);
break;
}
}
s++;
}
while(s < strlen(sstr));
return 1;
}Nun erkläre ich euch kurz wie es funktioniert und gebe 2 Beispiele dazu:
Zuerst fügt ihr unter "OnPlayerCommandText(...)" folgendes ein:
new tmp[5][35];
Die "5" könnt ihr mit jeder Zahl tauschen (sie gibt die Anzahl der maximal möglichen Parameter an - ohne 0, dazu kommen wir aber noch).
Natürlich könnt ihr "tmp" mit allem erdenklichen austauschen (wie z.B.: "new param[5][128];"). Die 35 lasst ihr am besten so.Dann vergleicht ihr - wie immer - den CMDTEXT und den CMD (= "/kick","/givecash", usw. )
if(strcmp("/givecash",cmdtext,false,9) == 0) { // die 9 nicht vergessen - gibt an, wie lange der CMD (einschließlich des "/") ist.Jetzt müsst ihr nur folgendes einfügen:
retstr(cmdtext,tmp,2);
Ihr müsst nur die "2" mit der Anzahl der Parameter tauschen (z.B.: "/kick ID GRUND" = 2 | "/adminchat TEXT" = 1 | "/givecash ID MENGE" = 2 | ... ).
Dann könnt ihr auch schon loslegen. Ihr verwendet einfach (statt wie bei strtok tmp = strtok(cmdtext, idx)) tmp[1] und tmp[2] (bzw. tmp[1], tmp[2],tmp[3], ... bzw. param[1], ... )
( WICHTIG: Diese beiden sind strings, d.h. müssen um Zahlen (wie ID's) zu werden umgeformt werden (strval(tmp[1]). Zudem ist tmp[0] immer der CMD-Anfang, sprich "/giveceash","/kick", usw. )Prinzip:
retstr trennt den eingegebenen string (cmdtext), wenn ein " " (Space / Leertaste) gefunden worden ist, jedoch kein " " darauf folgt ! Die "Stücken" überträgt es in das Arry solange, bis alle Argumente übertragen worden sind. Das letzte Parameter wird vollkommen übertragen,d.h. nicht abgeschnitten, geeignet für Strings. Es (bei "/upm ID TEXT" gibt er den gesamten Text zurück am Ende).
Beispiele:
public OnPlayerCommandText(playerid, cmdtext[])
{
new tmp[3][128];
if(strcmp("/givecash",cmdtext,false,9) == 0)
{
retstr(cmdtext,tmp,2);
if(!strlen(tmp[1]) || !strlen(tmp[2])) return SendClientMessage(playerid,0xAAAAAAAA,"*** Verwende: /givecash ID MENGE ***");
if(!IsPlayerConnected(strval(tmp[1]))) return SendClientMessage(playerid,0xAAAAAAAA,"*** Angegebener User nicht online ***");
if(strval(tmp[2]) <= 0 || strval(tmp[2]) >= 1001) return SendClientMessage(playerid,0xFF66FFAA,"*** Menge muss zwischen 1 und 1000 liegen ***");
GivePlayerMoney(strval(tmp[1]),strval(tmp[2]));
GivePlayerMoney(playerid,-strval(tmp[2]));
SendClientMessage(playerid,0xAAAAAAAA,"*** Geld abgegeben ***");
SendClientMessage(strval(tmp[1]),0xAAAAAAAA,"*** Geld erhalten ***");
return 1;
}
if(strcmp("/upm",cmdtext,false,4) == 0)
{
retstr(cmdtext,tmp,2);
if(!strlen(tmp[1]) || !strlen(tmp[2])) return SendClientMessage(playerid,0xAAAAAAAA,"*** Verwende: /upm ID NACHRICHT ***");
if(!IsPlayerConnected(strval(tmp[1]))) return SendClientMessage(playerid,0xAAAAAAAA,"*** Angegebener User nicht online ***");
new string1[100],string2[100],name1[MAX_PLAYER_NAME],name2[MAX_PLAYER_NAME];
GetPlayerName(playerid,name1,sizeof name1);
GetPlayerName(strval(tmp[1]),name2,sizeof name2);
format(string1, sizeof string1,"*** User PM to %s: %s ***",name2,tmp[2]);
format(string2, sizeof string2,"*** User PM from %s: %s ***",name1,tmp[2]);
SendClientMessage(playerid,0xAAAAAAAA,string1);
SendClientMessage(strval(tmp[1]),0xAAAAAAAA,string2);
return 1;
}
return 0;
}Hier noch ein ReturnUser Code von mir wieder:
stock ReturnUser(string[])
{
new i = 0;
new count = 0;
new len = strlen(string);
if(len > 3)
{
for(; i < MAX_PLAYERS;i++)
{
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));
}Anwendung mit retstr wäre:
Kick(ReturnUser(tmp[1]));Der User hat die Möglichkeit, statt nur einer ID oder nur einen Namen, beides anzugeben. Bei der Selection (falls es genau 3 Zeichen seien sollten) hat der String (bzw. als Name) eine höhere priorität.
Hoffe alles klappt, sonst behebe ich es selbstverständlich.
MfG KornChief.
// Edit: Ich vergaß zu erwähnen, dass natürlich alles von mir ist und nichts kopiert worden ist.
-
Ja gut Custom aber ziemlich Ressourcen fressend daher nicht zu empfehlen
new tmp[4][128] sind dann 4x 128 also 4x128 Variablen
dann kannst du auch Splitt nehmen wenn was ist , arbeitet auf die selber Methode
Trotzdem Selfmade ist immer gut so lernt man
-
Danke...ist auch wieder wahr
-
Hier mal meine Methode , ich hoffe kann jemand gebrauchen , ich weiß nicht
stock GetStr(string[],count,delim = ' ')
{
new counter,cc,found,
bck[128];
for(new i = 0;i<strlen(string);i++)
{
if(string[i] == delim)
{
if(!found){counter++;found=1;}
if(counter > count)break;
}
else
{
if(counter == count)
{
bck[cc] = string[i];
if(found)found = 0;
cc++;
}
}
}
return bck;
}Anwendung :
print(GetStr("Hallo Du",1,' '));
Gibt ,,Du´´ zurück also das erste Wort nach dem Trennzeichen , kann man festlegen like Splitt nur sofort Rückgabe
vllt lernt der eine oder andere was daraus, KornChief hat mich wieder auf den Geschmack gebraucht xD
-
Nice,habs nur kurz überflogen - nur wenn man das für Commands verwenden sollte, müsste man es etwas ändern, oder?
Denn er zählt bei " " counter += 1, wenn jedoch jemand folgendes eingibt :"/kick______4 Haha" (_ verkörpert " ") und im cmd GetStr(cmdtext,1,' '); dann würde ja ja abbrechen, da counter > count. Und wenn jemand "/kick 4 geschieht dir recht" schreibt, käme dann nicht nur "geschieht" an ?
Wenn ich falsch liege,
10/10 eindeutig . -
jo habs verbessert, danke für den Hinweis ^^, sollte laufen
-
Eine Frage:
Wenn ich aber mein tmp auf tmp[4][40] runtersetze, bin ich bei 4 x 40 = 160...das ist doch weniger als new cmd[256]; zB, was an sich auch nicht gut ist , oder? -
cmd muss keine 256 Zellen bzw. Zeichen oder Bytes haben , du kannst auch 128 nehmen :D, reicht vollkommen , da der maximale Text
wert bzw. Zellen wert in Sa-mp bei 128 Zellen liegt , beim Datei beschreiben usw. können soviele wie man möchte verwendet werden