SA-MP Forums Archive
[FilterScript] Dormir - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Português/Portuguese (https://sampforum.blast.hk/forumdisplay.php?fid=34)
+----- Forum: Lançamentos/Releases (https://sampforum.blast.hk/forumdisplay.php?fid=56)
+----- Thread: [FilterScript] Dormir (/showthread.php?tid=370353)



Dormir - FeelLikeASir_ - 19.08.2012

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


Re: Dormir - Ed_Agr - 19.08.2012

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


Re: Dormir - DrTHE - 19.08.2012

Not Bad...


Re: Dormir - GReeN_WOoD - 19.08.2012

gostei, inovador.


Re: Dormir - paulor - 19.08.2012

Nada mal, Parabйns, REP += 5.


Re: Dormir - Kuddy - 19.08.2012

Pow, ta fera isso aн mano

+5 Rep...


Re: Dormir - leonardo1434 - 19.08.2012

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.


Re: Dormir - ipsBruno - 20.08.2012

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.


Re: Dormir - Tony_Rodrigues - 21.08.2012

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

@topic Ta massa


Re: Dormir - FeelLikeASir_ - 24.08.2012

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