21.11.2009, 20:33
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 ...
Isso pode parecer confuso, por isso agora explicarei isso linha por linha.
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".
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.
Incluindo as funзхes de SA-MP NPC.
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.
Esta й uma outra callback incluida na livraria NPC. Isto irб iniciar a reproduзгo quando o NPC for colocado em um veнculo.
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.
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 ...
Ou, se vocк estб adicionando o NPC em um filterscript ...
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.
Ou, se vocк estб adicionando o NPC em um filterscript ...
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.
Se vocк quiser adicionar outro NPC, esta estrutura OnPlayerSpawn й fбcil de modificar, aqui estб um exemplo para 2 NPCs ...
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 ...
... 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 ...
... 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] «
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
pawn Code:
#define RECORDING "meunpc" //Este й o nome do seu arquivo de gravaзгo, sem a extenзгo(.rec).
pawn Code:
#define RECORDING_TYPE 1 //1 para gravaзхes em veнculo e 2 para gravaзхes apй.
pawn Code:
#include <a_npc>
pawn Code:
public OnRecordingPlaybackEnd() StartRecordingPlayback(RECORDING_TYPE, RECORDING);
pawn Code:
public OnNPCEnterVehicle(vehicleid, seatid) StartRecordingPlayback(RECORDING_TYPE, RECORDING);
pawn Code:
public OnNPCExitVehicle() StopRecordingPlayback();
pawn Code:
public OnNPCSpawn() StartRecordingPlayback(RECORDING_TYPE, RECORDING);
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.
pawn Code:
public OnGameModeInit()
{
print("meu gamemode");
ConnectNPC("MeuPrimeiroNPC","meunpc");
return 1;
}
pawn Code:
public OnFilterScriptInit()
{
print("meu filterscript");
ConnectNPC("MeuPrimeiroNPC","meunpc");
return 1;
}
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;
}
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;
}
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;
}
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;
}
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;
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
_________________________________________________
[font=Comic Sans MS]Tutorial feito originalmente em inglкs por: kc.
Traduzido por: [SFP]$ucr3[CX] «