Tem 3 estágios. No primeiro você é avisado(liberado para dormir), no segundo você já fica tonto, no terceiro você desmaia.
CODIGO
Agradecimentos a Flávio toribio: include Progress bar | ipsBruno: Efeito animação.
Notas
- Você deve definir TEMPO_AUMENTAR, TEMPO_ACORDAR a seu gosto.
- A progressBar se localize acima do radar.
Download ProgressBar.inc
[Tens de ter uma conta e sessão iniciada para poderes visualizar este link]
CODIGO
- Spoiler:
#include a_samp
#include zcmd
#include progress
#define TEMPO_ACORDAR 20000 //tempo para acordar, (em milisegundos.)
#define TEMPO_AUMENTAR 20000 //tempo para aumentar o sono.
new
Sono [MAX_PLAYERS char],
bool: Dormindo[MAX_PLAYERS char],
Bar: SonoBar[MAX_PLAYERS char]
;
public OnFilterScriptInit() {
SetTimer("Aumentar", TEMPO_AUMENTAR, true);
return true;
}
public OnFilterScriptExit() {
for(new i; i < MAX_PLAYERS; ++i) {
DestroyProgressBar(SonoBar{i});
}
return true;
}
public OnPlayerCommandReceived(playerid, cmdtext[]) {
if(Dormindo{playerid})
return SendClientMessage(playerid, -1, "Você não pode usar comandos dormindo"), false;
return true;
}
public OnPlayerConnect(playerid) {
Sono{playerid} = 0;
SonoBar{playerid} = CreateProgressBar(65.00, 317.00, 55.50, 3.20, 16777202, 100.0);
return true;
}
public OnPlayerSpawn(playerid) {
ShowProgressBarForPlayer(playerid, SonoBar{playerid});
SetProgressBarValue(SonoBar{playerid}, Sono{playerid});
UpdateProgressBar(SonoBar{playerid}, playerid);
return true;
}
public OnPlayerDeath(playerid, killerid, reason) {
HideProgressBarForPlayer(playerid, SonoBar{playerid});
return true;
}
public OnPlayerDisconnect(playerid) {
DestroyProgressBar(SonoBar{playerid});
return true;
}
CMD:dormir(playerid) {
if(Sono{playerid} < 50)
return SendClientMessage(playerid, -1, "Você não está com muito sono ainda.");
Efeito(playerid);
SendClientMessage(playerid, -1, "Você começou a dormir...ZzzZzz");
SetTimerEx("Acordar", TEMPO_ACORDAR, false, "i", playerid);
Dormindo{playerid} = true;
HideProgressBarForPlayer(playerid, SonoBar{playerid});
return true;
}
forward Aumentar();
public Aumentar() {
for(new i; i < MAX_PLAYERS; ++i) {
Sono{i} ++;
SetProgressBarValue(SonoBar{i}, Sono{i});
UpdateProgressBar(SonoBar{i}, i);
switch(Sono{i}) {
case 50: {
SendClientMessage(i, -1, "Você já pode dormir");
}
case 80: {
SendClientMessage(i, -1, "Você já está bastante cansado, vá dormir");
SetPlayerDrunkLevel(i, 10000);
}
case 100: {
SendClientMessage(i, -1," Seu corpo não aguentou muito tempo acordado, você desmaiou");
Efeito(i);
SetTimerEx("Acordar", TEMPO_ACORDAR, false, "i", i);
Sono{i} = 0;
HideProgressBarForPlayer(i, SonoBar{i});
}
}
}
return true;
}
forward Acordar(playerid);
public Acordar(playerid) {
SendClientMessage(playerid, -1, "Você despertou! |_O_|");
SetCameraBehindPlayer(playerid);
TogglePlayerControllable(playerid, true);
SetPlayerDrunkLevel(playerid, 0);
Dormindo{playerid} = false;
Sono{playerid} = 0;
ShowProgressBarForPlayer(playerid, SonoBar{playerid});
return true;
}
Efeito(playerid) {
TogglePlayerControllable(playerid, false);
static Float:px, Float:py, Float:pz;
GetPlayerPos(playerid, px, py, pz);
SetPlayerCameraPos(playerid, px +2, py+2, pz+2.5);
SetPlayerCameraLookAt(playerid, px, py, pz);
ApplyAnimation(playerid,"CRACK","crckdeth4",4.0,0,0,0,1,0);
ClearAnimations(playerid);
return true;
}
Agradecimentos a Flávio toribio: include Progress bar | ipsBruno: Efeito animação.
Notas
- Você deve definir TEMPO_AUMENTAR, TEMPO_ACORDAR a seu gosto.
- A progressBar se localize acima do radar.
Download ProgressBar.inc
[Tens de ter uma conta e sessão iniciada para poderes visualizar este link]