Novidades

05 janeiro 2010

Stakline

Tutorial Criando um novo NPC

Este é obrigado a ser um tema quente para perguntas, então vou passar por tudo que eu tenho trabalhado para fora como fazer com NPCs como um tutorial.

Gravar um arquivo de reprodução


Primeiro de tudo prescisamos fazer um arquivo de gravação então vamos ligar o servidor e logar na RCON.
Agora, existem 3 comandos de gravação principal no filterscript npc_record ..

* / vrecord - Inicia a gravação de um caminho de veículo para o nome do arquivo especificado.
* / ofrecord - Inicia a gravação de um pé no caminho para o arquivo especificado.
* / stoprecord - pára de gravar tanto do veículo e em trajetos pé.



Neste tutorial, vamos estar fazendo um trajeto do veículo, assim que entrar em um veículo, e digite / vrecord meunpc (você deve estar conectado em rcon) para iniciar a gravação.

Ande um pouco com seu veiculo no trageto que você quiser que o NPC faça, e quando tiver terminado digite /stoprecord.

Feche o jogo, e vá para a pasta scriptfiles de seu servidor, deve haver um arquivo chamado meunpc.rec. Mova o arquivo para / npcmodes/ recordings/
Feito? Ok, ótimo! Você já gravou um caminho para o NPC, e mudou-se para o diretório necessário.


Controlar 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 Código:

# define GRAVAÇÃO "mynpc" / / Este é o nome de sua gravação sem a extensão.
# define RECORDING_TYPE 1 / / 1 no veículo e 2 para a pé.
 

# include
main () ()
OnRecordingPlaybackEnd pública () StartRecordingPlayback (RECORDING_TYPE, GRAVAÇÃO);

# se RECORDING_TYPE == 1
OnNPCEnterVehicle pública (vehicleid, seatid) StartRecordingPlayback (RECORDING_TYPE, GRAVAÇÃO);
OnNPCExitVehicle pública () StopRecordingPlayback ();
# else
OnNPCSpawn pública () StartRecordingPlayback (RECORDING_TYPE, GRAVAÇÃO);
# endif



Isso pode parecer confuso, por isso vou agora passar por isso linha por linha.


PAWN Código:

# define GRAVAÇÃO "mynpc" / / Este é o nome de sua gravação sem a extensão.


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 mynpc, e seu arquivo foi mynpc.rec assim que entramos no "mynpc"


PAWN Código:

# define RECORDING_TYPE 1 / / 1 no veículo e 2 para a pé.


Como diz o comentário de novo, este é o tipo de gravação. Se o seu NPC está no pé, esta definição seria definida a 2, se estava em um veículo que seria definida como 1.


PAWN Código:

# include

Incluindo as funções de SA-MP NPC.

PAWN Código:

OnRecordingPlaybackEnd pública () StartRecordingPlayback (RECORDING_TYPE, GRAVAÇÃO);


OnRecordingPlaybackEnd é uma chamada de retorno incluídos na biblioteca NPC incluída 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.


PAWN Código:

OnNPCEnterVehicle pública (vehicleid, seatid) StartRecordingPlayback (RECORDING_TYPE, GRAVAÇÃO);


Esta é uma outra chamada incluídos na biblioteca de NPC. Isto irá iniciar a gravação quando o NPC foi colocado em um veículo.


PAWN Código:

OnNPCExitVehicle pública () StopRecordingPlayback ();


Contudo uma outra chamada incluídos na biblioteca de NPC, isto irá parar a reprodução da gravação, se por qualquer razão, o NPC sai do veículo.


PAWN Código:

OnNPCSpawn pública () StartRecordingPlayback (RECORDING_TYPE, GRAVAÇÃO);


Contudo uma outra chamada incluídos na biblioteca de NPC, isso irá iniciar a reprodução quando o NPC spawns.



Como você pode ver, é tudo muito simples. Agora salve o seu NPC "mini" script como "mynpc.pwn" no servidor SA-MP / npcmodes diretório /, e compilar.
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 de 0,3, e certifique-se de não ter perdido qualquer parênteses ou semi -e-vírgula. Ainda não vai compilar? Postar uma resposta.




Ligar o 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.
Permite explorar esta parâmetros de funções, eo que eles significam ...



PAWN Código:

ConnectNPC ( "Dave", "mynpc");


* "Dave" - O primeiro parâmetro é o nome do NPC's. Com isso você pode detectar diferentes personagens, e executar ações diferentes a eles.
* "Mynpc" - 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 sua GameMode ou cargas filterscript.


PAWN Código:

OnGameModeInit pública ()
(
print ( "o meu modo de jogo");
ConnectNPC ( "MyFirstNPC", "mynpc");
return 1;
)



Ou, se você está adicionando o NPC em um filterscript ...


PAWN Código:

OnFilterScriptInit pública ()
(
print ( "meu filterscript");
ConnectNPC ( "MyFirstNPC", "mynpc");
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 Código:

MyFirstNPCVehicle novo; / variável / Global!
OnGameModeInit pública ()
(
print ( "o meu modo de jogo");
ConnectNPC ( "MyFirstNPC", "mynpc");
MyFirstNPCVehicle = 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 Código:


MyFirstNPCVehicle novo; / variável / Global!
OnFilterScriptInit pública ()
(
print ( "meu filterscript");
ConnectNPC ( "MyFirstNPC", "mynpc");
MyFirstNPCVehicle = 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 que você pode pular esta etapa. 


PAWN Código:

OnPlayerSpawn pública (playerid)
(
if (IsPlayerNPC (playerid)) / / Verifica se o jogador que só é gerado um NPC.
(
npcname novas [MAX_PLAYER_NAME];
GetPlayerName (playerid, npcname, sizeof npcname ()); / / Obtendo o nome do NPC's.
if (strcmp! (npcname ", MyFirstNPC", true)) / / Verificar se o nome do NPC é MyFirstNPC
(
PutPlayerInVehicle (playerid, MyFirstNPCVehicle, 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 Código:

OnPlayerSpawn pública (playerid)
(
if (IsPlayerNPC (playerid)) / / Verifica se o jogador que só é gerado um NPC.
(
npcname novas [MAX_PLAYER_NAME];
GetPlayerName (playerid, npcname, sizeof npcname ()); / / Obtendo o nome do NPC's.
if (strcmp! (npcname ", MyFirstNPC", true)) / / Verificar se o nome do NPC é MyFirstNPC
(
PutPlayerInVehicle (playerid, MyFirstNPCVehicle, 0); / / Colocar o NPC dentro do veículo que criamos para isso.
return 1;
)
if (strcmp! (npcname ", MySecondNPC", true))
(
PutPlayerInVehicle (playerid, AnotherVehicleID, 0);
return 1;
)
return 1;
)
/ / Outras coisas para os jogadores normais vai aqui!
return 1;
)



Agora, compile o seu modo de jogo ou filterscript, e ir 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? Post aqui para ver se podemos solucionar o problema.
Mais alguma pergunta? Novamente, post neste thread!


Problemas comuns


Meu NPC sai do meu servidor depois se junta
Seu script está forçando o NPC fazer o login, ou você tem um anti-cheat / kicker ping que está a interferir com o NPC. Você pode adicionar ... 

PAWN Código:

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 aderir meu servidor em todos os
Isto é provavelmente causado por seu servidor que está sendo passworded.



Eu não posso começar a filterscript npc_record para carregar
Você não quer ter o filterscript, ou ele já está carregado. Tentar continuar de qualquer maneira.

Meu NPC só fica na spawnpoint
Voltar, e voltar a fazer parte OnPlayerSpawn do tutorial.

Meus NPCs usado para se conectar, mas agora eu tenho atualizado para> = RC5 eles não.
Há uma variável maxnpc novo server.cfg que o padrão é 0. Adicionar ...

Código:

number_goes_here maxnpc


... no seu server.cfg para corrigir esse problema.

Fonte: http://forum.sa-mp.com/index.php?topic=119947.0
Traduzido Pelo google tradutor!


Subscribe to this Blog via Email :