Beiträge von Jeffry

    Ahh, ok.
    Schreibe es so, da haben die else's gefehlt. Eigentlich müsste es dir den letzten Checkpoint angezeigt haben.


    forward Race(playerid);
    public Race(playerid)
    {
    if(LSRACE[playerid] == 1)
    {
    SetPlayerCheckpoint(playerid,936.4375,-968.8925,38.5286,8);
    LSRACE[playerid] = 2;
    }
    else if(LSRACE[playerid] == 2)
    {
    SetPlayerCheckpoint(playerid,804.7927,-1047.2712,25.1715,8);
    LSRACE[playerid] = 3;
    }
    else if(LSRACE[playerid] == 3)
    {
    SetPlayerCheckpoint(playerid,804.7927,-1047.2712,25.1715,8);
    LSRACE[playerid] = 4;
    }
    else if(LSRACE[playerid] == 4)
    {

    LSRACE[playerid] = 5;
    }
    else if(LSRACE[playerid] == 5)
    {

    LSRACE[playerid] = 6;
    }

    //RaceLS[playerid];// = RaceLS[playerid] +1;
    printf("%s = %i",SpielerName(playerid,RaceLS[playerid]);
    return 1;
    }

    Syntaktisch erst mal nichts.
    Schreibe es dennoch so, dann ist es auch semantisch richtig:
    if(newkeys == KEY_NO)//Taste N
    {
    if(IsPlayerInRangeOfPoint(playerid,5.0,597.5695,-1552.5271,25.9700))//Fahrschule Waffen Punkt
    {
    if(IsPlayerInFrac(playerid, 11))
    {
    ShowPlayerDialog(playerid,DIALOG_FAHRSCHULEWAFFEN, DIALOG_STYLE_LIST, "Fahrschule", "{FF0008}1: {FFFBFF}Schutzweste\n{FF0008}2: {FFFBFF}Spray", "Auswählen", "Abbrechen");
    }
    else
    {
    SendClientMessage(playerid,GRAU,"Du bist nicht bei der Fahrschule!");
    }
    }
    if(IsPlayerInRangeOfPoint(playerid,5.0,X,Y,Z))//HitmanWaffen Punkt
    {
    if(IsPlayerInFrac(playerid, 2))
    {
    ShowPlayerDialog(playerid,DIALOG_HITMANWAFFE, DIALOG_STYLE_LIST, "Hitman", "{FF0008}1: {FFFBFF}Sniper\n{FF0008}2: {FFFBFF}M4", "Auswählen", "Abbrechen");
    }
    else
    {
    SendClientMessage(playerid,GRAU,"Du bist nicht bei den Hitmans!");
    }
    }
    }


    Falls du immer noch Errors bekommst, poste bitte das ganze Callback (public).

    An sich (abgesehen davon, dass es nicht dynamisch ist) passt es eigentlich. Nur hier hast du einen kleinen Fehler gemacht, deshalb wird dir der Checkpoint der Startlinie nicht angezeigt:
    ocmd:startrace(playerid,params[])
    {
    SetTimerEx("Racestart",10000,false,"");
    SendClientMessageToAll(CL_ORANGE,"Das Rennen startet in 10 Sekunden");
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(jEvent[i] == 1) continue;
    TogglePlayerControllable(i,1);
    SetPlayerCheckpoint(i,1159.2834,-929.9013,43.23885,8); //Startlinie
    }
    return 1;
    }
    Ändere die Abfrage zu:
    if(jEvent[i] != 1) continue;


    Außerdem solltest du bei dem Racestart Callback das SendClientMessageToAll aus der Schleife nehmen. ;)

    Ahhh, ja das ist klar. Du stehst neben dem Fahrzeug und wechselst den Clan/Gang? Dann macht das natürlich Sinn, da das Fahrzeug für dich noch immer gesperrt ist.
    Da müsstest du dan entweder den Code nehmen, den Icy. gepostet hat (da der ja auf den Spieler und nicht auf das Fahrzeug zugreift), oder du fügst bei dem Code, mit dem du die Gang wechselst den Code mit SetVehicleParamsForPlayer (den aus deinem OnPlayerEnterVehicle) ohne die GetPlayerVehicleID-Abfrage hinzu.
    Sprich eine Schleife durch alle diese Fahrzeuge, die dann entsperrt oder gesperrt werden, je nach dem. Auch wenn du davor stehst.

    So kannst du es schreiben:


    dcmd_ranking(playerid,params[])
    {
    #pragma unused params
    new CN1[128],CN2[128],CN3[128],CP1,CP2,CP3,string[256],wert,name[128];
    for(new c=0;c<MAX_CLANS;c++)
    {
    format(string,sizeof(string),"pkt%d",c);
    wert = dini_Int("Clans/ranking.txt",string);
    format(string,sizeof(string),"name%d",c);
    format(name, sizeof(name), dini_Get("Clans/ranking.txt", string));

    if(wert > CP3)
    {
    CP3=wert;
    format(CN3, sizeof(CN3), name);
    }
    if(wert > CP2)
    {
    CP3 = CP2;
    CN3 = CN2;
    CP2=wert;
    format(CN2, sizeof(CN2), name);
    }
    if(wert > CP1)
    {
    CP2 = CP1;
    CN2 = CN1;
    CP1 = wert;
    format(CN1, sizeof(CN1), name);
    }
    }
    format(string, sizeof(string),"Top 3 Clan's:\n \n1. Name: %s - Punkte: %d\n2. Name: %s - Punkte: %d\n3. Name: %s - Punkte: %d",CN1,CP1,CN2,CP2,CN3,CP3);
    ShowPlayerDialog(playerid, DIALOG_RANKING, DIALOG_STYLE_MSGBOX,".:: Clan Ranking ::.",string,"Schließen","");
    return 1;
    }


    Bei drei Pätzen ist es relativ egal ob du es so machst oder mit einer Schleife.
    Angenommen du hättest 100 Plätze, dann kannst du ja nicht alles hinschreiben, da müsstest du eine Schleife verwenden.


    Ich habe dir es aber erst mal ohne Schleife gemacht, damit du den Unterschied zu deiner Variante siehst, und damit du es besser verstehst und nachvollziehen kannst.


    Mit einer Schleife würde es so aussehen:

    Spoiler anzeigen
    dcmd_ranking(playerid,params[])
    {
    #pragma unused params
    new CN[3][128],CP[3],string[256],wert,name[128];
    for(new c=0;c<MAX_CLANS;c++)
    {
    format(string,sizeof(string),"pkt%d",c);
    wert = dini_Int("Clans/ranking.txt",string);
    format(string,sizeof(string),"name%d",c);
    format(name, sizeof(name), dini_Get("Clans/ranking.txt", string));

    if(wert > CP[sizeof(CP)-1])
    {
    CP[sizeof(CP)-1] = wert;
    format(CN[sizeof(CP)-1], 128, name);
    }
    for(new i=sizeof(CP)-2; i>=0; i--)
    {
    if(wert > CP[i])
    {
    CP[i+1] = CP[i];
    format(CN[i+1], 128, CN[i]);
    CP[i]=wert;
    format(CN[i], 128, name);
    }
    else break;
    }
    }
    format(string, sizeof(string),"Top %d Clan's:\n \n",sizeof(CN));

    for(new i=0; i<sizeof(CN); i++)
    {
    format(string, sizeof(string),"%s%d. Name: %s - Punkte: %d\n",string,i+1,CN[i],CP[i]);
    }
    ShowPlayerDialog(playerid, DIALOG_RANKING, DIALOG_STYLE_MSGBOX,".:: Clan Ranking ::.",string,"Schließen","");
    return 1;
    }


    Wie du siehst macht es von der Größe und dem Aufwand kaum einen Unterschied, aber bei 100 Plätzen würde es einen erheblichen Unterschied machen.
    Es gibt sicher noch effizientere Sortiermöglichkeiten hier, aber diese ist relativ anschaulich, da sie das gleiche Prinzip verwendet wie der Code oben.


    Kannst ja beide mal ausprobieren, müsste bei beiden das gleiche rauskommen. ;)

    ICy.:
    TogglePlayerControllable(playerid,0);
    TogglePlayerControllable(playerid,1);
    Sonst kann mann sich gar nicht mehr bewegen ;)


    Nur, dass bei der Methode eben die einsteigen Animation nicht angezeigt wird. Für manche Server vielleicht nicht wirklich schön.

    Ok, heißt:
    Random => Hinten => Random => Hinten => ... => nach 10 Mal Ende. Ja?


    Und was hat es mit den Schleifen durch die Fahrzeuge auf sich? Muss man in einem der beiden Fahrzeuge sein, um den Checkpoint betreten zu können? Auch den Checkpoint, hinter dem Fahrzeug?

    Nun gut es funktioniert halbwegs, das neon geht weg, aber wenn ich einschalte kommt es nicht mehr ? :/


    Hast du den Befehl genau so wie ich es dir gegeben habe? Da kann ich das eigentlich nicht nachvollziehen. Kannst du den Befehl mal posten, wie du ihn hast?

    Macht er doch schon.

    Zitat

    [18:27:17] Loading plugin: mysql.so
    [18:27:17] Failed (libmysqlclient_r.so.16: cannot open shared object file: No such file or directory)


    Lade dir das MySQL Plugin nochmal herunter und nutze die mysql_static.so, die hat diese Library bereits inkludiert.