Automatische Tore , aber wie ?

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
  • Guten Abend die Damen und Herren.


    Ich habe mir mal was ausgedacht , nix besonderes aber trotzdem hätte ich das gern in meinem Script.


    Also die Flugstationen sind mit einem Gate verschlossen, wenn jetzt der Spieler ein Flugschein hat soll sich das Tor öffnen.


    Nun wollte ich fragen wie ich das machen kann. Ich bin kein guter Scripter.


    Bisher habe ich das gemacht :

    new Airgate[3];


    Dann habe ich noch :

    Airgate[0] = CreateDynamicObject(980,1961.5999756,-2189.6999512,15.3000002,0.0000000,0.0000000,0.0000000); //ls-gate
    Airgate[1] = CreateDynamicObject(980,-1545.8000488,-430.6000061,7.8000002,0.0000000,0.0000000,136.0000000); //sf-gate
    Airgate[2] = CreateDynamicObject(980,1706.0999756,1607.6999512,11.8000002,0.0000000,0.0000000,254.0000000); //lv-gate


    Soweit so gut :D


    Nun wollte ich eine Funktion also wenn de Spieler am LS gate steht und einen Flugschein hat das sich das tor öffnet.
    Wenn er keinen Flugschein besitzt soll nix passieren.
    Das soll halt bei allen 3 Gates so sein.


    Ich habe das mal alleine Versucht und bin natürlich gescheitert :D :D

    Function Airgate ()
    {
    if(Playerinfo[playerid] [pFlyLic] == 1)
    {
    IsPlayerInRangeOfPoint(playerid,30.0,1961.5999756,-2189.6999512,15.3000002)
    {
    MoveDynamicObject(Airgate[0],1961.5999756,-2189.6999512,15.3000002-15,3.0)
    }
    }
    return 1;
    }


    Ich weis nicht wie man das macht also habe ich irgendwas ausprobiert ._.


    Kann mir Jemand bitte Helfen , am besten noch mit kleiner erklärung ? :D


    Mfg Saphire

  • du weist schon das du noch was vergessen hast xD


    Function Airgate ()
    {
    if(Playerinfo[playerid] [pFlyLic] == 1)
    {
    if(IsPlayerInRangeOfPoint(playerid,30.0,1961.5999756,-2189.6999512,15.3000002))
    {
    MoveDynamicObject(Airgate[0],1961.5999756,-2189.6999512,15.3000002-15,3.0)
    }
    }
    return 1;
    }


  • (3216) : error 021: symbol already defined: "Airgate"
    (3218) : error 010: invalid function or declaration
    (3225) : error 010: invalid function or declaration


    Zeilen dazu :



    1. Function Airgate ()
    2. if(Playerinfo[playerid] [pFlyLic] == 1)
    3. return 1;

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Ich habe bisschen weiter gearbeitet.



    Function AirgateFunktion ()
    {
    if(PlayerInfo[playerid][pFlyLic] == 1)
    {
    if(IsPlayerInRangeOfPoint(playerid,30.0,1961.5999756,-2189.6999512,15.3000002))
    {
    MoveDynamicObject(Airgate[0],1961.5999756,-2189.6999512,15.3000002-15,3.0);
    }
    else if
    {
    IsPlayerInRangeOfPoint(playerid,30.0,-1545.8000488,-430.6000061,7.8000002)
    {
    MoveDynamicObject(Airgate[1],-1545.8000488,-430.6000061,7.8000002-15,3.0);
    }
    }
    else if
    {
    IsPlayerInRangeOfPoint(playerid,30.0,1706.0999756,1607.6999512,11.8000002)
    {
    MoveDynamicObject(Airgate[2],1706.0999756,1607.6999512,11.8000002-15,3.0);
    }
    }
    }
    return 1;
    }


    Doch ich bekomme folgende Errors. Wobei ich das mit der playerid nicht verstehe ....



    C:\Users\Aimen\Desktop\German Street Light - NEW v1.1\gamemodes\GSL.pwn(3219) : error 017: undefined symbol "playerid"
    C:\Users\Aimen\Desktop\German Street Light - NEW v1.1\gamemodes\GSL.pwn(3221) : error 017: undefined symbol "playerid"
    C:\Users\Aimen\Desktop\German Street Light - NEW v1.1\gamemodes\GSL.pwn(3227) : error 017: undefined symbol "playerid"
    C:\Users\Aimen\Desktop\German Street Light - NEW v1.1\gamemodes\GSL.pwn(3232) : error 010: invalid function or declaration
    C:\Users\Aimen\Desktop\German Street Light - NEW v1.1\gamemodes\GSL.pwn(3240) : error 010: invalid function or declaration


    Zeilen zu den errors :

    1. if(PlayerInfo[playerid][pFlyLic] == 1)
    2. if(IsPlayerInRangeOfPoint(playerid,30.0,1961.5999756,-2189.6999512,15.3000002))
    3. IsPlayerInRangeOfPoint(playerid,30.0,-1545.8000488,-430.6000061,7.8000002)
    4. else if
    5. return 1;

  • Schreib eine Funktion, die per Timer regelmäßig aufgerufen wird. In der Funktion eine schleife die alle Spieler durchläuft. Natürlich musst du auch abfragen ob er ne Lizenz hat. Dann fragst du ab, ob der Spieler grade bei einem Tor steht, wenn ja setzt du einen bool in der Methode auf true. Nach der schleife öffnest Su das Tor wenn der Böll true ist und schließt du das Tor wenn der bool false ist.

  • So... natürlich kannst du das immer weiter fortführen. Wenn du mehr gates hast, eben immer weiter machen...
    Nachteil dabei ist, dass im moment nicht gespeichert wird, ob das tor offen oder zu ist. Daher wird es wenn einer länger im Bereich des Tors ist auch öfter aufgemacht und dass es ansonsten dauernd zugemacht wird, was du zwar ingame nicht merkst, was sich aber auf die performance auswirkt.
    Dem könntest du entgegenwirken, indem du globale bools erstellst, die den status des gates speichern und diese dann vor moveobject nochmal abfragen.


    Bei OnGameModeInit();
    SetTimer("updateGates", 1500, true);