Hi, habe lange nichts mehr gemacht mit samp, habe nun mal wieder reingeschaut und habe direkt was festgestellt:
Ich habe einige PlayerTextdraws. Meistens sind aber immer nur so 2-3 gleichzeitig zu sehen für einen Spieler.
Beispiel: Tacho, beim Tanken, beim befüllen von etwas (Trucker) oder ähnliches werden PlayerTextdraws angezeigt.
Ich habe eigentlich nur zwei Textdraws die sich "nicht mögen".
Einmal das Tacho, der Grundaufbau ist nicht player bezogen und bereits erstellt und wird für die jeweiligen Spieler nur angezeigt oder versteckt.
Die Daten wie Geschwindigkeit und co sind PlayerTextDraws, die dann erstellt werden wenn sie gebraucht werden und später wieder zerstört werden.
Das Zweite ist ein Fortschritts-Menu, welches beim Tanken, Beladen etc angezeigt wird. Auch hier ist der Grundaufbau ein fertig erstelltes TextDraw was nur angezeigt oder versteckt wird.
Die PlayerTextDraws enthalten dann die Daten wie zum Beispiel die Tankstelle an der man steht oder wieviel man bereits getankt hat und wie viel man bezahlen muss und so weiter.
Die TextDraws funktionieren einzelnt sehr gut, fährt nun aber jemand Tanken und lässt den Motor an, wird das Tacho und die Tankanzeige gleichzeitig angezeigt. Die nicht Spielerbezogenen Textdraws bleiben so wie sie sein sollen, nur 2 PlayerTextDraws, jeweils eins aus jedem, spielen verückt:
das eine PlayerTextDraw vom Tacho, welches das Fahrzeug anzeigt, verschwindet und erscheint an der Stelle vom anderen PlayerTextDraw, welches die Tankstelle anzeigen soll. Folgend blinken beide PlayerTextDraws abwechseln.
Das selbe passiert beim aufladen der Trucker (die selben Textdraws nur mit anderen Werten). Aber es sind jedesmal genau die selben.
Jetzt werden natürlich viele sagen das sich da die IDs überschneiden oder ähnliches aber genau das habe ich mehrmalls kontrolliert und bewusst verhindert, indem ich zum Beispiel jeder TextDraw Variabel beim zerstören den Wert Text:INVALID_TEXT_DRAW zuweise.
Da ja jedes TextDraw eine ID hat und diese in den entsprechenden Variabeln gespeichert wird, aber beim zerstören die Variabel vermutlich ihren Wert beibehält, war dies meine erste Vermutung. Daran kann es aber nicht mehr liegen, alle Variabeln von Zerstörten oder gar nicht erst erstellten TextDraws bekommen den Wert Text:INVALID_TEXT_DRAW. Wenn ein Neuer TextDraw erstellt wird, wird ja, so nehme ich es an, wie beim erstellen von Autos o.ä. einfach die nächst freie ID genommen. Es ist demnach also ausgeschlossen das zwei Variabeln für Textdraws den selben Wert haben und sich somit überschneiden. Vermutlich, denn irgentein Grund muss es geben.
Habe einen Ausschnitt angehängt wie die PlayerTextDraws erstelle und zerstöre. Geupdated werden die beiden betroffenen gar nicht!!!! Sie zeigen immer nur das Fahrzeugmodel und die Tankstelle/das Lager an, welches sich ja während des Vorgangs nicht verändert
Eventuell habt ihr ja Ideen, was ich noch überprüfen kann.
enum pTDInfo
{
PlayerText:TachoInfo1, //Diese überschneidet sich
PlayerText:TachoInfo2, //weitere infos (kmh)
PlayerText:TachoInfo3, //weitere Infos (tank)
PlayerText:InfoBoxHeader, // Diese überschneidet sich
PlayerText:InfoBoxInfo, // weitere infos (Fortschritt)
}
new pTextDraw[MAX_PLAYERS][pTDInfo];
//Erstellung der TachoInfo1
pTextDraw[playerid][TachoInfo1] = CreatePlayerTextDraw(playerid, 320.000000, 391.000000, "_");
PlayerTextDrawAlignment(playerid, pTextDraw[playerid][TachoInfo1], 2);
PlayerTextDrawBackgroundColor(playerid, pTextDraw[playerid][TachoInfo1], 255);
PlayerTextDrawFont(playerid, pTextDraw[playerid][TachoInfo1], 2);
PlayerTextDrawLetterSize(playerid, pTextDraw[playerid][TachoInfo1], 0.180000, 0.800000);
PlayerTextDrawColor(playerid, pTextDraw[playerid][TachoInfo1], -1);
PlayerTextDrawSetOutline(playerid, pTextDraw[playerid][TachoInfo1], 0);
PlayerTextDrawSetProportional(playerid, pTextDraw[playerid][TachoInfo1], 1);
PlayerTextDrawSetShadow(playerid, pTextDraw[playerid][TachoInfo1], 1);
//Zerstören der tachInfo1
j_PlayerTextDrawDestroy(playerid, pTextDraw[playerid][TachoInfo1]); //siehe unten
//Erstellung der InfoBoxHeader
pTextDraw[playerid][InfoBoxHeader] = CreatePlayerTextDraw(playerid, 555.000000, 361.000000, "Mats verarbeiten");
PlayerTextDrawAlignment(playerid, pTextDraw[playerid][InfoBoxHeader], 2);
PlayerTextDrawBackgroundColor(playerid, pTextDraw[playerid][InfoBoxHeader], 255);
PlayerTextDrawFont(playerid, pTextDraw[playerid][InfoBoxHeader], 2);
PlayerTextDrawLetterSize(playerid, pTextDraw[playerid][InfoBoxHeader], 0.140000, 0.899999);
PlayerTextDrawColor(playerid, pTextDraw[playerid][InfoBoxHeader], -1);
PlayerTextDrawSetOutline(playerid, pTextDraw[playerid][InfoBoxHeader], 0);
PlayerTextDrawSetProportional(playerid, pTextDraw[playerid][InfoBoxHeader], 1);
PlayerTextDrawSetShadow(playerid, pTextDraw[playerid][InfoBoxHeader], 1);
//Zerstörung
j_PlayerTextDrawDestroy(playerid, pTextDraw[playerid][InfoBoxHeader]); //siehe unten
//Zurücksetzen des Wertes der Variablen
stock j_PlayerTextDrawDestroy(playerid, &PlayerText:text)
{
PlayerTextDrawDestroy(playerid, text);
text = PlayerText:INVALID_TEXT_DRAW;
}
stock j_TextDrawDestroy(&Text:text)
{
TextDrawDestroy(text);
text = Text:INVALID_TEXT_DRAW;
}
Alles anzeigen