Tor mit einem Befehl öffnen und schließen

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.


    Ich habe angefangen ein kleines SAMP Script zu schreiben.
    Ich habe derzeit Probleme mit einem Tor.
    Ich möchte das es sich mit einem Befehl schließt und mit der Wiederholung des Befehl sich wieder schließt.
    Leider weiss ich nicht wie ich das formulieren soll.




    Leider verschiebt sich der Quelltext wenn ich ihn hier im QUellcode poste
    ----------------------------------------------------------------------------------------------------------



    ocmd:pd(playerid,params[]) //PD Garage
    {
    if(IsPlayerInRangeOfPoint(playerid,10,1183.0244140625, -938.5146484375, 41.824035644531))
    {
    if(isPlayerInFrakt(playerid,1))
    {
    MoveObject(pdtor1,1584.6999511719, -1638, 12.39999961853,5);
    MoveObject(pdtor1,1584.6999511719, -1638, 2.39999961853,5);
    return 1;


    }
    return SendClientMessage(playerid,ROT,"Du bist kein Mitglied des Staates.");
    }
    if(IsPlayerInRangeOfPoint(playerid,10,1584.6999511719, -1638, 12.39999961853))
    {
    if(isPlayerInFrakt(playerid,1))
    {
    MoveObject(pdtor1,1584.6999511719, -1638, 12.39999961853-10,5);
    return 1;
    }
    return SendClientMessage(playerid,ROT,"Du bist kein Mitglied des Staates.");
    }
    return SendClientMessage(playerid,ROT,"Nicht in der Nähe von einem Tor.");
    }
    ----------------------------------------------------------------------------------------------------------


    Das das hier nicht funktionieren kann ist klar.
    ----------------------------------------------------------------------------------------------------------


    {
    MoveObject(pdtor1,1584.6999511719, -1638, 12.39999961853,5);
    MoveObject(pdtor1,1584.6999511719, -1638, 2.39999961853,5);
    return 1;


    }
    ----------------------------------------------------------------------------------------------------------


    Aber wie formuliere ich nun das das Tor hochfährt wenn es unten ist ?
    Ich hoffe jemand weiss eine Lösung.


    Mit freundlichen Grüßen
    Felix

    Einmal editiert, zuletzt von [F]elix ()

  • Oben im Script:


    new tor[MAX_PLAYERS];



    ocmd:pd(playerid,params[])//PD Garage
    {
    if(IsPlayerInRangeOfPoint(playerid,10,1183.0244140625, -938.5146484375, 41.824035644531))
    {
    if(isPlayerInFrakt(playerid,1))
    {
    if(tor[playerid] == 0)
    {
    MoveObject(pdtor1,1584.6999511719, -1638, 12.39999961853,5);
    }
    else
    {
    MoveObject(pdtor1,1584.6999511719, -1638, 2.39999961853,5);
    }
    }
    }
    return 1;
    }

  • Hallo, danke für deine Antwort.
    Funktioniert leider nicht.


    Ich habe oben eingefügt :
    ---------------------------------------------------------------
    new tor[MAX_PLAYERS];


    ---------------------------------------------------------------


    Unter : public OnGameModeInit()
    --------------------------------------------------------------
    tor=CreateObject(969, 1584.6999511719, -1638, 12.39999961853, 0, 0, 0);


    --------------------------------------------------------------


    Unter : public OnPlayerText(playerid, text[])
    --------------------------------------------------------------


    ocmd:pd(playerid,params[])//PD Garage
    {
    if(IsPlayerInRangeOfPoint(playerid,10,1183.0244140625, -938.5146484375, 41.824035644531))
    {
    if(isPlayerInFrakt(playerid,1))
    {
    if(tor[playerid] == 0)
    {
    MoveObject(tor,1584.6999511719, -1638, 12.39999961853,5);
    }
    else
    {
    MoveObject(tor,1584.6999511719, -1638, 2.39999961853,5);
    }
    }
    }
    return 1;
    }

    --------------------------------------------------------------


    Dann bekomme ich folgende Errors :


    C:\Users\Felix\Downloads\SAMP\gamemodes\tutorial.pwn(74) : error 033: array must be indexed (variable "tor")
    C:\Users\Felix\Downloads\SAMP\gamemodes\tutorial.pwn(347) : error 035: argument type mismatch (argument 1)
    C:\Users\Felix\Downloads\SAMP\gamemodes\tutorial.pwn(351) : error 035: argument type mismatch (argument 1)
    --------------------------------------------------------------


    Wie kann ich die Errors beheben ?

  • Hallo,
    dass new tor[MAX_PLAYERS];


    hat nichtss mit
    tor=CreateObject(969, 1584.6999511719, -1638, 12.39999961853, 0, 0, 0);
    zu tiuhen nenn es nicht tor sondern pdtor oder so


    also oben new tor[MAX_PLAYERS];
    und
    new pdtor;


    dann
    pdtor=CreateObject(969, 1584.6999511719, -1638, 12.39999961853, 0, 0, 0);


    Kannst du mir dann noch posten welche Coordinaten das Tor offen und zu ist?

  • Es ist nicht nötig, dafür ein Spielerarray zu machen. Im Gegenteil würde das sogar zu weiteren Fehlern führen. Außerdem sollte man die Variable natürlich auch setzen, damit bei der erneuten Eingabe ein anderes Ereignis eintritt.


    // Oben
    new
    bool:pdTorOpen;


    // Im Befehl
    if(IsPlayerInRangeOfPoint(playerid,10,1183.0244140625, -938.5146484375, 41.824035644531))
    {
    if(!isPlayerInFrakt(playerid,1)) return SendClientMessage(playerid, ROT, "Du bist kein Mitglied des Staates.");
    if(!pdTorOpen)
    {
    // Tor öffnen und Boolean setzen
    MoveObject(pdtor1,1584.6999511719, -1638, 12.39999961853,5);
    pdTorOpen = true;
    }
    else
    {
    MoveObject(pdtor1,1584.6999511719, -1638, 2.39999961853,5);
    pdTorOpen = false;
    }
    }

  • oben im Script:
    new toraufzu[MAX_PLAYERS];
    und
    new pdtor;


    unter OnGameModeInit:
    pdtor = CreateObject(969, 1584.6999511719, -1638, 12.39999961853, 0, 0, 0);


    ocmd:pd(playerid)
    {
    if(IsPlayerInRangeOfPoint(playerid,10,1183.0244140625, -938.5146484375, 41.824035644531))
    {
    if(isPlayerInFrakt(playerid,1))
    {
    if(toraufzu[playerid] == 0) //0 = Zu || 1 = offen
    {
    MoveObject(pdtor,1584.6999511719, -1638, 12.39999961853,5);
    }
    else
    {
    MoveObject(pdtor,1584.6999511719, -1638, 12.39999961853-10,5);
    }
    }
    }
    return 1;
    }


  • Erneut der falsche Ansatz. Außerdem solltest du deinen Array natürlich auch setzen, wenn sich das Tor bewegt. Ansonsten bekommst du niemals den "Wechsel" hin.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Folgende Errors sind aufgetaucht :


    C:\Users\Felix\Downloads\SAMP\gamemodes\tutorial.pwn(282) : error 017: undefined symbol "SpielerSpeichern"
    C:\Users\Felix\Downloads\SAMP\gamemodes\tutorial.pwn(326) : error 017: undefined symbol "isPlayerAnAdmin"
    C:\Users\Felix\Downloads\SAMP\gamemodes\tutorial.pwn(335) : error 017: undefined symbol "strreplace"
    C:\Users\Felix\Downloads\SAMP\gamemodes\tutorial.pwn(345) : error 017: undefined symbol "isPlayerInFrakt"
    C:\Users\Felix\Downloads\SAMP\gamemodes\tutorial.pwn(345) : error 079: inconsistent return types (array & non-array)
    C:\Users\Felix\Downloads\SAMP\gamemodes\tutorial.pwn(358) : warning 217: loose indentation
    C:\Users\Felix\Downloads\SAMP\gamemodes\tutorial.pwn(358) : error 029: invalid expression, assumed zero
    C:\Users\Felix\Downloads\SAMP\gamemodes\tutorial.pwn(358) : error 017: undefined symbol "ocmd_pdzu"
    C:\Users\Felix\Downloads\SAMP\gamemodes\tutorial.pwn(358) : error 029: invalid expression, assumed zero
    C:\Users\Felix\Downloads\SAMP\gamemodes\tutorial.pwn(358) : fatal error 107: too many error messages on one line

  • Klar :


    Oben:
    new pdtor;
    new bool:pdTorOpen;


    public OnGameModeInit()pdtor=CreateObject(969, 1584.6999511719, -1638, 12.39999961853, 0, 0, 0);


    ocmd:pd(playerid,params[]){ if(IsPlayerInRangeOfPoint(playerid,10,1183.0244140625, -938.5146484375, 41.824035644531)) { if(!isPlayerInFrakt(playerid,1)) return SendClientMessage(playerid, ROT, "Du bist kein Mitglied des Staates."); if(!pdTorOpen) { // Tor öffnen und Boolean setzen MoveObject(pdtor1,1584.6999511719, -1638, 12.39999961853,5); pdTorOpen = true; } else { MoveObject(pdtor1,1584.6999511719, -1638, 2.39999961853,5); pdTorOpen = false; }}



    //edit: Warum sind meine pwn Codes immer so zusammengequetscht ?


    Errors :


    C:\Users\Felix\Downloads\SAMP\gamemodes\tutorial.pwn(281) : error 017: undefined symbol "SpielerSpeichern"
    C:\Users\Felix\Downloads\SAMP\gamemodes\tutorial.pwn(325) : error 017: undefined symbol "isPlayerAnAdmin"
    C:\Users\Felix\Downloads\SAMP\gamemodes\tutorial.pwn(334) : error 017: undefined symbol "strreplace"
    C:\Users\Felix\Downloads\SAMP\gamemodes\tutorial.pwn(344) : error 017: undefined symbol "isPlayerInFrakt"
    C:\Users\Felix\Downloads\SAMP\gamemodes\tutorial.pwn(344) : error 079: inconsistent return types (array & non-array)
    C:\Users\Felix\Downloads\SAMP\gamemodes\tutorial.pwn(348) : error 017: undefined symbol "pdtor1"
    C:\Users\Felix\Downloads\SAMP\gamemodes\tutorial.pwn(353) : error 017: undefined symbol "pdtor1"
    C:\Users\Felix\Downloads\SAMP\gamemodes\tutorial.pwn(358) : warning 217: loose indentation
    C:\Users\Felix\Downloads\SAMP\gamemodes\tutorial.pwn(358) : error 029: invalid expression, assumed zero
    C:\Users\Felix\Downloads\SAMP\gamemodes\tutorial.pwn(358) : error 017: undefined symbol "ocmd_f"
    C:\Users\Felix\Downloads\SAMP\gamemodes\tutorial.pwn(358) : error 029: invalid expression, assumed zero
    C:\Users\Felix\Downloads\SAMP\gamemodes\tutorial.pwn(358) : fatal error 107: too many error messages on one line

  • Schwer zu sagen, wenn alles in einer Zeile steht. Auf jeden Fall musst du natürlich das "pdtor1" von meinem MoveObject in "pdtor" umbenennen. Ich habe die Zeile nur irgendwo von weiter oben rauskopiert. Viele andere Fehler kann ich nicht wirklich nachvollziehen, da ich das Script nicht kenne und ich einfach Sachen aus dem Code von dir oben rauskopiert habe. Also ob die Funktion "isPlayerInFrakt(playerid,1)" tatsächlich in deinem Script existiert, weiß ich nicht.
    Fehler wie

    Zitat

    C:\Users\Felix\Downloads\SAMP\gamemodes\tutorial.pwn(281) : error 017: undefined symbol "SpielerSpeichern"
    C:\Users\Felix\Downloads\SAMP\gamemodes\tutorial.pwn(325) : error 017: undefined symbol "isPlayerAnAdmin"
    C:\Users\Felix\Downloads\SAMP\gamemodes\tutorial.pwn(334) : error 017: undefined symbol "strreplace"
    C:\Users\Felix\Downloads\SAMP\gamemodes\tutorial.pwn(358) : error 017: undefined symbol "ocmd_f"


    kommen nicht wirklich von meinem Code. Diese Variablen/Funktionen müssen irgendwo anders falsch definiert sein.

  • Also ich habe ein Script für die Tore gebastelt mit den gleichen Funktionen bis auf die Sache mit den wechselnden Befehlen ( auf / zu )
    Da hatte ich die Befehle /auf und /zu.


    Muss alles was du mir geschickt hast in einer Zeile sein ?
    Dieser Code verschiebt sich irgendwie immer.

  • Zitat

    Muss alles was du mir geschickt hast in einer Zeile sein ?
    Dieser Code verschiebt sich irgendwie immer.


    Nein, meiner sollte schon einigermaßen vernünftig eingerückt gewesen sein, abgesehen von den bekannten Zeilensprüngen. Warum sicher der Code beim EInfügen verschiebt, weiß ich nicht. Dann musst du den Code eben selbstständig einrücken. Sollte aber angesichts der Länge kein größeres Problem sein.


    Zitat

    Also ich habe ein Script für die Tore gebastelt mit den gleichen Funktionen bis auf die Sache mit den wechselnden Befehlen ( auf / zu )
    Da hatte ich die Befehle /auf und /zu.


    Schön, was hat das aber mit den Fehlern zu tun? Wenn du die nicht beheben kannst, könntest du uns evt. die entsprechenden Zeilen (siehe Fehlermeldung) aufschreiben. Vielleicht hilft das.

  • new bool: tor;


    Bei deinem Befehl:
    if(strcmp(cmdtext,"blablablablablabla
    if(IsPlayerInRangeOfPoint(blablablabla))
    if(tor == false) // wir fragen ab ob das bool auf false ist
    {
    // Deine commands
    // deine commands
    tor = true; // hier setzen wir das bool auf true
    }
    else if(tor == true) // und hier fragen wir ob, ob das Bool auf true ist, wenn ja, dann schließt sich das tor
    {
    // deine commands
    // deine comands
    tor = false; // und hier setzen wir das bool wieder auf false
    }


    Verstanden?

  • Also ich habe ein Script für die Tore gebastelt mit den gleichen Funktionen bis auf die Sache mit den wechselnden Befehlen ( auf / zu )
    Da hatte ich die Befehle /auf und /zu.


    Schön, was hat das aber mit den Fehlern zu tun? Wenn du die nicht beheben kannst, könntest du uns evt. die entsprechenden Zeilen (siehe Fehlermeldung) aufschreiben. Vielleicht hilft das.

    Das soll bedeuten das die Abfrage ob die Peron in einer Fraktion ist funktioniert.


    // Deine commands
    // deine commands

    Da müsste ich dann einfügen
    MoveObject..... etc oder ?

  • Genau, bei "deine commands" die MoveObject rein. Dann kommt der selbe Code wie bei mir raus. Hast du inwzischen ein paar Fehler beseitigen können? Falls nicht nochmal die Frage, ob du uns die Fehlerzeilen hier schicken könntest. Dann ist es einfacher dir dabei zu helfen.