Textdraws funktionieren nicht?

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 meine lieben Scripter,


    ich habe ein Waffenlager gemacht welches auf meinem alten Script funktioniert, aber bei meinem neuen Script nicht.. ich hab alles exakt übernommen aber es passiert nichts.


    Also die Textdraws werden alle angezeigt, aber ich kann sie nicht anklicken und wenn ich auf Beenden drücke, passiert auch nichts.



    public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid)
    {
    new WaffenString[200];
    if(playertextid == PlayerText:INVALID_TEXT_DRAW)
    {
    WaffenlagerVerstecken(playerid);
    CancelSelectTextDraw(playerid);
    }
    if(playertextid == Beenden[playerid])
    {
    WaffenlagerVerstecken(playerid);
    CancelSelectTextDraw(playerid);
    }
    if(playertextid == Waffe1[playerid])
    {
    switch(SpielerInfo[playerid][Fraktion])
    {
    case 1:
    {
    GivePlayerWeapon(playerid, 24, 150);
    format(WaffenString, sizeof(WaffenString), "%s hat sich eine {00FF00}Deagle{FEFEFE} genommen", SpielerName(playerid));
    SendClientMessage(playerid, Weiss, "{00FF00}Deagle{FEFEFE} erhalten");
    SAPDWaffenEntnahmeSpeichern(WaffenString);
    }
    case 2:
    {
    GivePlayerWeapon(playerid, 24, 150);
    format(WaffenString, sizeof(WaffenString), "%s hat sich eine {00FF00}Deagle{FEFEFE} genommen", SpielerName(playerid));
    SendClientMessage(playerid, Weiss, "{00FF00}Deagle{FEFEFE} erhalten");
    BwWaffenEntnahmeSpeichern(WaffenString);
    }
    case 3:
    {
    GivePlayerWeapon(playerid, 30, 250);
    format(WaffenString, sizeof(WaffenString), "%s hat sich eine {00FF00}AK-47{FEFEFE} genommen", SpielerName(playerid));
    SendClientMessage(playerid, Weiss, "{00FF00}AK-47{FEFEFE} erhalten");
    TerrorWaffenEntnahmeSpeichern(WaffenString);
    }
    }
    }
    if(playertextid == Waffe2[playerid])
    {
    switch(SpielerInfo[playerid][Fraktion])
    {
    case 1:
    {
    GivePlayerWeapon(playerid, 29, 300);
    format(WaffenString, sizeof(WaffenString), "%s hat sich eine {00FF00}MP5{FEFEFE} genommen", SpielerName(playerid));
    SendClientMessage(playerid, Weiss, "{00FF00}MP5{FEFEFE} erhalten");
    SAPDWaffenEntnahmeSpeichern(WaffenString);
    }
    case 2:
    {
    GivePlayerWeapon(playerid, 27, 50);
    format(WaffenString, sizeof(WaffenString), "%s hat sich eine {00FF00}Combat-Shotgun{FEFEFE} genommen", SpielerName(playerid));
    SendClientMessage(playerid, Weiss, "{00FF00}Combat-Shotgun{FEFEFE} erhalten");
    BwWaffenEntnahmeSpeichern(WaffenString);
    }
    case 3:
    {
    GivePlayerWeapon(playerid, 31, 250);
    format(WaffenString, sizeof(WaffenString), "%s hat sich eine {00FF00}M4{FEFEFE} genommen", SpielerName(playerid));
    SendClientMessage(playerid, Weiss, "{00FF00}M4{FEFEFE} erhalten");
    TerrorWaffenEntnahmeSpeichern(WaffenString);
    }
    }
    }
    if(playertextid == Waffe3[playerid])
    {
    switch(SpielerInfo[playerid][Fraktion])
    {
    case 1:
    {
    GivePlayerWeapon(playerid, 31, 300);
    format(WaffenString, sizeof(WaffenString), "%s hat sich eine {00FF00}M4{FEFEFE} genommen", SpielerName(playerid));
    SendClientMessage(playerid, Weiss, "{00FF00}M4{FEFEFE} erhalten");
    SAPDWaffenEntnahmeSpeichern(WaffenString);
    }
    case 2:
    {
    GivePlayerWeapon(playerid, 29, 300);
    format(WaffenString, sizeof(WaffenString), "%s hat sich eine {00FF00}MP5{FEFEFE} genommen", SpielerName(playerid));
    SendClientMessage(playerid, Weiss, "{00FF00}MP5{FEFEFE} erhalten");
    BwWaffenEntnahmeSpeichern(WaffenString);
    }
    case 3:
    {
    GivePlayerWeapon(playerid, 29, 250);
    format(WaffenString, sizeof(WaffenString), "%s hat sich eine {00FF00}MP5{FEFEFE} genommen", SpielerName(playerid));
    SendClientMessage(playerid, Weiss, "{00FF00}MP5{FEFEFE} erhalten");
    TerrorWaffenEntnahmeSpeichern(WaffenString);
    }
    }
    }
    if(playertextid == Waffe4[playerid])
    {
    switch(SpielerInfo[playerid][Fraktion])
    {
    case 1:
    {
    GivePlayerWeapon(playerid, 25, 100);
    format(WaffenString, sizeof(WaffenString), "%s hat sich eine {00FF00}Shotgun{FEFEFE} genommen", SpielerName(playerid));
    SendClientMessage(playerid, Weiss, "{00FF00}Shotgun{FEFEFE} erhalten");
    SAPDWaffenEntnahmeSpeichern(WaffenString);
    }
    case 2:
    {
    GivePlayerWeapon(playerid, 34, 50);
    format(WaffenString, sizeof(WaffenString), "%s hat sich eine {00FF00}Sniper{FEFEFE} genommen", SpielerName(playerid));
    SendClientMessage(playerid, Weiss, "{00FF00}Sniper{FEFEFE} erhalten");
    BwWaffenEntnahmeSpeichern(WaffenString);
    }
    case 3:
    {
    GivePlayerWeapon(playerid, 28, 100);
    format(WaffenString, sizeof(WaffenString), "%s hat sich eine {00FF00}Micro-Uzi{FEFEFE} genommen", SpielerName(playerid));
    SendClientMessage(playerid, Weiss, "{00FF00}Micro-Uzi{FEFEFE} erhalten");
    TerrorWaffenEntnahmeSpeichern(WaffenString);
    }
    }
    }
    if(playertextid == Waffe5[playerid])
    {
    switch(SpielerInfo[playerid][Fraktion])
    {
    case 1:
    {
    SetPlayerArmour(playerid, 100);
    SchutzwesteSAPD[playerid] = SetPlayerAttachedObject(playerid,0, 19142,1,0.079999,0.045000,0.014999,1.500000,-3.500000,-2.500000,1.000000,1.000000,1.000000);
    SetTimerEx("SchutzwesteEntfernen", 1000, true, "i", playerid);
    format(WaffenString, sizeof(WaffenString), "%s hat sich eine {00FF00}Schutzweste{FEFEFE} genommen", SpielerName(playerid));
    SendClientMessage(playerid, Weiss, "{00FF00}Schutzweste{FEFEFE} erhalten");
    SAPDWaffenEntnahmeSpeichern(WaffenString);
    }
    case 2:
    {
    SetPlayerArmour(playerid, 100);
    SchutzwesteBW[playerid] = SetPlayerAttachedObject(playerid,0, 19142,1,0.079999,0.045000,0.014999,1.500000,-3.500000,-2.500000,1.000000,1.000000,1.000000);
    SetTimerEx("SchutzwesteEntfernen", 1000, true, "i", playerid);
    format(WaffenString, sizeof(WaffenString), "%s hat sich eine {00FF00}Schutzweste{FEFEFE} genommen", SpielerName(playerid));
    SendClientMessage(playerid, Weiss, "{00FF00}Schutzweste{FEFEFE} erhalten");
    BwWaffenEntnahmeSpeichern(WaffenString);
    }
    case 3:
    {
    SetPlayerArmour(playerid, 100);
    SchutzwesteTerror[playerid] = SetPlayerAttachedObject(playerid,0, 19142,1,0.079999,0.045000,0.014999,1.500000,-3.500000,-2.500000,1.000000,1.000000,1.000000);
    SetTimerEx("SchutzwesteEntfernen", 1000, true, "i", playerid);
    format(WaffenString, sizeof(WaffenString), "%s hat sich eine {00FF00}Schutzweste{FEFEFE} genommen", SpielerName(playerid));
    SendClientMessage(playerid, Weiss, "{00FF00}Schutzweste{FEFEFE} erhalten");
    TerrorWaffenEntnahmeSpeichern(WaffenString);
    }
    }
    }
    if(playertextid == Waffe6[playerid])
    {
    switch(SpielerInfo[playerid][Fraktion])
    {
    case 1:
    {
    SetPlayerHealth(playerid, 100);
    SendClientMessage(playerid, Weiss, "{00FF00}Leben{FEFEFE} erhalten");
    }
    case 2:
    {
    SetPlayerHealth(playerid, 100);
    SendClientMessage(playerid, Weiss, "{00FF00}Leben{FEFEFE} erhalten");
    }
    case 3:
    {
    SetPlayerHealth(playerid, 100);
    SendClientMessage(playerid, Weiss, "{00FF00}Leben{FEFEFE} erhalten");
    }
    }
    }
    if(playertextid == Waffe7[playerid])
    {
    switch(SpielerInfo[playerid][Fraktion])
    {
    case 1:
    {
    SetPlayerHealth(playerid, 100);
    SendClientMessage(playerid, Weiss, "{00FF00}Leben{FEFEFE} erhalten");
    }
    case 2:
    {
    SetPlayerHealth(playerid, 100);
    SendClientMessage(playerid, Weiss, "{00FF00}Leben{FEFEFE} erhalten");
    }
    case 3:
    {
    GivePlayerWeapon(playerid, 24, 150);
    format(WaffenString, sizeof(WaffenString), "%s hat sich eine {00FF00}Deagle{FEFEFE} genommen", SpielerName(playerid));
    SendClientMessage(playerid, Weiss, "{00FF00}Deagle{FEFEFE} erhalten");
    TerrorWaffenEntnahmeSpeichern(WaffenString);
    }
    }
    }
    return 1;
    }

    Mit freundlichen Grüßen,
    Dachdecker

  • Du nutzt überall if...und nicht else if oder ein return.


    Das bedeutet egal was du tust, es wird immer alles geprüft. Das ist zwar schlecht, sollte aber noch nicht deinen Fehler verursachen.


    Eventuell gibt es einen Runtime Fehler, lad mal crashdetect und schau mal, ob er dir einen Fehler anzeigt.


    Wichtig ist noch, dass du in deinen TextDraws auch überall eine TextSize gesetzt hast :)

    ast2ufdyxkb1.png


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

  • ...dann printe dir doch mal was als Parameter übergeben wird...ob es überhaupt aufgerufen wird...usw :)

    ast2ufdyxkb1.png


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


  • }
    else if(playertextid == Beenden[playerid])
    {
    WaffenlagerVerstecken(playerid);
    CancelSelectTextDraw(playerid);
    print("Beenden wurde gedrückt");
    return 1;
    }


    In der Konsole kommt jedoch nichts

    Mit freundlichen Grüßen,
    Dachdecker

  • public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid)
    {

    Hier direkt da drunter:


    printf("%d = %d",_:Beenden[playerid], _:playertextid);


    und dann schau mal, was da angeklickt wird ^^

    ast2ufdyxkb1.png


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


  • Beenden[playerid] = CreatePlayerTextDraw(playerid,374.000000, 341.000000, "Beenden");
    PlayerTextDrawBackgroundColor(playerid,Beenden[playerid], 255);
    PlayerTextDrawFont(playerid,Beenden[playerid], 1);
    PlayerTextDrawLetterSize(playerid,Beenden[playerid], 0.370000, 1.000000);
    PlayerTextDrawColor(playerid,Beenden[playerid], -1);
    PlayerTextDrawSetOutline(playerid,Beenden[playerid], 0);
    PlayerTextDrawSetProportional(playerid,Beenden[playerid], 1);
    PlayerTextDrawSetShadow(playerid,Beenden[playerid], 1);
    PlayerTextDrawSetSelectable(playerid,Beenden[playerid], 1);
    PlayerTextDrawHide(playerid, Beenden[playerid]);


    mit PlayerTextDrawLetterSize wird es markiert
    mit PlayerTextDrawTextSize wird es nicht markiert


    gerade getestet

    Mit freundlichen Grüßen,
    Dachdecker

  • Der X Wert ist die Position PLUS die Größe des nach rechts anklickbaren Bereiches. Der Y Wert ist die geschätzte Höhe.


    Angenommen du erstellst dein Textdraw bei X = 120 und Y = 90. Dann machst du den Text "Hallo Welt" da rein. Sagen wir, der Text ist so groß, dass er in etwa über ein Zehntel deines Bildschirmes geht (musst du abschätzen, oder mit einem Lineal abmessen), dann heißt das 640 durch 10, das wäre 64. Somit ist PlayerTextDrawTextSize-X = 120 + 64 = 184.
    Nun misst, bzw. schätzt, du die Höhe des Textdraws, sagen wir mal du bekommst den Text in etwa 20 mal untereinander hin, bis dein Bildschirm von oben nach unten voll damit wäre. Heißt also: 480 durch 20, das gibt 24. Somit wäre PlayerTextDrawTextSize-Y = 24.



    In deinem Fall in etwa so:
    PlayerTextDrawTextSize(playerid, Beenden[playerid], 374.0 + 50.0, 20.0);


    Die 50 und 20 sind nur geschätzt. Das kann natürlich mehr/weniger sein. Passe es dann entsprechend an.

  • Danke Jeffry für die Aufklärung, aber auf meinem alten Script funktioniert es ja genau so mit diesen Werten.. das ist die 1zu1 Kopie aus meinem alten Script.. deshalb verstehe ich j nicht, dass es nicht klappt

    Mit freundlichen Grüßen,
    Dachdecker

  • Wenn es nicht mal getriggert wird, ist ja etwas komisch. Stimmt überhaupt die Referenz mit dem Beenden[playerid]?
    Würde erstmal debuggen, ob beim Klick auf den PlayerTextdraw überhaupt was getriggert wird. Falls ja, aber nicht das Beenden[playerid], dann liegt es daran, dass du ggf. nicht die Referenz übergeben hast.


    BTW: Würde dir empfehlen, es trotzdem so wie Jeffry erklärt hat, zu machen (falls du es nicht so gemacht hast).

  • Wie gesagt, überprüfe erstmal, ob der Callback triggert. Dazu printest du einfach direkt ohne if-Bedingung irgendeinen Text mit der TXD ID, und wenn das klappt, liegt es wie gesagt an deiner Referenz Beenden[playerid]
    Das hat nichts mit einem Hover Effekt zu tun, das ist die Referenz zum Textdraw. Wenn es nicht getriggert wird, muss es daran liegen, dass etwas mit dem Textdraw, bspw der TextSize, nicht stimmt.

  • Der Code ist in meinem Gamemode.


    so nutze ich es


    //Push

    Mit freundlichen Grüßen,
    Dachdecker

    Einmal editiert, zuletzt von Dachdecker ()