Beiträge von RG_

    Ein nachteil noch: Man kann damit keine psx/ps2 spiele abspielen.


    Ps1 Spiele können alle Versionen der PS3 (Die gibts ja auch im PS Store zu kaufen..)
    Ps2 Spiele kann nur die alte 60 GB PS3, welche mal stolze 600€ gekostet hat. Aber dieses Geld war sie auf jeden Fall wert, einfach ein Schmuckstück <3

    Moin Breadfish,



    Wie aus der Überschrift zu entnehmen ist, suche ich schlichtweg ein Blinkerglas für einen Peugeot Speedfight 3 in weiß. Dabei wird NUR das Glas und nicht der komplette Blinker gesucht.
    Das Teil sollte nicht mehr als 10-20€ kosten.
    Sollte Jemand einen Shop/ eine Person kennen, welche/r ein solches Teil verkauft, könnt ihr mir gerne eine PM schreiben.





    ______
    Unverbindlicher Hinweis: Die Sicherheit einer Transaktion kann am besten durch die Einschaltung eines Mittelsmannes gewährleistet werden. Weitere Informationen dazu gibt es hier.

    Moin Leute,


    Heut gibts mal was ganz kleines von mir. Hierbei handelt es sich um einen Commandprozessor, welcher dieselbe Funktion übernimmt, wie der allgemein bekannte Prozessor "OCMD", nur ist dieser ein Stück schneller, wie im Folgenden Speedtest belegt wird.
    Vorweg: Wie erstellt man einen Befehl?
    Diese Frage ist leicht zu beantworten. Ihr erstellt den Befehl nach folgendem Shema:
    RGCMD:Befehlname(playerid,params[])
    {
    return 1;
    }
    Natürlich darf hierbei das #include rgcmd am Scriptanfang nicht fehlen.
    Diesen Code könnt ihr nach Belieben iwo in eurem GM oder FS platzieren.
    Darin könnt ihr nun wie gewohnt mit sscanf eure Params verwalten.


    Soo nun zum Speedtest:
    Bei 25 Durchläufen mit jeweils 100.000 Befehlsaufrufen komme ich auf folgendes Ergebnis:


    Testcode:

    Spoiler anzeigen
    /*
    Timing test
    made by BlackAce
    modified by RG
    */
    #include a_samp

    Spoiler anzeigen
    #define TEST_RUNS 25
    #define TEST_LOOPS 100000
    #define TEST_CMD "/test Moin Leutz was macht ihr so?"
    new result[3];
    forward StartTest();
    public StartTest() {

    Spoiler anzeigen
    printf(" --- BCMD vs RGCMD (%d a %d), TestCMD: %s",TEST_RUNS,TEST_LOOPS,TEST_CMD);
    for(new i ; i < TEST_RUNS ; i++ )
    {
    new
    tick2,
    tick3,
    tick1,
    tick4;
    tick1 = GetTickCount();
    for(new j ; j < TEST_LOOPS ; j++)
    {
    RGOnPlayerCommandText(0,TEST_CMD);
    }
    tick2 = GetTickCount();
    for(new j ; j < TEST_LOOPS ; j++)
    {
    BCMDOnPlayerCommandText(0,TEST_CMD);
    }
    tick3 = GetTickCount();
    for(new j ; j < TEST_LOOPS ; j++)
    {
    OCMDOnPlayerCommandText(0,TEST_CMD);
    }
    tick4 = GetTickCount();
    new
    RGCMD = tick2 - tick1,
    BCMD = tick3 - tick2,
    OCMD = tick4 - tick3;
    printf("RGCMD %04dms",RGCMD);
    printf("BCMD %04dms",BCMD);
    printf("OCMD %04dms",OCMD);
    if(RGCMD < BCMD && RGCMD < OCMD)
    result[0]++,printf("Gewinner Runde %d -> RGCMD",(i+1));
    if( BCMD < RGCMD && BCMD < OCMD)
    result[1]++,printf("Gewinner Runde %d -> BCMD",(i+1));
    if( OCMD < RGCMD && OCMD < BCMD)
    result[2]++,printf("Gewinner Runde %d -> OCMD",(i+1));
    }
    printf("-------ERGEBNIS:------");
    printf("RGCMD %d/%d Runden gewonnen",result[0],TEST_RUNS);
    printf("BCMD %d/%d Runden gewonnen",result[1],TEST_RUNS);
    printf("OCMD %d/%d Runden gewonnen",result[2],TEST_RUNS);
    return 1;
    }

    Spoiler anzeigen
    public OnFilterScriptInit() {
    SetTimer("StartTest",1800,false);
    return 1;
    }
    #define RGCMD:%0(%1) forward rgcmd_%0(%1);\
    public rgcmd_%0(%1)
    #define bcmd:%1(%2) forward bcmd_%1(%2); \
    public bcmd_%1(%2)
    #define ocmd:%1(%2) forward ocmd_%1(%2); \
    public ocmd_%1(%2)
    forward RGOnPlayerCommandText(playerid,cmdtext[]);
    forward OCMDOnPlayerCommandText(playerid,cmdtext[]);
    forward BCMDOnPlayerCommandText(playerid,cmdtext[]);
    public RGOnPlayerCommandText(playerid,cmdtext[])
    {
    new cmd[32], pos = strfind(cmdtext," ",true);
    strmid(cmd,cmdtext,1,pos);
    for(new i = 0, len = strlen(cmd); i < len; i++)
    {
    switch(cmd[i])
    {
    case 'A': cmd[i] = 'a'; case 'B': cmd[i] = 'b'; case 'C': cmd[i] = 'c';
    case 'D': cmd[i] = 'd'; case 'E': cmd[i] = 'e'; case 'F': cmd[i] = 'f';
    case 'G': cmd[i] = 'g'; case 'h': cmd[i] = 'h'; case 'I': cmd[i] = 'i';
    case 'J': cmd[i] = 'j'; case 'K': cmd[i] = 'k'; case 'L': cmd[i] = 'l';
    case 'M': cmd[i] = 'm'; case 'N': cmd[i] = 'n'; case 'O': cmd[i] = 'o';
    case 'P': cmd[i] = 'p'; case 'Q': cmd[i] = 'q'; case 'R': cmd[i] = 'r';
    case 'S': cmd[i] = 's'; case 'T': cmd[i] = 't'; case 'U': cmd[i] = 'u';
    case 'V': cmd[i] = 'v'; case 'W': cmd[i] = 'w'; case 'X': cmd[i] = 'x';
    case 'Y': cmd[i] = 'y'; case 'Z': cmd[i] = 'z';
    }
    }
    strins(cmd,"rgcmd_",0);
    if(pos == -1)
    {
    if(CallLocalFunction(cmd,"ds",playerid, " ")) return 1;
    strins(cmd,"/",0);
    return CallLocalFunction("oldOnPlayerCMDText","ds",playerid,cmdtext);
    }
    new params1[64];
    strmid(params1,cmdtext,pos+1,strlen(cmdtext));
    if(CallLocalFunction(cmd,"ds",playerid, params1)) return 1;
    return CallLocalFunction("oldOnPlayerCMDText","ds",playerid,cmdtext);
    }
    public BCMDOnPlayerCommandText(playerid,cmdtext[])
    {

    }
    public OCMDOnPlayerCommandText(playerid,cmdtext[])
    {
    cmdtext[0]='_';
    new ocmdStr[128],ocmdParams[128],bool:ocmdAffe,ocmdFu;
    for(new i;i<128;i++)
    {
    if(cmdtext[i]=='\0')break;
    if((cmdtext[i]==' ')&&(!ocmdAffe))
    {
    ocmdAffe=true;
    continue;
    }
    if(!ocmdAffe)
    {
    cmdtext[i] = tolower(cmdtext[i]);
    ocmdStr[i]=cmdtext[i];
    }
    else
    {
    ocmdParams[ocmdFu]=cmdtext[i];
    ocmdFu++;
    }
    }
    format(ocmdStr,128,"ocmd%s",ocmdStr);
    if(!strlen(ocmdParams))format(ocmdParams,128," ");
    if(CallLocalFunction(ocmdStr,"ds",playerid,ocmdParams))return 1;
    cmdtext[0]='/';
    return CallLocalFunction("oldOnPlayerCMDText","ds",playerid,cmdtext);
    }
    bcmd:test(playerid,params[])
    {
    return 1;
    }
    ocmd:test(playerid,params[])
    {
    return 1;
    }
    RGCMD:test(playerid,params[])
    {
    return 1;
    }

    Spoiler anzeigen
    Hierbei BCMD einfach vernachlässigen, da ich keine Erlaubnis habe, dieses zu releasen.

    Spezielles Danke an:
    946ben, er hat mir gezeigt, dass ein switch schneller ist, als die "tolower" Funktion



    Download:
    Pastebin
    Mirror1

    z.B. so kannst du abfragen, was der Spieler geschrieben hat:

    public OnPlayerText(playerid,text[])
    {
    if(!strcmp(text,"Händler",true))
    {
    SendClientMessage(playerid,0xFFFFFFFF,"Händler: Du hast mich gerufen?");
    }
    return 0;
    }


    Du kannst Strings via "strcmp" vergleichen.


    //CreatePlayerChopper( gunnerid, npcname[ ], script[ ],length, pilotid ) Wenn pilotid = -1, dann ist der Pilot ein NPC, Spieler als Pilot ist ungetestet!
    CallRemoteFunction("CreatePlayerChopper","dssd", gunnerid, npcname[ ], script[ ],length, pilotid ); // Grundkenntnisse für Bots sollten vorhanden sein (Botscript)


    gunnerid = Der Spieler, der den Choppergunner bedienen soll.
    npcname = der Name des PilotenNPCs, nur relevant, falls der Pilot ein NPC sein soll, andernfalls einfach " " setzen.
    script = das Botscript für den PilotNPC, nur relevant, falls der Pilot ein NPC sein soll, andernfalls einfach " " setzen.
    length = Dauer, wie lange der Helikopter genutzt werden kann, dieses Feld ist in jedem Fall relevant und darf nicht 0 entsprechen.
    pilotid = Der Spieler, der den Helikopter fliegen soll, falls der Pilot ein NPC sein soll, einfach -1 setzen.
    Also z.B.
    CallRemoteFunction("CreatePlayerChopper","dssd", 0, " "," ",240,1 );
    Dieser Helikopter würde vom Spieler mit der ID 1 gesteuert werden. Dabei würde der Spieler ID 0 den Choppergunner übernehmen und sie könnten 4 min ( also 240 Sekunden) fliegen.
    Wenn du den Beispiel-Chopper fliegen willst, lade das FS und tippe den Befehl "/chopper" ein. Dafür müssen die Botfiles, sowie das Botscript im Ordner "npcmodes" vorhanden sein.

    Ich warte schon gespannt auf das "Playerpilot" Update :D


    Dann hgw ^^
    Ist grade rausgekommen
    ->


    Ich bitte hierbei um Feedback, da, wie beschrieben, die Funktion ungetestet ist.

    Dann gehst du oben auf Showcode(falls du dein Programm noch offen hast)
    dann siehste dort createobject oder createdynamic.
    nimm irgendeins von denen am besten createdynamic und dann stehen schon die ganzen codes drunter.
    "RemoveBuildingForPlayer(playerid.....)"
    kopierst alles und fügst das unter "OnPlayerConnect"


    Erst lesen, denken und dann schreiben...
    Er will die Objekte in MTA und nicht in SAMP entfernen.

    Alternativ kann man auch die zwei Anweisungen (SendClientMessage,TogglePlayerControllable) auch durch ein "," trennen, sodass sie als ein Satement gelten und auch ohne Klammern aufgerufen werden.

    public Todescheck(playerid)
    {
    new Float:Health;
    GetPlayerHealth(playerid, Health);
    if(Health >= 5)
    {
    SendClientMessage(playerid, COLOR_YELLOW, "Hinweis: Du bist gestorben. Rufe ein Artzhelfer mit /medic!");
    TogglePlayerControllable(playerid, 0);
    }
    }

    Sagt denn Jemand, dass es nicht funktioniert?
    Es ist halt 1. übersichtlicher und
    2. wenn man so beschränkt ist und die Tabelle COUNT, AND ; SUM; ADD; MAX;MIN oder nach sonstigen MySQL Funktionen benennt failt der Query dank `` nicht.
    Und was laberst du mit Zahlen im Tabellennamen? Der Query

    SQL
    SELECT * FROM 1234tabelle


    würde auch reibungslos funktionieren...

    ` " wichtig sind.. omfg^^ Normale " ' " reichen vollkommen. Sofern man diese sowieso selten verwendet^^


    Du meinst also z.B, dass folgender MySQL Query funktioniert?
    ->

    SQL
    SELECT * FROM '247shop'


    Was wird dir der Herr MySQL Server wohl sagen? Richtig!

    Zitat

    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''247shop' LIMIT 0, 30' at line 1


    Denn ein ' beschreibt in JEDEM FALL einen Wert und keine Tabelle oder Spalte.

    Zitat

    Nachdem Vorfall gestern abend ziehe ich hier Resumé.
    Es ist echt unter aller Sau eine angebliches Gamemode preis zugeben, welches in wirklichkeit einen Trojaner enthält.
    Damit dies nun vorgebeugt werden kann, kommt ab jetzt jeder Quelltext als Roher Text in eine "pastebin".
    Fehlt der Quelltext werde ich persönlich euren Thread löschen und ihr erhaltet eine (Ver)warnung.


    Regeln für den Showroom