[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
#2

Extraзao de GF!
Reply
#3

Nгo й extraзгo do GF ... Em cerca 50 servidores de RPG que joguei, apenas em 3 servidores vi um sistema parecido a este.
Se й, mostre-me e eu irei pedir-lhe desculpa.
Reply
#4

Quote:
Originally Posted by Don_Speed
View Post
Extraзao de GF!
Tб seguro disso? Das primeiras vezes que vejo algo assim, gostei bastante do icon no map como localizaзгo
Reply
#5

Poderia fazer pra criar o objeto na posiзгo do player..
Reply
#6

Sim podia ter feito isso mas como coloquei spots, pensei em adicionar por lб.

pawn Code:
CreateObject(3409, X, Y, Z-2, 0, 0, 0);
Reply
#7

Tutorial ? ta mais facil vc te postado um code pra seu amigo em pastebin lek vc precisaria explica mais
Reply
#8

Nossa nego sу vem pra reclamar pqp deixa o mlq postar o que ele quizer de forma que ele quizer..
Bom Tuto titanic.
Reply
#9

Nгo leve isto com um insulto mas nгo percebi nada do que disse.

Apenas postei porque esse meu amigo queria que eu postasse para que as outras pessoas que gostam deste tipo de sistemas podessem usar.

Anyway, como disse no нnicio, eu jб nгo uso este sistema, troquei-o por um mais avanзado... Apenas postei para essas pessoas poderem ver, usar e atй mesmo criticar.

Vlw pela dica.


@bielzera[:
Obrigado
Reply
#10

cade o tutorial?
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)