Numpad | Clickable Textdraws

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Numpad | Clickable Textdraws

    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

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

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von BrightLeaN ()

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

    PAWN-Quellcode

    1. pInfo[playerid][savecode]


    zu

    PAWN-Quellcode

    1. 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:

    PAWN-Quellcode

    1. pInfo[playerid][savecode][4]
    2. //Setzen
    3. pInfo[playerid][savecode][0] .. pInfo[playerid][savecode][3] = zahl;
    4. //aufrufen
    5. 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

    Ich weiß, dass ich weiß, dass ich nichts weiß.
  • BrightLeaN schrieb:

    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.


    XonarZ schrieb:

    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.

    Ich weiß, dass ich weiß, dass ich nichts weiß.
  • Danke dir, solche Idiotenfragen... ^^


    C-Quellcode

    1. for(new i; i < 9; i++)
    2. {
    3. if(clickedid != Text:JamKeyNum[i][playerid]) continue;
    4. if(clickedid == Text:JamKeyNum[0][playerid])
    5. {
    6. SendClientMessage(playerid,-1,"0");
    7. }
    8. if(clickedid == Text:JamKeyNum[1][playerid])
    9. {
    10. SendClientMessage(playerid,-1,"1");
    11. }
    Alles anzeigen
    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?

    Ich weiß, dass ich weiß, dass ich nichts weiß.
  • Einfach nur sowas:

    C-Quellcode

    1. //Variable dient als Test! Muss global sein
    2. new code[MAX_PLAYERS][3]; //3 = Die Länge des Codes
    3. for(new i; i < 9; i++)
    4. {
    5. if(clickedid == Text:JamKeyNum[i][playerid])
    6. {
    7. new c = GetPVarInt(playerid,"c_index"),string[64];
    8. code[playerid][c] = i;
    9. SCME(playerid,-1,"Du hast %d angeklickt!",i);
    10. if(c < sizeof(code[])-1) SetPVarInt(playerid,"c_index",c+1);
    11. else
    12. {
    13. DeletePVar(playerid, "c_index");
    14. SCME(playerid,-1,"Dein Code ist: %d",strval(code[playerid]));
    15. }
    16. break;
    17. }
    18. }
    Alles anzeigen


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/
  • C-Quellcode

    1. public OnPlayerClickTextDraw(playerid, Text:clickedid)
    2. {

    C-Quellcode

    1. for(new i; i < 9; i++)
    2. {
    3. if(clickedid == Text:JamKeyNum[i][playerid])
    4. {
    5. new c = GetPVarInt(playerid,"c_index"),string[64];
    6. pInfo[playerid][savecode] = i;
    7. SCME(playerid,-1,"Du hast %d angeklickt!",i);
    8. if(c < sizeof(pInfo[][])-1) SetPVarInt(playerid,"c_index",c+1);
    9. else
    10. {
    11. DeletePVar(playerid, "c_index");
    12. SCME(playerid,-1,"Dein Code ist: %d",strval(pInfo[playerid][savecode]));
    13. }
    14. break;
    15. }
    16. }
    Alles anzeigen
    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.

    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 ^^


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/
  • Also jetzt habe ich Warnings und das Textdraw wird nicht removed

    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-Quellcode

    1. public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid)
    2. {
    3. if(PlayerText:playertextid == Text:INVALID_TEXT_DRAW)
    4. {
    5. PlayerTextDrawHide(playerid, JamKeyNum[7][playerid]);

    Hier ist ein Tag mismatch in der if Abfrage

    genauso hier

    C-Quellcode

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

    Ich weiß, dass ich weiß, dass ich nichts weiß.
  • BrightLeaN schrieb:

    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.


    BrightLeaN schrieb:

    if(PlayerText:playertextid == Text:JamKeyNum[playerid])
    Hier musst du das so schreiben:

    PAWN-Quellcode

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


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/
  • Dankesehr der Herr,

    C-Quellcode

    1. public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid)
    2. {
    3. for(new i; i < 9; i++)
    4. {
    5. if(playertextid == PlayerText:JamKeyNum[i][playerid])
    6. {
    7. new c = GetPVarInt(playerid,"c_index"),string[64];
    8. pInfo[playerid][pBankcode] = i;
    9. SCME(playerid,-1,"Du hast %d angeklickt!",i);
    10. if(c < sizeof(pInfo[][])-1) SetPVarInt(playerid,"c_index",c+1);
    11. else
    12. {
    13. DeletePVar(playerid, "c_index");
    14. SCME(playerid,-1,"Dein Code ist: %d",strval(pInfo[playerid][pBankcode]));
    15. }
    16. break;
    17. }
    18. }
    19. return 0;
    20. }
    Alles anzeigen
    Mein Aktueller Code ist die ganze Zeit 0 warum? Da stimmt was mit Zeile 10. glaube ich nicht

    Ich weiß, dass ich weiß, dass ich nichts weiß.
  • BrightLeaN schrieb:

    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:

    PAWN-Quellcode

    1. #define MAX_CODE_LEN 3
    2. //Dann im Enum:
    3. pBankcode[MAX_CODE_LEN]
    4. //Dann in Zeile 10:
    5. if(c < MAX_CODE_LEN-1)
    6. //Und in Zeile 8:
    7. pInfo[playerid][pBankcode][c] = i;


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/
  • 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.


    C-Quellcode

    1. public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid)
    2. {
    3. for(new i; i < 9; i++)
    4. {
    5. if(playertextid == PlayerText:JamKeyNum[i][playerid])
    6. {
    7. new c = GetPVarInt(playerid,"c_index"),string[64];
    8. pInfo[playerid][pBankcode][c] = i;
    9. SCME(playerid,-1,"Du hast %d angeklickt!",i);
    10. if(c < MAX_CODE_LEN-1) SetPVarInt(playerid,"c_index",c+1);
    11. else
    12. {
    13. DeletePVar(playerid, "c_index");
    14. SCME(playerid,-1,"Dein Code ist: %d",strval(pInfo[playerid][pBankcode]));
    15. }
    16. break;
    17. }
    18. }
    19. return 0;
    20. }
    Alles anzeigen
    Habe ich was falsch gemacht? Ich kriege 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?

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