Nützliche Codeschnipsel

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
  • Tut es nicht unbedingt, da GetPlayerName aus einer Variable, die im Server schon eingebaut ist entnimmt und sie Instant ausgibt. (Wie alle möglichen eingebauten Funktionen, die meißtens mit "Get" anfangen.)


    P.S.: Da deine "PlayerName" Variable vom Script aus leicht veränderbar ist, ist sie nicht so ganz sicher und dein Beispiel mit der Globalen Variable new PlayerName[MAX_PLAYER_NAME]; ist Falsch.

  • was ist wenn einer ShockRone heist und sein kleiner bruder ShockRone231?


    Dann muss man, um den Bruder zu "verwenden" mindestens "ShockRone2" schreiben. Alles bis "ShockRon" gibt Fehler bzw funktioniert dann nicht und "ShockRone" ist der Typ der auch so heißt.


    @Thema:stock ReturnPVarString(playerid, varname[])
    {
    new varstring[256];
    GetPVarString(playerid, varname, varstring, sizeof(varstring));
    return varstring;
    }Erklärt sich von selbst.

  • Bei so mini Funktionen würde ich es gleich als Makro machen.#define IntToBool(%0) (%0) == (1) ? (true) : (false)Funktioniert so allerdings nur mit Positiven zahlen.


    Keine ahnung ob das hier geht.#define IntToBool(%0) (!!%0)Habs nicht getestet, aber mein gehirn sagt ja ^^

    The fact is, I am right. And if you think I'm wrong, you are wrong.

  • Tut es nicht unbedingt, da GetPlayerName aus einer Variable, die im Server schon eingebaut ist entnimmt und sie Instant ausgibt. (Wie alle möglichen eingebauten Funktionen, die meißtens mit "Get" anfangen.)


    Ich werde gleich mal checken welches schneller funktioniert. ^^


    P.S.: Da deine "PlayerName" Variable vom Script aus leicht veränderbar ist, ist sie nicht so ganz sicher und dein Beispiel mit der Globalen Variable new PlayerName[MAX_PLAYER_NAME]; ist Falsch.


    Wenn du deinem script nicht befielst, es zu ändern, wird es auch nicht geändert. :)
    Aber das mit dem Variable hast du recht, es ist falsch.
    Er hat sozusagen "MAX_PLAYERS" und "MAX_PLAYER_NAME" gleichzeitig benutzt, was ja eh nur bugs gibt.
    So etwa müsste es sein:


    #include <a_samp>


    new PlayerName[MAX_PLAYERS][MAX_PLAYER_NAME];


    public OnPlayerConnect(playerid)
    {
    GetPlayerName(playerid,PlayerName[playerid],MAX_PLAYER_NAME);
    return 1;
    }


    // Dann kannst du es auch ungefähr so benutzen:


    public OnPlayerDeath(playerid,killerid,reason)
    {
    new string[64];
    format(string, sizeof string, "* Spieler %s wurde von %s getötet.", PlayerName[playerid], PlayerName[killerid]);
    SendClientMessageToAll(0xFFFFFFAA,string);
    return 1;
    }


    public OnPlayerDisconnect(playerid,reason)
    {
    new string[64];
    format(string, sizeof string, "* %s hat den Server verlassen.", PlayerName[playerid]);
    SendClientMessageToAll(0xFFFFFFAA,string);
    return 1;
    }

  • Ich weiß nicht ob es das gibt, aber:



    stock Name(playerid)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    return name;
    }


    Könnt ihr z.B so verwenden: format(string,sizeof(string),"Dein Name: %s", Name(playerid));


    oder z.B für nen Befehl um ne Nachricht zu senden:


    format(string,sizeof(string),"Du hast an %s gesendet: %s", Name(pID), msg);


    oder was weiß ich.


    Ist nix besonderes. bitte nicht flennen dass es scheiße ist. ;)

  • stock GetPlayerNameEx(playerid)
    {
    new string[24];
    GetPlayerName(playerid,string,24);
    new str[24];
    strmid(str,string,0,strlen(string),24);
    for(new i = 0; i < MAX_PLAYER_NAME; i++){if (str[i] == '_') str[i] = ' ';}
    return str;
    }


    gibt den Namen eines Spielers ohne das '_' zurück.


  • Ist aber ressourcenfressend.
    Das hier ist schon besser:
    stock GetPlayerNameEx(playerid)
    {
    new str[MAX_PLAYER_NAME],tmpvar;
    GetPlayerName(playerid,str,MAX_PLAYER_NAME);
    tmpvar=strfind(str,"_");
    if(tmpvar>-1) { str[tmpvar]=' '; }
    return str;
    }


    Das ist schon viel ressourcensparender ^^


  • Sorry aber was ist mit Typen die solche Namen wie "Peter_Hans_Klaus" oder "I_luv_cookiez" benutzen?


    stock GetPlayerName2(playerid)
    {
    new pname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, pname, sizeof(pname));
    for(new i = 0; i < strlen(pname); i++) if(pname[i] == '_') pname[i] = ' ';
    return pname;
    }

  • Kann sein, trotzdem habe ich noch nie in einem Server gesehen, dass ein Spieler alle seine Vornamen schreibt ;)
    Keiner würde mehr als 3 Namen schreiben, und für diese Fälle:
    stock GetPlayerNameEx(playerid)
    {
    new str[MAX_PLAYER_NAME],tmpvar;
    GetPlayerName(playerid,str,MAX_PLAYER_NAME);
    tmpvar=strfind(str,"_");
    if(tmpvar>-1) { str[tmpvar]=' '; }
    tmpvar=strfind(str,"_");
    if(tmpvar>-1) { str[tmpvar]=' '; }
    return str;
    }


    Trotzdem ist es mir eh egal was ihr wo oder warum benutzt, ich habe nur eine bessere methode geschrieben, für Server mit "Vorname_Nachname" Systemen, was ressourcensparender ist.

    Einmal editiert, zuletzt von FoxHound () aus folgendem Grund: Fix

  • Zitat

    Keiner würde mehr als 3 Namen schreiben, und für diese Fälle:


    Würde ... Und was ist wenn doch ?
    Hier wie ich es machen würde ,
    stock GetPlayerNameEx(playerid)
    {
    new
    iOffset = 0,
    sName[MAX_PLAYER_NAME];
    GetPlayerName(playerid,sName,sizeof(sName));
    while( ( iOffset = strfind(sName,"_",false,iOffset) ) != -1 ) {
    sName[iOffset] = ' ';
    }
    return sName;
    }


    Ich mach gleich mal n' Speed Test :wacko:

  • Zitat

    Genau sowas hatte ich auch gemacht. :D


    Seh ich hier nirgendwo. Haste also nicht gemacht :-0

    Zitat

    Und dein Code gibt auch irgendwas anderes aus als den Namen.


    Was denn z.B. ?


    Dein Code funktioniert noch nicht mal.Den hast du niemals getestet.Meinen hast du sicherlich auch nicht getestet.
    stock GetPlayerNameEx(playerid)
    {
    new str[MAX_PLAYER_NAME],tmpvar[2];
    GetPlayerName(playerid,str,MAX_PLAYER_NAME);
    tmpvar=strfind(str,"_");
    if(tmpvar>-1) { str[tmpvar]=' '; }
    tmpvar=strfind(str,"_");
    if(tmpvar>-1) { str[tmpvar]=' '; }
    return str;
    }
    Da fehlt der Index bei tmpvar.Wieso tmpvar ein Array ist,fraglich :-0


    //Edit:


    printf("GetPlayerNameEx() '%s'",GetPlayerNameEx(0));
    // GetPlayerNameEx() 'Das ist ein Test'



    stock GetPlayerNameEx(playerid)
    {
    new
    iOffset = 0,
    sName[MAX_PLAYER_NAME];
    GetPlayerName(playerid,sName,sizeof(sName));
    sName = "Das_ist_ein___Test";
    while( ( iOffset = strfind(sName,"_",false,iOffset) ) != -1 ) {
    sName[iOffset] = ' ';
    }
    return sName;
    }

  • Deins habe ich getestet, und ich hatte grad eins im Pawno gemacht, nicht gepostet.
    Ich habe es einfach so getestet:
    //Goldkiller
    stock GetPlayerNameEx(sName[])
    {
    new
    iOffset = 0/*,
    sName[MAX_PLAYER_NAME]*/;
    //GetPlayerName(playerid,sName,sizeof(sName));
    while( ( iOffset = strfind(sName,"_",false,iOffset) ) != -1 ) {
    sName[iOffset] = ' ';
    }
    return sName;
    }


    //von iBox
    stock GetPlayerNameEx2(string[])
    {
    // new string[24];
    // GetPlayerName(playerid,string,24);
    new str[24];
    strmid(str,string,0,strlen(string),24);
    for(new i = 0; i < MAX_PLAYER_NAME; i++){if (str[i] == '_') str[i] = ' ';}
    return str;
    }


    Das hier unter OnGameModeInit:
    new x=GetTickCount();
    printf("[gpne] %s --> %s","a_b_c_d_e_f_g_h_i_j",GetPlayerNameEx("a_b_c_d_e_f_g_h_i_j"));
    printf("[gpne] Proccesstime: [%d ms]",GetTickCount()-x);
    x=GetTickCount();
    printf("[gpne2] %s --> %s","a_b_c_d_e_f_g_h_i_j",GetPlayerNameEx2("a_b_c_d_e_f_g_h_i_j"));
    printf("[gpne2] Proccesstime: [%d ms]",GetTickCount()-x);
    bei [gpne] (also dein Code) wird irgendwas wie "PP" "Pa" oder "Py" (also erster buchstabe 'P' und der zweite ist was anderes) rausgegeben.
    Bei iBox' code funktioniert es aber ;)

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