Beiträge von Shine

    Unter
    OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)

    if(IsPlayerNPC(playerid))
    {
    new engine, lights, alarm, doors, bonnet, boot, objective;
    GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(vehicleid,VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective);
    }
    else if(IsANoTachoVehicle(vehicleid))
    {
    new engine, lights, alarm, doors, bonnet, boot, objective;
    GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(vehicleid,VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective);
    }
    else if((IsANoTachoVehicle(vehicleid)) && (!IsPlayerNPC(playerid)))
    {
    new engine, lights, alarm, doors, bonnet, boot, objective;
    GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(vehicleid,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
    }
    Damit wird der Motor ausgeschaltet, wenn ein Spieler ein Fahrzeug betritt.
    Bedenke:
    Dabei ist es auch so, dass wenn der Motor vorher angeschaltet wurde und man nur neu einsteigt, der Motor wieder aus ist...


    Kann übrigens nichts testen, kann sein dass die ()-Klammern beim zweiten else-if falsch sind. Musst du selber mal schauen.
    Das zweite else-if habe ich übrigens gemacht, da ich nicht weiß ob bei OnPlayerEnterVehicle bei dir noch andere Dinge stehen. Sonst kommt das mit dem 'else' vielleicht zu Fehlern...



    //edit Code überarbeitet & Info angehängt (letzten beiden Zeilen..)

    Wird wohl an dem (IsPlayerInRangeOfPoint(playerid,15.0,276.7849,-4310.0547,6.4115)) liegen.
    Erhöhe mal den Abstand wesentlich und schau was passiert (hinter playerid die 15 erhöhen, machs mal auf 50 und schau was passiert...)


    //edit: Wenn das klappt kannste ja mit dem Abstand bisle spielen wie es am besten passt. So hoch nur um zu sehen ob es wirklich daran liegt...

    }
    return 1;
    }


    Mach das return 1; mal vor die erste Klammer, und die zweite kommentierst du mal aus.
    Glaube deine letzte } ist die unmatched closing brace ("}") ...


    //edit: Kann eig. nicht sein, aber probiers mal bitte...vielleicht haste ja irgendwo die Klamern vertauscht oder bist irgendwo verrutscht..

    Erster Warning weg:
    Bei OnPlayerUpdate ganz unten ein
    return 1;
    rein.


    Den zweiten Error schaffen wir auch noch. Her mit den Zeilen ;)


    //edit: Error in Warning...

    Wie suchst du denn nach den Bussen? Anhand der ID? Gibt zwei verschiedene Busse. (einmal ID: 431 und einmal ID: 437)
    Ansonsten - Filterscript, wie der Vorposter sagte.

    Falsch.
    if((pX <= X+1) && (pX >= X-1)
    Ich vergleiche deine X mit meiner pX.
    Die pX habe ich frisch erstellt, da hast du auch keinen Error.


    Weiter oben im Code hast du selber X,Y und Z festgelegt
    new Float:X, Float:Y, Float:Z;
    GetPlayerPos(playerid, X, Y, Z);
    Wobei ich gerade bemerke, dass mein Code dann sowieo zum Teil Schwachsinn ist, weil du dort ebenfalls die Spielerposition reinpackst..
    Ich lass mir mal was anderes einfallen.
    Allerdings erst später, da ich gerade wenig Zeit habe und ohnehin nichts testen kann.

    Kann gerade selber nichts ausprobieren hier, sorry.
    Geht wohl doch nicht so, wie ich mir gedacht habe xD


    Das mit dem X versteh ich nicht ganz, an der selben Stelle hast du es bei dir ja auch verwendet bei deinem
    IsPlayerInRangeOfPoint(playerid, 1.0, X ,Y , Z >= 15))...

    Er hat seine Speicherfunktion schon im ersten Post genannt,


    Deine Schleife muss so aussehen:
    for(new i; i<MAX_PLAYERS; i++)
    {
    SpielerSpeichern(i);
    }


    Wollte es dir per PN schreiben, aber du ''möchtest keine Nachrichten empfangen'' ...

    Nein.
    Die Koordinate wo das Gate ist brauchst du nicht.
    Float:X, Float:Y, Float:Z <<<< sind die Koordinaten, wo es hin soll.
    Dann baust du z.B. nen Timer ein, und setzt wenn der Timer abläuft den gleichen Befehl (MoveObject) ein, nur diesmal mit den Koordinaten wo das Gate vorher war...


    //edit:
    Die RotX usw sind Rotationen, wenn sich das Gate drehen soll...
    Speed ist die Geschwindigkeit.

    Techno_Bass?
    Und wie willst du /gmx eingeben, wenn du gekickst wirst? xD
    Wie wäre es mit:

    if(strcmp(cmdtext, "/kickall", true) == 0)
    {
    if (PlayerInfo[playerid][pAdmin] >= 1337)
    {
    for(new i; i<MAX_PLAYERS; i++)
    {
    if(i != playerid)
    {
    Kick(i);
    }
    }
    }
    return 1;
    }


    //edit: Zitat weg, steht ja direkt über mir xD
    //edit2: Verbesserung.
    //edit3: Außerdem werden dann deine eigenen Daten nicht gespeichert. Ist also, wie du unter mir sagst, tatsächlich eine blöde Antwort :D

    Sollte sich erklären, wenn du dir die Parameter mal anschaust 8|
    Du hast beim Tor ja die Objekt-ID.


    MoveObject(objectid, Float:X, Float:Y, Float:Z, Float: Speed, Float:RotX = -1000.0, Float:RotY = -1000.0, Float:RotZ = -1000.0)


    Float:X The X coordinate to move the object to.
    Float:Y The Y coordinate to move the object to.
    Float:Z The Z coordinate to move the object to.

    Wäre eine Alternative.
    Aber ich finde, man sollte Lösungen für ein Problem finden, und nicht nur das Problem umgehen, in dem man ein völlig anderes System verwendet :O


    Aber ja, eine Alternative wäre es...
    Mich würde nur interessieren, ob mein Vorschlag oben funktioniert, wenn man die Abfrage IsPlayerInRangeOfPoint so aufsplittet mit unterschiedlichen Abständen zu den jeweiligen Koordinaten. Sollte doch eigentlich, oder?

    Nochmal zu der Schleife mit dem i...
    Ich möchte dir erklären, warum es sinnvoll ist es anders zu lösen.


    OnPlayerUpdate wird aufgerufen, wenn der Spieler sich bewegt. Das mehrmals pro Sekunde. D.h. ständig.
    Immer und immer wieder. Für jeden Spieler gleichzeitig.
    Und jetzt möchtest du also mehrmals in einer Sekunde jeden Spieler noch einmal durchgehen, und das für jeden Spieler?


    Glaube mir, das ist unklug. Extrem unklug.
    Die Armys kannst du mit einer extra-Funktion abfragen.
    Und dort, wo du die Nachricht sendest, kannst du ja eine if-Bedingung machen wo du das abfragst.
    if(IsPlayerInRangeOfPoint(i,15.0,276.7849,-4310.0547,6.4115))


    Glaube mir ;)


    Zu deinem eigentlichen Problem:
    else if(Luftabwehr == 1 && IsPlayerInRangeOfPoint(playerid, 1.0, X ,Y , Z >= 15)) //Ich wusste nicht wie ich anders abfragen soll, ob der spieler in der Luft ist + Errorszeile^^
    einfach aufsplitten und die Koordinaten einzeln abfragen.


    else if(Luftabwehr == 1)
    {
    new Float:pX,Float:pY,Float:pZ;
    GetPlayerPos(playerid,pX,pY,pZ);
    //Hier das Aufsplitten. Das -1 und +1 ist jeweils für die Range deiner Abfrage sPlayerInRangeOfPoint(playerid, 1.0, X ,Y , Z >= 15))
    //Bei Z natürlich erhöhen, für dein >= 15.
    if((pX <= X+1) && (pX >= X-1) && (pY <= Y+1) && (pY >= Y-1) && (pZ >= Z+15))
    {
    SendClientMessage(playerid, COLOR_RED, "Warnung! Sie betreten unbefugtes Gelände!");
    SendClientMessage(playerid, COLOR_RED, "Die Luftabwehr hat sie im Ziel!");
    SetTimer("Abschuss", 5000, 1);
    }
    }


    Außerdem gibt es kein unbefugtes Gelände :D Schreib lieber ''Sie betreten unerlaubt das Gelände'' oder so..



    //edit: Letzter Satz :D
    //edit2: GetPlayerPos...

    Waah, hau erst einmal die Schleife ''for(new i = 0; i < MAX_PLAYERS; i++)'' raus.
    Bei OnPlayerUpdate bringt das 0, außer dass es noch Ressourcenfressender ist als ohnehin schon.
    Zudem benutzt du 'i' nur bei
    if(PlayerInfo[i][pMember] == 3 || PlayerInfo[i][pLeader] == 3)
    {
    SendClientMessage(i,COLOR_RED,"Eine unbekannte Person näher sich dem Alkatraz!!");
    }


    Mach lieber eine neue Function, z.B.
    SendClientMessageToArmy. Erst dort drin eine Schleife wo du auf die Fraktion abfragst.


    Nur mal so ganz am Rande. Zum Rest kann ich dir leider noch nicht viel sagen.


    //edit Parameter weg.

    Hättest du auch selber lösen können ;)
    Auf dein Profil gehen, die ID hinten vom Link in die Zwischenablage hauen, irgendeinem anderen eine neue Nachricht schreiben (bis zum Editor) und die ID im Link austauschen.

    Kann man nicht die Uhr mit 2 Timern laufen lassen?
    Zuerst wird die aktuelle Tageszeit genommen und läuft via Timer weiter. Gleichzeitig läuft der selbe Timer nochmal.
    Mit /tod wird die Uhrzeit nun durch den zweiten Timer angezeigt, mit der Uhrzeit die bei /tod eingegeben wurde.
    Der erste, richtige Timer läuft weiterhin.
    Bei /notod wird das wieder herum gedreht, dass die Uhrzeit via normalen Timer angezeigt wird.
    Müsste doch irgendwie möglich sein, oder?


    //edit:
    Oder könnt man vielleicht zwei Textdraws anzeigen lassen, und via /tod und /notod jeweils den gewünschten in den Vordergrund schieben?
    Klar, ressourcenfressend, dafür könnte mich wahrscheinlich wieder welche jagen :3
    Trotzdem wäre es eine Möglichkeit, oder?

    So etwas kann man per PN fragen weil es offtopic ist.
    Allein bei dir hätte ich ja noch nichts gesagt, aber dass dann wieder einer mit schon 6 Verwarnungen die Frage nur wiederholt, 2 Sekunden später, finde ich schon lächerlich.
    Habs auch mal gemeldet @21Code21
    (//edit: Außerdem kann man sich den Befehl nur einmal anschauen ein paar Zeilen drunter. Wenn man den Befehl SetWorldTime sieht, sollte es klar sein was der Befehl machen soll. Selbst wenn man keine Ahnung vom Scripten hat. Da kann der Befehl auch /Pustekuchen heißen, man kann dennoch erkennen was es bewirken soll.)


    Und jetzt B2T:
    Trix, kann man das nicht irgendwie verbinden mit der Uhr?
    Dass wenn man /tod macht, gleichzeitig die Uhr verstellt wird?
    Am besten noch mit einem TimeBackup, wenn man /notod oder so etwas eingibt, die normale Uhr wieder aufgerufen wird und die richtige Tageszeit anzeigt? :)

    tod = TimeOfDay
    normalerweise ändert man damit die Uhrzeit.
    Vermutlich macht das die Funktion SetWorldTime(hour);, die er verwendet.


    Und lasst doch mal so unnötige Kommentare, meine Güte..