ein modmenu in grand theft auto iv erstellen

  • VB.NET
  • .NET (FX) 4.0

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    ein modmenu in grand theft auto iv erstellen

    Hallo liebe Community!
    Ich würde sehr gerne in Grand Theft Auto 4 ein Mod menu erstellen (in-game)

    Ich bin auch schon sehr weit gekommen und auch fast fertig doch ich habe ein großes Problem.
    Undzwar: Wenn ich versuche in GTA eine schöne Liste zu zeichnen überlappen die Menu-Items sich immer übereinander (Bild im Anhang)

    Normalerweise sollte es so aussehen:
    • lol0
    • lol1
    • lol2
    • lol3
    • lol4
    • lol5

    Dies ist mein Code: (Zum zeichnen der Items)

    VB.NET-Quellcode

    1. Private avatext(5) As String
    2. Public Sub New()
    3. avatext(0) = "lol0"
    4. avatext(1) = "lol1"
    5. avatext(2) = "lol2"
    6. avatext(3) = "lol3"
    7. avatext(4) = "lol4"
    8. avatext(5) = "lol5"
    9. End Sub
    10. Private Sub GTAIV_TEST_MENU2_PerFrameDrawing(ByVal sender As Object, ByVal e As GTA.GraphicsEventArgs) Handles MyBase.PerFrameDrawing
    11. Dim num As Integer = 0
    12. Dim topItem As UShort = PtopItem
    13. If menuOpen Then
    14. 'While CInt(topItem) <= CInt(PtopItem) + 30 AndAlso CInt(topItem) < Me.avatext.Length
    15. ' e.Graphics.DrawText(avatext(CInt(topItem)), 20.0F, 30.0F, If(CInt(PtopItem) = CInt(Me.selectedItem), Me.selectedItemColor, Me.defaultItemColor))
    16. ' topItem += 1
    17. 'End While
    18. For Each Element As String In avatext
    19. e.Graphics.DrawText(Element, 10, 10 + 30, If(CInt(topItem) = CInt(Me.selectedItem), Me.selectedItemColor, Me.defaultItemColor))
    20. Next
    21. End If
    22. End Sub


    EDIT:
    Eigentlich sollte ja die e.graphics.drawtext Methode das gleich sein wie die normale .drawtext Funktion oder? In der neuen Methode wird halt nur der Text in GTAIV gezeichnet..

    Hoffentlich ist es nur ein einfacher Fehler von mir wie man die Items Reihe für Reihe auflistet.
    Danke im vorraus!

    *Topic verschoben*
    Bilder
    • 1.png

      200,89 kB, 655×488, 301 mal angesehen
    Wenn ich dir auf irgendeiner Art und Weise helfen konnte, drück doch bitte den "Hilfreich" Button :thumbup:

    Für VB.NET Entwickler: Option Strict On nicht vergessen!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Da wohl nicht allzuviele Leute hier die Möglichkeit haben, das Problem nachzustellen, können wir erstmal nur raten.
    Wo ist denn in Deiner Zeile#23 die variable Y-Koordinate, die besagt, auf welcher Höhe der Text gezeichnet werden soll? Denn ohne wird es immer an der selben X-/Y-Position gezeichnet. Ich tippe mal, dass der 2. und 3. Parameter X und Y sind. Und wenn Du den Text immer auf Y = 10 + 30, also 40 zeichnest, na, was erwartest Du dann? Du müsstest entweder dort ne Zusatzvariable einbauen oder gleich mit ner normalen For-Schleife arbeiten, also z.B.:

    VB.NET-Quellcode

    1. For i = 0 To avatext.Count - 1
    2. e.Graphics.DrawText(avatext(i), 10, 10 + i * 30, If(CInt(topItem) = CInt(Me.selectedItem), Me.selectedItemColor, Me.defaultItemColor))
    3. Next

    Der Rest des Codes bleibt von mir unkontrolliert.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Liste wird perfekt angezeigt!

    @VaporiZed
    Ich liebe dich^^
    Man ich bin dir schon für so viele Dinge dankbar :D

    Ich hätte da noch eine kleine "Wissensfrage"
    Was war denn genau an meinen Code das Problem?
    Also die For each Schleife geht ja immer einmal alle Items durch und führt dann das jeweilige Stück Code einmal aus.
    Ich habe es gestern auch noch mit einer Variable getestet und die sah so aus: Dim x, y as integer und habe dann halt x auf 10 gesetzt und y wird jedes mal + 30 hochgerechnet aber dann wurde das Menu einmal von oben bis nach unten gezeichnet und verschwand.. (Also es ging immmmmer weiter runter).

    Wie schonmal irgendwo in meinen Threads beschrieben ich habe noch nie wirklich mit System.Drawing und so gearbeitet also..
    Aber naja danke :)
    Bilder
    • perfekt.png

      260,63 kB, 533×392, 238 mal angesehen
    Wenn ich dir auf irgendeiner Art und Weise helfen konnte, drück doch bitte den "Hilfreich" Button :thumbup:

    Für VB.NET Entwickler: Option Strict On nicht vergessen!

    ClonkAndre schrieb:

    Was war denn genau an meinen Code das Problem?

    VaporiZed schrieb:

    die variable Y-Koordinate, die besagt, auf welcher Höhe der Text gezeichnet werden soll? Denn ohne wird es immer an der selben X-/Y-Position gezeichnet.

    ClonkAndre schrieb:

    Also die For each Schleife geht ja immer einmal alle Items durch und führt dann das jeweilige Stück Code einmal aus.
    Und macht in der Post#1-Form immer das gleiche. Aber Du willst nicht immer das gleiche, sondern es soll ja neben dem Text sich auch die Position ändern. Und das war nicht der Fall.

    ClonkAndre schrieb:

    Ich habe es gestern auch noch mit einer Variable getestet und die sah so aus: Dim x, y as integer und habe dann halt x auf 10 gesetzt und y wird jedes mal + 30 hochgerechnet aber dann wurde das Menu einmal von oben bis nach unten gezeichnet und verschwand.. (Also es ging immmmmer weiter runter).
    Tja, keine Ahnung. Dazu hätte ich jenen Code sehen müssen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Das einzige, was mir im Nachhinein noch einfällt: Wenn Du die y-Variable global gemacht hast, also nicht in der Zeichnen-Sub deklariert hast, und dann nicht vor dem Zeichnen sie auf Null zurücksetzt - ja, dann wird bei jedem weiteren Zeichnen-Prozedur-Aufruf der Wert der y-Variable immer größer und größer ...
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.