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
  • Bitte vergesst nicht, das der thread hier Nützliche Codeschnipsel heisst...


    theoretisch ist es ja in ihrgend einer form sinnvoll :D
    beispiel

    stock swap_ints(int1, int2){
    #emit LREF.S.pri int1
    #emit LREF.S.alt int2
    #emit SREF.S.pri int2
    #emit SREF.S.alt int1
    }



    stock swap_ints(int1, int2){
    #emit LOAD.S.pri int1
    #emit LOAD.S.alt int2
    #emit STOR.S.pri int2
    #emit STOR.S.alt int1
    }


    somit kann man dne inhalt vertauschen beide codes machen das selbe die laden die zwei inhalte (offsets) in die temporäre register
    und übergeben diese werte wieder an die jeweilige variabeln.

  • somit kann man dne inhalt vertauschen beide codes machen das selbe die laden die zwei inhalte (offsets) in die temporäre register
    und übergeben diese werte wieder an die jeweilige variabeln.


    Der Code ist wirklich lustig :D


    Aber mein Makro ist doch "kuhl" ;)


    8o

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S


  • Der Code ist wirklich lustig :D


    Aber mein Makro ist doch "kuhl" ;)


    8o


    Das ist sehr simpel und um dir noch was kleines beizubringenmit #emit XCHG drehst du das was in der pri. register und was in der alt. register rein geschrieben wurde um.
    und Move.alt habe ich zwar nicht verwendet das ist auch nicht in der pawn_implementer_guide.pdf ausgeführt jedoch kannst du damit auch die jeweiligen register verschieben besser gesagt die werte .


    Mit deinem Makro warum zur hölle benutzt du die zuweisung eines datentyps besser gesagt ein tag damit veränderst du die variabel nicht.

  • damit veränderst du die variabel nicht.


    #define pattern must start with an alphabetic character


    und int wird blau makiert und sieht deshalb cool aus 8)


    Move.alt


    Kenn ich schon, habe es schon von Y_LESS gesehen ;)


    #emit XCHG drehst du das was in der pri. register und was in der alt. register rein geschrieben wurde um.


    Kannte ich noch nicht, aber danke für die Infos ;)


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • fornew schleife zeigen


    Das ist eine einfache for-Schleife und was soll daran hilfreich sein?


    Abgesehen davon, dass der Code keinen Sinn macht, wenn man das unter OnGameModeInit schreibt 8|

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Es ist trotzdem ein normaler Code der zwar auch nützlich ist, aber du schreibst hier ja jetzt auch nicht rein das man SpawnPlayer benutzen kann, ist genauso nützlich aber Standard. Desweiteren sollte man auch bei einem Beispiel korrekten Code benutzen.


    Trotzdem sollte der hier gepostete Code auch einen sinn haben entweder hilfreich sein oder belehrend ( was nicht zum basis wissen gehört)


    wie zum beispiel mann muss nicht umbedingt ++i oder i++ | --i oder i-- verwenden das ganze kann auch per bitshifting gehen


    for(new i; i < 10000; i <<= 1)


  • Trotzdem sollte der hier gepostete Code auch einen sinn haben entweder hilfreich sein oder belehrend ( was nicht zum basis wissen gehört)


    wie zum beispiel mann muss nicht umbedingt ++i oder i++ | --i oder i-- verwenden das ganze kann auch per bitshifting gehen


    for(new i; i < 10000; i <<= 1)


    Da hat doch auch niemand etwas anderes behauptet?
    Darauf war ja mein

    Desweiteren sollte man auch bei einem Beispiel korrekten Code benutzen.


    bezogen.

  • Guten Morgen alle zusammen,


    mir ist es gelungen einen sscanf Code zu schreiben, der schneller ist als das Plugin von Y_LESS ;)


    Es hat nicht alle Funktionen die sein Code hat, das ist eins der Gründe warum dieser Code so schnell ist :)


    Hier der Code:


    //(c) by Kaliber
    stock sscanf(msg[],arg[],{Float,_}:...) {
    new pos = strfind(msg," "),all=1,bool:end;
    while(pos != -1 && end == false) {
    strdel(msg,0,pos+1),all++,pos = strfind(msg," ");
    if(pos == -1) end = true,pos=strlen(msg);
    new i,tmp[32],var;
    switch(arg[all-2]) {
    case 's': for(; i<pos; i++) tmp[var] = msg[i],setarg(all,var,tmp[var]),var++;
    case 'd','i': {
    for(; i<pos; i++) tmp[var] = msg[i],var++;
    setarg(all,0,strval(tmp));
    }
    case 'f': {
    for(; i<pos; i++) tmp[var] = msg[i],var++;
    setarg(all,0,_:floatstr(tmp));
    }
    }
    }
    return 1;
    }
    Hier nochmal ein kleines Beispiel zur Verwendung:


    new str[32],id,Float:id1;
    sscanf("/makeleader Kaliber 1 1.9","sdf",str,id,id1);
    printf("%s | %d | %f",str,id,id1);
    //Output->Kaliber | 1 | 1.899999


    Viel Spaß damit hoffe es gefällt euch :)


    PS: Mein Code ist ~15ms schneller und das ist schon was, weil es nichtmal auf Plugin Ebene arbeitet :D


    mfg. :thumbup:


    //Edit: (c) by Kaliber

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

    Einmal editiert, zuletzt von Schwabbel ()

  • Warum den nochmehr redundante sachen ? Die Player schleifen include ist schon mehr als überflüssig jetzt auch noch sscanf als überfluss. Wenn dir wirklich so langweilig ist erstell ne HL2MP Mod oder sowas aber bitte nicht noch mehr redundanz

  • langeweile ruft :D



    forward Float:GetPlayerFacingAngleInCar(playerid);
    stock Float:GetPlayerFacingAngleInCar(playerid){
    new Float: Pos[9];
    const Float:fScale = 100.0;
    GetVehiclePos(GetPlayerVehicleID(playerid), Pos[0], Pos[1],Pos[2]);
    GetPlayerCameraPos(playerid, Pos[3], Pos[4], Pos[5]);
    GetPlayerCameraFrontVector(playerid, Pos[6], Pos[7], Pos[8]);
    Pos[5] = Pos[3] + floatmul(Pos[6], fScale);
    Pos[8] = Pos[4] + floatmul(Pos[7], fScale);
    return (180 - atan2(Pos[0] - Pos[5], Pos[1] - Pos[8]));
    }


    Dort wo man hinschaut mit der Kamera von dort wird die jeweilige rotation genommen die Idee habe ich mir aus dem einen von Pocket-Jony erstellten Thread genommen
    nur war er ja schon fertig.


    stock SetArrowPos(playerid,vehicleid,objectid,Float:X, Float:Y){
    new Float: Pos[3];
    GetVehiclePos(vehicleid, Pos[0], Pos[1],Pos[2]);
    return AttachPlayerObjectToVehicle(playerid,objectid, vehicleid, 0.0, 0.0, 1.5, 0.0, 90.0, (90 - atan2(Pos[0] - X, Pos[1] - Y)));
    }


    da jemand noch danach gefragt hatte wegen dem Pfeil auf dem Auto habe ich mir eine neue berechnung gemacht die zu dem viel kürzer ist als aus dem orginal
    und ja auch schneller :D


    http://forum.sa-mp.com/showthread.php?t=219539


  • Haha wie nice, du hattest mich (vor ca. 4 Tagen) auf die Idee gebracht mit dem Pfeil über dem Kopf, dafür war auch das Thread gedacht. 8o

    Einmal editiert, zuletzt von Poket-Jony ()

  • Auch wenn es nicht mein Code ist, poste ich hier den mal.
    Wenn man SQLite benutzt und Strings escapen will ganz nützlich, da man normalerweise eine solche Funktion nicht hat:

    //oben im Code
    #define MAX_INI_ENTRY_TEXT 80
    stock db_escape(text[]) //Credits to Y_LESS
    {
    new
    ret[MAX_INI_ENTRY_TEXT * 2],
    ch,
    i,
    j;
    while ((ch = text[i++]) && j < sizeof (ret))
    {
    if (ch == '\'')
    {
    if (j < sizeof (ret) - 2)
    {
    ret[j++] = '\'';
    ret[j++] = '\'';
    }
    }
    else if (j < sizeof (ret))
    {
    ret[j++] = ch;
    }
    else
    {
    j++;
    }
    }
    ret[sizeof (ret) - 1] = '\0';
    return ret;
    }

    Main: CPU: Intel Core i5-4440 @ 3,10 GHz | CPU-Cooling: Matterhorn -PURE- | RAM: 16GB Crucial Ballistix Sport DDR3-1600 DIMM CL9-9-9-24 |
    Motherboard: ASRock B85M Pro4 | GPU: Sapphire Radeon R9 390X Nitro 8GB GDDR5 |

    SSD: Samsung SSD 840 Evo 500GB | Power Supply: 550 Watt Corsair CS Series Modular 80+ Gold | Case: beQuiet! Silent Base 800


    As I walk through the valley of the shadow of death
    I take a look at my life and realize there's nothin' left.

  • Zieht dem Spieler bei Getränkeautomaten statt $2 $49 ab.
    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    if(GetPlayerAnimationIndex(playerid))
    {
    new animlib[32], animname[32];
    GetAnimationName(GetPlayerAnimationIndex(playerid) ,animlib, 32, animname, 32);
    if(!strcmp(animname, "VEND_USE", true))
    {
    GivePlayerMoney(playerid, -48);
    }
    }
    return 1;
    }


  • public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    if(GetPlayerAnimationIndex(playerid)) {
    new animlib[32], animname[32];
    GetAnimationName(GetPlayerAnimationIndex(playerid) ,animlib, 32, animname, 32);
    if(!strcmp(animname, "VEND_USE", true)) {
    return GivePlayerMoney(playerid, -48); }
    }
    }