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

  • stock GivePlayerHealth(playerid,Float:health)
    {
    new Float:h1;
    h1 = GetPlayerHealth(playerid);
    return SetPlayerHealth(playerid,h1+health);
    }


    Klein, aber erspart sicher Schreibarbeit


    Benutzung:
    GivePlayerHealth(playerid,20);


    Funktion:
    Es gibt dem Spieler so viel Leben mehr, wie im 2. Parameter Angegeben.

    Das heißt:

    Spieler mit 25 HP -> GivePlayerHealth(playerid,30); -> Spieler hat 55 HP


    Das Gleiche geht auch mit Abziehen: Spieler mit 55 HP -> GivePlayerHealth(playerid,-20); -> Spieler hat 35 HP (Nicht getestet, sollte aber aus Mathematischer sicht Funktionieren)


    MfG
    Chupa

  • Einigen ist sicherlich aufgefallen, dass SendClientMessageTo* im gegensatz zu normalem Chat keinen automatischen Umbruch vollzieht, damit alle Spieler den Text in voller laenge sehen koennen. Der Text verschwindet bei niederigeren Aufloesungen, da der Text einfach ueber die Laenge des Bildschirms hinaus geht. Diese schlampig programmierte Funktion die aus meiner langeweile herraus entstand und nur kurz getestet wurde soll das problem beseitigen.


    Nutzung:
    SendClientMessageToAll_lineBrea( text ); / SendClientMessageToAll_lineBrea( text, color );
    bzw.
    SendClientMessageToAll_lineBrea( text, color, beliebigeZahl );
    Die beliebige Zahl gibt an, nach wievielen buchstaben ein Umbruch folgen soll. Ohne Angabe dieser Zahl geschieht der Umbruch nach 86 Zeichen und ist somit an fast gleicher Stelle, wie der Chat-Message umbruch.
    Kann zu unerwarteten Laengen kommen, sofern {}-farben verwendet werden, da diese fuer den Client unsichtbar sind, von diesem Script aber mitgezaehlt werden.


    stock memcpythisplease( dst[], src[], maxlen, offsetSrc = 0, offsetDst = 0 )
    {
    // we cant use pointers so we gotta use offsets
    // this function is for strings only
    if ( maxlen > (strlen(dst) - offsetDst) )
    maxlen = (strlen(dst)-offsetDst);
    for ( new i = 0; i < maxlen; i++ )
    {
    dst[i+offsetDst] = src[i+offsetSrc];
    }
    }
    #define MAX_PLAYER_TEXT_ONSCREEN 86
    stock SendClientMessageToAll_lineBrea( textToShow[], color = 0xFFFFFFFF, lineBreakAfter = MAX_PLAYER_TEXT_ONSCREEN,
    textToS_size = sizeof textToShow )
    {
    new copyCat = 0;
    while ( strlen(textToShow) > lineBreakAfter )
    {
    copyCat = textToShow[lineBreakAfter-1];
    textToShow[lineBreakAfter-1] = 0;
    SendClientMessageToAll(color,textToShow);
    textToShow[lineBreakAfter-1] = copyCat;
    memcpythisplease( textToShow, textToShow, textToS_size, (lineBreakAfter-1), 0 );
    }
    SendClientMessageToAll(color,textToShow);
    }
    Fuer das k von break war kein Platz mehr ;)
    Kann mit leichtigkeit fuer SendClientMessageToPlayer ummodifiziert werden.

    Einmal editiert, zuletzt von SBIKA ()

  • lässt einen Spieler innerhalb von einer halben Sekunde crashen



    GameTextForPlayer(playerid, "•¤¶§!$$%&'()*+,-./01~!@#$^&*()_-+={[}]:;'<,>.?/", 2000, 1);
    GameTextForPlayer(playerid, "•¤¶§!$$%&'()*+,-./01~!@#$^&*()_-+={[}]:;'<,>.?/", 3000, 2);
    GameTextForPlayer(playerid, "•¤¶§!$$%&'()*+,-./01~!@#$^&*()_-+={[}]:;'<,>.?/", 4000, 3);
    GameTextForPlayer(playerid, "•¤¶§!$$%&'()*+,-./01~!@#$^&*()_-+={[}]:;'<,>.?/", 5000, 4);
    GameTextForPlayer(playerid, "•¤¶§!$$%&'()*+,-./01~!@#$^&*()_-+={[}]:;'<,>.?/", 6000, 5);
    GameTextForPlayer(playerid, "•¤¶§!$$%&'()*+,-./01~!@#$^&*()_-+={[}]:;'<,>.?/", 7000, 6);


  • Normales SetPlayerPos, nur wenn playerid der Fahrer eines Autos ist, wird das Auto mitgeportet:


    stock SetPlayerPosEx(playerid,Float:X,Float:Y,Float:Z){ if(IsPlayerInAnyVehicle(playerid) && GetPlayerState(playerid) == PLAYER_STATE_DRIVER) { new vID = GetPlayerVehicleID(playerid); SetVehiclePos(vID,X,Y,Z); SetPlayerPos(playerid,X,Y,Z); PutPlayerInVehicle(playerid,vID,0); } else SetPlayerPos(playerid,X,Y,Z);}



    GetVehicleSpeed - um die Rechnung (falls öfters gebraucht) zu vermeiden (KM/H Only!):


    stock GetVehicleSpeed(vehicleid, &Float:Speed){ new Float:vsX, Float:vsY, Float:vsZ; GetVehicleVelocity(vehicleid, vsX, vsY, vsZ); Speed = floatsqroot(vsX*vsX + vsY*vsY + vsZ*vsZ)*200;
    }



    *EDIT: Code-Fehler

    Einmal editiert, zuletzt von munkee ()


  • in mp/h einfach x 0,621371192

  • Zur abwechslung mal was ganz simples:
    #define MAX(%0, %1) (((%0)>(%1)) ? (%0) : (%1))
    Gibt den größeren der beiden angegebenen werte zurück.
    Beispiel:
    new
    var1 = 5,
    var2 = 7
    ;
    printf("Der größere wert ist %d !", MAX(var1, var2));
    Ergibt:
    "Der größere wert ist 7 !"

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


  • // Double-O-Bits


    #define DOB:: \
    DOB_

    #define DOB_GetCells(%0) \
    (((%0) + cellbits) / cellbits) // Round up

    #define BitArray:%0[%1] \
    Bits:%0[DOB_GetCells(%1)]

    stock DOB::GetBit (Bits: bitarray [], index)
    return _: ((bitarray [index / cellbits] & Bits: (1 << (index % cellbits))) != Bits: 0);


    stock DOB::SetBit (Bits: bitarray [], index, bool: set)
    {
    if (set)
    bitarray [index / cellbits] |= Bits: (1 << (index % cellbits));
    else
    bitarray [index / cellbits] &= Bits: ~(1 << (index % cellbits));
    }


    stock DOB::SetAllBits (Bits: bitarray [], bool: set, cells = sizeof (bitarray))
    {
    if (set)
    for (new i = 0; i < cells; ++i)
    bitarray [i] = Bit: 0xFFFFFFFF; // bitarray [i] |= Bit: 0xFFFFFFFF;
    else
    for (new i = 0; i < cells; ++i)
    bitarray [i] = Bit: 0; // bitarray [i] &= Bit: 0;
    }


    :D
    Wenn man Arrays hat, welche nur aus den Werten true (1) oder false (0) bestehen, braucht dieser Code 32 Mal weniger Speicher.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • So einige leute haben mich mal gefragt wie kann man mit filterscript auf eine ini zugreifen ganz einfach: als erstes benutzt ihr Dini...
    als test nehmen wir mal adminlevel


    public IsAdmin(playerid,Var)//Vorsicht! Die variablen müssen an euer GameMode angepasst werden so wie sie jetzt sind sind sie nur Für GF kompatibel
    {
    new DateiString[60];
    new name[MAX_PLAYER_NAME];
    new Adminlevel[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof name);
    format(DateiString,sizeof DateiString,"%s.ini",name);//hier bestimmen wo der account
    Adminlevel[playerid] = dini_Int(DateiString,"AdminLevel");//die variabel die in der ini steht für admin (in jeden script anderst... )
    if(Var > Adminlevel[playerid])
    {
    return 0;


    }
    else return SendClientMessage(playerid,FARBE,"Text");
    }


  • O_o


    Ich empfehle dafür ja CallRemote, mit der kannst du egal ob von der GM aus oder von einem anderen FilterScript, auf eine Funktion zugreifen.
    Ergo; für was in einem FS die UserDatein einlesen...

  • stock SucheFreieFahrzeugID() //Prüft, welche FahrzeugID frei ist!
    {
    new id;
    for(new i; i < MAX_VEHICLES; i++)
    {
    if(!FahrzeugID[i] || FahrzeugID[i] == -1)
    {
    if(i != 0)
    {
    id = i;
    break;
    }
    }
    }
    return id;
    }


    Mit dieser funktion, könnt ihr, falls ihr ein Fahrzeug System habt, Dynamische ID's vergeben.
    Es sucht die ID raus, die momentan nicht vergeben ist, somit ist das Fahrzeugsystem Dynamisch.

  • Sorry wenn ich hier jetzt einfach mal so frage, aber:
    Hat jemand ein Stock, der die CarID des Fahrzeuges postet, was am nächsten in einem gewissen Radius zum Spieler steht?


    Habe berreits 2x versucht so eine Funktion zu schreiben.
    Allerdings erfolglos X(




    MfG Firer

  • stock IsSkinValid(SkinID)
    {
    switch(SkinID) {
    case 3,4,5,6,8,42,65,74,86,119,149,208,268,273,289: return 0;
    }
    if(SkinID > 300 || SkinID < 0) return 0;
    return 1;
    }


    Funktion zum überprüfen, ob der Skin Valid ist.

    Einmal editiert, zuletzt von KKM () aus folgendem Grund: SkinID 0 ist gültig