Tutorial -> Criando um novo NPC
#1

Este й sem duvida um tema muito comentado, entгo vamos passar um tutorial de como criar NPCs, os famosos bots.

Gravando um arquivo de reproduзгo
Primeiro de tudo, precisamos gravar um arquivo de reproduзгo para o nosso NPC usar. Inicie um servidor, de qualquer modo de jogo e entгo logue-se na RCON. (Use "/rcon login sua_senha" ) e carregue o filterscript npc_record (use "/rcon loadfs npc_record" )
Agora, existem 3 comandos principais para gravaзгo de seu NPC no filterscript npc_record ...

* /vrecord <nome_do_arquivo> - Inicia a gravaзгo de um caminho de veнculo para o nome do arquivo especificado.
* /ofrecord <nome_do_arquivo> - Inicia a gravaзгo apй para o arquivo especificado.
* /stoprecord - Pбra a gravaзгo do veнculo e em trajetos apй.


Neste tutorial, vamos estar fazendo um trajeto do veнculo, assim que entrar em um veнculo, digite /vrecord meunpc (Nota: vocк deve estar logado na rcon) para iniciar a gravaзгo.
Faзa sua trajetoria e quando tiver terminado use /stoprecord.
Feche o jogo,vб para seu diretуrio scriptfiles, deve haver um arquivo chamado meunpc.rec. Mova o arquivo para <Seu servidor SA-MP> /npcmodes/recordings/
Feito? Ok, уtimo! Vocк jб gravou um caminho para o NPC, e mudou-o para o diretуrio necessбrio.

Controlando o NPC
Vocк pode ter notado um monte de scripts de peгo no diretуrio npcmodes, estes sгo autфnomos "mini" scripts que controlam o comportamento do seu NPC.
Entгo, vamos criar um caminho para o seu recйm-gravado!
Iniciar um novo arquivo em PAWNO, e substituir seu conteъdo com ...
pawn Code:
#define RECORDING "meunpc" //Este й o nome do seu arquivo de gravaзгo, sem a extenзгo(.rec).
#define RECORDING_TYPE 1 //1 para gravaзхes em veнculo e 2 para gravaзхes apй.

#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
Isso pode parecer confuso, por isso agora explicarei isso linha por linha.

pawn Code:
#define RECORDING "meunpc" //Este й o nome do seu arquivo de gravaзгo, sem a extenзгo(.rec).
Como diz o comentбrio, este й o nome do caminho que vocк gravou sem a extensгo. Nossa reproduзгo de gravaзгo foi nomeado meunpc, e seu arquivo foi meunpc.rec assim que entramos no "meunpc".

pawn Code:
#define RECORDING_TYPE 1 //1 para gravaзхes em veнculo e 2 para gravaзхes apй.
Como diz o comentбrio de novo, este й o tipo de gravaзгo. Se o seu NPC estб apй, esta definiзгo seria definida como 2, se estava em um veнculo seria definida como 1.

pawn Code:
#include <a_npc>
Incluindo as funзхes de SA-MP NPC.

pawn Code:
public OnRecordingPlaybackEnd() StartRecordingPlayback(RECORDING_TYPE, RECORDING);
OnRecordingPlaybackEnd й uma callback incluida na biblioteca NPC, como mostrado a linha acima. Esta linha de cуdigo faz com que o ciclo de gravaзгo, como quando a reproduзгo da gravaзгo terminou, ele inicia a gravaзгo. Ou seja, nunca parando.

pawn Code:
public OnNPCEnterVehicle(vehicleid, seatid) StartRecordingPlayback(RECORDING_TYPE, RECORDING);
Esta й uma outra callback incluida na livraria NPC. Isto irб iniciar a reproduзгo quando o NPC for colocado em um veнculo.

pawn Code:
public OnNPCExitVehicle() StopRecordingPlayback();
Contudo uma outra callback incluida na livaria NPC, isto irб parar a reproduзгo da gravaзгo, se por qualquer razгo, o NPC sai do veнculo.

pawn Code:
public OnNPCSpawn() StartRecordingPlayback(RECORDING_TYPE, RECORDING);
Contudo uma outra callback incluida na livaria NPC, isso irб iniciar a reproduзгo quando o NPC spawnar.

Como vocк pode ver, й tudo muito simples. Agora salve o seu NPC "mini" script como "meunpc.pwn" no diretorio de seu servidor de SA-MP. <Seu diretуrio>/npcmodes/, e compile.
Se for compilado, vocк pode continuar para a ъltima etapa deste tutorial, se nгo conseguir compilar, certifique-se de que vocк atualizou seu SA-MP que inclui as ъltimas versхes da 0.3, e certifique-se de nгo ter perdido qualquer parкnteses ou semi -e-vнrgula. Ainda nгo compilou? Poste aqui mesmo pedindo ajuda.

Conectando seu NPC

Entгo, nуs temos o caminho do arquivo, temos o "mini" peгo script para controlar o NPC diretamente, agora precisamos carregar o NPC em um GameMode ou filterscript!
Feche a mini script "peгo", e carregar o seu modo de jogo ou uma filterscript em PAWNO, Й hora de ser introduzida para a funзгo ConnectNPC, e como o prуprio nome sugere, й utilizado para conectar um NPC ao seu servidor.
Vamos explorar estes parвmetros de funзхes, e ver o que eles significam ...

pawn Code:
ConnectNPC("Sucre","meunpc");
  • "Sucre" - O primeiro parвmetro й o nome do NPC's. Com isso vocк pode detectar diferentes personagens, e executar aзхes diferentes a eles.
  • "meunpc" - Este й o nome do arquivo (sem extensгo), da "mini" script que criamos acima.
Com seus novos conhecimentos da funзгo ConnectNPC, vamos tentar fazer nosso NPC ligar quando seu GameMode ou filterscript carregar.

pawn Code:
public OnGameModeInit()
{
  print("meu gamemode");
  ConnectNPC("MeuPrimeiroNPC","meunpc");
  return 1;
}
Ou, se vocк estб adicionando o NPC em um filterscript ...

pawn Code:
public OnFilterScriptInit()
{
  print("meu filterscript");
  ConnectNPC("MeuPrimeiroNPC","meunpc");
  return 1;
}
Agora, como nуs criamos um caminho em um veнculo, temos de criar um veнculo para o NPC a unidade em torno de pol
OnGameModeInit se parece com isso, agora eu criei um veнculo para o NPC de usar ...
NOTA: Se o NPC nгo estб em um veнculo que vocк pode pular esta etapa.

pawn Code:
new MeuPrimeiroNPCVehicle; //Variavel global
public OnGameModeInit()
{
  print("meu gamemode");
  ConnectNPC("MeuPrimeiroNPC","meunpc");
  MeuPrimeiroNPCVehicle = CreateVehicle(400, 0.0, 0.0, 5.0, 0.0, 3, 3, 5000);
  return 1;
}
Ou, se vocк estб adicionando o NPC em um filterscript ...

pawn Code:
new MeuPrimeiroNPCVehicle; //Variavel global
public OnFilterScriptInit()
{
  print("meu filterscript");
  ConnectNPC("MeuPrimeiroNPC","meunpc");
  MeuPrimeiroNPCVehicle = CreateVehicle(400, 0.0, 0.0, 5.0, 0.0, 3, 3, 5000);
  return 1;
}
Note que a localizaзгo real do veнculo nгo importa, jб que serб teleportado para onde o caminho comeзa a NPC's, quando o caminho comeзa a reproduзгo.

Sу mais uma coisa antes que vocк pode ir no jogo e testar seu primeiro NPC, й preciso colocar o NPC dentro do veнculo que criamos para isso.
Eu fiz isso usando OnPlayerSpawn ...
NOTA: Se o NPC nгo estб em um veнculo vocк pode pular esta etapa.

pawn Code:
public OnPlayerSpawn(playerid)
{
  if(IsPlayerNPC(playerid)) //Verifica se o jogador й um NPC.
  {
    new npcname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, npcname, sizeof(npcname)); //Obtendo o nome do(s) NPC(s).
    if(!strcmp(npcname, "MeuPrimeiroNPC", true)) //Checando se o nome do NPC й MeuPrimeiroNPC
    {
      PutPlayerInVehicle(playerid, MeuPrimeiroNPCVehicle, 0); //Colocar o NPC dentro do veнculo que criamos para isso.
    }
    return 1;
  }
  //Outras coisas para os jogadores normais vai aqui!
  return 1;
}
Se vocк quiser adicionar outro NPC, esta estrutura OnPlayerSpawn й fбcil de modificar, aqui estб um exemplo para 2 NPCs ...

pawn Code:
public OnPlayerSpawn(playerid)
{
  if(IsPlayerNPC(playerid)) //Checa se o jogador й um NPC.
  {
    new npcname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, npcname, sizeof(npcname)); //Obtendo o nome do(s) NPC(s).
    if(!strcmp(npcname, "MeuPrimeiroNPC", true)) //Checando se o nome do NPC й MeuPrimeiroNPC
    {
      PutPlayerInVehicle(playerid, MeuPrimeiroNPCVehicle, 0); //Colocar o NPC dentro do veнculo que criamos para isso.
      return 1;
    }
    if(!strcmp(npcname, "MeuSegundoNPC", true))
    {
      PutPlayerInVehicle(playerid, OutroVehicleID, 0);
      return 1;
    }
    return 1;
  }
  //Outras coisas para os jogadores normais vai aqui!
  return 1;
}
Agora, compile o seu GameMode ou filterscript, e vб no jogo!
Com alguma sorte, vocк vai ver a sua conduзгo NPC em torno do caminho que vocк definiu para ele, parabйns! Vocк fez o seu primeiro NPC!
Nгo funcionou? Poste aqui para ver se podemos solucionar o problema.
Mais alguma pergunta? Novamente, poste neste tуpico!

Problemas comuns

Meu NPC sai do meu servidor depois apуs se conectar.
Seu script estб forзando o NPC fazer o login, ou vocк tem um anti-cheat / kicker ping que estб interferindo com o NPC. Vocк pode adicionar ...
pawn Code:
if(IsPlayerNPC(playerid)) return 1;
... como a primeira linha de qualquer callbacks bots que vai usar, por exemplo, OnPlayerRequestClass ou OnPlayerRequestSpawn. Para uma maneira eficiente e simples de exclusгo de NPCs de loops, confira foreach por Y_Less.

Meu NPC nгo entra em meu servidor para todos
Isto й provavelmente causado por seu servidor que estб com senha.

Eu nгo consigo carregar filterscript npc_record para comeзar
Vocк nгo tem o filterscript, ou ele jб estб carregado. Tente continuar de qualquer maneira.

Meu NPC sу fica no ponto de spawn
Volte, e re-leia a parte OnPlayerSpawn do tutorial.

Meus NPCs estavam normais, mas agora atualizei para RC5 eles nгo funcionam
Hб uma variбvel maxnpc novo server.cfg que o padrгo й 0. Adicione ...
pawn Code:
maxnpc numero_de_npcs_aqui
... no seu server.cfg para corrigir esse problema.

_________________________________________________
[font=Comic Sans MS]Tutorial feito originalmente em inglкs por: kc.
Traduzido por: [SFP]$ucr3[CX] «
Reply
#2

cara ,muito obrigado! salvou minha vida!
Reply
#3

Quote:
Originally Posted by TheDynho
cara ,muito obrigado! salvou minha vida!
Йnoizes
Reply
#4

Muito bom trabalho!

Agora sу nгo faz NPC quem nгo saber ler.
Reply
#5

No meu servidor, se o ligar aqui no computador consigo por os bots a funcionar bem, eles entram no servidor e andam e isso tudo, mas no server k estб mesmo na provedora eles nem sequer entram, alguйm sabe porquк? Existe a probablidade de a host estar a bloquear a entrada?
Reply
#6

tem como bota npc num gamemode jб existente, por exemplo grandlarc?
Reply
#7

Nгo mexi com NPC ainda, mas creio que sгo sу em FS '-'
Reply
#8

cara, tem como colocar num filterscript jб existente entгo?, por que estou apanhando em tentar criar um..
Reply
#9

Quote:
Originally Posted by TheDynho
tem como bota npc num gamemode jб existente, por exemplo grandlarc?
Sim ! alias, o primeiro Gamemode em que adicionei NPCs foi no grandlarc

Quote:
Originally Posted by jonybomb
No meu servidor, se o ligar aqui no computador consigo por os bots a funcionar bem, eles entram no servidor e andam e isso tudo, mas no server k estб mesmo na provedora eles nem sequer entram, alguйm sabe porquк? Existe a probablidade de a host estar a bloquear a entrada?
Veja se no server.cfg de seu Host se existe:

maxnpc e ele й maior que 1.

maxnpc = quantidade mбxima permitida de npc em seu servidor.

Quote:
Originally Posted by TheDynho
cara, tem como colocar num filterscript jб existente entгo?, por que estou apanhando em tentar criar um..
Sim!

dexo ve se encontro o GrandLarceny e o FS com Npc aqui e coloco no paste bin para vocкs terem uma base
Reply
#10

Pessoal tambem podem dar um estudo nisto se nao compreenderem fica aqui link espero que ajude [NPC]Police Force (LS) by Gaglets
Reply
#11

cara, se tu consegui mostra como fazer para botar npc num gamemode/FS jб existente tu me ajudaria demais, mais o que й paste bin?
Reply
#12

Adicionando Bot em um FS (somente o bot)
http://pastebin.com/m38e222e8

Adcionando Bot em um FS (com mais funзхes)
http://pastebin.com/m1964f4bb
FS mal feito e nгo terminado, nem sei por que eu nгo tinha deletado kkk

Nгo achei o Bot no GrandLarceny , mas nгo tem segredo й a mesma coisa, OnPlayerSpawn e OnGameModeInit.

Obs: eu ia editar o tуpico acima, mas nгo consegui, ele dizia "Loading..." e nгo ia para a ediзгo entгo dei Reply.
Reply
#13

Quote:
Quote:
Originally Posted by jonybomb
No meu servidor, se o ligar aqui no computador consigo por os bots a funcionar bem, eles entram no servidor e andam e isso tudo, mas no server k estб mesmo na provedora eles nem sequer entram, alguйm sabe porquк? Existe a probablidade de a host estar a bloquear a entrada?
Veja se no server.cfg de seu Host se existe:

maxnpc e ele й maior que 1.

maxnpc = quantidade mбxima permitida de npc em seu servidor.
sim eu fiz isso, alias, atй coloquei 5 e mesmo assim nao da
Reply
#14

No proprio tutorial ensina como por em um GM, й sу ler com atenзгo.
Reply
#15

Quote:
Originally Posted by jonybomb
Quote:
Quote:
Originally Posted by jonybomb
No meu servidor, se o ligar aqui no computador consigo por os bots a funcionar bem, eles entram no servidor e andam e isso tudo, mas no server k estб mesmo na provedora eles nem sequer entram, alguйm sabe porquк? Existe a probablidade de a host estar a bloquear a entrada?
Veja se no server.cfg de seu Host se existe:

maxnpc e ele й maior que 1.

maxnpc = quantidade mбxima permitida de npc em seu servidor.
sim eu fiz isso, alias, atй coloquei 5 e mesmo assim nao da
Verifique a pasta npcmodes se lб estб os arquivos em .amx de seu npc e dentro da mesma pasta, procure a pasta "recordings" e veja se a gravaзгo do npc estб lб.
Reply
#16

Estб
Reply
#17

Quote:
Originally Posted by [SFP
$ucr3 « ]
No proprio tutorial ensina como por em um GM, й sу ler com atenзгo.
Isso msm! Belo TUTO amigo!
Reply
#18

[b]Boa Sucre, Jimmy Hernandez aqui.
Reply
#19

Quote:
Originally Posted by jonybomb
Estб
Pegue seu filterscript e o arquivo na pasta NPCMODES e poste no pastebin para verificar-mos e tentar lhe ajudar.

Quote:
Originally Posted by LeoH
Quote:
Originally Posted by [SFP
$ucr3 « ]
No proprio tutorial ensina como por em um GM, й sу ler com atenзгo.
Isso msm! Belo TUTO amigo!
Thx.

Quote:
Originally Posted by CyNiC_
[b]Boa Sucre, Jimmy Hernandez aqui.
V4SL3W M4N0L0!!1!!!11!!11
Reply
#20

Tem aqui o filterscript http://pastebin.com/m705fd3f9

Aqui estб o script da pasta npcmodes http://pastebin.com/m63c615d8
Reply


Forum Jump:


Users browsing this thread: 4 Guest(s)