Problem mit Race system -> bzg der Checkpoints

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
  • Hallo liebe Community



    da ich mit dem SetPlayerRaceCheckpoint gehabe nicht zurecht komme (weil ich es irgendwie nicht hinkriege und verstehe -> sie samp wiki


    habe ich nun angefangen mit SetPlayerCheckpoint zu arbeiten und dementsprechend versucht das RaceSystem so zu bauen


    unter anderem habe ich mir dort überlegt zwischendurch ggf rechenaufgaben o.ä zu machen



    Naja kommen wir zum system


    /startevent also die Auswahl klappt soweit


    dann wird bei der Auswahl /joinevent freigegeben


    Spoiler anzeigen
    ocmd:joinevent(playerid,params[]){ switch (eventstart) { case 0: { //Mitte new vID = CreateVehicle(502,1156.4369,-897.5735,42.8511,183.1492,-1,-1,60); SetPlayerPos(playerid,1156.4369,-897.5735,42.8511); PutPlayerInVehicle(playerid,vID,0); eventstart = 2; SendClientMessage(playerid,CL_GREEEN,"Du bist dem Event beigetreten. Fahre nun an die Startlinie!"); jEvent[playerid] = 1; //SetPlayerCheckpoint(playerid, , 5.0); return 1; } //Rechts case 1: { new vID = CreateVehicle(503,1152.7489,-897.8755,42.8496,183.1492,-1,-1,60); SetPlayerPos(playerid,1152.7489,-897.8755,42.8496); PutPlayerInVehicle(playerid,vID,0); eventstart = 0; SendClientMessage(playerid,CL_GREEEN,"Du bist dem Event beigetreten. Fahre nun an die Startlinie!"); jEvent[playerid] = 1; return 1; } //Links case 2:{ new vID = CreateVehicle(502,1162.0453,-897.6024,42.8875,183.1492,-1,-1,60); SetPlayerPos(playerid,1162.0453,-897.6024,42.8875); PutPlayerInVehicle(playerid,vID,0); eventstart = 1; SendClientMessage(playerid,CL_GREEEN,"Du bist dem Event beigetreten. Fahre nun an die Startlinie!"); jEvent[playerid] = 1; return 1; } } return 1;}forward Racestart(playerid);public Racestart(playerid){ for(new i= 0; i<MAX_PLAYERS; i++) { if(jEvent[i] == 1 && LSRACE[i] == 1) continue; printf("jevent[%i] == 1 && LSRACE[%i] == 1",i,i); TogglePlayerControllable(i,0); SCMTOADMIN("Spieler im Rennen wurden unfreezed"); DisablePlayerCheckpoint(i); SetPlayerCheckpoint(i,1104.4375,-949.0429,42.8388,8); //1. Checkpoint SendClientMessage(i,RED,"GO GO GO!"); SendClientMessageToAll(RED,"GO GO GO! Das Rennen wurde gestartet!"); LSRACE[playerid] = 1; OnPlayerEnterCheckpoint(i); } //SetPlayerCheckpoint(playerid,1104.4375,-949.0429,42.8388,8); return 1;}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;
    }



    bei diesem sind 3 Startpunkte festgelegt damit nicht alle aufeinander spawnen


    von da aus fangen die Probleme an!


    Ich möchte ihnen direkt die Startlinie zeigen und wenn sie dort rein fahren freezen!
    es soll eine Variable gesetzt werden damit nur die die an der Linie stehen die nächsten Checkpoints sehen


    ich komme leider nicht weiter und weiß nicht wie ich das bauen soll dass die Checkpoints angezeigt werden
    tutti kompletti
    http://pastebin.com/UL7iTstv




    Es werden übrigens KEINE Checkpoints angezeigt






    Ich bin euch dankbar für jede Hilfe


    sebstverständlich auch erreichbar per Teamviewer auf Anfrage


    MFG


    Golemcraftler


    Jeffry ein fall für dein Superhirn :D

  • Bitte editier deinen Beitrag nochmal
    und stell den Editor von "Editor" auf Quellcode um.


    Dann kannst du deinen PAWN Quelltext auch richtig formatiert posten.


    Momentan ist er einzelig doch recht schweirig zu lesen :/

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

    Margarete Stokowski

  • 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. ;)

  • Jeffry



    also der Timer wird aufgerufen


    allerdings ist mir grad aufgefallen das nicht die Startlinie sondern der 1. Chekpoint (im Timer drinne) angezeigt wird


    SetPlayerCheckpoint(i,1104.4375,-949.0429,42.8388,8); //1. Checkpoint


    hier nochmal die beiden teile



    forward Racestart(playerid);
    public Racestart(playerid)
    {
    for(new i= 0; i<MAX_PLAYERS; i++)
    {
    if(jEvent[i] == 1 && LSRACE[i] == 1) continue;
    printf("jevent[%i] == 1 && LSRACE[%i] == 1",i,i);
    TogglePlayerControllable(i,1);
    SCMTOADMIN("Spieler im Rennen wurden unfreezed");
    DisablePlayerCheckpoint(i);
    SetPlayerCheckpoint(i,1104.4375,-949.0429,42.8388,8); //1. Checkpoint
    SendClientMessage(i,RED,"GO GO GO!");
    SendClientMessageToAll(RED,"GO GO GO! Das Rennen wurde gestartet!");
    LSRACE[playerid] = 1;
    OnPlayerEnterCheckpoint(i);

    }
    //SetPlayerCheckpoint(playerid,1104.4375,-949.0429,42.8388,8);
    return 1;
    }
    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,0);
    SCMTOADMIN("Spieler im Rennen wurden gefreezed");
    SetPlayerCheckpoint(i,1159.2834,-929.9013,43.23885,8); //Startlinie
    }
    return 1;
    }


    es wird halt nur der andere checkpoint aufgerufen welcher NICHT gelöscht wird

  • 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;
    }

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

    PAWN Quelltext 1 Race(playerid)
    auf?



    also siehts dann so aus?!



    bei OnPlayerEnterCheckpoint das habe ich gelöscht

    Hier alles zum Racesystem
    ocmd:joinevent(playerid,params[])
    {
    switch (eventstart)
    {
    case 0: {
    //Mitte
    new vID = CreateVehicle(502,1156.4369,-897.5735,42.8511,183.1492,-1,-1,60);
    SetPlayerPos(playerid,1156.4369,-897.5735,42.8511);
    PutPlayerInVehicle(playerid,vID,0);
    eventstart = 2;
    SendClientMessage(playerid,CL_GREEEN,"Du bist dem Event beigetreten. Fahre nun an die Startlinie!");
    jEvent[playerid] = 1;
    //SetPlayerCheckpoint(playerid, , 5.0);
    return 1;
    }
    //Rechts
    case 1: {
    new vID = CreateVehicle(503,1152.7489,-897.8755,42.8496,183.1492,-1,-1,60);
    SetPlayerPos(playerid,1152.7489,-897.8755,42.8496);
    PutPlayerInVehicle(playerid,vID,0);
    eventstart = 0;
    SendClientMessage(playerid,CL_GREEEN,"Du bist dem Event beigetreten. Fahre nun an die Startlinie!");
    jEvent[playerid] = 1;
    return 1;
    }
    //Links
    case 2:{
    new vID = CreateVehicle(502,1162.0453,-897.6024,42.8875,183.1492,-1,-1,60);
    SetPlayerPos(playerid,1162.0453,-897.6024,42.8875);
    PutPlayerInVehicle(playerid,vID,0);
    eventstart = 1;
    SendClientMessage(playerid,CL_GREEEN,"Du bist dem Event beigetreten. Fahre nun an die Startlinie!");
    jEvent[playerid] = 1;
    return 1;
    }
    }
    return 1;
    }
    forward Racestart(playerid);
    public Racestart(playerid)
    {
    for(new i= 0; i<MAX_PLAYERS; i++)
    {
    if(jEvent[i] == 1 && LSRACE[i] == 1) continue;
    printf("jevent[%i] == 1 && LSRACE[%i] == 1",i,i);
    TogglePlayerControllable(i,1);
    DisablePlayerCheckpoint(i);
    SetPlayerCheckpoint(i,1104.4375,-949.0429,42.8388,8); //1. Checkpoint
    SendClientMessage(i,RED,"GO GO GO!");
    SendClientMessageToAll(RED,"GO GO GO! Das Rennen wurde gestartet!");
    LSRACE[playerid] = 1;
    OnPlayerEnterCheckpoint(i);

    }
    //SetPlayerCheckpoint(playerid,1104.4375,-949.0429,42.8388,8);
    return 1;
    }
    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;
    }
    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,0);
    SCMTOADMIN("Spieler im Rennen wurden gefreezed");
    SetPlayerCheckpoint(i,1159.2834,-929.9013,43.23885,8); //Startlinie
    }
    return 1;
    }

  • okay also siehts nun so aus


    also jetzt für die ersten 2 als BSP

    OnPlayerEnterCheckpoint
    public OnPlayerEnterCheckpoint(playerid)
    {
    /* #define RacelinieLS 1159.2834,-929.9013,43.23885
    #define RacepointLS1 1104.4375,-949.0429,42.8388
    #define RacepointLS2 936.9182,-968.8925,38.5286
    #define RacePointLS3 804.7927,-1047.2712,25.1715*/

    OnPlayerEnterCheckpoint

    if(jEvent[playerid] == 1)
    {
    new string[256];
    if(LSRACE[playerid] == 1)
    {
    DisablePlayerCheckpoint(playerid);
    format(string,sizeof(string),"%s erreichte Checkpoint 1",SpielerName(playerid));
    SetTimerEx("Race",200,false,"i",playerid);
    LSRACE[playerid] = 2;
    SCMTOADMIN(string);
    return 1;
    }
    if(LSRACE[playerid] == 2)
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,804.7927,-1047.2712,25.1715,8);
    format(string,sizeof(string),"%s erreichte Checkpoint 2",SpielerName(playerid));
    LSRACE[playerid] = 3;
    SetTimerEx("Race",200,false,"i",playerid);
    SCMTOADMIN(string);
    return 1;
    }


    Jeffry

  • also so



    if(jEvent[playerid] == 1)
    {
    new string[256];
    if(LSRACE[playerid] == 1)
    {
    DisablePlayerCheckpoint(playerid);
    format(string,sizeof(string),"%s erreichte Checkpoint 1",SpielerName(playerid));
    SetTimerEx("Race",200,false,"i",playerid);
    SCMTOADMIN(string);
    return 1;
    }
    if(LSRACE[playerid] == 2)
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,804.7927,-1047.2712,25.1715,8);
    format(string,sizeof(string),"%s erreichte Checkpoint 2",SpielerName(playerid));
    SetTimerEx("Race",200,false,"i",playerid);
    SCMTOADMIN(string);
    return 1;
    }
    if(LSRACE[playerid] == 3)
    {
    //new string[128];
    DisablePlayerCheckpoint(playerid);
    //SetPlayerCheckpoint(playerid,,8);
    format(string,sizeof(string),"%s hat das Ziel erreicht!",SpielerName(playerid));
    SendClientMessageToAll(RED,string);
    return 1;
    }
    }


    Jeffry




    werde es eben mal ausprobieren


    beim Compilieren habe ich dort noch


    printf("%s = %i",SpielerName(playerid,LSRACE[playerid]));


    number of arguments does not match

  • also


    das mit den Checkpoints klappt soweit die werden soweit alle angezeigt


    jetzt sollen die spieler gefreezed werden wenn sie in die Startlinie fahren und unfreezed wenn /startrace benutzt wird


    /joinevent soll dann auch gesperrt werden (in diesem fall für 30 min da dies eine Eventsperre sein sol)


    hier nochmals der befehl /startrace und /joinevent


    /startrace
    ocmd:joinevent(playerid,params[])
    {
    switch (eventstart)
    {
    case 0: {
    //Mitte
    new vID = CreateVehicle(502,1156.4369,-897.5735,42.8511,183.1492,-1,-1,60);
    SetPlayerPos(playerid,1156.4369,-897.5735,42.8511);
    PutPlayerInVehicle(playerid,vID,0);
    eventstart = 2;
    SendClientMessage(playerid,CL_GREEEN,"Du bist dem Event beigetreten. Fahre nun an die Startlinie!");
    jEvent[playerid] = 1;
    SetPlayerCheckpoint(playerid,1159.2834,-929.9013,43.23885 , 5.0);
    return 1;
    }
    //Rechts
    case 1: {
    new vID = CreateVehicle(503,1152.7489,-897.8755,42.8496,183.1492,-1,-1,60);
    SetPlayerPos(playerid,1152.7489,-897.8755,42.8496);
    PutPlayerInVehicle(playerid,vID,0);
    eventstart = 0;
    SetPlayerCheckpoint(playerid,1159.2834,-929.9013,43.23885 , 5.0);
    SendClientMessage(playerid,CL_GREEEN,"Du bist dem Event beigetreten. Fahre nun an die Startlinie!");
    jEvent[playerid] = 1;
    return 1;
    }
    //Links
    case 2:{
    SetPlayerCheckpoint(playerid,1159.2834,-929.9013,43.23885 , 5.0);
    new vID = CreateVehicle(502,1162.0453,-897.6024,42.8875,183.1492,-1,-1,60);
    SetPlayerPos(playerid,1162.0453,-897.6024,42.8875);
    PutPlayerInVehicle(playerid,vID,0);
    eventstart = 1;
    SendClientMessage(playerid,CL_GREEEN,"Du bist dem Event beigetreten. Fahre nun an die Startlinie!");
    jEvent[playerid] = 1;
    return 1;
    }
    }
    return 1;
    }


    und /startrace


    forward Racestart(playerid);
    public Racestart(playerid)
    {
    for(new i= 0; i<MAX_PLAYERS; i++)
    {
    if(jEvent[i] == 1 && LSRACE[i] == 1) continue;
    printf("jevent[%i] == 1 && LSRACE[%i] == 1",i,i);
    TogglePlayerControllable(i,1);
    DisablePlayerCheckpoint(i);
    SetPlayerCheckpoint(i,1104.4375,-949.0429,42.8388,8); //1. Checkpoint
    SendClientMessage(i,RED,"GO GO GO!");
    SendClientMessageToAll(RED,"GO GO GO! Das Rennen wurde gestartet!");
    LSRACE[playerid] = 1;
    OnPlayerEnterCheckpoint(i);

    }
    //SetPlayerCheckpoint(playerid,1104.4375,-949.0429,42.8388,8);
    return 1;
    }


    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,0);
    SCMTOADMIN("Spieler im Rennen wurden gefreezed");
    SetPlayerCheckpoint(i,1159.2834,-929.9013,43.23885,8); //Startlinie
    }
    return 1;
    }



    danke nochmal Jeffry das hat mir alles schon sehr sehr geholfen ;)