eine progressbar per timer runterlaufen lassen.
vin 21 minuten auf 0 minuten
new PlayerBar:bar1 = CreatePlayerProgressBar(playerid,510.00, 118.00, 77.50, 3.20, 0x11acFFFF, 100.0);
ShowPlayerProgressBar(playerid, bar1);
eine progressbar per timer runterlaufen lassen.
vin 21 minuten auf 0 minuten
new PlayerBar:bar1 = CreatePlayerProgressBar(playerid,510.00, 118.00, 77.50, 3.20, 0x11acFFFF, 100.0);
ShowPlayerProgressBar(playerid, bar1);
Du musst dich schon deutlich ausdrücken. Was genau möchtest du haben, wo hackt es?
ich möchte das die progressbar mit timer runtergeht das sie von 1000 auf 0 in 21 minuten geht
Dann nutze eine globale Variable und einen Timer und setzte per SetProgressBarValue(barid, value) die value immer tiefer
forward progressbar(playerid); //Nach oben
new progressbartimer[MAX_PLAYERS]; //Nach oben
progressbartimer[playerid] = SetTimerEx("progressbar", 1000, true, "i", playerid); // Da wo der Timer starten soll
public progressbar(playerid)
{
new Float:val = GetPlayerProgressBarValue(playerid, bar1);
if(val < 0.0794) {
SetPlayerProgressBarValue(playerid, bar1, 0);
KillTimer(progressbartimer[playerid]); }
SetPlayerProgressBarValue(playerid, bar1, val-0.0794);
}
//Unter CreatePlayerProgres..
SetPlayerProgressBarValue(playerid, bar1, 100);
Alles anzeigen
Kp ob das so funktioniert, wie ich mir das vorstelle.
CodeAlles anzeigenforward progressbar(playerid); new progressbartimer[MAX_PLAYERS]; progressbartimer[playerid] = SetTimerEx("progressbar", 1000, true, "i", playerid); public progressbar(playerid) { new Float:val = GetPlayerProgressBarValue(playerid, bar1); if(val < 0.0794) { SetPlayerProgressBarValue(playerid, bar1, 0); KillTimer(progressbartimer[playerid]); } SetPlayerProgressBarValue(playerid, bar1, val-0.0794); }
Kp ob das so funktioniert, wie ich mir das vorstelle.
Wie kommst du auf die 0.0794? Wenn er 21 Minuten laufen soll dann müsste der Wert bei 0.4629 liegen.
Außerdem ist da ein kleiner Logikfehler in der If-Abfrage. So sollte es funktionieren (wenn von 1000 auf 0 in 21 Minuten):
forward progressbar(playerid);
new progressbartimer[MAX_PLAYERS];
progressbartimer[playerid] = SetTimerEx("progressbar", 1000, true, "i", playerid);
public progressbar(playerid)
{
new Float:val = GetPlayerProgressBarValue(playerid, bar1);
if(val <= 0.4629)
{
SetPlayerProgressBarValue(playerid, bar1, 0);
KillTimer(progressbartimer[playerid]);
}
SetPlayerProgressBarValue(playerid, bar1, val-0.4629);
}
SetPlayerProgressBarValue(playerid, bar1, 1000);
Alles anzeigen
21 Minuten = 1260 Sekunden
1260 * 0,0794 = ca. 100
Wenn jede Sekunde also 0,0794 abgezogen werden, ist der Balken nach 21 Minuten "leer".
Wie kommst du also auf 0,4629?
C:\Users\mrehse\Desktop\samp03\gamemodes\fsrs.pwn(63133) : error 017: undefined symbol "bar1"
C:\Users\mrehse\Desktop\samp03\gamemodes\fsrs.pwn(63135) : error 017: undefined symbol "bar1"
C:\Users\mrehse\Desktop\samp03\gamemodes\fsrs.pwn(63136) : error 017: undefined symbol "progressbartimer"
C:\Users\mrehse\Desktop\samp03\gamemodes\fsrs.pwn(63136) : warning 215: expression has no effect
C:\Users\mrehse\Desktop\samp03\gamemodes\fsrs.pwn(63136) : error 001: expected token: ";", but found "]"
C:\Users\mrehse\Desktop\samp03\gamemodes\fsrs.pwn(63136) : error 029: invalid expression, assumed zero
C:\Users\mrehse\Desktop\samp03\gamemodes\fsrs.pwn(63136) : fatal error 107: too many error messages on one line
new PlayerBar:bar1;
new progressbartimer[MAX_PLAYERS];
nach oben im Script
//Edit: Habs jetzt auch ausprobiert, funktioniert soweit alles
[ASAP]Frosty: Ups, ich hab mich aus Versehen vertippt mit der 1260, aber wir hatten die selbe Idee.
Aber wenn die Progressbar von 1000 (also nicht 100) starten soll, dann sollte der Wert auf 0.794 geändert werden.
der zieht mir von der progressbar nichts ab
if(listitem == 8)
{
if(Flasche[playerid] == 0)
{
Flasche[playerid] = 1;
alterskin2[playerid] = GetPlayerSkin(playerid);
SetPlayerSkin(playerid,278);
atemtaimer[playerid] = SetTimerEx("atemschutztaimer",1500000,true,"i",playerid);
new PlayerBar:bar1 = CreatePlayerProgressBar(playerid,510.00, 118.00, 77.50, 3.20, 0x11acFFFF, 100.0);
ShowPlayerProgressBar(playerid, bar1);
new progressbartimer[MAX_PLAYERS];
progressbartimer[playerid] = SetTimerEx("progressbar", 1000, true, "i", playerid);
PlayAudioStreamForPlayer(playerid, "http://funkspiel-bb.de/AGTneu.wav");
return SendClientMessage(playerid,0x0041FFFF,"Sie haben sich mit einer Pressluftflasche ausgerüstet Achtung Luft reicht für 21min!");
}
else
{
Flasche[playerid] = 0;
RemovePlayerAttachedObject(playerid,1);
SetPlayerSkin(playerid, alterskin2[playerid]);
new bar1;
DestroyPlayerProgressBar(playerid, bar1);
KillTimer(atemtaimer[playerid]);
StopAudioStreamForPlayer(playerid); // Stop the audio stream
return SendClientMessage(playerid,0x0041FFFF,"Sie haben die Pressluftflasche wieder abgenommen!");
}
}
forward progressbar(playerid);
public progressbar(playerid)
{
new Float:val = GetPlayerProgressBarValue(playerid, bar1);
if(val <= 0.04629) {
SetPlayerProgressBarValue(playerid, bar1, 0);
KillTimer(progressbartimer[playerid]);
}
SetPlayerProgressBarValue(playerid, bar1, val-0.04629);
}
new progressbartimer[MAX_PLAYERS]; //Nach oben im Script (global!)
new PlayerBar:bar1; //Nach oben im Script (global!)
forward progressbar(playerid); //Nach oben im Script
if(listitem == 8)
{
if(Flasche[playerid] == 0)
{
Flasche[playerid] = 1;
alterskin2[playerid] = GetPlayerSkin(playerid);
SetPlayerSkin(playerid,278);
atemtaimer[playerid] = SetTimerEx("atemschutztaimer",1500000,true,"i",playerid);
bar1 = CreatePlayerProgressBar(playerid,510.00, 118.00, 77.50, 3.20, 0x11acFFFF, 100.0);
SetPlayerProgressBarValue(playerid, bar1, 100);
ShowPlayerProgressBar(playerid, bar1);
progressbartimer[playerid] = SetTimerEx("progressbar", 1000, true, "i", playerid);
PlayAudioStreamForPlayer(playerid, "http://funkspiel-bb.de/AGTneu.wav");
return SendClientMessage(playerid,0x0041FFFF,"Sie haben sich mit einer Pressluftflasche ausgerüstet Achtung Luft reicht für 21min!");
}
else
{
Flasche[playerid] = 0;
RemovePlayerAttachedObject(playerid,1);
SetPlayerSkin(playerid, alterskin2[playerid]);
new bar1;
DestroyPlayerProgressBar(playerid, bar1);
KillTimer(atemtaimer[playerid]);
StopAudioStreamForPlayer(playerid); // Stop the audio stream
return SendClientMessage(playerid,0x0041FFFF,"Sie haben die Pressluftflasche wieder abgenommen!");
}
}
public progressbar(playerid)
{
new Float:val = GetPlayerProgressBarValue(playerid, bar1);
if(val <= 0.0794) {
SetPlayerProgressBarValue(playerid, bar1, 0);
KillTimer(progressbartimer[playerid]);
}
SetPlayerProgressBarValue(playerid, bar1, val-0.0794);
}
Alles anzeigen
nach ca 17 Minuten ist grad mal die Hälfte weg ??
Dann hast du was falsch gemacht. Wird der Timer alle 1000 Millisekunden aufgerufen und ist der Anfangswert von der Progressbar bei 1000?
Wenn ja, dann stell bitte sicher, dass du 0.794 bei jedem Tick von dem Value abziehst.