brauche eure hilfe

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
  • Undzwar habe ich einen Nebenjob auf meinem Server, der über Checkpoints lauft.
    Also man steigt in den Müllwagen und der zeigt einen dann den Checkpoint.


    if(Points[playerid] == 1)
    {
    new vehicleid = GetPlayerVehicleID(playerid);
    for(new i=0; i<11; i++)
    if(vehicleid == trash[i])
    SendClientMessage(playerid,Orange,"Müll abgeholt. Gehalt pro Checkpoint '25$'");
    SetPlayerCheckpoint(playerid,192.5336,-1774.9198,4.3294,3);
    TogglePlayerControllable(playerid, 0);
    SendClientMessage(playerid,Weiß,"Müll wird abgeholt...");
    GivePlayerMoney(playerid,25);
    SetTimerEx("Wiederfahren", 1000*3, 0, "i", playerid);
    Points[playerid] = 2;
    return 1;
    }
    if(Points[playerid] == 2)
    {
    new vehicleid = GetPlayerVehicleID(playerid);
    for(new i=0; i<11; i++)
    if(vehicleid == trash[i])
    SetPlayerCheckpoint(playerid,208.3698,-1774.6583,4.3892,3);
    TogglePlayerControllable(playerid, 0);
    SendClientMessage(playerid,Weiß,"Müll wird abgeholt...");
    GivePlayerMoney(playerid,25);
    SetTimerEx("Wiederfahren", 1000*3, 0, "i", playerid);
    Points[playerid] = 3;
    return 1;
    }


    Das sind dann 2 Checkpoints.. versteht sich das es bei mehreren Checkpoints extrem viele Zeilen frisst.


    Kann man das irgendwie kleiner machen?

  • Ich würde switch - case benutzen.


    Da du eh immer den gleichen Code benutzt außer beim Checkpoint setzen und bei der Variable neu setzen.


    Also so



    new vehicleid = GetPlayerVehicleID(playerid);
    for(new i=0; i<11; i++)
    if(vehicleid == trash[i])
    SendClientMessage(playerid,Orange,"Müll abgeholt. Gehalt pro Checkpoint '25$'");
    switch (Points[playerid]) {
    case 1: {
    SetPlayerCheckpoint(playerid,192.5336,-1774.9198,4.3294,3);
    Points[playerid] = 2;
    }
    case 2: {
    SetPlayerCheckpoint(playerid,208.3698,-1774.6583,4.3892,3);
    Points[playerid] = 3;
    }
    // Weitere case
    }
    TogglePlayerControllable(playerid, 0);
    SendClientMessage(playerid,Weiß,"Müll wird abgeholt...");
    GivePlayerMoney(playerid,25);
    SetTimerEx("Wiederfahren", 1000*3, 0, "i", playerid);

    Die Macht etwas zu bewirken, ist in Dir. Du musst sie nur rauslassen


    cristiano-ronaldo-525-portugal-euro-2012-banner-wallpaper.jpg

  • Bau einfach ein Array mit den Checkpoint Koordinaten und erhöhe jedesmal den Wert von "Points[playerid]" um +1 und lese die nächsten Daten aus dem Array aus ;)
    Damit brauchst du auch den Text und das übrige Gerammel nur ein einziges Mal =)



    Hinweis: Keinen Kontakt über TeamViewer oder Skype !
    Grüßt den Fehlerklärbär von mir.
    Coming soon: Pawn-Café ( Concept-Sharing | Scripting-First-Aid )

  • array.
    Ich helf dir mal ein wenig:


    new Points[MAX_PLAYERS];


    Hier die Definition des Arrays:
    new CheckPointsMüll[/*Hier die Anzahl der Checkpoints rein, der erste liegt auf Platz 0*/][3] = {
    {192.5336,-1774.9198,4.3294},
    {208.3698,-1774.6583,4.3892} // Beim Letzten kommt "KEIN" Komma hin!


    };


    Dann folgt die Abfrage:

    public OnPlayerEnterCheckpoint(playerid)
    {
    new vehicleid = GetPlayerVehicleID(playerid);
    for(new i=0; i<11; i++)
    if(vehicleid == trash[i])
    SendClientMessage(playerid,Orange,"Müll abgeholt. Gehalt pro Checkpoint '25$'");
    DisablePlayerCheckpoint(playerid);
    if(Points[playerid]<sizeof(CheckPointsMüll)){Points[playerid]++;}else{Points[playerid]=0;}//Wir setzen die Variable neu, prüfen nebenbei, ob er schon alle CPs durch hat.
    TogglePlayerControllable(playerid, 0);//Timer setzen. In der Timer Funktion wird dann der neue CP gesetzt.
    SendClientMessage(playerid,Weiß,"Müll wird abgeholt...");
    GivePlayerMoney(playerid,25);
    SetTimerEx("Wiederfahren", 1000*3, 0, "i", playerid);
    return 1;
    }


    Jetzt nurnoch die Timer Funktion:
    (vorher bitte forwarden!)



    public Wiederfahren(playerid)
    {
    TogglePlayerControllable(playerid,1);//Spieler entfreezen
    SetPlayerCheckpoint(playerid,CheckPointsMüll[Points[playerid]][0],CheckPointsMüll[Points[playerid]][1],CheckPointsMüll[Points[playerid]][2],3);
    return 1;
    }


    Sollte in etwa passen ;)



    Hinweis: Keinen Kontakt über TeamViewer oder Skype !
    Grüßt den Fehlerklärbär von mir.
    Coming soon: Pawn-Café ( Concept-Sharing | Scripting-First-Aid )

  • Klar, du brauchst dann halt den Integer "Points" nichtmehr, weil du einfach ein Random setzen würdest.


    Sähe dann insgesamt so aus:


    public OnPlayerEnterCheckpoint(playerid)
    {
    new vehicleid = GetPlayerVehicleID(playerid);
    for(new i=0; i<11; i++)
    if(vehicleid == trash[i])
    SendClientMessage(playerid,Orange,"Müll abgeholt. Gehalt pro Checkpoint '25$'");
    DisablePlayerCheckpoint(playerid);
    TogglePlayerControllable(playerid, 0);//Timer setzen. In der Timer Funktion wird dann der neue CP gesetzt.
    SendClientMessage(playerid,Weiß,"Müll wird abgeholt...");
    GivePlayerMoney(playerid,25);
    SetTimerEx("Wiederfahren", 1000*3, 0, "i", playerid);
    return 1;



    public Wiederfahren(playerid)
    {
    TogglePlayerControllable(playerid,1);//Spieler entfreezen
    new rand=random(sizeof(CheckPointsMüll));
    SetPlayerCheckpoint(playerid,CheckPointsMüll[rand][0],CheckPointsMüll[rand][1],CheckPointsMüll[rand][2],3);
    return 1;
    }



    Hinweis: Keinen Kontakt über TeamViewer oder Skype !
    Grüßt den Fehlerklärbär von mir.
    Coming soon: Pawn-Café ( Concept-Sharing | Scripting-First-Aid )