[Pedido] Missхes
#1

Galera, queria inserir um sistema de missoes no meu servidor, sу que nao sei mesmo como comeзar...

Eu pensei em algumas: Assalto aos cassinos, assalto a banco, transporte de drogas... Bom eu pensei em algo simples...

Vamos dar o exemplo primeiramente do assalto a um cassino por exemplo... Lб dentro terб um Pickup, quando o player subir em cima abrirб um dialog com as informaзoes sobre o assalto contendo duas opзхes para a seguinte pergunta: "Deseja realizar este assalto?" "Aceitar" e "Recusar"...

Caso ele aceite, um timer deve comeзar a rodar... Assim que o assalto comeзar deve ser enviados pra todos no chat: "Player(id) iniciou um assalto ao cassino"... O cara deve permanecer no local por 5 minutos para completar parte do assalto... Quando passar esses 5 minutos, um outro timer com um textdraw deve comeзar a rodar na tela: O player agora tem tantos minutos para "fugir" e chegar a outro local do mapa para ter a missao sucedida... Caso ele nao consiga a tempo a missao deve ser falhada e ela ja pode ser liberada para outro player no cassino... Caso ele morra no caminho a missao deve falhar do mesmo modo... Caso ele consiga chegar nesse checkpoint em algum local do mapa, a missao й bem sucedida e ele terб os devidos premios...

E o trasporte de drogas seria similar... O player chega а um pickup la nas fбbricas da periferia de Los Santos... и aberto um dialog contendo todas as informaзхes do transporte de drogra... Com duas opзхes "Aceitar" ou "Recusar"... Caso ele aceite, deve ser enviado a todos do server: "Player(ID) carregando seu veiculo com drogas e partirб para a entrega em 1 minuto"... O timer de 1 minuto comeзa correr... quando passar o tempo o player terб de seguir atй um checkpoint do outro lado do mapa... caso seja morto atй la a missao deve ser falhada e liberada para outro jogador la no local... Caso nao chegue a tempo para a entrega й fail tambem... Caso consiga ele ganha os devidos premios...


Bom galera eu sei que escrevi muito... Esse sistema nao precisa nada de salvamento, nao no meu caso ainda mais que й servidor de TDM/4FUN... Ele deve sу ter alguns cuidados como... Caso o player caia do servidor a missao tambem deve ser finalizada... Caso algum outro player chegue no pickup do inicio da missao, e ja tenha uma missao acontecendo, deve ser dado um aviso a ele...

Outra coisa... claro que eu nao to querendo que seja tudo feito assim e entregue pra mim eu taria pedindo muito e nao aprendendo nada... Eu sу quero uma luz... Eu sei mexer bem com checkpoints e pickups... eu sу nao sei como dar sequenciamento aos fatos e o lance dos timers... necessidade de ficar um tempo no local e tals... Ah e mais uma coisa... caso o player saia de um certo parвmetro do local a missao deve ser falhada tambem (mais uma coisa que nao sei como fazer, ainda mais pq nao quero usar onplayerupdate pra pegar a posiзгo do player, pq bugaria o sv... Queria tambem uma ideнa de como fazer isso...)


Bom... й isso pessoal *-*... Aguardo muito a resposta de alguem... vai ser muito maneiro ter isso no meu sv e ainda com o crйdito das pessoas que me ajudarem, sem problema algum...
Reply
#2

Sу usar dialog, e timer nada mais...
Reply
#3

Fiz uma base para vocк, com o cуdigo em portuguкs para facilitar seu entendimento .



Nгo adicionei coisas nгo-essenciais como o TextDraw, pois o cуdigo abaixo serve apenas para ajudб-lo a entender os Timers, o jogo de variбveis que deve ser feito, entre outros :



Tudo isso pode ser feito de outras maneiras tambйm, basta ter criatividade .



pawn Код:
#include <a_samp>


#define TempoSegundaParte 30 // Troque 30 pelo tempo mбximo (em minutos) para que o jogador chegue no local da segunda parte do assalto
#define ID_Dialog_Assalto 180
new PickupCassino;
new bool:MissaoOn;
new CaraFazendoMissao = -1;
new MissionTimerID;
new Contador;
new Parte;
new texto[100];
new AssaltanteNome[MAX_PLAYER_NAME];


public OnGameModeInit()
{
    PickupCassino = CreatePickup(/*ID da Pickup*/, 23, /*Encaixe aqui as coordenadas da pickup do cassino*/, -1);
    return 1;
}



public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == ID_Dialog_Assalto)
    {
        if(response)
        {
            if(MissaoOn) return SendClientMessage(playerid, 0xFFFFFFAA, "Alguйm jб estб realizando um assalto !");
            new Float:aX, Float:aY, Float:aZ;
            GetPlayerPos(playerid, aX, aY, aZ);
            GetPlayerName(playerid, AssaltanteNome, MAX_PLAYER_NAME);
            format(texto, sizeof(texto), "%s(%d) iniciou um assalto ao cassino", AssaltanteNome, playerid);
            SendClientMessageToAll(0x33CCFFAA, texto);
            MissaoOn = true;
            CaraFazendoMissao = playerid;
            Parte = 1;
            MissionTimerID = SetTimerEx("Assaltando", 1000, true, "nfff", playerid, aX, aY, aZ);
        }
    }
    return 1;
}


forward Assaltando(playerid, X, Y, Z);
public Assaltando(playerid, X, Y, Z)
{
    if(Parte == 1)
    {
        Contador++;
        if(!IsPlayerInRangeOfPoint(playerid, 8.0, X, Y, Z))
        {
            MissaoOn = false;
            Parte = 0;
            CaraFazendoMissao = -1;
            Contador = 0;
            SendClientMessage(playerid, 0x33CCFFAA, "Mission Failed !");
            KillTimer(MissionTimerID);
        }
        if(Contador == 300)
        {
            Parte = 2;
            Contador = 0;
            format(texto, sizeof(texto), "Vocк tem %d minutos para chegar no local no mapa !", TempoSegundaParte);
            SendClientMessage(playerid, 0x33CCFFAA, texto);
        }
    }
    else if(Parte == 2)
    {
        Contador++;
        if(Contador == TempoSegundaParte && !IsPlayerInRangeOfPoint(playerid, 3.0, /*Coloque aqui as coordenadas do local onde o jogador deve ir na segunda parte da missao*/))
        {
            MissaoOn = false;
            Parte = 0;
            CaraFazendoMissao = -1;
            Contador = 0;
            SendClientMessage(playerid, 0x33CCFFAA, "Mission Failed !");
            KillTimer(MissionTimerID);
        }
    }
    return true;
}



public OnPlayerPickUpPickup(playerid, pickupid)
{
    if(pickupid == PickupCassino)
    {
        ShowPlayerDialog(playerid, ID_Dialog_Assalto, DIALOG_STYLE_MSGBOX, "Deseja realizar este assalto?", "\n", "Aceitar", "Recusar");
    }
    return 1;
}


Espero ter ajudado .
Reply
#4

Seja prбtico, ninguйm vai querer ler isso tudo.
Reply
#5

Sistema de missao, o player pega um pickup e inicia a missao com um timer... ele nao pode sair da area por tanto tempo... quando liberado ele deverб proceguir atй um local para completar a missao... Entao ele ganharб o premio dele...

Nгo precisa de sistema nehum de salvamento... precisa que se estiver ocorrendo uma missao ja com alguem, outra nao pode comeзar no mesmo local... Po acho que й isso... ai dei o exemplo como assalto a banco, cassino... e transporte de drogas... sу preciso saber como fazer o encadeamento das coisas os timers.... nessecidade do cara ficar um tempo no local iniciado a missao e tals... e quando a missao acabar (secesso ou fracasso), deve ser liberada pra outro player...
Reply
#6

ow Rjjj era isso mesmo que eu queria, algo como base! Vai ajudar muito... sу que tipo acho que vc nao pois ai, o tempo que o carinha tem que ficar esperando na бrea de inicio da missaoe o checkpoint no local onde ele deve ir... como faзo pra marcar esse chesckpoint no mapa tambem... Aguardo respostas
Reply
#7

Quote:
Originally Posted by Mateuscm
Посмотреть сообщение
ow Rjjj era isso mesmo que eu queria, algo como base! Vai ajudar muito... sу que tipo acho que vc nao pois ai, o tempo que o carinha tem que ficar esperando na бrea de inicio da missaoe o checkpoint no local onde ele deve ir... como faзo pra marcar esse chesckpoint no mapa tambem... Aguardo respostas


No OnDialogResponse esta parte do cуdigo que inicia o Timer :




pawn Код:
MissionTimerID = SetTimerEx("Assaltando", 1000, true, "nfff", playerid, aX, aY, aZ);


Como eu defini Parte = 1; o Timer funcionarб para a parte 1 da missгo (ficar esperando os 5 minutos no cassino), mas depois, ao tйrmino dela, o mesmo Timer funcionarб para a parte 2 .




Quanto ao checkpoint, vocк pode criб-lo embaixo desta linha do cуdigo :



pawn Код:
format(texto, sizeof(texto), "Vocк tem %d minutos para chegar no local no mapa !", TempoSegundaParte);


Usando SetPlayerCheckpoint, e capturб-lo, (ou seja, fazer com que determinadas coisas aconteзam quando o jogador entrar no checkpoint) usando a public OnPlayerEnterCheckpoint .



E o cуdigo que fiz nгo estб 100% concluнdo, deixei a parte final, que й justamente essa parte da chegada ao local marcado pelo checkpoint, para vocк fazer .



Lembre-se de resetar todas as variбveis (para que outro jogador possa assaltar depois) e parar o Timer quando a missгo acabar :



pawn Код:
MissaoOn = false;  //Esta linha coloca a missгo como "nгo sendo feita por ninguйm no momento".
Parte = 0; //Coloca a parte da missгo (que pode ser a 1 e a 2) como 0
CaraFazendoMissao = -1; //Reseta a variбvel que guarda o ID de quem estб fazendo a missгo.
Contador = 0; //Reseta o contador (usado nos Timers para a verificaзгo dos minutos passados desde seu inнcio.          
KillTimer(MissionTimerID); //Finaliza o Timer.



Espero ter ajudado .
Reply
#8

pawn Код:
#include <cpstream>
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)