Guten Tag
Ich benutze das Include "progress"
mit diesen Include kann man progress bars, wie zum beispiel den Schaden eines Autos oder die geschwindigkeit anzeigen.
Jedoch verträgt sich das include nicht mit meinen textdraws.
Ich habe ein paar textdraws, wie zum beispiel die Version des aktuellen scripts, ein Komma bei der Geldanzeige und eine Uhr.
Wenn soeine progress Bar erstellt wird, wird eines dieser Textdraws zerstört. Zuerst wurde die Uhr zerstört. dann habe ich die Uhr rausgenommen, nun wird die Version zerstört.
Ich habe die Uhr wieder reigemacht, sie jedoch nun playerid´s zugewiesen, also Text:text[MAX_PLAYERS]; nun bleibt diese und wird nicht zerstört.
Ich könnte nun jedes Textdraw playerids zuweisen. aber warum soll man so viele Textdraws createn wenn eins reicht?
also Textdraws die einer playerid zugewiesen sind, werden bei diesem include nicht zerstört. ein textdraw für "alle" wird zerstört.
Ich weiß nicht warum sie zerstört wird und hoffe ihr könnt mir helfen.
ansonsten müsste ich jedes textdraw den spielern zuweise, also bei 50 Spieler wären es anstatt 3 Textdraws die für alle angezeigt werden, 150 textdraws.
das ist ein großer Unterschied und ich glaube auch das sich das bei mehr spielern und mehr textdraws bemerkbar macht.
Ich hoffe mir kann einer helfen das problem zu lösen, es wäre sehr hilfreich.
mfg
Simon
//edit: hier ein script ausschnitt:
Hier wird eine progress Bar erstellt wenn man als Pilot ein checkpoint betritt.
Es Läuft eine Zeit von 15 Sekunden ab, die in einm Balken, also einer progress bar dargestellt wird:
else if(flugcheck[playerid] == 3)
{
if(IstEinPilotFlugzeug(playerid) && GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
new str[5];
DestroyProgressBar(flug[playerid]);
TextDrawDestroy(flug2[playerid]);
SendClientMessage(playerid,COLOR_YELLOW,"Dein Flugzeug wird betankt...");
flugchecktime[playerid] = 15;
flug[playerid] = CreateProgressBar(260.5, 430.0, 90, 15, COLOR_YELLOW, 15.0);
format(str,sizeof(str),"%d",flugchecktime[playerid]);
flug2[playerid] = TextDrawCreate(297.0,432.0, str);
TextDrawFont(flug2[playerid],1);
TextDrawSetShadow(flug2[playerid],0);
TextDrawSetOutline(flug2[playerid],1);
TextDrawBackgroundColor(flug2[playerid],0xFFFFFFFF);
TextDrawColor(flug2[playerid],0x000000FF);
SetProgressBarValue(flug[playerid], flugchecktime[playerid]);
UpdateProgressBar(flug[playerid], playerid);
ShowProgressBarForPlayer(playerid, flug[playerid]);
TextDrawShowForPlayer(playerid, flug2[playerid]);
flugtimer[0] = SetTimerEx("flugcheckzeit",1000,0,"i",playerid);
freeze(playerid);
}
}
Hier wird jede Sekunde das progress bar value um ein verringert, wenn es unter 0 ist wird die progess bar zerstört und ein neuer checkpoint wird erstellt.
public flugcheckzeit(playerid)
{
flugchecktime[playerid]--;
if(flugchecktime[playerid] >= 1)
{
new str[5];
SetProgressBarValue(flug[playerid], flugchecktime[playerid]);
UpdateProgressBar(flug[playerid], playerid);
format(str,sizeof(str),"%d",flugchecktime[playerid]);
TextDrawSetString(flug2[playerid], str);
flugtimer[0] = SetTimerEx("flugcheckzeit",1000,0,"i",playerid);
}
else
{
if(fluglinie[playerid] == 1)
{
if(flugcheck[playerid] == 3)
{
if(IsPlayerInCheckpoint(playerid))
{
DestroyProgressBar(flug[playerid]);
TextDrawDestroy(flug2[playerid]);
entfreeze(playerid);
DisablePlayerCheckpoint(playerid);
flugcheck[playerid] = 4;
flugchecktime[playerid] = 0;
SetPlayerCheckpoint(playerid,1408.6921,-2425.6494,14.9268,5);
SendClientMessage(playerid,0xFFFFFFFF,"Dein Flugzeug wurde betankt, fahren sie weiter richtung Startbahn!");
}
else
{
entfreeze(playerid);
DestroyProgressBar(flug[playerid]);
TextDrawDestroy(flug2[playerid]);
flugchecktime[playerid] = 15;
flugcheck[playerid] = 3;
DisablePlayerCheckpoint(playerid);
SendClientMessage(playerid,COLOR_RED,"Du musst dein Flugzeug zunächst tanken!");
SetPlayerCheckpoint(playerid,1564.2994,-2414.1687,14.9269,5);
}
}
}
}
}
}
hier die anderen 3 Textdraws, die uhr habe ich schon den spielern zugewiesen.
public OnGameModeInit()
{
//textdraws:
version = TextDrawCreate(30.000000,428.000000, "~s~Version: ~s~Testphase");
TextDrawFont(version,0);
TextDrawSetShadow(version,0);
TextDrawSetOutline(version,1);
TextDrawBackgroundColor(version,0x000000FF);
TextDrawColor(version,0xFFFFFFFF);
//
komma = TextDrawCreate(580.000000,88.000000, ",");
TextDrawFont(komma,0);
TextDrawSetShadow(komma,0);
TextDrawSetOutline(komma,1);
TextDrawBackgroundColor(komma,0x000000FF);
TextDrawColor(komma,0xFFFFFFFF);
//
return 1;
}
public OnGameModeExit()
{
TextDrawDestroy(komma);
TextDrawDestroy(version);
return 1;
}
public OnPlayerConnect(playerid)
{
TextDrawShowForPlayer(playerid, version)
TextDrawShowForPlayer(playerid, komma)
new string[10],hour,minute,second; //Hier eine neue Variable
gettime(hour,minute,second); //Hier bekommt man die Zeit ausgelesen
format(string, sizeof string, "%s%d:%s%d", (hour < 10) ? ("0") : (""), hour, (minute < 10) ? ("0") : (""), minute); //Hier ist die ganze ausgabe, sieht schwer aus, ist es aber nicht!
Uhr[playerid] = TextDrawCreate(550.0, 25.0, string);
TextDrawLetterSize(Uhr[playerid], 0.6, 1.8);
TextDrawFont(Uhr[playerid], 3);
TextDrawSetOutline(Uhr[playerid], 2);
TextDrawShowForPlayer(playerid,Uhr[playerid]);
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
TextDrawDestroy(Uhr[playerid]);
return 1;
}
//ein time der jede Sekunde aufgerufen wird, hier wird die Uhr aktualisiert und cheater erkannt :D
public check()
{
for (new i = 0; i < MAX_PLAYERS; i++)
{
//uhr:
if(IsPlayerConnected(i))
{
new string[10],hour,minute,second;
gettime(hour,minute,second);
format(string, sizeof string, "%s%d:%s%d", (hour < 10) ? ("0") : (""), hour, (minute < 10) ? ("0") : (""), minute);
TextDrawSetString(Uhr[i],string);
}
die Uhr wird nicht zerstört, die version schon. wenn ich die version raus nehme wird das komma zerstört.
//edit: include als dateianhang hinzugefügt