[FilterScript] Drop de caixas
#1

Sistema de drop de caixas

Descriзгo
Bom, fiquei algum tempo sem pc, mas agora estou com ele novamente.
Nгo irei mais jogar SA:MP, mas, como "despedida minha", irei postar este ъltimo sistema .
Й um simples filterscript, outra vez, baseado no Combat Arms. .
Creio eu que tenha alguns bugs, mas, nгo sгo dнficeis de se arrumar.
Caso nгo consiga, poste o bug/erro, que quando eu aparecer pelo fуrum, ajudarei.

Informaзхes
O drop de caixas acontece quando algum jogador mata o outro, ou se mata.
Talvez(utilizando random), a caixa irб dropar(aparecer), basta passar em cima dela que vocк irб obte-la.
Para abrir a mesma, use: /minhascaixas e selecione-a.
Este sistema nгo й salvбvel e й mais recomendбvel o uso em servidores de DM/TDM.
Nгo coloquei para salvar, pуis, se for utilizar em servidores de DM ou TDM,
e estiver com grande quantidade de players, nгo serб necessбrio.
Mas, se caso queira colocar salvamento, ai й de opзгo do scripter que vai utiliza-lo.

Alteraзхes
Pode-se alterar o mбximo de caixas.
pawn Код:
#define MAX_CAIXAS    50
Pode-se alterar a pickup(objeto) que irб aparecer.
pawn Код:
#define objcaixa        964
Pode-se alterar a muniзгo das armas. Creio que й melhor, infinitas.
pawn Код:
#define BalasInfinitas  999999
Pode-se alterar o tanto de cйlulas nas strings.
pawn Код:
#define AllCelulas  450
Tenha cuidado com as dialogs, em caso de conflito, mude os ID's.


Vнdeo
Desculpem a mб resoluзгo, mas, estou sem Sony Vegas.

[ame]http://www.youtube.com/watch?v=7qednPUinUU[/ame]

Crйditos
FilterScript > @Riichard
RandomEx > ******
ResetWeaponPlayer > nгo sei.

Cуdigo
pawn Код:
/*
    [FilterScript] Sistema de drop de caixas
   
        > Ultimo projeto/sistema feito.
       
            by: @Riichard
*/


// Includes
#include <a_samp>
#include <zcmd>

// Defines
#define MAX_CAIXAS    50

#define NaoDropar       1
#define DroparCaixa     2

#define objcaixa        964

#define dialogMyCaixas  234
#define dialogConcord   235
#define dialogPremio    236

#define BalasInfinitas  999999

#define AllCelulas  450 // Alta por causa das dialogs.

// Variaveis
new
    idcaixa[MAX_PLAYERS],
    n_caixa[MAX_CAIXAS],
    player_caixas[MAX_PLAYERS],
    bool:_Aguarde[MAX_PLAYERS],
    bool:caixa_number[MAX_CAIXAS],
    number_caixas,
    Float:pos_X, Float:pos_Y, Float:pos_Z
;

// -----------------------------------------------------------------------
public OnFilterScriptInit() return print("[Sistema de drop de caixa] Carregado com sucesso."), number_caixas = 0;
public OnFilterScriptExit()
{
    for(new ncaixas = 1; ncaixas<MAX_CAIXAS+1; ncaixas++)
    {
        DestroyPickup(n_caixa[ncaixas]);
        caixa_number[ncaixas] = false;
    }
    number_caixas = 0;
    print("[Sistema de drop de caixa] Descarregado com sucesso.");
    return 1;
}

public OnPlayerConnect(playerid) return idcaixa[playerid] = 0, player_caixas[playerid] = 0, 0;
public OnPlayerDisconnect(playerid, reason) return _Aguarde[playerid] = false, 0;

public OnPlayerDeath(playerid, killerid, reason)
{
    new checkcaixa = RandomEx(NaoDropar, DroparCaixa);
    if(checkcaixa == DroparCaixa)
    {
        if(number_caixas == MAX_CAIXAS) return 1;
        GetPlayerPos(playerid, pos_X, pos_Y, pos_Z);
        number_caixas += 1;
        n_caixa[number_caixas] = CreatePickup(objcaixa, 1, pos_X, pos_Y, pos_Z);
        caixa_number[number_caixas] = true;
        SendClientMessageToAll(0xA9A9A9FF, "Uma caixa {FF0000}Army{A9A9A9} foi derrubada.");
        for(new playersx = 0; playersx<MAX_PLAYERS; playersx++)
            if(IsPlayerConnected(playersx))
                PlayerPlaySound(playersx, 1149, 0.0, 0.0, 0.0);
        if(player_caixas[playerid] > 0) player_caixas[playerid] -= 1;
    }
    return 0;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
    new mycel[110], myname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, myname, sizeof(myname));
    for(new ncaixas = 1; ncaixas<MAX_CAIXAS+1; ncaixas++)
    {
        if(pickupid == n_caixa[ncaixas])
        {
            idcaixa[playerid] = ncaixas;
            goto Final;
        }
    }
    Final:
    if(idcaixa[playerid] == 0) return 1;
    DestroyPickup(n_caixa[idcaixa[playerid]]);
    number_caixas -= 1;
    caixa_number[idcaixa[playerid]] = false;
    format(mycel, sizeof(mycel), "{FF0000}%s{A9A9A9} obteve uma caixa {FF0000}Army{A9A9A9}.", myname);
    SendClientMessageToAll(0xA9A9A9FF, mycel);
    idcaixa[playerid] = 0;
    player_caixas[playerid] += 1;
    PlayerPlaySound(playerid, 1150, 0.0, 0.0, 0.0);
    return 0;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    new _StringMsg[AllCelulas], _StringMsg1[AllCelulas];
    if(dialogid == dialogMyCaixas)
    {
        if(response)
        {
            if(_Aguarde[playerid] == true) return SendClientMessage(playerid, -1, "Vocк deve esperar o item da primeira caixa expirar.");
            format(_StringMsg, sizeof(_StringMsg), "{DCDCDC}Vocк quer mesmo abrir a caixa {FF0000}Army(%d){DCDCDC}?", listitem+1);
            ShowPlayerDialog(playerid, dialogConcord, DIALOG_STYLE_MSGBOX, "Caixa Army", _StringMsg, "Sim", "Nгo");
        }
    }
    if(dialogid == dialogConcord)
    {
        if(response)
        {
            player_caixas[playerid] -= 1;
            // ================================================================
            new PremioID = RandomEx(1, 34); // Soco inglкs atй Sniper.
            if(PremioID == 19 || PremioID == 20 || PremioID == 21) PremioID = 43; // Cвmera
            // ================================================================
            new MinutosID = RandomEx(10, 100); // Entre 10 e 99 minutos.
            if(MinutosID == 100) MinutosID = 0; // 100 minutos = Permanente
            // ================================================================
            new nomepremio[30];
            GetWeaponName(PremioID, nomepremio, sizeof(nomepremio));
            // ================================================================
            if(PremioID == 18) nomepremio = "Molotov Cocktail";
            else if(PremioID == 43) nomepremio = "Cвmera";
            // ================================================================
            if(MinutosID == 0)
            {
                new _pNome[MAX_PLAYER_NAME];
                GetPlayerName(playerid, _pNome, sizeof(_pNome));
                strcat(_StringMsg, "\n{DCDCDC}- Vocк abriu uma caixa Army e obteve:\n");
                format(_StringMsg1, sizeof(_StringMsg1), "\n\t     {FFFFFF}%s\n", nomepremio);
                strcat(_StringMsg, _StringMsg1);
                strcat(_StringMsg, "\n\t  {FF0000}PERMANENTE\n\n");
                ShowPlayerDialog(playerid, dialogPremio, DIALOG_STYLE_MSGBOX, "Parabйns", _StringMsg, "Fechar", "");
                format(_StringMsg, sizeof(_StringMsg), "{FFFFFF}%s{A9A9A9} abriu uma caixa {FFFFFF}Army{A9A9A9} e obteve o item {FF0000}%s{A9A9A9}.",_pNome, nomepremio);
                SendClientMessageToAll(0xA9A9A9FF, _StringMsg);
            }else{
                format(_StringMsg, sizeof(_StringMsg), "\n{DCDCDC}- Vocк obteve %s por {FF0000}%d{DCDCDC} minutos.\n\n", nomepremio, MinutosID);
                ShowPlayerDialog(playerid, dialogPremio, DIALOG_STYLE_MSGBOX, "Informaзгo", _StringMsg, "Fechar", "");
            }
            // ================================================================
            GivePlayerWeapon(playerid, PremioID, BalasInfinitas);
            PlayerPlaySound(playerid, 1056, 0.0, 0.0, 0.0);
            if(MinutosID > 0)
                _Aguarde[playerid] = true, SetTimerEx("ResetItem", MinutosID*60000, false, "dd", playerid, PremioID);
        }
    }
    return 1;
}

CMD:minhascaixas(playerid)
{
    if(player_caixas[playerid] == 0)
        return SendClientMessage(playerid, -1, "Vocк nгo possui nenhuma caixa.");

    new _String1[AllCelulas], _String2[AllCelulas];
    for(new tantacaixa = 1; tantacaixa<player_caixas[playerid]+1; tantacaixa++)
    {
        format(_String1, sizeof(_String1), "> Caixa {A9A9A9}Army{FFFFFF} - %d\n", tantacaixa);
        strcat(_String2, _String1);
    }
    return ShowPlayerDialog(playerid, dialogMyCaixas, DIALOG_STYLE_LIST, "Minhas caixas", _String2, "Abrir", "Cancelar");
}

// - Comando usado para testes sozinho.
/*
CMD:hue(playerid)
{
    if(number_caixas == MAX_CAIXAS) return 1;
    GetPlayerPos(playerid, pos_X, pos_Y, pos_Z);
    number_caixas += 1;
    n_caixa[number_caixas] = CreatePickup(objcaixa, 1, pos_X, pos_Y, pos_Z-0.5);
    caixa_number[number_caixas] = true;
    SetPlayerPos(playerid, pos_X+2, pos_Y+1, pos_Z+1);
    SendClientMessageToAll(0xA9A9A9FF, "Uma caixa {FF0000}Army{A9A9A9} foi derrubada.");
    for(new playersx = 0; playersx<MAX_PLAYERS; playersx++)
        if(IsPlayerConnected(playersx))
            PlayerPlaySound(playersx, 1149, 0.0, 0.0, 0.0);
    return 1;
}
*/


// ================================================================================
forward ResetItem(playerid, idreset);
public ResetItem(playerid, idreset)
{
    _Aguarde[playerid] = false;
    ResetWeaponPlayer(playerid, idreset);
    SendClientMessage(playerid, 0xFF0000FF, "Seu tempo esgotou, seu item expirou.");
    return 1;
}

// Thanks, nгosei.
forward ResetWeaponPlayer(playerid, weaponid);
public ResetWeaponPlayer(playerid, weaponid)
{
    new plyWeapons[12] = 0;
    new plyAmmo[12] = 0;
    for(new slot = 0; slot != 12; slot++)
    {
        new wep, ammo;
        GetPlayerWeaponData(playerid, slot, wep, ammo);
        if(wep != weaponid && ammo != 0)
            GetPlayerWeaponData(playerid, slot, plyWeapons[slot], plyAmmo[slot]);
    }
    ResetPlayerWeapons(playerid);
    for(new slot = 0; slot != 12; slot++)
        if(plyAmmo[slot] != 0)
            GivePlayerWeapon(playerid, plyWeapons[slot], plyAmmo[slot]);
    return true;
}

// Thanks, ******
stock RandomEx(minnum = cellmin, maxnum = cellmax)
    return random(maxnum - minnum + 1) + minnum;
Desculpe pela bagunзa do cуdigo(ao meu ver, estб bagunзado) e pelos erros de portuguкs.



Reply
#2

aff mano ;/
Quote:

Nгo irei mais jogar SA:MP, mas, como "despedida minha", irei postar este ъltimo sistema .

ficou TOP, vou utilizar em meu servidor de Sobrevivencia +RAP

@24 Horas ..
Reply
#3

Legal.
Podia tambйm uma versгo ala gta v online, onde uma caixa a cada tal minutos cai em tal area, o jogador vб nessa бrea e colete a caixa...

Enfim, ficou legal.
Reply
#4

Quote:
Originally Posted by @Riichard
Nгo irei mais jogar SA:MP, mas, como "despedida minha", irei postar este ъltimo sistema .
Achei isso ofensivo. -'-

--

Legal o sistema.
Reply
#5

Pode ser como base para aqueles que desejam fazer um sistema de 'drops' de dinheiros, objetos do player e etc. Enfim parabйns pelo sistema, ficou уtimo.

Abraзos e boa sorte na sua vida.
Reply
#6

Gostei do sistema ficou legal, parabens.

Se esta for mesmo a sua saida, espero que fique tudo bem com vc.
Reply
#7

Obrigado a todos.
Reply
#8

QUE LIXO MANO, NOSSA QUE LIXO DE SISTEMA, ME DECEPCIONOU, TEM QUE PARAR DE JOGAR MESMO, NГO PRESTA PRA NADA!

zuera mano, й isso aн ta ligado que й nui, quando se voltar vo ta aq de portas abertas pra tu, sistema foda, sу falto meus credito arrombado, flw vlw ....
Reply
#9

A ideia ficou bem legal, mбs й uma pena que um grande membro como vocк esteja saindo do forum... mas serб por pouco tempo pq isso aqui й que nem droga, tб ligado? XD

Quote:
Originally Posted by qSmoke
Посмотреть сообщение
QUE LIXO MANO, NOSSA QUE LIXO DE SISTEMA, ME DECEPCIONOU, TEM QUE PARAR DE JOGAR MESMO, NГO PRESTA PRA NADA!

zuera mano, й isso aн ta ligado que й nui, quando se voltar vo ta aq de portas abertas pra tu, sistema foda, sу falto meus credito arrombado, flw vlw ....
Caramba, vocк й engraзado mesmo hein!
Reply
#10

Quote:
Originally Posted by Kuddy
Посмотреть сообщение
A ideia ficou bem legal, mбs й uma pena que um grande membro como vocк esteja saindo do forum... mas serб por pouco tempo pq isso aqui й que nem droga, tб ligado? XD



Caramba, vocк й engraзado mesmo hein!
cala boca nem falei com vocк cuzao, vasa, richard й meu amg faz cуtas...
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)