Schranke bewegt sich nicht

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


    habe schon einiges Probiert doch mein Problem besteht immer noch das sich meine Schranke nicht bewegt oder es im Boden Verschwindet.

    Wollte Fragen woran es liegen könnte oder ich irgendwas übersehe.


    Hier mal mein geschnippsel


    #include <a_samp>


    #define FILTERSCRIPT

    #if defined FILTERSCRIPT

    #pragma tabsize 0


    forward GateClosezoll1();




    #define Rot 0xFF000FFF

    #define Blau 0x0037FFFF

    #define Weiß 0xFEFEFEFF

    #define Grün 0x00FF14FF



    /

    public OnFilterScriptInit()

    {

    print("\n========================================");

    print("=======Meine Zollstationen========");

    print("========================================\n");

    //===================================================================================//


    CreateObject(966, 636, -1190, 17.4, 0, 358, 30);

    CreateObject(968, 635.79999, -1190.1, 18.3, 0, 268, 30);//Schranke zum Bewegen




    Create3DTextLabel("Willkommen an der Zollstation Tippe /zoll um den Zoll zu passieren",0xFFFFFFAA,634.2861,-1195.9208,18.1169,40.0,0,0);//Zoll -1-

    return 1;

    }


    public OnPlayerCommandText(playerid, cmdtext[])

    {

    if(strcmp(cmdtext, "/zoll", true) == 0)

    {

    if(IsPlayerInRangeOfPoint(playerid,5.0,634.2861,-1195.9208,18.1169))

    {

    MoveObject(968, 635.79999, -1190.1, 18.3, 1.0, 268-0,001, 30);

    SendClientMessage(playerid,Rot,"Mautgebühr 500€");

    GameTextForPlayer(playerid, "~g~Mautgebuehr: ~r~-500$", 5000, 1);

    GivePlayerMoney(playerid,-500);

    Create3DTextLabel("Willkommen an der Zollstation Tippe /zoll um den Zoll zu passieren",0xFFFFFFAA,634.2861,-1195.9208,18.1169,40.0,0,0);

    SetTimer("zoll1",5000,false);

    }

    else

    {

    SendClientMessage(playerid,Rot,"Sie sind an keiner Zollstation!");

    return 1;

    }

    return 1;

    }

    return 0;

    }


    public GateClosezoll1()

    {

    MoveObject(968, 635.79999, -1190.1, 18.3, 1.0, 268+0,001, 30);

    SetTimer("zoll1",5000,false);

    return 1;

    }


    #endif


    Freue mich um jede Hilfe, habe auch etwas recherchiert aber brauche jemand der es mir erklärt Danke schonmal.

  • Gönn dir mal Tutorials

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    Einmal editiert, zuletzt von Exclusive FiveM Scripts ()

    • Offizieller Beitrag

    Moin,

    das Ganze wird wohl daran liegen, dass du das Object nicht als Variable erstellst und somit statt der objectid einen festen Wert mitgibst.

    Als kleines Beispiel siehst du hier die Deklaration der Variable im Wiki: https://sampwiki.blast.hk/wiki/MoveObject

    Hier nochmal zwei Video Tutorials dazu:

  • Vielen Dank ich schreibe es um und Versucher es nocheinmal


    So habe es nochmal Probiert irgendwie mag es nicht so wie ich es haben mag.

    Die Schranke rotiert nicht in richtung Y Achse sonder Z Achse, habe alle Koordinaten durchprobiert und obwohl ich die Geschwindigkeit langsam habe reißt sie auf.

    Schließen tut sie auch nicht nachdem deer Timer abgelaufen ist, momentan weiß ich nicht mehr weiter im Notfall nehme ich ein anderes Objekt.

    Eventuell habt ihr noch tipps mein Code sieht jetzt so aus.


    #include <a_samp>


    #define FILTERSCRIPT

    #if defined FILTERSCRIPT

    #pragma tabsize 0


    //====DEFINIERE ZOLL ====//

    forward GateClosezoll1();


    new schranke;


    //======Farben====//

    #define Rot 0xFF000FFF

    #define Blau 0x0037FFFF

    #define Weiß 0xFEFEFEFF

    #define Grün 0x00FF14FF



    //====ERSTELLE OBJEKTE====//

    public OnFilterScriptInit()

    {

    print("\n========================================");

    print("=======Meine Zollstationen========");

    print("========================================\n");

    //===================================================================================//


    CreateObject(966, 636, -1190, 17.4, 0, 358, 30);

    schranke = CreateObject(968, 635.79999, -1190.1, 18.3, 0, 268, 30);//Schranke zum Bewegen




    Create3DTextLabel("Willkommen an der Zollstation Tippe /zoll um den Zoll zu passieren",0xFFFFFFAA,634.2861,-1195.9208,18.1169,40.0,0,0);//Zoll -1-

    return 1;

    }


    public OnPlayerCommandText(playerid, cmdtext[])

    {

    if(strcmp(cmdtext, "/zoll", true) == 0)

    {

    if(IsPlayerInRangeOfPoint(playerid,5.0,634.2861,-1195.9208,18.1169))

    {

    MoveObject(schranke, 635.79999, -1190.1, 18.3, 0.0002, 268-0.001, 30, 0.0);

    SendClientMessage(playerid,Rot,"Mautgebühr 500€");

    GameTextForPlayer(playerid, "~g~Mautgebuehr: ~r~-500$", 5000, 1);

    GivePlayerMoney(playerid,-500);

    Create3DTextLabel("Willkommen an der Zollstation Tippe /zoll um den Zoll zu passieren",0xFFFFFFAA,634.2861,-1195.9208,18.1169,40.0,0,0);

    SetTimer("zoll1",5000,false);

    return 1;

    }

    if(!IsPlayerInRangeOfPoint(playerid,5.0,634.2861,-1195.9208,18.1169))

    {

    MoveObject(schranke, 635.79999, -1190.1, 18.3, 0.0002, 268+0.001, 30, 0.0);

    SetTimer("zoll1",1000,false);

    return 1;

    }

    else

    {

    SendClientMessage(playerid,Rot,"Sie sind an keiner Zollstation!");

    return 1;

    }

    }

    return 0;

    }


    #endif

    Einmal editiert, zuletzt von FitesTopu () aus folgendem Grund: Neuigkeiten

    • Hilfreich

    Mal ein paar generelle Tipps:

    • #pragma tabsize 0 gehört wie goto zu den "verbotenen" Keywords. Wer sowas verwendet sorgt dafür, dass der Code komplett unsauber und unbrauchbar wird. Ohne vernünftige Logik und Zeileneinrückung ist für andere der Code quasi komplett unleserlich. Und auch für einen selbst, wie man hier schön sieht. Also mach dir das Leben selbst leicht und versuche etwas saubereren Code zu schreiben (indem du alles einrückst mit TAB).
    • Im Forum bitte immer den Code BBCode nutzen, wenn man Code schreibt. Am Besten mit Syntax Hervorhebung (in diesem Fall käme C der Pawn Syntax sehr nahe.)
    • Du solltest einen Streamer nutzen (also CreateDynamicObject) und nicht CreateObject, da du sonst sehr schnell an das Objekt-Limit von 1000 Objekten stößt und keine weiteren Objekte mehr geladen werden. Auch für die Spieler läuft das Spiel flüssiger, wenn nicht unnötig viele Objekte geladen werden.
    • Du solltest einen "CMD-Prozessor" verwenden, wie ocmd/zcmd/ycmd oder am Besten Pawn.CMD. Mit "strcmp" sorgst du dafür, dass der Server für jeden Befehl immer länger und länger benötigt diesen zu verarbeiten. Des Weiteren wird es sehr unübersichtlich jeden Befehl in einen Callback zu packen.
    • So wie du hier das Geldsystem verwendest, ist es für den Client sehr einfach Geld zu cheaten! Man kann dies verhindern, indem du das Geld Serverseitig trackst. Aus diesem und vielen Weiteren Gründen aus dieser Liste, ist es deshalb oft einfacher Includes zu nutzen, anstatt Filterscripts, da man schon auf alle Funktionen / Includes & Variablen aus dem Gamemode direkt zugreifen kann.

    So und nun zu deinem Code:

    So sieht es doch ein wenig übersichtlicher aus.


    Allerdings gibt es viele Probleme damit:

    1. Angenommen du hast 20 Mautstationen, willst du die wirklich alle manuell einfügen. Solltest du das vor haben, sollte schnell klar sein, es würden viele "Redundanzen" (also Code-Wiederholungen) entstehen. So etwas mag man als Programmierer immer vermeiden! Zum einen, weil es übersichtlich und besser ist, zum Anderen, weil wir alle sehr faule Wesen sind. Aus diesem Grund, solltest du dann Arrays nutzen und eine Schleife.
    2. In deinem Befehl prüfst du entweder, ob er sich entweder an der Mautstation befindet, oder ob er es nicht ist (wenn er es nicht ist, bewegst du das Objekt zurück). Und dann nutzt du noch eine "else" um zu sagen, dass er an keiner Zollstation ist...hmm, hoffe dir fällt hier was auf xD Was wäre denn die 3. Option? Es gibt doch nur entweder ist er da oder nicht. Das hier ist kein Quantensystem, da gibt es keine Superposition ^^
    3. Die Rotation die du hier nimmst ist zu klein, das der Hauptfehler. Eine der X, Y oder Z Achsen musst du mit dem +0.001 versehen, die Rotation allerdings muss normal geändert werden.

    Also so würde es funktionieren:


    ast2ufdyxkb1.png


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

  • Hoppla habe mich so in Rage getippt das es mir gar nicht aufgefallen ist das ich es doppelt drin habe.

    Vielen Dank für die Vielen tipps ich mache mich gleich an die Arbeit und schreibe mein Schrankensystem um.:thumbup:


    Habe es mal Bearbeitet!!

    Was meint ihr?


    Einmal editiert, zuletzt von FitesTopu () aus folgendem Grund: Denkanstoß tipps sammeln