Portal SAMP
[Ajuda] npc - 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 (/showthread.php?tid=3047)



npc - Tiago Medeiros - 03/12/2022

boa tarde galera, eu estou precisando da ajuda de vocês. coloquei alguns NPC's na minha gamemode, e eu estou querendo colocar as informações sobre a cabeça dele. Exemplo:

Viciado 1
Digite: /venderdroga

quero colocar isso sobre a cabeça dele, por favor, me ajudem.


RE: npc - zBreno - 03/12/2022

na parte da criação da conta no on player connect pro npc poder logar e dar spawn pegue o nome do arquivo dele e use

new Text3D:NPCLabel[MAX_PLAYERS];

new string[13];
GetPlayerName(playerid, string, MAX_PLAYER_NAME);
format(string, sizeof(string), "Desempregado", string, playerid);
NPCLabel[playerid] = CreateDynamic3DTextLabel(string, -1, 0.0, 0.0, 0.0, 10.0, playerid, -1, 1, -1, -1, -1, 10.0);


RE: npc - Tiago Medeiros - 03/12/2022

bom amigo, não foi isso que eu quis dizer. eu quero que o textlabel, fique sobre a cabeça do NPC


RE: npc - zBreno - 03/12/2022

isso ai ta pegando o nome da profissão do npc desempregado e passando a string pro texto na cabeça dele

new Text3D:NPCLabel[MAX_PLAYERS];

public OnPlayerConnect(playerid);
{
if(IsPlayerNPC(playerid))
{
new string[256];
if(!dini_Exists(file)) // Criando conta para NPC's
{
WP_Hash(bufpass, sizeof(bufpass), SENHA_CONTA_NPC);
CreateFileAccount(file, bufpass);
}
if(!strcmp(szPlayerName, "Samanta_Oliveira", true))
{
format(string, sizeof(string), "%s (%d)", szPlayerName, playerid);
NPCLabel[playerid] = CreateDynamic3DTextLabel(string, -1, 0.0, 0.0, 0.0, 30.0, playerid, INVALID_VEHICLE_ID, 1, -1, -1, -1, 200.0);
dini_IntSet(file, "Profissao", 37);
SetPlayerSkin(playerid, dini_Int(file, "Skin"));
}

public Logarprof(playerid)
{
new string[256];
new nomepl[MAX_PLAYER_NAME];
GetPlayerName(playerid, nomepl, sizeof(nomepl));
format(file2, sizeof(file2), PASTA_CONTAS, nomepl);
if(dini_Int(file2, "Profissao") == Desempregado)
{
ResetPlayerWeapons(playerid);
GivePlayerWeapon(playerid, 14, 1);
SetPlayerColor(playerid, Branco);
if(IsPlayerNPC(playerid))
{
if(IsValidDynamic3DTextLabel(NPCLabel[playerid]))
{
format(string, sizeof(string), "%s (%d)", nomepl, playerid);
UpdateDynamic3DTextLabelText(NPCLabel[playerid], Branco, string);
}
}
else
{
if(IsValidDynamic3DTextLabel(ProfLabel[playerid]))
{
UpdateDynamic3DTextLabelText(ProfLabel[playerid], Branco, "[Desempregado(a)]");
}
}
}


RE: npc - Vel - 03/12/2022

É NPC mesmo ou ator? E poste parte do código...


RE: npc - Tiago Medeiros - 04/12/2022

isso, é ator. citei errado, perdão!!


RE: npc - Carlos Victor - 04/12/2022

Pra por isso em um Actor, só pegar a posição dele e tacar a Text3D nele 1m+ de altura.


RE: npc - zBreno - 04/12/2022

abra o editor de mapa do samp coloque dois skins no mapa pegue um deixe com o pé na cabeça do outro dai é só pegar as coordenadas do que ta no chão e mudar a Z pela do que ta com o pé na cabeça dele


RE: npc - Carlos Victor - 04/12/2022

Você pode simplesmente criar um monte de informações de diversos Actor's que deseja adicionar em seu mapa, eu fiz um exemplo(segue abaixo) de como você pode fazer isso, é uma forma bem simples e básica de manipular alguns dados, como ID, Nome, Texto, Skin, Posição... Você pode fazer infinitas coisas com a manipulação de dados, pode criar um sistema de criar Actor's IC, sem ter que ir adicionando na gamemode, enfim... Vai até onde seu conhecimento vá, abuse de suas ideias.

Código:
#include <a_samp>

enum ActorInfo
{
    actorID,
    actorName[32],
    actorText[64],
    actorSkin,
    Float:actorPos[4]
};

new g_arrActorData[][ActorInfo] = {
    {0, "Tráficante", "Qualé menor! Quer uma droga?\n\n\n\n/interagir",         230, {1941.6312, -1776.4559, 13.6406, 269.4788}},
    {1, "Barmen", "Olá! Boa tarde, deseja alguma bebida?\n\n\n\n/interagir",    245, {1941.7059, -1769.2084, 13.6406, 92.1305}}
};

new Text3D:actor3DText[sizeof(g_arrActorData)];

main(){}

public OnGameModeInit()
{
    static
        string[128];

    for(new i = 0; i < sizeof(g_arrActorData); i++)
    {        
        CreateActor(g_arrActorData[i][actorSkin], g_arrActorData[i][actorPos][0], g_arrActorData[i][actorPos][1], g_arrActorData[i][actorPos][2], g_arrActorData[i][actorPos][3]);

        format(string, sizeof(string), "%s\n%s", g_arrActorData[i][actorName], g_arrActorData[i][actorText]);
        actor3DText[i] = Create3DTextLabel(string, 0xFFFFFFFF, g_arrActorData[i][actorPos][0], g_arrActorData[i][actorPos][1], g_arrActorData[i][actorPos][2] + 1.0, 5.0, 0);
    }
    return 1;
}

> Criei uma array onde eu armazenei alguns dados do Actor, como ID dele(você pode fazer comandos com isso), nome, texto(caso você queira adicionar um texto especifico para o actor, como na print), skin e posição(x, y, z, angle). E você pode simplesmente manipular esses actor's pelo ID deles, criar comandos para modificar algo deles, enfim... Espero que eu tenha dado uma luz no fim do tunel para você.

[Imagem: image.png]

E sobre adicionar um texto sobre o actor, é simples, só pegar a posição dele e criar um 3dtextlabel nele, ai você vê a altura que fica boa.

Qualquer coisa, meu Discord está abaixo.