[FilterScript] Dormir
#1

Resolvi criar esse sistema de dormir com progressbar, pois acho que ainda nгo existe ;d.

Tem 3 estбgios. No primeiro vocк й avisado(liberado para dormir), no segundo vocк jб fica tonto, no terceiro vocк desmaia.

*Le cуdigo*
pawn Код:
#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
http://pastebin.com/SBdyNnSj
Reply
#2

Maneiro. Nгo sei se jб existe, mas, parabйns. Ficou bem legal. =]
Reply
#3

Not Bad...
Reply
#4

gostei, inovador.
Reply
#5

Nada mal, Parabйns, REP += 5.
Reply
#6

Pow, ta fera isso aн mano

+5 Rep...
Reply
#7

Eu aconselharia vocк a remover estes char's, pois sу irгo trabalhar para 125 jogadores e o valor que pode ser atribuнdo a elas й menor.(0 - 255)

Tirando isso, o code parece limpo e funcional, um dica, adicionar uma funзгo random e trabalhar com a distвncia percorrida do jogador.
Reply
#8

Quote:
Originally Posted by leonardo1434
Посмотреть сообщение
Eu aconselharia vocк a remover estes char's, pois sу irгo trabalhar para 125 jogadores e o valor que pode ser atribuнdo a elas й menor.(0 - 255)

Tirando isso, o code parece limpo e funcional, um dica, adicionar uma funзгo random e trabalhar com a distвncia percorrida do jogador.
Nгo. Trabalham com 500 jogadores, mas sу abrigam -255 a 255 valor.
Reply
#9

Quote:
Originally Posted by GReeN_WOoD
Посмотреть сообщение
gostei, inovador.
Tiago_Street? Й vocк?

@topic Ta massa
Reply
#10

Quote:
Originally Posted by leonardo1434
Посмотреть сообщение
um dica, adicionar uma funзгo random e trabalhar com a distвncia percorrida do jogador.
Como assim funзгo random? sobre a distвncia, pretendo adcionar.

@sim IpsBruno
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)