Kanal Arbeiter Problem

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 Community,


    Ich habe ein Problem mit einem Job den ich gestern Angefangen habe zu Scripten der aber nicht Richtig Funktioniert.


    Hier die Erklärung wie es Sein sollte:
    Also man startet den Job mit /startkanal dann muss man in den Kanal rein gehen damit der der Spieler die Checkpoints bekommt damit er die ganzen Rohre Repariert.
    Mein Problem ist aber das er nur einen Checkpoint anzeigt und mehr dann auch nicht.
    Hier ist mal der Code.


    enum rohrtruk{Float:rorx,Float:rory,Float:rorz};
    new const kanalrohre[][rohrtruk] = {
    {1929.8137,-1924.8713,54.4226},
    {1956.0355,-1926.3319,54.6801},
    {1987.3923,-1924.7682,54.4044},
    {2010.2902,-1924.1105,56.0204},
    {2037.3839,-1926.7302,54.7571},
    {2081.1785,-1924.9680,55.0217},
    {2105.1272,-1933.3962,54.8906},
    {2120.3411,-1929.2815,53.7099},
    {2140.9414,-1939.9978,54.9471},
    {2152.5525,-1936.1401,53.9214}
    };


    if(IsPlayerInRangeOfPoint(playerid,1,2608.4004,-2134.6606,0.0480))//Kanal Enter
    {
    if(SpielerInfo[playerid][Job]==10)
    {
    SetPlayerCheckpoint(playerid,1929.8137,-1924.8713,54.4226,1.0);
    SetPlayerPos(playerid,1920.2080,-1925.5753,54.5467);
    TextDrawShowForPlayer(playerid,freeze_Textdraw0);
    TextDrawShowForPlayer(playerid,freeze_Textdraw1);
    TextDrawShowForPlayer(playerid,freeze_Textdraw2);
    TogglePlayerControllable( playerid, 0 );
    SetTimerEx("FreezeTimer", 5000, false, "i", playerid);
    }
    return 1;
    }


    Und bei OnPlayerEnterCheckpoint:
    if(SpielerInfo[playerid][Job]==10)
    {
    if(IsPlayerInRangeOfPoint(playerid,5,2608.4004,-2134.6606,0.0480))
    {
    if(JobDuty[playerid]==0)
    {
    DisablePlayerCheckpoint(playerid);
    new rohr;
    if(rohr==1)
    {
    for(new i=0; i<=sizeof(kanalrohre); i++)
    {
    if(IsPlayerInRangeOfPoint(playerid,5,kanalrohre[i][rorx],kanalrohre[i][rory],kanalrohre[i][rorz]))
    {
    DisablePlayerCheckpoint(playerid);
    SetCameraBehindPlayer(playerid);
    TogglePlayerControllable(playerid, false);
    ApplyAnimation(playerid, "BEACH", "Lay_Bac_Loop", 4.0, 1, 0, 0, 0, 0);
    SetTimerEx("UnfreezeRepairPlayer",4500, false, "d", playerid);
    SetPlayerCheckpoint(playerid,kanalrohre[i+1][rorx],kanalrohre[i+1][rory],kanalrohre[i+1][rorz],1.0);
    {
    SendClientMessage(playerid, COLOR_ROT, "Du hast dir durch dieses Rohr 50€ verdient. Gehe zum Nächsten Checkpoint.");
    GibGeld(playerid,50);
    SpielerSpeichern(playerid);
    }
    return 1;
    }
    else if(IsPlayerInRangeOfPoint(playerid, 3.0, 2170.6145,-1944.5775,54.8270))
    {
    {
    SendClientMessage(playerid, COLOR_GRAD2, "* Du bist nun Fertig mit dem Job. Deine endsumme beträgt (+$500).");
    SendClientMessage(playerid, COLOR_GRAD4, "* Um erneut die Rohre zu Repairen, musst du lediglich erneut in den Dienst gehen.");
    JobDuty[playerid] = 0;
    SetPlayerSkin(playerid, SpielerInfo[playerid][Skin]);
    }
    }
    }
    }
    }
    }
    }


    Hoffe mir kann einer Helfen weil bei dem Checkpoint den ich bekomme und Rein laufe passiert nichts.

  • new rohr;
    if(rohr==1)
    {


    Schauen wir uns diesen Code mal an...


    In Pawn, werden Variablen direkt mit 0 initialisiert beim deklarieren, somit macht das hier keinen Sinn, da der Wert niemals direkt 1 sein wird...


    Entweder du machst es so:


    new rohr=1;


    oder änderst deine if-Abfrage zu:


    if(!rohr)
    //bzw
    if(rohr == 0)


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Du hattest dort eine weitere IsPlayerInRangeOfPoint Abfrage drin, daher ging es nicht. Außerdem waren noch ein paar Klammern zu viel vorhanden, die habe ich auch gleich entfernt.
    Außerdem war die Abfrage ob JobDuty 0 ist, das habe ich zu nicht 0 geändert, weil du es am Ende auf 0 setzt.
    Gegebenenfalls musst du es beim Start auf 1 setzen.


    Schreibe es so:
    if(SpielerInfo[playerid][Job]==10)
    {
    if(JobDuty[playerid]!=0)
    {
    for(new i=0; i<=sizeof(kanalrohre); i++)
    {
    if(IsPlayerInRangeOfPoint(playerid,5,kanalrohre[i][rorx],kanalrohre[i][rory],kanalrohre[i][rorz]))
    {
    DisablePlayerCheckpoint(playerid);
    SetCameraBehindPlayer(playerid);
    TogglePlayerControllable(playerid, false);
    ApplyAnimation(playerid, "BEACH", "Lay_Bac_Loop", 4.0, 1, 0, 0, 0, 0);
    SetTimerEx("UnfreezeRepairPlayer",4500, false, "d", playerid);
    SetPlayerCheckpoint(playerid,kanalrohre[i+1][rorx],kanalrohre[i+1][rory],kanalrohre[i+1][rorz],1.0);
    SendClientMessage(playerid, COLOR_ROT, "Du hast dir durch dieses Rohr 50€ verdient. Gehe zum Nächsten Checkpoint.");
    GibGeld(playerid,50);
    SpielerSpeichern(playerid);
    return 1;
    }
    }
    if(IsPlayerInRangeOfPoint(playerid, 3.0, 2170.6145,-1944.5775,54.8270))
    {
    DisablePlayerCheckpoint(playerid);
    SendClientMessage(playerid, COLOR_GRAD2, "* Du bist nun Fertig mit dem Job. Deine endsumme beträgt (+$500).");
    SendClientMessage(playerid, COLOR_GRAD4, "* Um erneut die Rohre zu Repairen, musst du lediglich erneut in den Dienst gehen.");
    JobDuty[playerid] = 0;
    SetPlayerSkin(playerid, SpielerInfo[playerid][Skin]);
    return 1;
    }
    }
    }

  • Okay das kalppt Schonmal :)
    Aber die Checkpoints werden nicht gezeigt also auf der Karte schon und wen ich rein laufe auch aber ich sehe die nicht.
    Also man kann die nicht Bildlich Sehen.
    Und wen ich beim letzten Checkpoint bin müsste ich eigentlich die Nachricht bekommen das ich 500$ verdient habe und so weiter.
    Diese Nachricht bekomme ich aber nicht und bin immer noch im selben Skin und JobDuty.

    2 Mal editiert, zuletzt von JOK3R ()

  • Die Position ist auf einem selbst gemappten Objekt wie es scheint.
    Durch Objekte die selbst erstellt sind fallen die Checkpoints durch.
    http://wiki.sa-mp.com/wiki/Function:SetPlayerCheckpoint


    Du kannst versuchen ein Pickup mit der ID 1317 zu setzen, an der Position.
    http://gta-sa-mp.de/forum/inde…objPage=showID&objID=1317


    Oder du versuchst:
    http://forum.sa-mp.com/showthread.php?t=250174
    Damit geht es vielleicht.

  • Unter den Includes:
    new jobPickup[MAX_PLAYERS] = {-1,...};


    Wo der Checkpoint gesetzt wird:
    if(jobPickup[playerid] != -1) DestroyPickup(jobPickup[playerid]);
    jobPickup[playerid] = CreatePickup(/*...ausfüllen...*/);


    Beim beenden des Jobs:
    if(jobPickup[playerid] != -1)
    {
    DestroyPickup(jobPickup[playerid]);
    jobPickup[playerid] = -1;
    }