Nützliche Codeschnipsel

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
  • 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;
    }

    I'm Sorry For Your Mistake!
    but it's yours

  • 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 :D 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

    I'm Sorry For Your Mistake!
    but it's yours

  • 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 :D

  • 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 :D
    Ihr könnt auch andere ID´s bei SetPlayerSkin einsetzen, nur is das mein Lieblins-Skin :P
    Command könnt ihr auch ändern, is mir Schnuppe :D

  • Immer nitro im car haben :)


    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger) {
    darunter
    SetTimer("NitroReset", 5000, 1);//5Sekunden nach wie viel zeit man nitro bekommen soll


    dann 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;
    }

    Einmal editiert, zuletzt von [PRT]The_Gamer ()

  • 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^^

    Einmal editiert, zuletzt von Jack_xD ()

  • 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

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • Ja, und wer hat des gemacht xD

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen

  • 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.

    2 Mal editiert, zuletzt von KornChief ()

  • Ja gut Custom aber ziemlich Ressourcen fressend daher nicht zu empfehlen :S


    new tmp[4][128] sind dann 4x 128 also 4x128 Variablen :S


    dann kannst du auch Splitt nehmen wenn was ist , arbeitet auf die selber Methode


    Trotzdem Selfmade ist immer gut so lernt man :thumbup:

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • 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 :whistling: xD

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


    Einmal editiert, zuletzt von BlackFoX ()

  • 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 :thumbup: .

  • 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 ^^

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • do.de - Domain-Offensive - Domains für alle und zu super Preisen