PlayerTextDraw wird nicht geupdatet

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 Brotfische,


    Heute stehe ich mal wieder vor einem Problem, welches ich mir nicht beantworten kann.
    Ich habe zwei Textdraw Pfeile erstellt einmal rechts und einmal links ( < > )
    Wenn der Spieler auf Rechts klickt wird eine Zähl-Variable hochgezählt, und soll später einen Skin aus einem Array auslesen.
    Doch leider wird das TextDraw nicht geupdatet, sprich es ist immer nur der erste Skin zu sehen.


    Die Skin Arrays sehen beide so aus:


    Code
    new FamaleSkins[80] = {
        9,10,11,12,//usw...
    };



    Die PlayerTextDraws erstelle ich so: (Genaue Koordinaten entfernt, Grund vor Copy & Paste)


    C
    new str[5];
    format(str,sizeof(str),"%i",GetPlayerSkin(playerid));
    playerData[playerid][pRegisterTD][5] = CreatePlayerTextDraw(playerid, XXX.XXXX, XX.XXXX, str);
    PlayerTextDrawLetterSize(playerid, playerData[playerid][pRegisterTD][5], 0.000000, 0.000000);
    PlayerTextDrawTextSize(playerid, playerData[playerid][pRegisterTD][5], XX.XXXX, XXX.XXX);
    PlayerTextDrawAlignment(playerid, playerData[playerid][pRegisterTD][5], 1);
    PlayerTextDrawColor(playerid, playerData[playerid][pRegisterTD][5], -1);
    PlayerTextDrawSetShadow(playerid, playerData[playerid][pRegisterTD][5], 0);
    PlayerTextDrawSetOutline(playerid, playerData[playerid][pRegisterTD][5], 0);
    PlayerTextDrawFont(playerid, playerData[playerid][pRegisterTD][5], 5);

    OnPlayerClickPlayerTextDraw:

    Nun habe ich noch ein kleinen Test gemacht.. Undzwar habe ich 5x auf den Pfeil nach Rechts und 5x auf den Pfeil nach links gedrückt. Aber in der server_log.txt wird mir lediglich dies geprintet:


    Code
    [00:51:57] [Step 2] 1
    [00:51:57] [Step 3] 2
    [00:51:57] [Step 8] 0
    [00:51:57] [Step 9] 1

    Sprich es wird der Schritt 2 in der Funktion OnPlayerClickPlayerTextDraw aufgerufen.
    In diesen Fall ist die SkinClicked jetzt 1 beim hochzählen und aus dem Array wird die SkinID 2 (Step 3) ausgelesen, jedoch wird das Textdraw nicht geupdatet.


    Ich hoffe es kann mir jemand helfen :)
    @Jeffry @Kaliber


    Mit freundlichen Grüßen
    German_ScripterHD

  • Nutze anstatt PlayerTextDrawSetString die Funktion http://wiki.sa-mp.com/wiki/PlayerTextDrawSetPreviewModel
    Gegebenenfalls musst du danach dem Spieler das Textdraw mit PlayerTextDrawShow nochmal anzeigen, das wird bei diversen Änderungen am Textdraw notwendig.



    Außerdem hast du diese Abfrage zwei mal drin:

    if(playertextid == playerData[playerid][pRegisterTD][4]){

    Die Abfrage auf Textdraw [5] fehlt.



    Zusätzlich scheint das hier nicht richtig:

    if(playerData[playerid][pSkinClicked] -1){

    Da dürfte vor dem -1 ein "==" fehlen.

  • Okay, das hat auch geklappt. Jedoch habe ich jetzt noch ein Problem mit der Skinselection.
    Wenn ich bei SkinClicked bei 0 bin (Skinid 1) und klicke nun rückwärts, dann passiert nichts, drücke ich ein zweites mal dann kommt der CJ Skin der in den Arrays garnicht vorhanden ist, und drücke ich dann erneut kommt der letzte Skin wie gewollt. Normal sollte man aber den bei SkinClicked 0 einmal zurück drücken und dann den letzten Skin bekommen.
    Außerdem wirft er mir noch was in der Server Konsole aus:


    C
    [14:41:51] [debug] Run time error 4: "Array index out of bounds"
    [14:41:51] [debug]  Attempted to read/write array element at index 200 in array of size 200
    [14:41:51] [debug] AMX backtrace:
    [14:41:51] [debug] #0 0000a1f0 in public OnPlayerClickPlayerTextDraw (0, 9) from newscript.amx


    Mit freundlichen Grüßen
    German_ScripterHD

  • playerData[playerid][pSkinClicked] = sizeof(FamaleSkins);
    zu:
    playerData[playerid][pSkinClicked] = sizeof(FamaleSkins)-1;
    Gleiches für die MaleSkins.


    Und bei der Deklaration:
    new FamaleSkins[80] = {
    zu:
    new FamaleSkins[] = {


    Gleiches für die MaleSkins.