Ad Code

Responsive Advertisement

Como fazer um sistema de contrato simples (bom para RP)

Primeiro passos

Primeiro, queremos criar algo que possa armazenar nosso contrato (O preço do contrato na cabeça de alguém).
Para isso, vamos simplesmente fazer isso: (NOTA: não vou explicar como você precisa fazer isso, há um tutorial aqui, não consigo encontrar o link atm, vou carregar mais tarde)

----------------------------------------------------------------------------------------
Também queremos isso apenas HITMANS pode matar o jogador e obter o dinheiro, não apenas jogadores regulares. Então, também faremos pFaction
Código de peão:
enum pInfo 
{
    pContract // Isso armazenará o preço do contrato na cabeça de alguém. Se for 0, o sistema irá simplesmente ignorá-lo
    pFaction 

new PlayerInfo [ MAX_PLAYERS ] [ pInfo ] ;

Tudo bem, depois que isso for feito, queremos criar um comando para que alguém possa colocar um contrato na cabeça de outra pessoa. Portanto, precisaremos de ZCMD e SSCANF.

----------------------------------------------------------------------------------------
Também
Vamos começar fazendo nosso comando.

Cada comando (no ZCMD) começa com este
Código de peão:
CMD : contrato ( playerid, params [ ] )

Agora, isso não é tão difícil. Depois disso, incluiremos nosso sscanf. Para isso, precisaremos criar algumas novas variáveis.

Código de peão:
CMD : contrato ( playerid, params [ ] ) 
    novo pID, recompensa, mensagem1 [ 170 ] , mensagem2 [ 170 ] ; 
    if ( sscanf ( params, "ud" , pID, bounty ) )  return SendClientMessage ( playerid, COLOR_WHITE, " USAGE : / contract [playerid] [amount]" ) ; 
    {
----------------------------------------------------------------------------------------

Deixe-me separar isso para você.

----------------------------------------------------------------------------------------

Código de peão:
novo pID, recompensa, mensagem1 [ 170 ] , mensagem2 [ 170 ] ;

Isso criará nossas novas variáveis. pID será o ID no qual queremos colocar o contrato. A recompensa será o preço que você colocará em sua cabeça. Precisaremos da variável de mensagem para formatar nossas mensagens. Mais sobre isso mais tarde.

Código de peão:
if ( sscanf ( params, "ud" , pID, bounty ) )  return SendClientMessage ( playerid, COLOR_WHITE, " USAGE : / contract [playerid] [amount]" ) ;

Isso fará a varredura se tudo estiver correto. Se você não entende esta parte, vá para o tutorial do sscanf. (Mais uma vez, não conheço o link.)

Também faremos para que ninguém possa colocar um valor negativo na cabeça de um jogador, portanto:

Código de peão:
if ( bounty <=  0 )  return SendClientMessage ( playerid, - 1 , "Você não pode colocar valores negativos na cabeça de um jogador!" ) ;

Depois disso, queremos colocar a recompensa na cabeça dos jogadores. Lembra quando fizemos o pContract? Vamos precisar agora! Vamos armazenar a recompensa no pContract dos jogadores.

Código de peão:
PlayerInfo [ pID ] [ pContract ]  = recompensa;

Isso adicionará a recompensa pela cabeça do jogador. Queremos também que o valor em dinheiro seja multado do jogador. Podemos fazer isso muito facilmente. Existe algo útil chamado GivePlayerMoney. Vamos usar isso!

Código de peão:
GivePlayerMoney ( playerid, - bounty ) ;

Como você pode ver, eu fiz isso - generosidade em vez de apenas generosidade. Isso ocorre porque queremos REDUZIR o dinheiro dos jogadores e não ADICIONAR o dinheiro.

Também queremos deixar uma mensagem para que o jogador saiba que fez com sucesso um contrato na cabeça do jogador.
Isso pode ser feito com SendClientMessage. Mas também queremos que o jogador saiba QUANTO ele colocou uma recompensa na cabeça do jogador. Portanto, precisaremos de nosso bom amigo chamado format!

Código de peão:
format ( message1, sizeof ( message1 ) , "Você colocou um contrato na cabeça dos jogadores por $% d" , recompensa ) ;

Como você pode ver, usei minha variável message1. É obrigatório que message1 seja um array, ou isso não funcionará. Também usei% d e, no final, coloquei bounty. Usamos% d quando queremos chamar um número e% s quando queremos chamar uma string. Neste comando, ele chamará um número, a recompensa que colocamos na cabeça do jogador, portanto usamos% d. Depois disso, diremos ao servidor o que% d precisa ser. Aqui precisa ser nossa generosidade, então colocamos isso no final! Tudo bem, formatamos nossa mensagem, mas agora precisamos enviá-la. Portanto, usamos SendClientMessage!

Código de peão:
format ( message1, sizeof ( message1 ) , "Você colocou um contrato na cabeça dos jogadores por $% d" , recompensa ) ; 
SendClientMessage ( playerid, - 1 , mensagem1 ) ;

Não é tão difícil, eu acho. Aqui estamos apenas enviando nossa mensagem1 para o jogador que está chamando o comando.
----------------------------------------------------------------------------------------
É assim que seu código deve estar agora
----------------------------------------------------------------------------------------

Código de peão:
CMD : contrato ( playerid, params [ ] ) 
    novo pID, recompensa, mensagem1 [ 170 ] , mensagem2 [ 170 ] ; 
    if ( sscanf ( params, "ud" , pID, bounty ) )  return SendClientMessage ( playerid, COLOR_WHITE, " USAGE : / contract [playerid] [amount]" ) ; 
if ( bounty <=  0 )  retorna SendClientMessage ( playerid, -1 , "Você não pode colocar valores negativos na cabeça de um jogador!" ) ; 
    {
         GivePlayerMoney ( playerid, - recompensa ) ; 
        format ( message1, sizeof ( message1 ) , "Você colocou um contrato na cabeça dos jogadores por $% d." , recompensa ) ; 
        SendClientMessage ( playerid, - 1 , mensagem1 ) ; 
        PlayerInfo [ pID ] [ pContract ]  = recompensa; 
}

Tudo bem, fizemos o comando. Mas precisamos avisar aos assassinos que há um novo contrato!
Usaremos o loop for. Isso percorrerá todos os jogadores. Faremos isso sempre que o servidor detectar um assassino, ele enviará uma mensagem para ele!

Código de peão:
for ( new i =  0 ; i < MAX_PLAYERS; i ++ ) 
        { 
            if ( PlayerInfo [ i ] [ pFaction ]  ==  3 ) 
            { 
                format ( message2, sizeof ( message2 ) , "HQ: Um jogador colocou um contrato em% s para $% d. " , GetName ( pID ) , bounty ) ; 
                SendClientMessage ( i, - 1 , mensagem2 ); 
            } 
        }

Deixe-me explicar isso para você.

Código de peão:
if ( PlayerInfo [ i ] [ pFaction ]  ==  3 )

Isso verificará se o jogador está na facção Hitman, aqui o número 3. Se o jogador ESTÁ na facção hitman, ele enviará uma mensagem.

Código de peão:
format ( message2, sizeof ( message2 ) , "HQ: Um jogador colocou um contrato em% s por $% d." , GetName ( pID ) , bounty ) ; 
SendClientMessage ( i, - 1 , mensagem2 ) ;

(NOTA: GetName provavelmente não está definido em seu script, é muito fácil e há muitos tutoriais sobre ele. Use a útil função de pesquisa!)

Isso enviará uma mensagem para todos que estão na Faction 3. Isso os deixará saiba sobre quem foi feito um contrato e por quanto.

Tudo bem, só precisamos adicionar return 1 no final e nosso comando está pronto! Deve ser assim:

Código de peão:
CMD : contrato ( playerid, params [ ] ) 
    novo pID, recompensa, mensagem1 [ 170 ] , mensagem2 [ 170 ] ; 
    if ( sscanf ( params, "ud" , pID, bounty ) )  return SendClientMessage ( playerid, COLOR_WHITE, " USAGE : / contract [playerid] [amount]" ) ; 
if ( bounty <=  0 )  retorna SendClientMessage ( playerid, -1 , "Você não pode colocar valores negativos na cabeça de um jogador!" ) ; 
    {
         GivePlayerMoney ( playerid, - recompensa ) ; 
        format ( message1, sizeof ( message1 ) , "Você colocou um contrato na cabeça dos jogadores por $% d." , recompensa ) ; 
        SendClientMessage ( playerid, - 1 , mensagem1 ) ; 
        PlayerInfo [ pID ] [ pContract ]  = recompensa; 

        para( novo i =  0 ; i < MAX_PLAYERS; i ++ ) 
        { 
            if ( PlayerInfo [ i ] [ pFaction ]  ==  3 ) 
            { 
                format ( message2, sizeof ( message2 ) , "HQ: Um jogador colocou um contrato em% s para $% d. " , GetName ( pID ) , recompensa ) ; 
                SendClientMessage ( i, - 1 , mensagem2 ) ; 
            }
        } 
    } 
    return  1 ; 
}

Compilado sem erros? Seguindo em frente então! Agora precisamos ir para OnPlayerDeath. Queremos verificar se quando um jogador morre, se ele tem um contrato em sua cabeça e se o assassino é um assassino.

Portanto, agora queremos verificar se nosso killerid está na Hitman Faction, nossa Faction número 3 E se o playerid tem um contrato em sua cabeça. Então, vamos adicionar uma instrução if.

Código de peão:
if ( PlayerInfo [ killerid ] [ pFaction ]  ==  3 )  // Verifica se o killerid é um hitman 
    { 
        if ( PlayerInfo [ playerid ] [ pContract ]  >  0 )  // Verifica se o jogador tem um contrato em sua cabeça, se não , o servidor não fará nada. 
        {

Não é tão difícil. Portanto, agora queremos dizer ao servidor o que ele precisa fazer se o playerid tiver um contrato em sua cabeça e o killerid for um assassino. Queremos que o playerid perca dinheiro e o killerid ganhe dinheiro!
Usaremos nosso amigo GivePlayerMoney e Format novamente.

Código de peão:
nova mensagem1 [ 170 ] ; 
            GivePlayerMoney ( playerid, - PlayerInfo [ playerid ] [ pContract ] ) ; 
            format ( message1, sizeof ( message1 ) , "Você foi gravemente ferido por um Hitman e perdeu $% d." , PlayerInfo [ playerid ] [ pContract ] ) ; 
            SendClientMessage ( playerid, - 1 , mensagem1 ) ;
            GivePlayerMoney ( killerid, PlayerInfo [ playerid ] [ pContract ] ) ;

Deixe-me explicar isso para você.

Código de peão:
GivePlayerMoney ( playerid, - PlayerInfo [ playerid ] [ pContract ] ) ;

Isso REDUZIRÁ (observe o - no início do PlayerInfo) o dinheiro dos jogadores. A quantidade que queremos reduzir é igual ao contrato em sua cabeça.

Código de peão:
format ( message1, sizeof ( message1 ) , "Você foi gravemente ferido por um Hitman e perdeu $% d." , PlayerInfo [ playerid ] [ pContract ] ) ; 
SendClientMessage ( playerid, - 1 , mensagem1 ) ;

----------------------------------------------------------------------------------------

Foi o que fizemos no nosso comando também, não é tão difícil.
----------------------------------------------------------------------------------------

Código de peão:
GivePlayerMoney ( killerid, PlayerInfo [ playerid ] [ pContract ] )

Isso dará ao nosso assassino a recompensa que estava na cabeça dos jogadores. Isso irá ADICIONAR dinheiro (agora observe que eu não uso o -, porque queremos ADICIONAR).

Agora estamos quase lá! Queremos apenas informar os outros pistoleiros que o contrato foi bem-sucedido! Usaremos o loop for novamente.

Código de peão:
para ( novo i =  0 ; i < MAX_PLAYERS; i ++ ) 
            { 
                    if ( PlayerInfo [ i ] [ pFaction ]  ==  3 ) 
                    { 
                    nova mensagem2 [ 170 ] ; 
                    format ( message2, sizeof ( message2 ) , "HQ: Hitman% s assasinou% s por $% d" , GetName ( killerid ) , GetName ( playerid ), PlayerInfo [ playerid ] [ pContract ] ) ; 
                    SendClientMessage ( killerid, - 1 , mensagem2 ) ; 
                    } 
            }

----------------------------------------------------------------------------------------
Também
(Mais uma vez, GetName provavelmente NÃO está definido. Por favor, use a função de pesquisa!)

Então aqui nós percorremos novamente todos os nossos jogadores e enviamos a mensagem para todos os assassinos que estão online! A última coisa que precisamos fazer é definir o contrato dos jogadores novamente para 0.
----------------------------------------------------------------------------------------
Código de peão:
PlayerInfo [ playerid ] [ pContract ]  =  0 ;
----------------------------------------------------------------------------------------
Simples, não é? Isso definirá o contrato de volta para 0.
----------------------------------------------------------------------------------------
E terminamos. É assim que o seu comando deve ser:
----------------------------------------------------------------------------------------
Código de peão:
CMD :contrato ( playerid, params [ ] ) 
    novo pID, recompensa, mensagem1 [ 170 ] , mensagem2 [ 170 ] ; 
    if ( sscanf ( params, "ud" , pID, bounty ) )  return SendClientMessage ( playerid, COLOR_WHITE, " USAGE : / contract [playerid] [amount]" ) ; 
if ( bounty <=  0 )  retorna SendClientMessage ( playerid, -1 , "Você não pode colocar valores negativos na cabeça de um jogador!" ) ; 
    {
         GivePlayerMoney ( playerid, - recompensa ) ; 
        format ( message1, sizeof ( message1 ) , "Você colocou um contrato na cabeça dos jogadores por $% d." , recompensa ) ; 
        SendClientMessage ( playerid, - 1 , mensagem1 ) ; 
        PlayerInfo [ pID ] [ pContract ]  = recompensa; 

        para( novo i =  0 ; i < MAX_PLAYERS; i ++ ) 
        { 
            if ( PlayerInfo [ i ] [ pFaction ]  ==  3 ) 
            { 
                format ( message2, sizeof ( message2 ) , "HQ: Um jogador colocou um contrato em% s para $% d. " , GetName ( pID ) , recompensa ) ; 
                SendClientMessage ( i, - 1 , mensagem2 ) ; 
            }
        } 
    } 
    return  1 ; 
}
----------------------------------------------------------------------------------------
E isso em seu OnPlayerDeath:

Código de peão:
public OnPlayerDeath ( playerid, killerid, motivo ) 
    if ( PlayerInfo [ killerid ] [ pFaction ]  ==  3 ) 
    { 
        if ( PlayerInfo [ playerid ] [ pContract ]  >  0 ) 
        { 
            new message1 [ 170 ] ; 
            GivePlayerMoney ( playerid, - PlayerInfo [ playerid ] [ pContract ]) ; 
            format ( message1, sizeof ( message1 ) , "Você foi gravemente ferido por um Hitman e perdeu $% d." , PlayerInfo [ playerid ] [ pContract ] ) ; 
            SendClientMessage ( playerid, COLOR_YELLOW, message1 ) ; 
            GivePlayerMoney ( killerid, PlayerInfo [ playerid ] [ pContract ] ) ; 
            para ( novo i =  0 ; i <MÁXIMO DE JOGADORES; i ++ ) 
            { 
                    if ( PlayerInfo [ i ] [ pFaction ]  ==  3 ) 
                    { 
                    nova mensagem2 [ 170 ] ; 
                    format ( message2, sizeof ( message2 ) , "HQ: Hitman% s assasinou% s por $% d" , GetName ( killerid ) , GetName ( playerid ) , PlayerInfo [ playerid ] [ pContract ] ); 
                    SendClientMessage ( killerid, COLOR_YELLOW, mensagem2 ) ; 
                    } 
            }
             PlayerInfo [ playerid ] [ pContract ]  =  0 ; 
        } 
    } 
    return  1 ; 
}
----------------------------------------------------------------------------------------

Isso é tudo. Eu sei que este é um longo tutorial, mas espero ter ajudado você! Sinta-se à vontade para me enviar PM com qualquer dúvida!

Postar um comentário

0 Comentários

© 2022 PawnScript All Rights Reversed