public OnPlayerCommandText

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
  • Hey leute,
    ich habe eine Frage.
    Und zwar sagt mir mein Script immer das ich das "public OnPlayerCommandText" nicht 2x Verwenden kann.
    Vermutlich hat es recht.
    Ich möchte 2 Tore beweglich machen. Eins habe ich mit dem OnPlayerCommandText hinbekommen aber das 2... bin ich am versagen :D


    hier mal die Codes:



    new Tor;
    new close();
    new close2();



    Hier sind dann nochmal die Error meldungen:



    error 001: expected token: ";", but found "("
    error 001: expected token: ";", but found "("
    error 017: undefined symbol "TorL"
    error 017: undefined symbol "TorR"
    warning 217: loose indentation
    warning 217: loose indentation
    warning 202: number of arguments does not match definition
    warning 202: number of arguments does not match definition
    error 017: undefined symbol "torL"
    warning 209: function "OnPlayerCommandText" should return a value
    error 021: symbol already defined: "close"
    error 010: invalid function or declaration
    error 021: symbol already defined: "OnPlayerCommandText"
    warning 202: number of arguments does not match definition
    warning 202: number of arguments does not match definition
    warning 202: number of arguments does not match definition
    error 017: undefined symbol "torR"
    warning 217: loose indentation
    warning 209: function "OnPlayerCommandText" should return a value
    error 010: invalid function or declaration
    error 021: symbol already defined: "close2"
    error 010: invalid function or declaration
    warning 203: symbol is never used: "Tor"
    warning 203: symbol is never used: "close"
    warning 203: symbol is never used: "close2"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


    12 Errors.


    Und hier dann die Beweglichkeit:




    //Sanitätertor Beweglich Links
    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if (strcmp("/auf", cmdtext, true, 10) == 0)//Öffnet das Tor
    {
    if(IsPlayerInRangeOfPoint(playerid,30.0,1529.67, -1545.20, 12.57, 0.00, 0.00, 90.00)) //Die Distanze wie weit der User weg sein muss, um das Tor zuöffnen
    {
    MoveObject(torL,1529.67, -1545.20, 12.571, 4);
    SendClientMessage(playerid,Rot,"Das Tor schließt in 5 Sekunden");
    SetTimer("close", 5000,false);
    return 1;
    }
    }
    else
    {
    SendClientMessage(playerid,Rot,"Es ist kein Tor in der Nähe");
    }
    }


    public close ()
    {
    MoveObject(torL,1517.89, -1545.20, 12.57,4);
    return 1;
    }


    //Sanitätertor Beweglich Rechts
    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if (strcmp("/auf", cmdtext, true, 10) == 0)//Öffnet das Tor
    {
    if(IsPlayerInRangeOfPoint(playerid,30.0,1517.89, -1545.20, 12.57, 0.00, 0.00, 90.00)) //Die Distanze wie weit der User weg sein muss, um das Tor zuöffnen
    MoveObject(torR,1529.67, -1545.20, 12.57, 4);
    SendClientMessage(playerid,Rot,"Das Tor schließt in 5 Sekunden");
    SetTimer("close2", 5000,false);
    return 1;
    }
    }
    else
    {
    SendClientMessage(playerid,Rot,"Es ist kein Tor in der Nähe");
    }
    }
    public close2 ()
    {
    MoveObject(torR,1529.67, -1545.20, 12.57,4);
    return 1;
    }

    Das Linke Tor habe ich bewegt bekommen.



    Und hier die Tore definiert:



    gate = CreateObject(971, 1529.67, -1545.20, 12.57, 0.00, 0.00, 90.00);
    gate = CreateObject(971, 1517.89, -1545.20, 12.57, 0.00, 0.00, 90.00);*







    Danke im Vorraus :)

  • Du darfst OnPlayerCommandText nicht zwei mal definieren.
    Außerdem waren die Klammern falsch gesetzt und es haben Definitionen gefehlt.


    Oben im Code:
    new torL;
    new torR;


    Bei OnGameModeInit:
    torL = CreateObject(971, 1529.67, -1545.20, 12.57, 0.00, 0.00, 90.00);
    torR = CreateObject(971, 1517.89, -1545.20, 12.57, 0.00, 0.00, 90.00);


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if (strcmp("/auf", cmdtext, true) == 0)//Öffnet das Tor
    {
    if(IsPlayerInRangeOfPoint(playerid,30.0,1529.67, -1545.20, 12.57))
    {
    MoveObject(torL,1529.67, -1545.20, 12.571, 4);
    SendClientMessage(playerid,Rot,"Das Tor schließt in 5 Sekunden");
    SetTimerEx("close", 5000,false, "d", 1);
    return 1;
    }
    else if(IsPlayerInRangeOfPoint(playerid,30.0,1517.89, -1545.20, 12.57))
    {
    MoveObject(torR,1529.67, -1545.20, 12.57, 4);
    SendClientMessage(playerid,Rot,"Das Tor schließt in 5 Sekunden");
    SetTimerEx("close", 5000,false, "d", 2);
    return 1;
    }
    else
    {
    SendClientMessage(playerid,Rot,"Es ist kein Tor in der Nähe");
    }
    return 1;
    }
    return 0;
    }


    forward close(id);
    public close(id)
    {
    if(id == 1) MoveObject(torL,1517.89, -1545.20, 12.57,4);
    else if(id == 2) MoveObject(torR,1529.67, -1545.20, 12.57,4);
    return 1;
    }

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()

  • Du hast die falschen Koordinaten eingetragen.
    Ich habe jetzt mal versucht das zu erraten:


    Oben im Code:
    new torL;
    new torR;


    Bei OnGameModeInit:
    torL = CreateObject(971, 1517.89, -1545.20, 12.57, 0.00, 0.00, 90.00);
    torR = CreateObject(971, 1529.67, -1545.20, 12.57, 0.00, 0.00, 90.00);


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if (strcmp("/auf", cmdtext, true) == 0)//Öffnet das Tor
    {
    if(IsPlayerInRangeOfPoint(playerid,30.0,1529.67, -1545.20, 12.57))
    {
    MoveObject(torL,1505.67, -1545.20, 12.571, 4);
    SendClientMessage(playerid,Rot,"Das Tor schließt in 5 Sekunden");
    SetTimerEx("close", 5000,false, "d", 1);
    return 1;
    }
    else if(IsPlayerInRangeOfPoint(playerid,30.0,1517.89, -1545.20, 12.57))
    {
    MoveObject(torR,1541.67, -1545.20, 12.57, 4);
    SendClientMessage(playerid,Rot,"Das Tor schließt in 5 Sekunden");
    SetTimerEx("close", 5000,false, "d", 2);
    return 1;
    }
    else
    {
    SendClientMessage(playerid,Rot,"Es ist kein Tor in der Nähe");
    }
    return 1;
    }
    return 0;
    }


    forward close(id);
    public close(id)
    {
    if(id == 1) MoveObject(torL,1517.89, -1545.20, 12.57,4);
    else if(id == 2) MoveObject(torR,1529.67, -1545.20, 12.57,4);
    return 1;
    }

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()

  • Gerne, immer fragen wenn was unklar ist, deshalb sind wir da! :)


    Das "d" steht für einen Integer (ganze Zahl) [in dem Fall die 1] der übergeben wird.
    Du kannst anstatt "d" auch "i" schreiben, das geht ebenfalls. d und i = Integer.

  • Ahh ok danke.


    Und dann hab ich nh noch nh frage



    forward close(id);
    public close(id)
    {
    if(id == 1) MoveObject(TorL,1517.89, -1545.20, 12.57,4);
    else if(id == 2) MoveObject(TorR,1529.67, -1545.20, 12.57,4);
    return 1;
    }

    Muss ich bei der "id" etwas eintragen? ne oder?



    Außerdem, unten bei public close, wird doch definiert wo das Tor sich in öffnen soll richtig?

  • Bei id musst du nichts eintragen, darfst du auch nicht. ;)


    Warum?
    Du trägst es ja bei SetTimerEx im letzten Parameter ein, deshalb auch das "d", weil du die 1 als Integer (d) nach "id" übergibst.


    forward close(id);
    public close(id) //id = die 1 bzw. die 2 aus SetTimerEx
    {
    if(id == 1) MoveObject(TorL,1517.89, -1545.20, 12.57,4); //Wenn id=1, dann verschiebe TorL
    else if(id == 2) MoveObject(TorR,1529.67, -1545.20, 12.57,4); //Wenn id=2, dann verschiebe TorR
    return 1;
    }

  • Hörmal hättest du vielleicht Lust und Zeit kurz mal auf meinen Ts zu kommen und mir vielleicht mal son paar sachen dazu zuerklären?
    Weil irgendwie verschiebt sich mein Tor nach Links und nicht nach unten :D

  • TeamSpeak nutze ich nicht, daher erkläre ich es dir hier:



    Wenn sich das Tor nach unten bewegen soll, dann musst du
    MoveObject(torL,1505.67, -1545.20, 12.571, 4);
    zu
    MoveObject(torL,1517.89, -1545.20, 0.571, 4);
    ändern


    und
    MoveObject(torR,1541.67, -1545.20, 12.57, 4);
    zu
    MoveObject(torR,1529.67, -1545.20, 0.57, 4);
    ändern.


    Warum?
    (id, X, Y, Z, Speed)
    Zuvor hast du X geändert, also zur Seite.
    Du musst aber Z ändern, also nach oben/unten.

  • Ahso ok kein Thema.


    Aber warum hast du denn jetzt bei dem TorL 1505.67 zu 1517.89 geändert? Das bestimmt wie das nach links und rechts geht oder nicht?




    Nächste Frage:


    Der sagt mir jetzt, dass irgendwas nicht funktioniert
    Jetzt sagt er mir errer in zeile 11 und 12:




    error 029: invalid expression, assumed zero
    error 035: argument type mismatch (argument 5)
    error 029: invalid expression, assumed zero
    error 035: argument type mismatch (argument 5)

  • Ich habe das geändert, weil das TorL ja bei 1517.89 erstellt wird. Wenn es sich nur nach unten bewegen soll, dann müssen die ersten beiden Zahlen unverändert bleiben, hinsichtlich der Erstellposition. Bei TorL habe ich es auch wieder zur Erstellposition (X und Y) zurückgeändert, da nur Z verändert wird, wenn es sich nach unten bewegt.

  • Jetzt sagt er mir das ein Fehler in Zeile 11 und 12 ist

    error 029: invalid expression, assumed zero
    error 035: argument type mismatch (argument 5)
    error 029: invalid expression, assumed zero
    error 035: argument type mismatch (argument 5)



    also, bei dem
    TorL = CreateObject(971, 1529.8900, -1545.2000, 12.5700,);*
    TorR= CreateObject(971, 1517.8900, -1545.2000, 12.5700,);










    Außerdem verstehe ich hier nicht, warum du hier nochmal das MoveObject geschrieben hast


    http://pastebin.com/eEv44DVh

    Einmal editiert, zuletzt von xN1GhTmAr3x ()

  • Zu den Fehlern:
    Du musst bei den IsPlayerInRangeOfPoint die letzten 3 Parameter noch weg machen, das hier:
    , 0.00, 0.00, 90.00
    das gehört da nicht hin.



    In dem Befehl steht das MoveObject weil es ja dort nach unten bewegt wird (du hast dort die Koordinaten noch nicht geändert!).
    Dann wird der Timer gestartet, und nach 5 Sekunden bewegt es sich wieder nach oben.
    Deshalb wird für jedes Tor 2x MoveObject benötigt.

  • Sorry aber ich bin voll überfodert :DDD


    Die Koordinaten die du mir geschickt hast,
    MoveObject(torL,1505.67, -1545.20, 12.571, 4);
    Damit wird doch das Tor nach Links oder nach Rechts verschoben weis ich jetzt nicht genau wegen der "1505.67" oder nicht? Standart ist ja, wie ich sie eingebaut habe:
    1529.89

  • Ja, genau. Die erste Zahl verschiebt es zur Seite. Die letzte Zahl nach oben und unten.


    Wie willst du es denn haben? Sollen sich die Tore auf die Seite bewegen, oder nach unten?


    Willst du es selbst versuchen (die Koordinaten für beide Versionen hast du hier schon stehen), oder soll ich es dir machen?

  • public OnPlayerCommandText(playerid, cmdtext[])
    {
    if (strcmp("/auf", cmdtext, true) == 0)//Öffnet das Tor
    {
    if(IsPlayerInRangeOfPoint(playerid,30.0,1517.89, -1545.20, 12.57))
    {
    MoveObject(torL,1517.89, -1545.20, 0.571, 4); //X bleibt gleich, Y bleibt gleich, Z wird kleiner als beim Erstellen
    SendClientMessage(playerid,Rot,"Das Tor schließt in 5 Sekunden");
    SetTimerEx("close", 5000,false, "d", 1);
    return 1;
    }
    else if(IsPlayerInRangeOfPoint(playerid,30.0,1529.67, -1545.20, 12.57))
    {
    MoveObject(torR,1529.67, -1545.20, 0.57, 4); //X bleibt gleich, Y bleibt gleich, Z wird kleiner als beim Erstellen
    SendClientMessage(playerid,Rot,"Das Tor schließt in 5 Sekunden");
    SetTimerEx("close", 5000,false, "d", 2);
    return 1;
    }
    else
    {
    SendClientMessage(playerid,Rot,"Es ist kein Tor in der Nähe");
    }
    return 1;
    }
    return 0;
    }