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
  • Ist gerade durch eine Frage entstanden:

    new pIP[16],strste,step,blocks[4][4];
    GetPlayerIp(playerid,pIP,16);
    for(new strs=0;strs!=16;strs++)
    if(pIP[strs]=='.'||!pIP[strs]) {
    strmid(blocks[step],pIP,strste,strs);
    strste=strs+1;
    step++;
    }


    Damit werden die "IP Blöcke" einer IP Adresse eines Spielers in das Array blocks gespeichert.

    PAWNit gratis nutzen?
    Geschenkcode: 2017VQXPKB8V3KA

    Hier könnte Ihre Werbung stehen.

  • Ich wurde eben per PN bezüglich Mailsendes vom Server aus gefragt.
    Nun möchte ich euch den Code nicht vorenthalten:


    Diesen Pawncode einfach irgendwo einfügen:

    forward HTTPResponse ( index , response_code , data[ ] );
    stock SendMail ( Absender[ ] , Adresse[ ] , Betreff[ ] , Nachricht[ ] , AllowHTML = 0 )
    {
    new Post[ 512 ];
    format ( Post , 512 , "absender=%s&adresse=%s&betreff=%s&nachricht=%s&html_allow=%i" , Absender , Adresse , Betreff , Nachricht , AllowHTML );
    HTTP ( 1234 , HTTP_POST , "www.1000zet.net/hauke/samp_mailsender.php" , Post , "HTTPResponse" );
    }
    public HTTPResponse ( index , response_code , data[ ] )
    if ( response_code == 200 )
    if ( !strcmp ( data , "true" ) )
    printf ( "Mail wurde erfolgreich gesendet!" );
    else
    printf ( "Schnittstellen Antwort: %s" , data );
    else
    print ( "Schnittstelle nicht gefunden" );


    Und dann kannst du das so nutzen:
    SendMail ( "Absender" , "Empfänger_Email" , "Betreff" , "Nachricht" );
    Wenn die Nachricht HTML Enthalten soll, nutze den code so:
    SendMail ( "Absender" , "Empfänger_Email" , "Betreff" , "Nachricht" , 1 );
    Und so sieht das dann funktionierend aus:
    SendMail ( "Testserver" , "php_*****@web.de" , "Moin" , "Testnachricht!!" , 1 );



    Gesendet werden die Mails vom meinem Mailserver. Die Mails sind im Durchschnitt in wenigen Millisekunden versendet.

    PAWNit gratis nutzen?
    Geschenkcode: 2017VQXPKB8V3KA

    Hier könnte Ihre Werbung stehen.

  • rgb2hex & rgba2hex



    #define rgb2hex(%1,%2,%3) ((((((0x000000FF & 0x00FFFFFF) | (%1 << 24)) & 0xFF00FFFF) | (%2 << 16)) & 0xFFFF00FF) | (%3 << 8))
    #define rgba2hex(%1,%2,%3,%4) ((((((((0x00000000 & 0x00FFFFFF) | (%1 << 24)) & 0xFF00FFFF) | (%2 << 16)) & 0xFFFF00FF) | (%3 << 8)) & 0xFFFFFF00) | (%4))


    Beispiel

    SendClientMessageToAll(rgb2hex(161, 0, 32), "#?!-/%&");

  • Anti Jetpack:
    forward CheckPlayerJetpack();


    SetTimer("CheckPlayerJetpack", 5000, true);


    public CheckPlayerJetpack()
    {
    for(new i; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(GetPlayerSpecialAction(i) == SPECIAL_ACTION_USEJETPACK)
    {
    new str[256], pName[MAX_PLAYER_NAME];
    GetPlayerName(i, pName, MAX_PLAYER_NAME);
    format(str, 256, "Meldung: Der Benutzer %s wurde vom System gesperrt! [Jetpack-Hack]", pName);
    SendClientMessageToAll(0xFF000000,str);
    Ban(i);
    }
    }
    }
    return 1;
    }

  • Funktion: RandomEx(val1, val2);


    Wiedergibt/Erklärung:
    Eine zufällig generierte Zahl zwischen der ersten und der zweiten Zahl. Es macht keinen Unterschied wenn die erste Zahl größer oder kleiner ist als die zweite Zahl.


    Beispiel:
    printf("Die Zahl ist %d.", RandomEx(10, 200));


    Code:
    stock RandomEx(val1, val2)
    {
    new value = val1;
    if(val1 < val2) value = random((val2-val1)+1)+val1;
    else if(val1 > val2) value = random((val1-val2)+1)+val2;
    return value;
    }


    ====================


    Funktion: GivePVarInt(playerid, varname[], int_value);


    Wiedergibt/Erklärung:
    Wiedergibt garnichts oder Null! Es hat die selbe Funktion als würde man an einer Globalen Variable ++ anwenden, nur halt bei einer PVar.


    Beispiel:
    GivePVarInt(playerid, "Kills", 1);


    Code:
    stock GivePVarInt(playerid, varname[], int_value) SetPVarInt(playerid, varname, GetPVarInt(playerid, varname)+int_value);


    ====================


    Funktion: IsPlayerSneakingPlayer(playerid, toplayerid);


    Wiedergibt/Erklärung:
    Wiedergibt "true", wenn der Spieler ungefähr in die selbe Richtung guckt wie der andere Spieler (benutzt in "Back Shot" Scripte), sonst "false" (boolean)


    Beispiel:
    if(IsPlayerSneakingPlayer(killerid, playerid)) printf(%s wurde von %s von hinten gekillt, playername, killername);


    Code:
    stock IsPlayerSneakingPlayer(playerid, toplayerid)
    {
    new Float:p1Rot, Float:p2Rot, Float:result1, Float:result2, Float:finalresult;
    GetPlayerFacingAngle(playerid, p1Rot);
    GetPlayerFacingAngle(toplayerid, p2Rot);
    result1 = p1Rot-p2Rot;
    if(result1 < 0) result1 = -(result1);
    result2 = (360.0+p1Rot)-p2Rot;
    if(result2 < 0) result2 = -(result2);
    if(result1 <= result2) finalresult = result1;
    else if(result1 > result2) finalresult = result2;
    if(finalresult > 90) return false;
    return true;
    }


    ====================


    Funktion: SpawnPlayerEx(playerid);


    Wiedergibt/Erklärung:
    Wiedergibt garnichts oder Null! Wird benutzt um einen bugfreien Respawn zu machen, falls der Spieler noch in einem Fahrzeug sitzt.


    Beispiel:
    SpawnPlayerEx(playerid);


    Code:
    stock SpawnPlayerEx(playerid)
    {
    if(IsPlayerInAnyVehicle(playerid)) SetPlayerPos(playerid, 0.0, 0.0, 0.0);
    SpawnPlayer(playerid);
    }


    ====================


    Funktion: GetPlayerDistanceToPoint(playerid, Float:X, Float:Y, Float:Z, &Float:Distance);


    Wiedergibt/Erklärung:
    Nur die Variable "Distance" wiedergibt die Entfernung. Meißtens wird diese Funktion in Speedometer oder GPS Systemen verwendet um die Entfernung zwischen zwei 3D Punkten zu berechnen. (Man kann auch Funktionen wie GetPlayerDistanceToPlayer, GetPlayerDistanceToVehicle sogar GetPlayerDistanceObject herstellen usw. usw..)


    Beispiel:
    new Float:mydistance;
    GetPlayerDistanceToPoint(playerid, 20.3043, 400.5238, 10.2588, mydistance)
    printf("Die Entfernung liegt genau %.4f meter.", mydistance);


    Code:
    stock GetPlayerDistanceToPoint(playerid, Float:X, Float:Y, Float:Z, &Float:Distance)
    {
    new Float:pX, Float:pY, Float:pZ;
    GetPlayerPos(playerid, pX, pY, pZ);
    Distance = floatsqroot((X-pX)*(X-pX)+(Y-pY)*(Y-pY)+(Z-pZ)*(Z-pZ));
    }


    ====================


    Falls ihr noch mehr nützliche Codes braucht, PM't mich einfach^^


    MfG: BigETI

    Einmal editiert, zuletzt von BigETI ()


  • Schon richtig gut und nützlich, aber wäre das hier nicht sinnvoller?
    stock randomEx(min,max) return (random(max)+min); }


    z.B. bei:
    "randomEx(5,10)" muss eine zahl zwischen 4 und 10 rauskommen (4 weil die 5 zählt mit).
    Wenn "random" z.B. 2 zürückgibt, wird 'min' (in diesem fall '5') addiert und es kommt '7' raus.

  • Schon richtig gut und nützlich, aber wäre das hier nicht sinnvoller?
    stock randomEx(min,max) return (random(max)+min); }


    z.B. bei:
    "randomEx(5,10)" muss eine zahl zwischen 4 und 10 rauskommen (4 weil die 5 zählt mit).
    Wenn "random" z.B. 2 zürückgibt, wird 'min' (in diesem fall '5') addiert und es kommt '7' raus.


    Ja für den schnelleren Gebrauch, aber wenn du laut deiner Funktion dass hier machst:
    randomEx(100,2);
    Ergibt das einen Fehler, da man im random keine negativen Zahlen benutzen kann, während bei meiner Funktion
    RandomEx(100,2);
    kommt irgendeine X-beliebige Zahl zwischen 2 und 100 raus.


    Edit: Wenn schon mit "min" und "max", dann bitte:
    stock randomEx(min, max) return (random((max-min)+1)+min);
    ^^

    2 Mal editiert, zuletzt von BigETI ()

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • aber warum subtrahierst du die zahl erst und addierst sie dann nochmal? Und warum sollte man "randomEx(100,2)" eigentlich benutzen, wenn man weiß wie es funktioniert? ^^ schliesslich kannst du bei den anderen SA-MP funktionen die parameter auch nicht da hinschreiben wo du willst, die haben alle ihren eigenen platz ^^ Aber naja, so oder so hauptsache es funktioniert :D

  • du musst mit der differenz der beiden zahlen irgendeine Zahl generieren und mit der Basiszahl (min Wert) addieren um eine Zahl zwischen den beiden Zahlen zu kriegen sonst kannst du laut deiner Funktion höhere Zahlen als der max Wert kriegen :whistling:
    Naja meine Funktion sollte den lieben scripting Anfängern nützlich sein, wenn die ka von Mathe haben xD


    Edit:
    Ich habe gemerkt, dass die letzte Zahl nie generiert wird, deshalb auch:
    stock RandomEx(val1, val2)
    {
    new value = val1;
    if(val1 < val2) value = random((val2-val1)+1)+val1;
    else if(val1 > val2) value = random((val1-val2)+1)+val2;
    return value;
    }

    Einmal editiert, zuletzt von BigETI ()

  • Ein dcmd um einem Spieler Geld zu geben.
    public OnPlayerCommandText(playerid, cmdtext[])
    {
    dcmd(gibgeld,7,cmdtext);//definirt den dcmd [gibgeld]ist der befehl[7] wie viele buchstaben der befehl hat
    }
    dcmd_gibgeld(playerid , params[])
    {
    new pID, Betrag;//pID=die id des spielers
    if(sscanf(params, "dd", pID, Betrag))
    {
    return SendClientMessage(playerid,COLOR_RED, "Nutze: /gibgeld [SpielerID] [Betrag]");//hast du alles richtig eingegeben?
    }
    else
    {
    GivePlayerMoney(playerid,-Betrag);//zieht dir das geld von betrag ab
    GivePlayerMoney(pID,Betrag);//gibt den spieler den betrag
    }
    return 1;
    }

  • FoxHound & BigETI: Warum macht ihr euch das Leben so schwer?

    GenerateRandomValue ( min , max ) {
    new RandomValue;
    while ( RandomValue < min)
    RandomValue = random ( max);
    return RandomValue;
    }

    Diesen Schnipsel habe ich aus meinem WBB Connect genommen, und leicht geändert.

    PAWNit gratis nutzen?
    Geschenkcode: 2017VQXPKB8V3KA

    Hier könnte Ihre Werbung stehen.

  • Da könnten aber auch Werte über dem Maxiumum rauskommen: Bsp:


    Min=20, Max=30 Random(30)=27+20=47

  • new PlayerCount;


    #define ForAll(%0) for(new %0, _ForAllCount_%0; _ForAllCount_%0 < PlayerCount+1 && %0 < MAX_PLAYERS && _ForAllCount_%0 < MAX_PLAYERS; %0++)


    public OnPlayerConnect(playerid) { PlayerCount++; }
    public OnPlayerDisconnect(playerid, reason) { PlayerCount--; }Zählt wie bekannte ForAll's alle Spieler durch.
    Aber:
    Wenn z.b. 10 Spieler auf 500 maximalen Slots sind, wird die for-Schleife nur 10 mal ausgeführt, also nur, bis auch alle 10 Spieler bearbeitet wurden. Der Rest wird ignoriert und spart damit Zeit + Leistung.


    Die jeweilige Bearbeitung von PlayerCount in OnPlayer(Dis-)Connect macht die ständige Verwendung einer weiteren Schleife, um die verbundenen Spieler zu zählen, unnötig.

    Einmal editiert, zuletzt von Meta ()

  • geht einfacher :D



    dcmd_gibgeld(playerid , params[])
    {
    new pID, Betrag;//pID=die id des spielers
    if(sscanf(params, "ud", pID, Betrag)) return SendClientMessage(playerid,COLOR_RED, "Nutze: /gibgeld [SpielerID] [Betrag]");//hast du alles richtig eingegeben?
    GivePlayerMoney(playerid,-Betrag);//zieht dir das geld von betrag ab
    GivePlayerMoney(pID,Betrag);//gibt den spieler den betrag
    return 1;
    }
    und etwas falsch du musst U für User