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
  • Die meisten verwenden eh PVars, was mMn sehr schlecht ist, aber nun gut.


    Ich hab das mal gemacht,
    ist nur nicht getestet, nur dein Code umgeschrieben^^


    Dürfte aber funktionieren

    stock ScmEx(playerid, farbe, format[])
    {
    new z = strfind(format, "$", true);
    if(z!=-1)
    {
    new x[64], y;
    x = _strtok(format, z), y = (z+1),z -= strlen(x);
    strdel(format, z, y);
    strdel(x, 0, 1);
    new text[128];
    switch(GetPVarType(playerid,x))
    {
    case 0: return SendClientMessage(playerid, farbe, format);
    case 1: valstr(text,GetPVarInt(playerid,x));
    case 3: GetPVarString(playerid,x,text,128);
    case 2: format(text,144,"%f",GetPVarFloat(playerid,x));
    }
    strins(format, text, z);
    }
    return SendClientMessage(playerid, farbe, format);
    }


    Du hast aber das "Problem" das dies nur einmal funktioniert.

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Du hast aber das "Problem" das dies nur einmal funktioniert.


    Stimmt, daran habe ich auch nicht gedacht, dass jemand 2 Variablen in einem Text haben will :D


    Mhm, danke für die Editierung des Codes Blackace, ich überleg mir mal was :love:


    IPrototypeI


    Davon habe ich noch nie etwas gehört finde da auch jetzt nichts konkretes als Beispiel oder so und mit dem Code den du mir geschickt hast, kann ich nicht viel mit Anfangen, da ich nicht direkt weiß, was jetzt ein #emit ist ^^
    Trotzdem Danke für die Info !


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • Ja Kaliber das amx- scripting ist eine Kunst für sich und so gesehen auch nur etwas für richtige profis allgemein das einsetzungsgebiet ist mir so gesehen ein rätsel ich hab auch selbst nicht die gelegenheit gehabt sowas ihrgend wie zu verwenden das es einen nutzen bringt und ich bin auch ehrlich ich hab mir das tutorial nie ganz durch gelesen dazu hatte ich dann letzt endlich auch kein bock mehr auf Pawn , allgemein braucht man es nicht es ist auch nicht ressourcensparender und es gibt nix spezieles was man nicht auch anders lösen könnte.


    Hier mal ein kleines Tutorial hier wird auch das Beispiel von Zeex erklärt besser gesagt darauf hin gearbeitet um solch einen code zu verstehen.


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

  • Ja Kaliber das amx- scripting ist eine Kunst für sich und so gesehen auch nur etwas für richtige profis allgemein das einsetzungsgebiet ist mir so gesehen ein rätsel ich hab auch selbst nicht die gelegenheit gehabt sowas ihrgend wie zu verwenden das es einen nutzen bringt und ich bin auch ehrlich ich hab mir das tutorial nie ganz durch gelesen dazu hatte ich dann letzt endlich auch kein bock mehr auf Pawn , allgemein braucht man es nicht es ist auch nicht ressourcensparender und es gibt nix spezieles was man nicht auch anders lösen könnte.


    Hier mal ein kleines Tutorial hier wird auch das Beispiel von Zeex erklärt besser gesagt darauf hin gearbeitet um solch einen code zu verstehen.


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


    Achso, das ist aber wirklich interessant, im Prinzip hast du recht, es bringt dir so gesehen nichts, aber damit kann man ein paar richtig geile Funktionen bauen ;)


    Danke aber für diese Geile Information :love:


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • Was vllt auch paar Leuten helfen könnte auch wieder ein Thema zu Toplisten nur diesmal mit MySQL.


    new Text: topbox;
    enum TopDriver{
    tdName[MAX_PLAYER_NAME],
    tdZeit,
    };
    new DriverInfo[5][TopDriver];
    new count;

    topbox = TextDrawCreate(260.000000, 199.000000, "~n~");
    TextDrawBackgroundColor(topbox, 255);
    TextDrawFont(topbox, 1);
    TextDrawLetterSize(topbox, 0.200000, 1.000000);
    TextDrawColor(topbox, -1);
    TextDrawSetOutline(topbox, 0);
    TextDrawSetProportional(topbox, 1);
    TextDrawSetShadow(topbox, 1);


    public OnPlayerEnterRaceCheckpoint(playerid)
    {
    new string[128];
    if(IsPlayerInRangeOfPoint(playerid,2042.6235,1099.7368,10.6719,5.0)){
    new rtime, sek , minutes , pName[MAX_PLAYER_NAME];
    DisablePlayerRaceCheckpoint(playerid);
    rtime = GetTickCount() - count;
    new sql[128];
    GetPlayerName(playerid,pName,sizeof(pName));
    format(sql,128,"INSERT INTO `Zeiten`(Name,Zeit) VALUES ('%s','%d')",pName,rtime);
    mysql_function_query(g_ConnectionHandle, sql, false, "", "i", playerid);
    minutes=rtime/60000;
    rtime-=(60000*minutes);
    sek=rtime/1000;//sekunden
    rtime -=(sek*1000);
    format(string,128,"Deine Zeit: d:d",minutes,sek);
    SendClientMessage(playerid,-1,string);
    mysql_function_query(g_ConnectionHandle, "SELECT `Name`,`Zeit` FROM `Zeiten` ORDER BY `Zeit` ASC", true, "NewBestlist", "");
    }
    return 1;
    }

    forward NewBestlist();
    public NewBestlist()
    {
    new temp[30], gesammt[500],rang,sek,minutes;
    for(new i; i < 5; i++){
    cache_get_row(i, 0, DriverInfo[i][tdName]);
    cache_get_row(i, 1, temp);
    DriverInfo[i][tdZeit] = strval(temp);
    rang += 1;
    minutes=DriverInfo[i][tdZeit]/60000;
    DriverInfo[i][tdZeit]-=(60000*minutes);
    sek=DriverInfo[i][tdZeit]/1000;//sekunden
    DriverInfo[i][tdZeit] -=(sek*1000);
    format(gesammt, sizeof(gesammt), "%s~n~~b~%d. ~w~%s - ~r~Zeit: d:d",gesammt,rang,DriverInfo[i][tdName],minutes,sek);
    }
    TextDrawSetString(topbox, gesammt);
    TextDrawShowForAll(topbox);
    return 1;
    }


    ocmd:start(playerid,param[])
    {
    new car;
    car = CreateVehicle(560,2043.5396,1307.9452,10.6719,178.8549,0,0,-1);
    PutPlayerInVehicle(playerid,car,0);
    SetPlayerRaceCheckpoint(playerid,1,2042.6235,1099.7368,10.6719,0.0,0.0,0.0,5.0);
    count = GetTickCount();
    return 1;
    }


    und dazu noch ein screen.



    Ich hab mir gedacht da ich nix dazu heute gefunden habe und Benjamin hatte es mal in dem Thread von Rocky angesprochen so bin ich auf die Idee gekommen
    so was zu releasen beziehungsweise den codeschnipsel zu posten.


    //edit
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    Da mich Gestern jemand gefragt hatte wie man das CTF hin bekommt was jedoch sehr simpel ist wollte ich das hier auch noch hinzufügen
    der Code ist zwar nicht perfekt gebe ich auch selbst zu, aber als Beispiel Code reicht er vollkommen aus ^^.



    #define MAX_ZONE 3
    new CTFTimer[MAX_PLAYERS];
    new flagge[MAX_PLAYERS];
    new ctfpickup1[MAX_ZONE];
    new ctfpickup2[MAX_ZONE];
    new ctftime[MAX_PLAYERS];
    new ZonenInfo[MAX_ZONE][zonen] ={
    {1,1691.416, -1677.914, 1759.867, -1583.168, 1537.5564, -1660.4182, 83.5469, 1536.3740, -1712.6566, 83.5469,0xF60000F6},
    {2,1436.625, -1764.764, 1611.556, -1618.698, 1537.5564, -1660.4182, 13.5469, 1536.3740, -1712.6566, 13.5469,0xF60000F6},
    {3,1159.018, -959.4252, 1292.118, -864.6794, 1537.5564, -1660.4182, 83.5469, 1536.3740, -1712.6566, 83.5469,0xF60000F6}
    };
    new zone[MAX_ZONE];




    for(new i; i< MAX_ZONE; i++){
    zone[i] = GangZoneCreate(ZonenInfo[i][zPosX],ZonenInfo[i][zPosX1],ZonenInfo[i][zPosY],ZonenInfo[i][zPosY1]);
    ctfpickup1[i] = CreatePickup(1239, 1, ZonenInfo[i][ctf1X], ZonenInfo[i][ctf1Y], ZonenInfo[i][ctf1Z], -1);
    ctfpickup2[i] = CreatePickup(1239, 1, ZonenInfo[i][ctf2X], ZonenInfo[i][ctf2Y], ZonenInfo[i][ctf2Z], -1);
    Create3DTextLabel("Benutze hier\n /ctf \n Um eine Flagge zu nehmen", -1, ZonenInfo[i][ctf1X], ZonenInfo[i][ctf1Y], ZonenInfo[i][ctf1Z], 100.0, 0);
    Create3DTextLabel("Geh mit der Flagge\n In den Punkt", -1, ZonenInfo[i][ctf2X], ZonenInfo[i][ctf2Y], ZonenInfo[i][ctf2Z], 100.0, 0);
    }



    ocmd:ctf(playerid,params[])
    {
    #pragma unused params
    new i, bool:dort;
    if(flagge[playerid] != 0) return SendClientMessage(playerid,-1,"Du hast schon eine Flagge");
    for(; i < sizeof(ZonenInfo); i++){
    if(IsPlayerInRangeOfPoint(playerid,2.0,ZonenInfo[i][ctf1X], ZonenInfo[i][ctf1Y], ZonenInfo[i][ctf1Z])){
    flagge[playerid] = 1;
    SetPlayerAttachedObject(playerid, 3, 19487, 2, 0.101, -0.0, 0.0, 5.50, 84.60, 83.7, 1, 1, 1, 0xFF00FF00);
    SendClientMessage(playerid,-1,"Du Nimmst eine Flagge.");
    dort = false;
    break;
    }else{ dort = true;}
    }
    if(dort) return SendClientMessage(playerid,-1,"Du bist an keinem CTF-Punkt");
    return 1;
    }




    for(new i; i< MAX_ZONE; i++){
    GangZoneShowForPlayer(playerid,zone[i],ZonenInfo[i][zcolor]);
    }


    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    new i;
    for(; i < MAX_ZONE; i++){
    if(pickupid == ctfpickup2[i] && flagge[playerid] == 1){
    flagge[playerid] = 2;
    printf("%d",i);
    SendClientMessage(playerid,-1,"Bleibe 20 Sekunden an dem Punkt stehen, sonst wird der Vorgang abgebrochen");
    CTFTimer[playerid] = SetTimerEx("ctftimer",1000,true,"ii",playerid,i);
    }
    }
    return 1;
    }
    forward ctftimer(playerid, id);
    public ctftimer(playerid, id){
    printf("%d",id);
    if(IsPlayerInRangeOfPoint(playerid,4.0,ZonenInfo[id][ctf2X], ZonenInfo[id][ctf2Y], ZonenInfo[id][ctf2Z])){
    if(ctftime[playerid] >= 20){
    ctftime[playerid] = 0;
    flagge[playerid] = 0;
    RemovePlayerAttachedObject(playerid, 3);
    SendClientMessage(playerid,-1,"Du hast die Flagge erobert.");
    KillTimer(CTFTimer[playerid]);
    }
    ctftime[playerid]++;
    }else{
    ctftime[playerid] = 0;
    flagge[playerid] = 0;
    RemovePlayerAttachedObject(playerid, 3);
    SendClientMessage(playerid,-1,"Du hast den Punkt verlassen! Vorgang abgebrochen");
    KillTimer(CTFTimer[playerid]);
    }
    return 1;
    }



    Bilder gibt es natürlich auch dazu. Jedoch mache ich nochmal aufmerksam das diese Codes hier nur schnipsel sind kein copy past darum release ich auch grundsätzlich
    nur ungern was beziehungsweise gar nicht ^^ und helfe eher oder poste hier Codeschnipsel.



    das nehmen der "Flagge" ich hab einen Hut genommen da ich zu faul war die koordinaten raus zu suchen für die flagge.



    Hier der Punkt wo man hin muss und 20 Sekunden warten


    und nach dem 20 Sekunden verschwindet natürlich das Objekt und mann könnte zum beispiel bei einem gangfight die punkte dann erhöhen


    Einmal editiert, zuletzt von IPrototypeI ()

  • stock fdeleteline(Name[],Line[])
    {
    new File:datei=fopen(Name,io_read);
    new File:datei2=fopen("tmp.tmp",io_append);
    new string[200];
    strins(Line,"\r\n",strlen(Line),200);
    while(fread(datei,string)) if(strcmp(string,Line,true)!=0) fwrite(datei2,string);
    fclose(datei);
    fclose(datei2);
    datei=fopen(Name,io_write);
    datei2=fopen("tmp.tmp",io_read);
    while(fread(datei2,string)) fwrite(datei,string);
    fclose(datei2);
    fclose(datei);
    fremove("tmp.tmp");
    return 1;
    }


    Entfernt eine Zeile aus einer Textdatei.

    Einmal editiert, zuletzt von Pille ()

  • Wird definitiv nicht bei Jedem funktionieren.


    1. Ordner müssen vorhanden sein,sonst funktioniert es nicht. ( Pkt 4 )
    2. strins(Line,"\r\n",strlen(Line),50); <- die 50 könnte zu Fehlern führen.Entweder 200 oder sizeof(Line)
    3. new File:datei2=fopen("tmp.tmp",io_append); <- Datei muss vorher existieren damit io_append funktioniert.Davon hast du nichts erwähnt. Du lässt sie aber löschen in Zeile 15
    4. fremove("/Accounts/Event/tmp.tmp"); <- Wie entsteht dieser Dateipfad ?


    Zusätzlich solltest du prüfen ob fopen überhaupt funktioniert.

  • Alle Keys werden von GTa nicht unterstützt.


    Da hast du recht darum steht auch dran die sind ohne gewähr.


    //edit
    Nur ein Bruch Teil geht, jeder kann das machen , also testeb ob die taste geht. Ein beispiel wäre eine ausgabe bei dem public OnPlayerKeyStateChange.


    Jedoch , fehlt den meisten Leuten die id dazu und nicht alle stehen im wiki.

    Einmal editiert, zuletzt von IPrototypeI ()

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • stock RandomMaxMin(MinRand,MaxRand)
    {
    return MinRand+random(MaxRand-MinRand);
    }


    so bisschen optimiert :)

    Falsche Freunde: Fragen nach Kippen !
    Wahre Freunde: Sind der Grund, warum du keine Kippen hast !
    Falsche Freunde: Nennen deine Eltern Frau/Herr !
    Wahre Freunde: Nennen deine Eltern Mom/Dad !
    Falsche Freunde: Holen dich aus dem Knast und sagen dir, was getan hast, war falsch !
    Wahre Freunde: Sitzen in der Zelle neben dir und sagen: Scheiße...wir haben‘s verkackt...war aber verdammt lustig ! :P
    Falsche Freunde: Haben dich noch nie weinen sehen !
    Wahre Freunde: Weinen mit dir !
    Falsche Freunde: Werden dich stehen lassen, wenn die Menge das tut !
    Wahre Freunde: Werden der kompletten Menge den Arsch treten, die dich stehen gelassen hat ! c:
    Falsche Freunde: Bleiben für ne Weile !
    Wahre Freunde: Bleiben ein Leben lang !
    Falsche Freunde: Werden die Person, die Scheiße über dich erzählt, blöd vollabern !
    Wahre Freunde: Werden sie einfach ausknocken !
    Falsche Freunde: Werden das hier ignorieren !
    Wahre Freunde: Es Kopieren !

  • Kleine Infos zu commandprozessoren mit parametern ein beispiel wäre hier bei ocmd.


    wie man solche commands welche dann keine Parameter benutzen beispiel


    ocmd:beispiel(playerid,params[])
    {
    SendClientMessage(playerid,-1,"Test");
    return 1;
    }


    in OnPlayerKeyStateChange


    ocmd_beispiel(playerid,"");


    das allgemein benutzen von dem selben inhalt nur in einem anderen command das kennen zwar die meisten schon jedoch führe ich es dennoch auf


    ocmd:test(playerid,params[]) return ocmd_beispiel(playerid, params);


    man kann mit dem ersten beispiel somit auch binds legen


    beispiel :

    ocmd_veh(playerid,"560");



    ocmd:veh(playerid,params[])
    {
    new carid, Float:Pos[4];
    if(sscanf(params,"d",carid)) return SendClientMessage(playerid,-1,"Benutze /veh <carid>");
    GetPlayerPos(playerid,Pos[0], Pos[1], Pos[2]);
    GetPlayerFacingAngle(playerid,Pos[3]);
    CreateVehicle(carid,Pos[0], Pos[1], Pos[2],Pos[3],0,0,-1);
    return 1;
    }


  • Oh man...
    ocmd:beispiel(playerid) und ocmd_beispiel(playerid)
    funktionieren nicht?
    Das wüsste ich.
    Das funktioniert genauso.
    Und warum?


    Weil es der Macro von ocmd zulässt und den letzten Parameter (%1 bzw params) ignoriert.
    Deswegen kann ich auch die Parameter


    hans, kaese[]


    nehmen, funktioniert genauso gut, ebenso kann man den string bzw Array weglassen.
    Der Compiler meckert nicht

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Ihr wollt den anderen Spieler etwas anzeigen z.B einen /me Befehl oder Ähnliches oder habt noch Keinen Chat ? Hier
    Eine Nützliche Funktion:



    Code
    Verwendung:  SendClientMessageRadius(playerid, TEXT*, Farbe1, Umfang1, Farbe2, Umfang2);


    Code
    *
    Ihr könnt entweder einen format absenden oder es wie Bei SendClientMessage so benutzen "TEXT"


    Code
    Farbe und Umfang 1
    Die Farbe ist einfach ein Farbcode oder definierte Farbe
    Umfang der Umfang In dem die Nachricht gesendet wird


    Code
    Farbe und Umfang 2
    Wenn ihr wollt das wenn ein Spieler etwas weiter weg es nur etwas blasser sieht
    Könnt ihr hier eine Blassere farbe eingeben und den Umfang alles andere macht
    der Stock


    Ich hoffe diese Funktion kann euch helfen MFG Arendium ;)



    stock SendClientMessageRadius(playerid, string[], f1, Float:u1, f2, Float:u2)
    {

    for(new i = 0;i < MAX_PLAYERS; i++)
    {
    if(GetDistanceBetweenPlayers(i,playerid) < u1)
    {
    SendClientMessage(i, f1, string);
    }
    else if(GetDistanceBetweenPlayers(i,playerid) >= u1 && GetDistanceBetweenPlayers(i,playerid) < u2)
    {
    SendClientMessage(i, f2, string);
    }
    }
    return 1;
    }


    Ihr habt noch kein GetDistanceBetweenPlayers ?


    Spoiler anzeigen


    stock Float:GetDistanceBetweenPlayers(p1,p2){
    new Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2;
    if(!IsPlayerConnected(p1) || !IsPlayerConnected(p2)){
    return -1.00;
    }
    GetPlayerPos(p1,x1,y1,z1);
    GetPlayerPos(p2,x2,y2,z2);
    return floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2)+floatpower(floatabs(floatsub(y2,y1)),2)+floatpower(floatabs(floatsub(z2,z1)),2));
    }

    76ul4ppd4lmb.png

    Einmal editiert, zuletzt von Mr.Soap ()

  • Habe mal aus langeweile ein Würfel befehl geschrieben (ocmd) - Dieser bewirkt das man an einer beliebigen Stelle (anpassen!") gegen einen "Computer" um mind. 1000 und max. 10000$ Würfeln kann. Es gibt, Gewinn, Verlust und Unentschieden, genutzt wird dieser Befehl mit /cdice [Einsatz]


    ocmd:cdice(playerid, params[])
    {
    new einsatz;
    if(sscanf(params, "i", einsatz)) return SendClientMessage(playerid, COLOR_GREY, "Benutze: /cdice [Einsatz]");
    if(!IsPlayerInRangeOfPoint(playerid, 5, 2187.9375,1676.8564,11.1101)) return SendClientMessage(playerid, COLOR_GREY, "Hier kannst du nicht Würfeln!");
    if(einsatz >= 10001 || einsatz <= 999) return SendClientMessage(playerid, COLOR_GREY, "Der mindest Einsatz ist $1000 und der maximale Einsatz $10000");
    new spieleraugen = random(6);
    new computeraugen = random(6);
    new string[128];
    if(spieleraugen < computeraugen){format(string, sizeof(string), "Du verlierst mit einer %d gegen eine %d - Verlust: %d", spieleraugen, computeraugen, einsatz); SendClientMessage(playerid, COLOR_WHITE, string); GivePlayerMoney(playerid, -einsatz);}
    if(spieleraugen > computeraugen){format(string, sizeof(string), "Du gewinnst mit einer %d gegen eine %d - Gewinn: %d", spieleraugen, computeraugen, einsatz); SendClientMessage(playerid, COLOR_WHITE, string); GivePlayerMoney(playerid, einsatz);}
    if(spieleraugen == computeraugen){SendClientMessage(playerid, COLOR_WHITE, "Niemand gewinnt - es wurde ein Unentschieden gewürfelt!");}
    return 1;
    }


    Für den ein oder anderen bestimmt nützlich, have fun^^

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