Portal SAMP
[Ajuda] NPC interativo - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] NPC interativo (/showthread.php?tid=3373)



NPC interativo - GUI_DA_Z5 - 24/02/2023

Olá eu gostaria de saber como posso fazer um npc interativo tipo eu mirar para ele com uma arma e iniciar um assalto um exemplo 
Agradeço desde já.


RE: NPC interativo - xbruno1000x - 25/02/2023

GetPlayerTargetDynamicActor(playerid) é a função que detecta se um player está mirando um NPC. Você pode colocar um timer verificando isso.


RE: NPC interativo - GUI_DA_Z5 - 05/03/2023

(25/02/2023 01:49)xbruno1000x Escreveu: GetPlayerTargetDynamicActor(playerid) é a função que detecta se um player está mirando um NPC. Você pode colocar um timer verificando isso.


Muito Obrigado Bruno!


RE: NPC interativo - strelo - 09/03/2023

Para criar um NPC interativo que possa ser alvo de um assalto quando o jogador mira nele com uma arma, você pode seguir os seguintes passos:

1. Crie o NPC: Primeiro, você precisa criar o NPC. Para fazer isso, use a função CreateActor() para criar um ator com as características desejadas. Certifique-se de definir uma posição inicial, uma aparência e um modelo de ator adequado ao seu propósito.

2. Verifique se o jogador está mirando no NPC: Para detectar se um jogador está mirando em um NPC, você pode usar a função GetPlayerTargetDynamicActor(playerid). Isso retornará o ID do ator que o jogador está mirando. Verifique se o ID retornado corresponde ao NPC que você criou.

3. Inicie o assalto: Se o jogador estiver mirando no NPC que você criou, você pode iniciar o assalto. Para isso, você pode usar a função SetPlayerArmour(playerid, 0) para remover a armadura do jogador e SetPlayerHealth(playerid, 0) para definir a vida do jogador como zero.

4. Adicione um timer: Para verificar continuamente se o jogador ainda está mirando no NPC, você pode adicionar um timer usando a função SetTimerEx(). Dentro do callback do timer, verifique novamente se o jogador ainda está mirando no NPC e repita as etapas 3 e 4 conforme necessário.

Aqui está um exemplo de como poderia ser o código para fazer isso:

Código:
new NPC_actorid = INVALID_ACTOR_ID;

// Crie o NPC
NPC_actorid = CreateActor(modelid, x, y, z, rotation);

// Verifique se o jogador está mirando no NPC
public OnPlayerUpdate(playerid)
{
    new target_actorid = GetPlayerTargetDynamicActor(playerid);
    if (target_actorid == NPC_actorid)
    {
        // Inicie o assalto
        SetPlayerArmour(playerid, 0);
        SetPlayerHealth(playerid, 0);
    }
}

// Adicione um timer para verificar continuamente se o jogador ainda está mirando no NPC
public OnPlayerConnect(playerid)
{
    SetTimerEx("CheckPlayerTargetNPC", 100, true, "i", playerid);
}

public CheckPlayerTargetNPC(playerid)
{
    new target_actorid = GetPlayerTargetDynamicActor(playerid);
    if (target_actorid != NPC_actorid)
    {
        // Jogador não está mais mirando no NPC, pare o assalto
        SetTimerEx("CheckPlayerTargetNPC", 0, false);
        SetPlayerArmour(playerid, 100);
        SetPlayerHealth(playerid, 100);
    }
}

Lembre-se de ajustar o código para se adequar à sua finalidade específica e de usar nomes de funções e variáveis adequados. Além disso, certifique-se de incluir a biblioteca apropriada para as funções que você está usando.