SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Português/Portuguese > Lançamentos/Releases

Reply
 
Thread Tools Display Modes
Old 25/07/2011, 05:44 PM   #1
FireCat
Banned
 
Join Date: Jul 2010
Posts: 2,470
Reputation: 596
Default Como fazer um NPC

Ola >: ) Este tutorial é feito pelo kc, estou só a traduzilo. Espero que gostem.

Criar o .rec
Primeiro de tudo, precisamos do "playback" que é a gravação do nosso npc, sem isso,
o NPC nunca iria trabalhar.
Começa o um server, entra na rcon ("/rcon login <a_tua_rcon_pass>") e inicia o fs
chamado npc_record ("/rcon loadfs npc_record")
Agora há 3 commandos para gravar um NPC, no filterscript npc_record.
  • /vrecord <nome> - Para começares a gravar enquanto estás num vehiculo.
  • /ofrecord <nome> - Para começares a gravar enquanto não estás num vehiculo.
  • /stoprecord - Para parares de gravar o teu NPC.
Neste tutorial vamos gravar um NPC a conduzir um vehiculo. Por isso entra num vehiculo e faz /vrecord mynpc
NOTA: Precisas de estar loggado rcon, para começares a gravar.
Coduzes um bocado... quando acabares faz /stoprecord.
Fecha o jogo, vai a pasta "scriptfiles", deve estar ai um ficheiro chamado mynpc.rec.
Mete o mynpc.rec dentro deste directorio: <O teu directorio do SA-MP>/npcmodes/recordings/
Ja está? Muito bem! Agora ja temos o nosso NPC gravado, e no local certo.

Controlar o NPC
Ja viste que dentro do directorio "npcmodes" estão la varios scripts. São "mini" scripts que
controlam o que o teu NPC faz.
Vamos la criar o script do NPC.
Começa um novo ficheiro pawno, e cola isto
pawn Code:
#define RECORDING "mynpc" //This is the filename of your recording without the extension.
#define RECORDING_TYPE 1 //1 for in vehicle and 2 for on foot.

#include <a_npc>
main(){}
public OnRecordingPlaybackEnd() StartRecordingPlayback(RECORDING_TYPE, RECORDING);

#if RECORDING_TYPE == 1
public OnNPCEnterVehicle(vehicleid, seatid) StartRecordingPlayback(RECORDING_TYPE, RECORDING);
public OnNPCExitVehicle() StopRecordingPlayback();
#else
public OnNPCSpawn() StartRecordingPlayback(RECORDING_TYPE, RECORDING);
#endif
Pode parecer um bocado confuso.
Vamos la então rever.
pawn Code:
#define RECORDING "mynpc" //Vai ser o nome, do .rec que gravamos
Como o comentario, vai ser o nome do .rec mais sem a extensão .rec

pawn Code:
#define RECORDING_TYPE 1 //1 para dentro do vehicle, 2 para se o bot estiver a pé


pawn Code:
#include <a_npc>
Vamos fazer include do que precisamos para criar o NPC

pawn Code:
public OnRecordingPlaybackEnd() StartRecordingPlayback(RECORDING_TYPE, RECORDING);
Faz o loop, quando o record playback acaba, começa a reproduzir gravação outra vez

pawn Code:
public OnNPCEnterVehicle(vehicleid, seatid) StartRecordingPlayback(RECORDING_TYPE, RECORDING);
Quando o bot entra começa a reproduzir a gravação


pawn Code:
public OnNPCExitVehicle() StopRecordingPlayback();
Quando o NPC sai do vehicle, para de reproduzir a gravação



pawn Code:
public OnNPCSpawn() StartRecordingPlayback(RECORDING_TYPE, RECORDING);
Quando o NPC faz spawn, começa a reproduzir a gravação

Como vês é facil. Agora grava o teu "mynpc.pwn" em <O teu directorio do SA-MP>/npcmodes.

Connectar o teu NPC
Fecha o mynpc.pwn, e abra o teu GameMode ou abra um Filterscript.
pawn Code:
ConnectNPC("Dave","mynpc");
Agora vamos usar o ConnectNPC, sugero que ponham dentro do OnGameModeInit ex:
pawn Code:
public OnGameModeInit()
{
print("my gamemode");
ConnectNPC("MyFirstNPC","mynpc");
return 1;
}

Ou se for um Filterscript
pawn Code:
public OnFilterScriptInit()
{
print("my filterscript");
ConnectNPC("MyFirstNPC","mynpc");
return 1;
}

Como criamos o NPC dentro de um vehiculo precisamos de criar um vehiculo.
NOTA: SE ESTÁS A CRIAR UM NPC NUM VEHICULO, PASSA ESTE PASSO.
pawn Code:
new MyFirstNPCVehicle; //Global variable!
public OnGameModeInit()
{
print("my gamemode");
ConnectNPC("MyFirstNPC","mynpc");
MyFirstNPCVehicle = CreateVehicle(400, 0.0, 0.0, 5.0, 0.0, 3, 3, 5000);
return 1;
}
Ou se é um Filterscript
pawn Code:
new MyFirstNPCVehicle; //Global variable!
public OnFilterScriptInit()
{
print("my filterscript");
ConnectNPC("MyFirstNPC","mynpc");
MyFirstNPCVehicle = CreateVehicle(400, 0.0, 0.0, 5.0, 0.0, 3, 3, 5000);
return 1;
}
A posição do vehiculo não interessa, porque na gravação o bot vai teletransportar para o sitio onde foi gravado.

Só mais uma coisa antes de poderes testar, temos de po-lo num vehiculo.E
Eu fiz no OnPlayerSpawn.
NOTA: SE O TEU NPC NÃO USA VEHICULO, PASSA ESTE PASSO.
pawn Code:
public OnPlayerSpawn(playerid)
{
if(IsPlayerNPC(playerid)) //Checka se o player que fez spawn é um NPC
{
new npcname[MAX_PLAYER_NAME];
GetPlayerName(playerid, npcname, sizeof(npcname)); //Getar o nome do NPC
if(!strcmp(npcname, "MyFirstNPC", true)) //Checkar se o nome do NPC é MyFirstNPC
{
PutPlayerInVehicle(playerid, MyFirstNPCVehicle, 0); //Por o NPC que criarmos dentro de um vehiculo
}
return 1;
}
//Other stuff for normal players goes here!
return 1;
}

Se quiseres adicionar mais do que 1 NPC
pawn Code:
public OnPlayerSpawn(playerid)
{
if(IsPlayerNPC(playerid)) //Checka se o player que fez spawn é um NPC
{
new npcname[MAX_PLAYER_NAME];
GetPlayerName(playerid, npcname, sizeof(npcname)); //Getar o nome do NPC
if(!strcmp(npcname, "MyFirstNPC", true)) //Checkar se o nome do NPC é MyFirstNPC
{
PutPlayerInVehicle(playerid, MyFirstNPCVehicle, 0); //Por o NPC que criarmos dentro de um vehiculo
return 1;
}
if(!strcmp(npcname, "MySecondNPC", true))
{
PutPlayerInVehicle(playerid, AnotherVehicleID, 0);
return 1;
}
return 1;
}
//Other stuff for normal players goes here!
return 1;
}
Faz compile, vai dentro do jogo e testa.
Vês o NPC? Parabens! Acabas-te de criar o teu primeiro NPC!
Não trabalha? Posta aqui o problema, e vamos falar sobre ele para tentar arranjalo!

Problemas comuns
O meu NPC desconecta, logo que entra
Pode ser um anti cheat, ou o player tem de registrar ou é kickado. Adiciona
[pawn]
if(IsPlayerNPC(playerid)) return 1;

O meu NPC não entra
Mais provavel é porque o server tem password.

Não consigo que o npc_record faça load
Ja está loaded, ou então não está criado.

O npc só fica parado no spawn
Revolta a ver o OnPlayerSpawn

Espero que gostem
Isto foi feito por kc.
Eu só traduzi.

Last edited by FireCat; 11/11/2012 at 06:56 PM.
FireCat is offline   Reply With Quote
Old 25/07/2011, 05:52 PM   #2
Macintosh
High-roller
 
Macintosh's Avatar
 
Join Date: Aug 2010
Location: Somewhere Far *User Type: Administrator
Posts: 3,647
Reputation: 111
Default Re: Como fazer um NPC

Belo Tutorial First rsrs ^^
__________________

"É tão estranho
Os bons morrem jovens
Assim parece ser, quando me lembro de você
Que acabou indo embora, cedo demais
"

Os bons morrem jovens (Legião Urbana).

Um dia a gente irá se encontrar numa bem melhor brother

Macintosh is offline   Reply With Quote
Old 25/07/2011, 06:03 PM   #3
FireCat
Banned
 
Join Date: Jul 2010
Posts: 2,470
Reputation: 596
Default Re: Como fazer um NPC

Obrigado, ja falei com o Roam, ele vai fazer sticky.
FireCat is offline   Reply With Quote
Old 25/07/2011, 06:05 PM   #4
Caio_Cartaxo
Gangsta
 
Caio_Cartaxo's Avatar
 
Join Date: Nov 2009
Posts: 567
Reputation: 11
Default Re: Como fazer um NPC

Não tinha já tutoriais desses aqui?
Mais parabéns, ficou legal
Caio_Cartaxo is offline   Reply With Quote
Old 25/07/2011, 06:09 PM   #5
MiTToS
Huge Clucker
 
MiTToS's Avatar
 
Join Date: Jul 2011
Posts: 294
Reputation: 35
Default Re: Como fazer um NPC

Bom tutorial, mas já existe vários praticamente iguais.
Eu tenho uma dúvida quanto a NPC, sei que ocupa slot e dependendo das ações do NPC ele ocupa processo na CPU, mas e se ele ficar apenas andando? bom, vou pegar um VPS e terei 6GB de ram, não preciso me preocupar com isso mas eu quero algo realmente sem lag

Outra pergunta, no GTA OFF os NPC's param antes de te atropelar (alguns rs) tem alguma forma de fazer isso?

vlw.
MiTToS is offline   Reply With Quote
Old 25/07/2011, 06:17 PM   #6
Macintosh
High-roller
 
Macintosh's Avatar
 
Join Date: Aug 2010
Location: Somewhere Far *User Type: Administrator
Posts: 3,647
Reputation: 111
Default Re: Como fazer um NPC

Sim Caio, mais esse está totalmente explicado, gostei rsrs .

@OFF
Fire, porque não visita mais frequentemente nossa board? Estamos precisando de mais programadores experientes como você! =)

@EDIT
Mittos, não sei se tem como mais poderias fazer uma comparação entre a posição do veiculo e do player no caso NPC.

pawn Code:
new Float:pX, Float:pY, Float:pZ, Float:vX, Float:vY, Float:vZ;
GetPlayerPos(playerid, pX, pY, pZ); // No caso ali no playerid mudará para a define de seu NPC.
GetVehiclePos(vehicle, vX, vY, vZ); // Irá pegar a posição do veiculo.
if(floatabs(pX - vX) // Seria algo assim.. :]


E use floatabs para comparar .

Isso é um exemplo não vem me tirar ¬¬.
__________________

"É tão estranho
Os bons morrem jovens
Assim parece ser, quando me lembro de você
Que acabou indo embora, cedo demais
"

Os bons morrem jovens (Legião Urbana).

Um dia a gente irá se encontrar numa bem melhor brother

Macintosh is offline   Reply With Quote
Old 25/07/2011, 06:19 PM   #7
FireCat
Banned
 
Join Date: Jul 2010
Posts: 2,470
Reputation: 596
Default Re: Como fazer um NPC

Obrigado Mas éque prefiro falar ingles :b
E ultimamente apeteceu me ajudar esta secção
FireCat is offline   Reply With Quote
Old 25/07/2011, 06:24 PM   #8
MiTToS
Huge Clucker
 
MiTToS's Avatar
 
Join Date: Jul 2011
Posts: 294
Reputation: 35
Default Re: Como fazer um NPC

Quote:
Originally Posted by Shickcard View Post
Sim Caio, mais esse está totalmente explicado, gostei rsrs .

@OFF
Fire, porque não visita mais frequentemente nossa board? Estamos precisando de mais programadores experientes como você! =)

@EDIT
Mittos, não sei se tem como mais poderias fazer uma comparação entre a posição do veiculo e do player no caso NPC.

pawn Code:
new Float:pX, Float:pY, Float:pZ, Float:vX, Float:vY, Float:vZ;
GetPlayerPos(playerid, pX, pY, pZ); // No caso ali no playerid mudará para a define de seu NPC.
GetVehiclePos(vehicle, vX, vY, vZ); // Irá pegar a posição do veiculo.
if(floatabs(pX - vX) // Seria algo assim.. :]


E use floatabs para comparar .

Sem chance -q
meu GM tem quase mil linhas e não uso timer algum, nem para paydya. E não será por isso que vou adicionar timer rs

Sou anti timer :/
MiTToS is offline   Reply With Quote
Old 25/07/2011, 06:25 PM   #9
steki.
High-roller
 
steki.'s Avatar
 
Join Date: Nov 2010
Location: São Paulo, Brasil
Posts: 2,634
Reputation: 303
Default Re: Como fazer um NPC

O NPC não fará NADA ABSOLUTAMENTE NADA diferente do que foi programado para fazer.
__________________
Rio
steki. is offline   Reply With Quote
Old 25/07/2011, 06:31 PM   #10
MiTToS
Huge Clucker
 
MiTToS's Avatar
 
Join Date: Jul 2011
Posts: 294
Reputation: 35
Default Re: Como fazer um NPC

Quote:
Originally Posted by Luís Miki View Post
O NPC não fará NADA ABSOLUTAMENTE NADA diferente do que foi programado para fazer.
e se congelar ele?
MiTToS is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
[DUV]Como Fazer Gangzones Vageto[STK] Português/Portuguese 4 05/03/2011 09:12 PM
[DUVIDA] Como fazer NPC Vanderson Lançamentos/Releases 3 18/09/2010 11:06 PM
Como e que se fazer um /dominar askdias Português/Portuguese 2 22/06/2010 09:07 PM
[Ajuda] - Não sei como fazer. Douglinh@s Português/Portuguese 1 08/05/2010 12:38 PM


All times are GMT. The time now is 12:42 AM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.