Beiträge von Strobe

    List-Klasse

    Wie im Titel genannt habe ich eine neue Dx-Klasse angefertigt. Diesmal eine List-Klasse. Die Methode ist diesmal jedoch anders als bei der letzten. Diesmal werden alle Text-Elemente, welche in einer Table angegeben werden in ein RenderTarget gezeichnet. Danach wird das RenderTarget mit dxDrawImageSection gezeichnet wobei das Scrollen als Parameter mitgegeben wird. Jedoch genug geredet.

    Anwendungsbeispiel ( Spielerliste ) :

    Externer Inhalt www11.pic-upload.de
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.

    Wie man erkennen kann, ist das oberste Elemente beim Scrollen in der Hälfte gerendert. Beim Scrollen wirkt das deshalb sehr geschmeidig und nicht blockhaft.

    Das gesamte Script ist leider schlecht dokumentiert ( wer hätte es anders erwartet ). Jedoch eine kurze Dokumentation wie man eine Liste erstellt.

    Code
    ScrollBox.new( I_SX, I_SY , I_WIDTH , I_HEIGHT , TBL_CONTENT, BG_COLOR, S_FONT, I_FONT, B_SCROLLBAR, I_SCROLLAMOUNT  ) -- Funktion zum erstellen --// Nun ein Beispiel // liste = {	}for i = 1,100 do table.insert( liste, i  ) end LISTEN_ELEMENT = ScrollBox.new( 0, 0 , 400, 400 ,liste )  -- Nur die ersten 4 Parameter sind notwendig der Rest ist optional

    Der Code: >> HIER << // Veraltet

    Neue Version Mouse-Scroll hinzugefügt :>>HIER<<

    Das war es soweit, weiteres kann durch durchschauen des Codes ersehen werden.


    Mir fallen auch nicht viele Anwendungen dazu ein außer , wenn ein Stunt-Script ermitteln soll, wie viele Flips das Fahrzeug gemacht hat.
    Warum rechnest du nicht einfach alle Rotationen zusammen ?
    Hierzu musst du jedoch in Intervallen die Rotationsänderung überprüfen und dann mit Rotationsmenge2  - Rotationsmenge1 die Rotationsänderung herausfinden und diese Veränderung immer summieren.
    Also z.B 1.Sekunde-2.Sekunde: (Rotationsmenge2  - Rotationsmenge1 ) + (Rotationsmenge2  - Rotationsmenge1 ) + ...
    Nun könnte hier drin ein Denkfehler stecken, aber sonst fällt mir spontan nichts ein.


    //Edit Befolg einfach das was Trevit schrieb. Es ist kurz und knackiger.

    Es können nur Vermutungen angestellt werden ohne Code.
    Ich denke es liegt daran, dass beim Triggern des Events anstatt dem Spieler bei welchem das GUI geöffnet werden soll,
    root(getRootElement()) übergeben wird.

    Es ist nur eine Frage der Zeit bis der Rest der Rap-Gemeinschaft anfängt sich zwischen Metrosexualität und pseudo-orthodoxen Bartträgern zu entscheiden. Natürlich würde ich die Bartträger bevorzugen. Ich verstehe jedoch nicht warum beide ihre Tracks so populär gestalten wollen, wenn doch letztendlich der musikalische Teil des Raps entscheidet *whistling* ( oder vielleicht weiß ich es doch ).

    //Edit Ich hab erst jetzt den Titel des Tracks gelesen "Tag des jüngsten Gerichts" ? Ahahah. Bei solch einem kreativen(!(?)) und originellen(!(?)) Titel, da kann man doch schon ohne es zu hören mal klatschen ( irgendwie nicht ).

    Dieser Schnickschnack bezüglich Veröffentlichungen von selbst kleinen Scriptausszügen ist meiner Meinung nach überheblich, es geht nur um einen kleinen Teil eines Lua-Codes. Es ist nichts Bahnbrechendes oder sonstig sehr Hochentwickltes , da kann man denke ich auch mal im Interesse des Hilfesuchenden den kleinen Teil von der Zeile des HUDs wo das Weapon-Image gezeichnet wird hier posten. Es sind nur Funktion welche von MTA bereitgestellt wurden, ich finde nicht, dass man durch das simple Verwenden von diesen Funktionen das Recht hat Personen nicht zu erlauben diese Zeilen(-abschnitte) hier zu posten.

    Wie Vandam schon sagte:

    Du musst bei deinem dxDrawText als erstes die Breite in Pixeln errechnen ( EndX - StartX ), nennen wir diese BoxBreite

    Nun musst du die Breite des gesamten Strings mit dxGetTextWidth( ) herausfinden, diese nennen wir TextBreite.

    Als nächstes TextBreite / BoxBreite und du hast schon mal wie viele Zeilen erstellt werden müssen. Beachte dass die Werte hochgerundet werden ! Da du sonst bei einer Zeile zb 100pixel/200pixel = 0.5(!) hast und dieses ja hoch auf 1 gerundet werden muss da mind. 1 Zeile vorhanden ist.

    Nun musst du die FontHöhe herrausfinden mit dxGetFontHeight( ), diese nennen wir SchriftHoehe.

    Letzter Schritt SchriftHoehe * Zeilen = HoeheDesTextes.

    Hier wäre ein eher uneffizienter Ansatz:


    Mit interpolateBetween könntest du es effizienter machen , jedoch müsstest du einige Berechnung anstellen , da du bei interpolateBetween
    einen Progress-Wert angeben musst.
    >> Dies würde ein Wert sein , der sich aus der StartZeit der Animation und der Zeit wie lange die Animation geht errechnet.
    Beispiel wenn die Animation 4000 ms dauert und wir zurzeit schon 1000ms von der Animation abgelaufen haben so wäre der Fortschritt
    verstricheneZeit / gesamtZeit = Fortschritt also >> 1000 / 4000 = 0.25 ( d.H. 1/4 der Fortschritt der Animation beträgt 1/4 )

    (1) >>
    Wenn du zwischen Fahrzeugtypen wie Motorrad , Auto , etc. unterscheiden willst so solltest du wie schon Jusonex sagte dafür getVehicleType( ) benutzen.

    (2)>>
    Willst du jedoch , eine Funktion schreiben, welche überprüft ob ein Auto ein Admin-Auto ist, so solltest du dein Beispiel ausbauen und erweitert noch anhand einer Element-Data des Autos abfragen ob es ein Admin-Auto ist oder nicht.

    Hierfür solltest du beim erstellen der Admin-Autos auch dem Auto mit dazu die Element-Data zuweisen.

    Bsp.:

    Lua
    local car = createVehicle(411,0,0,3) 
    setElementData( car, "adminAuto", true ) 
    --nun sollte dein Teil folgen mit der Funktion scheincheck und dem addEventHandler, wo du abfragst ob der Spieler Admin ist und ob das Auto ein Admin-Auto ist

    Optional könntest du einfach nur beim EventHandler anstatt das Event bei jedem Fahrzeug zu triggern es einfach nur beim Einsteigen eines Admin autos triggern. Hierfür müsstest du jedoch jedem Admin-Auto einen EventHandler hinzufügen.

    Bsp.:

    Lua
    local car = createVehicle ( 411, 0,0,3) 
    addEventHandler("onVehicleEnter",car,scheincheck ) -- Beachte, dass hier onVehicleEnter ansttat onPlayerVehicleEnter benutzt wird aufgrund der unterschiedlichen Source-Argumente.

    @Syndox:

    Naja ganz so ist es nicht.


    Im Alltag oder jedem anderem System, welches ich kenne ist sicherlich die Y-Achse hoch/runter.

    Hier jedoch Z-Achse = Hoch/Runter.

    Dr.Pro:

    This function will set the color of a vehicle. Colors are in RGB format, vehicles can have up to 4 colors. Most vehicles have 2 colors only.


    Lua
    setVehicleColor ( vehicle theVehicle, int r1, int g1, int b1, [int r2, int g2, int b2,] [int r3, int g3, int b3,] [int r4, int g4, int b4] )




    Ist dann ausschliesslich die Tabelle gemeint für die Farben, also von 1-126 ?
    So sind dann nur farben von 1-126 für R,G,B ?

    Ich denke eher es kann auch mit RGB klappen, da 2 Funktionen auf der Wiki gelistet sind.