B_Schranke 2.0 - Lass Schranken sanft rotieren >> Jetzt auch mit Türen <<

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 miteinander


    Da ich etwas Langeweile hatte und da einige in den letzten Tagen probleme mit schranken hatten, dachte ich mir. "hm wiso nicht mal eine Include dafür machen?"
    Gedacht und Getan


    Mit der Include könnt ihr einfach schranken erstellen ohne Probleme.
    Es ist vom Prinzip her wie Objecte erstellen hier mal die Funktionen:
    native CreateSchranke(objectid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz, Float:DrawDistance = 0.0, Float:Speed = 0.005, bool:hori_verti = false, bool:Left_Right = false);//Schranke wird erstellt
    native MoveSchranke(schrankenid);//Schranke öffnen/schließen (Automatisch)
    native DestroySchranke(schrankenid);//Schranke löschen
    native SetSchranke(schrankenid, bool:openclose);//Schranke manuell öffnen/schließen (true = offen, false=geschlossen)
    native IsPlayerInRangeOfSchranke(playerid,schrankenid,Float:range);//Abfrage ob Spieler XX in der nähe der schranke ist


    Zu der erklärung was CreateSchranke kann, hier mal ein kleines Muster:
    ~> objectid = Die ID des Objektes
    ~> X,Y,Z,rX,rY,rZ = Die coordinaten (Wichtig! alles im geschlossenen zustand angeben!)
    ~> DrawDistance = Die Distance ab wo man das Object sehen kann
    ~> Speed = geschwindigkeiten das 0.005 ist Optinal für schranken (bei toren oder Türen könnt ihr es selber entscheiden)
    ~> hori_verti = false - schranke geht nach oben | true - aufdrehen lassen für Türen etc
    ~> Left_Right = false - Links | true - rechts (Das drehen)


    Ich habe das zum Testen alles so gemacht, daher könnt ihr euch darauf orientieren
    //Global
    new schranke;//um die ID festzuhalten die die schranke hat
    //Funktionen für Schranken
    public OnGameModeInit()
    {
    schranke = CreateSchranke(968, 997.11, 1707.54, 10.62, 0.00, 90.00, 90.00);//schranke wird erstellt
    return 1;
    }
    //Funktionen für Türen oder desgleichen:
    public OnGameModeInit()
    {
    schranke = CreateSchranke(968, 997.11, 1707.54, 10.62, 0.00, 90.00, 90.00, 0.0, 0.01, true, false);//Tür oder Tor wird erstellt
    return 1;
    }


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if (strcmp("/schranke", cmdtext, true, 10) == 0)
    {
    if(!IsPlayerInRangeOfSchranke(playerid,schranke,10.0))return SendClientMessage(playerid,-1,"Hier ist keine schranke");//Abfragen ob er in der nähe von schranke XX ist
    MoveSchranke(schranke);//schranke geht auf/zu ganz sanft
    //Alternativ
    SetSchranke(schranke, true);//schranke öffnet
    //Oder
    SetSchranke(schranke, false);//schranke schließt
    return 1;
    }
    if (strcmp("/removeschranke", cmdtext, true, 10) == 0)
    {
    DestroySchranke(schranke);//schranke wird gelöscht
    return 1;
    }
    return 0;
    }
    Wie ihr sehen könnt ist der Umgang recht einfach und ich hoffe das jeder damit zurechtkommt :D


    Pastebinlink: http://pastebin.com/raw.php?i=PP4ErwhE
    Download im Anhang


    Sollte einer Fragen zu den System haben oder Probleme, kann er dies hier im Theard melden ich werde mich dann darum kümmern.
    Die Include ist so angepasst, das die erkennt ob ein streamer genutzt wird oder nicht ;)
    Das limit der schranken liegt bei 300 (das sollte eig vollkommen reichen)


    Die Installation macht ihr so:
    include downloaden, unter Pawno/include einfügen und oben im Script das einfügen:
    (Am besten unter den Streamer wenn ihr den Nutzt
    #include B_Schranke


    Ich hoffe, das sie euch gefällt und feedback ist immer erwünscht ;)


    Infos
    +Fehler bei den Türen Behoben und den Code Optimiert


    !! Hinweis !!
    Schranken und Türen im Geschlossenen zustand erstellen lassen!

  • Folgendes:


    Es müssen Objekte unterschiedlich rotiert werden, sprich deine Include funktioniert nur bei einer bestimmten Richtung für die Rotation...


    Zudem du kannst auch ein Array in einem enum erstellen für X,Y,Z,rX,rY,rZ :)


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Ich hab das bei Mehreren getestet gehabt und hab einfach nur die rY auf 0 gesetzt
    klappte überall gleichgut


    Aber ich kann mal schauen ob man da noch was machen kann


    //nachtrag


    Ich weiß was du meinst ist mir gerade auch aufgefallen :D

    All in all it's just another brick in the wall

  • Ich hätte noch ein paar Ideen, wie du die Include erweitern könntest. :)


    • MoveSchranke(schranke, OPEN); // Zum Öffnen
      MoveSchranke(schranke, CLOSE); // Zum Schließen
      MoveSchranke(schranke); // Öffnen / Schließen


    • CreateSchranke(objectid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz, Float:DrawDistance = 0.0, Geschwindigkeit, HORIZONTAL / VERTIKAL)


      • Geschwindigkeit gibt die Geschwindigkeit an, mit der die Schranke geöffnet wird
      • HORIZONTAL / VERTIKAL gibt an, ob die Schranke horizontal oder vertikal steuert


    PAWNit gratis nutzen?
    Geschenkcode: 2017VQXPKB8V3KA

    Hier könnte Ihre Werbung stehen.

  • HORIZONTAL / VERTIKAL gibt an, ob die Schranke horizontal oder vertikal steuert


    Das versteh ich gerade nicht bzw kann mir daunter jetzt nichts denken


    Das mit den Open/close hatte ich erst vorgehabt dann aber doch seingelassen :D
    Mit den Speed ist auch so eine sache das 0.005 ist schon die optimale geschwindigkeit
    wenn da einer ne 1 oder so reinschreibt, dann ist die schranke schlagartig offen

    All in all it's just another brick in the wall

  • Keine schlechte Idee ;)
    Finde es zwar LEICHT unnötig weil es ja nicht soo viel Code ist jedoch ist das System selber genial.
    Ich bin einfach nicht so der Typ um für alles Includes zu haben und wenn ich welche runterlade lasse ich sie so wie sie sind ;)
    Hatte selber öfters mal mit den Schranken probleme :<


    Bewertung: 9,5 / 10

    ik bin der vito c:

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • wo ne schrank von unten nach oben rotiert? also vertikal?


    die schranke geht auf wie es eine echte auch macht?


    Bisher geplant ist:

    • Das wie Hauke schon schrieb nur nenn ich die Funktion auf SetSchranke um wenn man die manuell öffnen/schließen will.
    • Der fehler das die sich drehen kann wurde behoben
    • Geschwindigkeit bei der ersellung kann man mit angeben (optimaler wert bleibt aber 0.005
    • Das man die schranken vertikal öffnen/schließen kann (wie ich das mache is mir noch nen rätsel da ich einiges beachten muss :D

    All in all it's just another brick in the wall

  • ____________Update____________
    Es sind kleinere Funktionen jetzt dazugekommen und einige Fehler habe ich behoben


    Nach einigen Tests, habe ich keine Anzeichen davon gehabt das sich schranken bei einen Bestimmten Radius einmal im Kreis drehen.
    ______________________________


    Und ich danke für euer Feedback
    Ideen oder vorschläge setze ich gerne um ;)

    All in all it's just another brick in the wall

  • im zuhen zustand ?
    schranke = CreateSchranke(968, 997.11, 1707.54, 10.62, 0.00, 90.00, 90.00);//schranke wird erstellt
    oder muss ich auf erstellen lassen ?

  • ich hab die jetzt so muss ich da noch was beachten weil es geht net ^^


    testschranke = CreateObject(968, 1544.71375, -1630.90674, 13.09990, 1.00000, 89.00000, 90.00000);
    ocmd:tests(playerid,params[])
    {
    if(!IsPlayerInRangeOfSchranke(playerid,testschranke,10.0))return SendClientMessage(playerid,-1,"Hier ist keine schranke");//Abfragen ob er in der nähe von schranke XX ist
    MoveSchranke(testschranke);
    return 1;
    }