Numpad | Clickable Textdraws

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
  • Hey!
    Ich habe ein Numpad mit Textdraws erstellt und will das der Spieler einen Code für sich erstellt.
    Klickt er auf die 3 ist es ja die Zahl 3, klickt er auf die 2 ist es die Zahl 2 würde ich die Zahlen jeweilig + rechnen käme ja was ganz anderes raus
    Aber ich kann am ende nicht alle Zahlen addieren, gibt es da irgendwelche Möglichkeiten? Ich hab die Variable pInfo[playerid][savecode]
    Von den kleinen Scriptingfragen hierher verschoben

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

    Einmal editiert, zuletzt von Jameso ()

  • Also ich würde das ganze als Array machen sprich deine Variable


    pInfo[playerid][savecode]


    zu


    pInfo[playerid][savecode][]


    ändern. in den Letzten Klammern setzt du eine Zahl, wieviele Zahlen maximal eingegeben werden dürfen. und Aufrufen kannst du die ja dann wie folgt:


    Bsp max. 4 Zahlen:

    pInfo[playerid][savecode][4]


    //Setzen
    pInfo[playerid][savecode][0] .. pInfo[playerid][savecode][3] = zahl;


    //aufrufen
    pInfo[playerid][savecode][0] .. pInfo[playerid][savecode][3];


    So würde ich das erstmal ran gehen. Kann mich aber auch irren^^

  • Ja das mit dem Array hatte ich auch gedacht, das ganze so zu machen wie es der liebe @Andosius vorgeschlagen hat.
    Dann kann ich sofort den String pInfo[playerid][savecode] zuordnen.


    Um unnötige if Abfragen zu vermeiden möchte ich abfragen ob das Textdraw eines von den ganzen ist
    KeyPad[][playerid] ohne einen Array anzugeben bekomme ich ein Error

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Ja das mit dem Array hatte ich auch gedacht, das ganze so zu machen wie es der liebe @Andosius vorgeschlagen hat.
    Dann kann ich sofort den String pInfo[playerid][savecode] zuordnen.


    Um unnötige if Abfragen zu vermeiden möchte ich abfragen ob das Textdraw eines von den ganzen ist
    KeyPad[][playerid] ohne einen Array anzugeben bekomme ich ein Error

    Das mit dem Array hatte ich gesagt nicht Andosius, oder ich habe deinen Satz falsch verstanden. Ich würde das ganze als Array machen wie ich eben schon sagte um Zahlen zu Addieren, so kannst du z.B. ggf. eine Zahl zwischendrinne ändern, falls der Spieler es sich mit einer Zahl anders überlegt (bsp. der Spieler will die 2 Zahl (X) auf (Y) ändern.


    das zweite verstehe ich nicht ganz. Was möchtest du genau machen ?

  • Upsi, habe vergessen zu sagen das ich irgendwie 9 Textdraws habe KeyPad[9][playerid] und ich will abfragen ob dieses angeklickte Textdraw eines von denen ist.
    Ich habe versucht abzufahren ob clickedid gleich KeyPad[][playerid] ist aber da kriege ich ein Error weil ich keine Angabe gemacht habe in den ersten Klammern.



    Zitat von XonarZ

    Das mit dem Array hatte ich gesagt nicht Andosius

    Die Sache mit dem Array bezog sich auf die Textdraws, mein Fehler hab vergessen es dazu zu schreiben.

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Danke dir, solche Idiotenfragen... ^^



    Was mache ich falsch? Wenn ich auf das Textdraw clicke passiert nichts.


    Muss die Schleife 1 returnen oder jede einzelne if(clickedid Abfrage und oder beides?

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Einfach nur sowas:


    ast2ufdyxkb1.png


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

  • C
    public OnPlayerClickTextDraw(playerid, Text:clickedid)
    {

    Was habe ich falsch gemacht, dass er mir nichts anzeigt? Eventuell Zeile 8. ? Oder sollte ich das lieber so machen, dass ich die Code Variable benutzte und sie am Ende der richtigen hinzufüge also die Zahlen.

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Sind das denn überhaupt TextDraws oder verwendest du PlayerTextDraws? ^^


    Ansonsten nutze doch einfach print und debugge.


    Schau ob der Callback aufgerufen wird, schau ob clickedid einer JamKeyNum[i][playerid] entspricht...


    oder hast du es vielleicht anders deklariert..also JamKeyNum[playerid][i]?


    Kenne ja deinen Code leider nicht ^^

    ast2ufdyxkb1.png


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

  • Alles richtig deklariert.
    Ja es sind PlayerTextDraws :D


    C
    public OnPlayerClickTextDraw(playerid, Text:clickedid)
    {
        if(clickedid == Text:INVALID_TEXT_DRAW)
    	{
    		PlayerTextDrawHide(playerid, JamKeyNum[0][playerid]);
      		return 1;
        }

    Das funktioniert ja vorher.

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Also jetzt habe ich Warnings und das Textdraw wird nicht removed


    http://prntscr.com/nggmmi
    Was hat dies zu sagen? Soll ich für das verstecken der Textdraws es so lassen und für die anderen Funktionen OnPlayerClickPlayerTextDraw benutzen?


    Die Diskussion hatte ich schon mit 2 anderen schon darüber :D

    C
    public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid)
    {
        if(PlayerText:playertextid == Text:INVALID_TEXT_DRAW)
    	{
    		PlayerTextDrawHide(playerid, JamKeyNum[7][playerid]);


    Hier ist ein Tag mismatch in der if Abfrage


    genauso hier


    C
    if(PlayerText:playertextid == Text:JamKeyNum[i][playerid])

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Was hat dies zu sagen? Soll ich für das verstecken der Textdraws es so lassen und für die anderen Funktionen OnPlayerClickPlayerTextDraw benutzen?

    Richtig.


    Wenn ESC geklickt wird, musst du es unter OnPlayerClickTextDraw lassen.


    Alle anderen Abfragen in den anderen Callback.


    Also das Hide so lassen, wie du es hattest.



    if(PlayerText:playertextid == Text:JamKeyNum[i][playerid])

    Hier musst du das so schreiben:


    if(playertextid == PlayerText:JamKeyNum[i][playerid])

    ast2ufdyxkb1.png


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

  • Dankesehr der Herr,


    Mein Aktueller Code ist die ganze Zeit 0 warum? Da stimmt was mit Zeile 10. glaube ich nicht

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Mein Aktueller Code ist die ganze Zeit 0 warum

    Weiiil du nicht den Code nutzt, den ich gezeigt habe, sondern


    pInfo[playerid][pBankcode] verwendest.


    Schreib oben in dein Skript:



    #define MAX_CODE_LEN 3


    //Dann im Enum:
    pBankcode[MAX_CODE_LEN]


    //Dann in Zeile 10:
    if(c < MAX_CODE_LEN-1)


    //Und in Zeile 8:
    pInfo[playerid][pBankcode][c] = i;

    ast2ufdyxkb1.png


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

  • achso, ich habe das falsch verstanden, mit pInfo[playerid][savecode] wollte ich das zwischenspeichern, brauch ich aber ja nicht und kann dann sofort pInfo[playerid][pBankcode] abspeichern.



    Habe ich was falsch gemacht? Ich kriege http://prntscr.com/nh5s88


    Max_Code_Len ist auf 3 definiert. Heißt es, dass es 4 Zahlen sind oder 3? Weil in Zeile 10 ja auch MAX_CODE_LEN-1 abfragt?

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Heißt, MAX_CODE_LEN muss auf 5 definiert sein um 4 Slots zu haben.
    Ist es richtig, dass ich den Pvar beim Login auf -1 setze ?
    Maybe liegt es daran

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.