Beiträge von Kaliber

    Naja, bei deinem Code versteh ich beim ersten hingucken nur Bahnhof o.o


    Schau dir einfach nur an, wo Role in dem Code steht...


    Dann siehst du ja, wie ich playerid nutze..bzw was du dafür einsetzen musst...


    Das kannst du jetzt für dich einsetzen...


    oder willst du lieber so eine Funktion:



    //Nutzung:
    new a,b;
    GetRandomPlayer(a,b);
    //in a und b steht dann die playerid von einem random Spieler!
    //Wenn 2 Leute online sind, gibt es nur ein Ergebnis und das steht in a
    //Sobald du aber 2 Ergebnisse haben willst, steht es in a und b
    //Wenn nur 1 Ergebnis da ist, ist b = 0



    stock GetRandomPlayer(&first, &sec) {
    for(new i,list[MAX_PLAYERS],idx; i<MAX_PLAYERS; i++) {
    if(IsPlayerConnected(i)) list[idx] = i,idx++;
    if(i == MAX_PLAYERS-1) {
    if(idx < 2) break;
    else if(idx == 2) return first = list[random(idx)],0;
    else {
    first = list[random(idx)];
    for(;;) {
    sec = list[random(idx)];
    if(first != sec) return 0;
    }
    }
    }
    }
    return 0;
    }


    Vielleicht hilft dir das ja ^^


    mfg. :thumbup:

    vielleicht kann ja wer da irgendwas verbessern


    Abgesehen von der AudioStream Funktion, stimmt die Grundlage für diese if-Abfrage nicht :wacko:


    Lern doch mal die Basics, dass man bei Pawn (normalerweise) Semikolons setzt..und bei if-Abfragen für mehrere Zeilen geschweifte Klammern nutzt :rolleyes:


    if((x > -992.5172 && x < 4000.0000) && (y < 528.0000 && y > -4000.0000)) {
    PlayAudioStreamForPlayer(payerid,"http://somafm.com/tags.pls");
    SendClientMessageToAll(HELLROT,"Es wurde ein Feuer in Los Santos gemeldet!");
    SendClientMessageToAll(-1,"{2980b9}=========={d04133}Feueralarm in Los Santos{2980b9}==========");
    }


    mfg. :rolleyes:

    Sollten allerdings 6 Spieler online sein, soll auch 2 dieser 6 eine Variable zugewiesen werden.


    Schau dir meine Funktion doch an...das ist schon impliziert.


    Kannst du vielleicht auch was zu deinem Code schreiben...ich weiß nicht so recht, was du jetzt von mir willst, was ich mit deinem Code soll?!


    mfg. :rolleyes:

    Hier eine Möglichkeit:


    //Oben im Script:
    new Role[MAX_PLAYERS];


    //Und dann diese Funktion:
    for(new i,list[MAX_PLAYERS],idx; i<MAX_PLAYERS; i++) {
    if(IsPlayerConnected(i)) list[idx] = i,idx++;
    if(i == MAX_PLAYERS-1) {
    if(idx < 2) break;
    else if(idx == 2) Role[random(idx)] = 1;
    else {
    new tmp = random(idx),tmp2;
    Role[tmp] = 1;
    for(;;) {
    tmp2 = random(idx);
    if(tmp != tmp2) break;
    }
    Role[tmp2] = 1;
    }
    }
    }


    Dann hast du Role genauso wie du es wolltest ;)


    mfg. :thumbup:

    Ich gebe dir mal ein Beispiel:


    //Unter OnPlayerCommandText
    new string[64],oldvalue;
    //oldvalue erstmal halt mit nem SELECT Statement herausfinden von dem Befehl (auch hier filter(cmdtext) nutzen
    format(string,sizeof string,"UPDATE table_name SET counter=%d WHERE cmd='%s';",oldvalue,filter(cmdtext)); //Halt hier ein update statement


    //Und die filter Funktion (returnt nur den Befehl-Namen mit)
    stock filter(const cmd[]) {
    new buffer[32];
    return strmid(buffer,cmd,1,strfind(cmd," "),sizeof buffer),buffer; //Mach aus der 1 eine 0 wenn du einen / davor haben willst
    }


    Hoffe das meintest du...ist nicht sehr gut formuliert was du eigentlich willst, aber ich hoffe ich konnte helfen ^^


    mfg. :thumbup:

    zu:


    Quatsch :wacko:


    Weißt du eigentlich was das macht, das sorgt nur dafür, dass da z.B. 02:xx steht..also eine null vor der Zahl..bei dir jetzt eben nicht mehr :pinch:
    Zudem kannst du nicht einfach die %s stehen lassen...wenn du alles andere weg gemacht hast! :wacko:


    Wenn du es elegant lösen willst, mach es so:


    getdate(year, month, day),gettime(hour, minute, second);
    format(string, sizeof string, "%02d/%02d/%d", day, month, year);
    TextDrawSetString(Date, string);
    format(string, sizeof string, "%02d:%02d:%02d", hour, minute, second);
    TextDrawSetString(Time, string);


    mfg. :rolleyes:

    Die Autos haben immer noch die "XY746373" Nummernschilder.


    Mach es mal so:


    for(new i; i<sizeof lvpd; i++) SetVehicleNumberPlate(lvpd[i], "LVPD");
    for(new i; i<sizeof lspd; i++) SetVehicleNumberPlate(lspd[i], "LSPD");
    for(new i; i<sizeof sfpd; i++) SetVehicleNumberPlate(sfpd[i], "SFPD");
    for(new i; i<sizeof medics; i++) SetVehicleNumberPlate(medics[i], "Sanitäter");


    mfg. :thumbup:

    (z.B. Desert Eagle, AK47 usw).


    Du kannst die Funktion die seit 0.3x verfügbar ist nutzen: TextDrawSetPreviewModel


    und dann kannste die modelids der Waffen nutzen um sie als TextDraw anzuzeigen ;)


    Kurzer ausschnitt:


    Quelle: http://wiki.sa-mp.com/wiki/Game_Object_ID_List


    mfg. :thumbup:

    Ich möchte gerne Feedback, Kritik und Verbesserungsvorschläge.


    Wenn du new zum deklarieren einer Variable benutzt, ist das in dem Fall suboptimal, da dann keine andere Variable im Gamemode so heißen kann.


    Deshalb solltest du static nehmen. Desweiteren ist dein else unnötig, da durch das return die Funktion eh beendet wird.


    Außerdem kannst du das zusammenfassen, dann wird der Code schneller, schau:


    //GetFuncSpeed by SynonymousZ Edit by Kaliber
    #if defined _GetFuncSpeed_included
    #endinput
    #endif
    #define _GetFuncSpeed_included
    static bool:getfuncspeed,count;
    stock GetFuncSpeed() {
    if(!getfuncspeed) return getfuncspeed=true,count=GetTickCount(),-1;
    return getfuncspeed=false,GetTickCount()-count;
    }


    Aber...ist jetzt nicht so spektakulär und nützlich die Funktion, da man auch ganz normal mit GetTickCount arbeiten kann und die Tatsache, dass du einen Funktionsaufruf machst, dass die Performance zwar nicht bei einem, aber zum Beispiel bei 10000 Aufrufen beeinflusst ;) Deshalb ist das evtl nicht ganz so gut, aber trotzdem nette Idee :D


    //Edit: Joa...das D hab ich wohl ausversehen gelöscht :rolleyes:


    mfg. :thumbup: