Tore öffnen spackt i.wie rum o.O

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


    ich mache jetzt schon sehr lange an einem Tor rum xD Ich möchte das wenn der Spieler in der Nähe ist das Tor automatisch auf geht und nach einer bestimmten Zeit zu geht.


    Das habe ich alles schon gescriptet aber ich weiss net so genau unter welches public es kommt.




    new LS1PD; // steht ganz oben im Script


    LS1PD = CreateObject(980, 1546.0999755859, -1627.5999755859, 15.199999809265, 0, 0, 90); // LSPD Tor1 // Steht bei OnGameModeInt


    SetTimer("CloseLS1PDTor",5000,false); // Steht bei OnGameModeInt, weiss net obs richtig ist da


    forward CloseLS1PDTor(); // ganz unten im Script also unter gar nix
    public CloseLS1PDTor() //auch
    {
    for(new playerid = 0; playerid < MAX_PLAYERS; playerid ++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 5.0, 1588.3000488281, -1637.9000244141, 15.0))MoveObject(LS1PD,1546.0999755859, -1627.5999755859, 5.19999980926, 4);//(Geöffnet) // Parameter (LSPD2(Das Tor), X, Y, Z, Speed);
    else MoveObject(LS1PD, 1546.0999755859, -1627.5999755859, 15.199999809265, 3.0);//Geschlossen // Parameter (OBJ id, X, Y, Z, Speed);
    }
    return 1;
    }


    Ist doch alles richtig oder?


    MfG
    Pablo

  • Ist nicht richtig.



    Der Code in der Schleife passt nicht ganz.
    Denn wenn der Spieler mit der ID 1 in der nähe des Tores ist, wird es geöffnet.
    Ist der Spieler mit der ID 2 nicht in der nähe des Tore,wird es wieder geschlossen. Völlig egal was "davor" passierte.


    Du solltest einfach prüfen ob 1 Spieler ( egal welcher ) in der nähe des Tores ist und dann öffnen. Ist kein Spieler ( egal welcher ) in der nähe des Tores,kannst du es schließen. Ob es auf oder zu ist solltest du sowieso in einer Variable festhalten.

  • Goldkiller hat den Fehler doch schon erklärt...
    public CloseLS1PDTor() //auch
    {
    for(new playerid = 0; playerid < MAX_PLAYERS; playerid ++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 5.0, 1588.3000488281, -1637.9000244141, 15.0))MoveObject(LS1PD,1546.0999755859, -1627.5999755859, 5.19999980926, 4);//(Geöffnet) // Parameter (LSPD2(Das Tor), X, Y, Z, Speed);
    else MoveObject(LS1PD, 1546.0999755859, -1627.5999755859, 15.199999809265, 3.0);//Geschlossen // Parameter (OBJ id, X, Y, Z, Speed);
    }
    return 1;
    }
    Da ist ein Logikfehler drinn.
    Und zwar fragst du für jeden Spieler ab, ob er am Tor steht - Wenn einer der Spieler am Tor steht wird es geöffnet.
    Aber sollte nur ein Spieler nicht am Tor stehen wird es wieder geschlossen.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen

  • new TorOffen=0;




    public CloseLS1PDTor()
    {
    for(new playerid = 0; playerid < MAX_PLAYERS; playerid ++)
    {
    if(!IsPlayerConnected(playerid))continue;
    if(!IsPlayerInRangeOfPoint(playerid, 5.0, 1588.3000488281, -1637.9000244141, 15.0))continue;
    if(TorOffen==0)
    {
    MoveObject(LS1PD,1546.0999755859, -1627.5999755859, 5.19999980926, 4);//(Geöffnet)
    TorOffen=1;
    }
    else if(TorOffen==1)
    {


    MoveObject(LS1PD, 1546.0999755859, -1627.5999755859, 15.199999809265, 3.0);//Geschlossen
    TorOffen=0;
    }
    return 1;
    }


    Sry wegen unübersichtlichkeit usw..
    Hoffe es funzt

  • So ich zeige euch jetzt wieder meinen Code der auch nicht geht:



    //ganz Oben
    new LS1PD;
    new TorOffen=0;


    //Unter OnGameModeInt
    SetTimer("CloseLS1PDTor",5000,true);


    LS1PD = CreateObject(980, 1546.1000, -1627.6000, 15.2000, 0, 0, 90); // LSPD Tor


    //Ganz unten im Script
    forward CloseLS1PDTor();
    public CloseLS1PDTor()
    {
    for(new playerid = 0; playerid < MAX_PLAYERS; playerid ++)
    {
    if(!IsPlayerConnected(playerid))continue;
    if(!IsPlayerInRangeOfPoint(playerid, 5.0, 1588.3000488281, -1637.9000244141, 15.0))continue;
    if(TorOffen==0)
    {
    MoveObject(LS1PD,1546.0999755859, -1627.5999755859, 5.19999980926, 4.0);//(Geöffnet)
    TorOffen=1;
    }
    else if(TorOffen==1)
    {
    MoveObject(LS1PD, 1546.0999755859, -1627.5999755859, 15.199999809265, 3.0);//Geschlossen
    TorOffen=0;
    }
    }
    return 1;
    }


    Wenn Ihr wollt könnt Ihr ja mal den Code nehmen und es in euer Script reinbauen vllt liegst auch an meinem Script....


    PermanenT
    Geht auch nicht wenn ich true statt false mache


  • MoveObject(LS1PD,1546.0999755859, -1627.5999755859, 5.19999980926-15, 4.0);//(Geöffnet)


    LS1PD = CreateObject(980, 1546.1000, -1627.6000, 15.2000, 0, 0, 90); // LSPD Tor
    MoveObject(LS1PD,1546.0999755859, -1627.5999755859, 5.19999980926, 4.0);//(Geöffnet)


    Merkste? ;)