[Tutorial] Sistema de Drogas
#1

♣ Sistema de Drogas ♣
Bom dia/tarde a todos os viciados samp. Bem, eu sempre joguei em servidores RP/G mas apenas em 2 servidores, ambos internacionais e um dos sistemas que mais gostei de ver lб era o de drogas, que й um pouco diferente dos brasileiros e portugueses.
Bem, irei entao postar um code de um sistema que usei desde uns 3 meses.
Faзo isto porque me foi pedido por um amigo.

♣ CODE ♣
Primeiro, vamos lб defenir tudinho
pawn Code:
#define COLOR_GROVE 0x00FF00FF //um verdinho aqui
#define COLOR_RED 0xAA3333AA // um vermelhinho que serб para nos avisar das proibiзхes etc.
new Cannabisblip[MAX_PLAYERS]; // objecto de erva, irб facilitar a destruiзгo do objecto no /colher
new Cannabis[MAX_PLAYERS]; //
new FakeCannabis[MAX_PLAYERS]; // irб sernos dado uma vez que plantemos. Apenas com isto os jogadores podem apanhar, caso contrбrio nao consiguirгo. Ou seja, sу a pessoa que apanha irб poder apanhar a droga, a que ao meu ver baixa os niveis de DM uma vez que nao conseguem roubar as ervas uns dos outros
new Plantado; // irб servir para nos dizer se o campo de droga foi usado recentemente ou nгo
new Encomendado; // irб servir para nos dizer se o campo de droga foi usado recentemente ou nгo

new Heroinablip[MAX_PLAYERS]; // Praticamente igual ao de cima
new Heroina[MAX_PLAYERS]; // Praticamente igual ao de cima
new FakeHeroina[MAX_PLAYERS]; // Praticamente igual ao de cima
Vamos lб marcar os spots de drogas
Debaixo da public OnGameModeInit()
pawn Code:
Create3DTextLabel("Para encomendar alguma heroina,\n Use /encomendar", COLOR_GROVE, 2460.1846,-2566.9104,13.6544,20,0,1); // serve para nos informar que estбmos pera um spot de droga e que podemos encomendar heroina nesse local
CreateDynamicPickup(1254, 1, 2460.1846,-2566.9104,13.6544,0); // isto criarб uma pickup para sinalizar o local como um spot de heroina.

CreateDynamicObject(3439, 2541.9606933594, -1587.4586181641, 20.970590591431, 0, 0, 0); // isto criarб um objecto que usei para sinalizar o local como um spot de cannabis.
Create3DTextLabel("Para plantar cannabis, use /plantar", COLOR_GROVE, 2541.960, -1587.458, 20.97059,20,0,1);// serve para nos informar que estбmos pera um spot de droga e que podemos  plantar cannabis nesse local
Pode de local trocando as coordenas e tambem pode trocar o tipo de pickup e objectos.



Vamos lб criar as forwads do tempo que a cannabis demora a crescer. (Precisamos de fazer isto porrque mais tarde no cmd /plantar iremos criar um timer.
pawn Code:
forward CannabisGrow(playerid);
public CannabisGrow(playerid)
{
    // Quando o tempo, aquele que irб colocar na timer, expirar, um objecto (algumas plantas) irгo aparecer ao redor do drug spot e o jogador que as plantou irб ser capaz de as colher.
    FakeCannabis[playerid] = 1; // responsбvel pela utilizaзгo do cmd, sem isto o jogador poderia colher sempre, antes do tempo, e a timer apenas serviria para o objeto crescer.
    SendClientMessage(playerid, COLOR_GROVE, "A sua planta de Cannabis jб pode ser colhida, use /colher para colhe-la."); //avisa o jogador que a sua planta jб estб pronta para ser colhida
    weedblip[playerid] = CreateObject(3409, 2541.9606933594, -1587.4586181641, 20.970590591431-1, 0, 0, 0); // cria um objeto parecido com as ervas que vc teve que queimar nas missoes do single player para o Truth.
    return 1;
}
Agora fazemos o mesmo, mas para a chegada da heroina ao local. (Exatamente igual apenas se troca tudo relacionado com cannabis para heroina
pawn Code:
forward Chegadadaheroina(playerid);
public Chegadadaheroina(playerid)
{
    FakeHeroina[playerid] = 1;
    SendClientMessage(playerid, COLOR_GROVE, "O pacote de heroina jб chegou ao local, use /apanhar para o apanhar.");
    heroinablip[playerid] = CreateObject(1279, 769.3109, -1086.5149, 24.0859-1, 0, 0, 0);
    return 1;
}
Uma vez com isto feito, iremos fazer o tempo de reset dos campos.
pawn Code:
// basicamente irб liberar os campos depois de algum tempo (defenido por vc no comando /plantar) passar
forward resetcannabis();
public resetcannabis()
{
   Plantado = 0;
   return 1;
}

forward resetheroina();
public resetheroina()
{
   Encomendado = 0;
   return 1;
}
Comandos /plantar e /colher
pawn Code:
if(strcmp("/plantar", cmd, true) == 0)
    {
        if (IsPlayerInRangeOfPoint(playerid, 5.0,2541.9606933594, -1587.4586181641, 20.970590591431)) // apenas as pessoas que estгo neste sitio poderгo digitar o cmd com que este funcione, caso contrбrio serгo avisadas que nao estao num devido campo
        {
            if(Plantado == 1) return SendClientMessage(playerid, COLOR_RED, "Parece que alguem usou este campo recentemente, espera mais um bocado."); // se o campo tiver sido usado recentemente, o jogador nгo poderб plantar nele, sу depois de este ser liberado/resetado.
           
            {
                SendClientMessage(playerid, COLOR_GROVE, "Plantou uma semente, espere um bocado por favor.");
                Plantado = 1; // depois de ser usado toma o valor de 1 para nao poder ser usado e sу sera usado quando passar o tempo da timer que irб colocar daqui a mais um bocado
                GivePlayerMoney(playerid, - 50); // fazemos isto para cobrar o custo da semente, poderб mudar caso queira.
                SetTimerEx("CannabisGrow", 120000, 0, "i", playerid); // tempo que vocк poe para a planta crescer
                SetTimerEx("resetcannabis",600000, 0, "i", playerid); // tempo que vocк coloca para o campo ser liberado
                return 1;
            }
        }
        return 1;
    }
pawn Code:
if(strcmp("/colher", cmd, true) == 0)
    {
        if (IsPlayerInRangeOfPoint(playerid, 5.0,2541.9606933594, -1587.4586181641, 20.970590591431)) // a pessoa tem que estar no mesmo local onde plantou a erva
        {
            if(FakeCannabis[playerid] == 1) // Isto apenas й "ganho" pelo jogador que planta, por isso й que as pessoas que usam o campo sгo as unicas que podem plantar.
            new gramas = random(19)+1; // isto farб com que o player nunca apanhe o mesmo nъmero de gramas numa colheita e que seja random
            {
                format(string, sizeof(string), "Vocк colheu %d gramas de cannabis.", gramas); //serve para avisar o jogador de quantas gramas ele colheu
                SendClientMessage(playerid, COLOR_GROVE, string); // diz qual a cor da mensagem enviada em cima
                FakeCannabis[playerid] = 0; // o valor volta para 0 para o jogador nao poder ficar continuando colhendo toda a hora
                Cannabis[playerid] += gramas;
                DestroyObject(cannabisblip[playerid]);
                return 1;
            }
        }
        return 1;
    }
Agora o comando /encomendar e /apanhar
pawn Code:
if(strcmp("/encomendar", cmd, true) == 0)
    {
        if (IsPlayerInRangeOfPoint(playerid, 5.0,2460.1846,-2566.9104,13.6544)) // o Jogador precisa de estar neste local para encomendar
        {
            if(Encomendado == 1) return SendClientMessage(playerid, COLOR_RED, "Parece que alguem jб usou este campo recentemente, espere um bocado.");
           
            {
                Encomendado = 1; // o valor tende para 1 para o campo ficar sobre o efeito de usado, sу serб liberado quando a timer que irб colocar abaixo passar.
                SendClientMessage(playerid, COLOR_GROVE, "Vocк encomendou alguma heroina."); // mensagem a dizer que jб foi encomendada
                GivePlayerMoney(playerid, - 500); // dinheiro que й cobrado pela encomenda
                SetTimerEx("chegadadaheroina", 120000, 0, "i", playerid); // tempo que a heroina demora a chegar ao logal
                SetTimerEx("resetheroina", 600000, 0, "i", playerid); // tempo que o campo de heroina demora a ser liberado novamente
                SetPlayerMapIcon( playerid, 1, 769.3109, -1086.5149, 24.0859, 23, 0, MAPICON_GLOBAL ); // quando digitar este cmd com sucesso, um icon irб aparecer no map com o local da entrega da heroina.
                return 1;
            }
        }
        return 1;
    }
pawn Code:
if(strcmp("/apanhar", cmd, true) == 0)
    {
        if (IsPlayerInRangeOfPoint(playerid, 5.0,769.3109,-1086.5149,24.0859)) // o player precisa de estar no local onde plantou
        {
            if(FakeHeroin[playerid] == 1) //  Isto apenas й "ganho" pelo jogador que encomenda, por isso й que as pessoas que usam o campo sгo as unicas que podem apanhar a encomenda.
            {
                SendClientMessage(playerid, COLOR_GROVE, "Apanhou 20 gramas de heroina."); // mensagem a dizer quanta heroina ele apanhou
                FakeHeroina[playerid] = 0;// o valor volta para 0 para o jogador nao poder ficar continuando apanhando heroina toda a hora
                Heroina[playerid] += 20; // serva para dar a heroina que o jogador apanhou
                DestroyObject(heroinablip[playerid]); // destroi o objeto da heroina
                RemovePlayerMapIcon( playerid, 1 );// remove o icon no mapa do jogador
                return 1;
            }
        }
        return 1;
    }
♣ Observaзхes ♣
* O sistema deve ser incorporado no game mode, por isso, o salvamento pode ser feito а beira dos restantes itens do player
* Sei que o sistema pode ser um bocado noob, mas a minha intenзгo foi sу de ajudar aqueles que gostam deste tipo de sistemas
* Aberto a sugestхes e criticas.
* Crйditos a !Niiw e Hardware por me tirem tirado um dъvida а muito muito tempo atrбs
Reply


Messages In This Thread
Sistema de Drogas - by LeMoi - 01.08.2012, 08:45
Re: Sistema de Drogas - by Don_Speed - 01.08.2012, 09:56
Re: Sistema de Drogas - by LeMoi - 01.08.2012, 10:20
Re: Sistema de Drogas - by NesQ - 01.08.2012, 10:26
Re: Sistema de Drogas - by dPlaYer_ - 01.08.2012, 13:16
Re: Sistema de Drogas - by LeMoi - 01.08.2012, 13:33
Re: Sistema de Drogas - by R3S1D3NT1 - 01.08.2012, 13:55
Re: Sistema de Drogas - by Bieeel_Cwb - 01.08.2012, 13:59
Re: Sistema de Drogas - by LeMoi - 01.08.2012, 14:02
Re: Sistema de Drogas - by Schocc - 01.08.2012, 15:14

Forum Jump:


Users browsing this thread: 3 Guest(s)