Crear NPC (bots) + sus funciones. -
adri1 - 17.10.2013
En este tutorial vamos a aprender a como realizar NPCs (bots) que parezcan que tenga vida propia.
- Crear bot
- Como ponerlo en el servidor
- Funciones y callbacks para NPCs
Crear bot
їQuй necesitaremos para grabarlo?
Nota: Tambiйn podemos usar otro grabador de NPC, pero este es el que viene por defecto en SA:MP
їComo grabar?
- Cargamos el filterscript:
Aсadimos 'npc_record' a la lнnea 'filterscripts' de nuestro server.cfg y guardamos...
- Abrimos nuestro servidor, entramos....
Una vez dentro, deberemos de logearnos como administrador RCON (contraseсa en server.cfg) con el siguiente comando: /rcon login contraseсa
- Una vez ya logeados como admin RCON... podremos ejecutar los cmds siguientes:
/vrecord [nombre]- [nombre] se refiere al nombre del archivo que tendremos posteriormente (.rec)
- /vrecord servirб para grabar en vehнculo, es decir, que si queremos crear un NPC/bot que controle un vehнculo, deberemos subirnos a uno, y empezar a grabar desde el vehнculo con este comando.
Nota: Para el comando /vrecord se necesitarб estar en un vehнculo.
/ofrecord [nombre]- [nombre] se refiere al nombre del archivo que tendremos posteriormente (.rec)
- /ofrecord servirб para grabar a pie, es decir para correr, saltar, andar, hacer animaciones, todo lo que hagamos serб reproducido despuйs.
/stoprecord [nombre]- Cuando hayamos terminado de grabar, usaremos este comando, para paralizar la grabaciуn y obtener asн el archivo .rec.
Explicaciуn: para crear un bot, necesitaremos grabarlo, lo que haremos serб ejecutar uno de esos 2 comandos (depende de lo que queramos), y entonces estaremos grabando, desde el momento que ejecutamos el comando, hasta el momento que paralizamos la grabaciуn (/stoprecord), el recorrido, animaciones, etc serбn grabados en un archivo .rec para despuйs ser reproducido como si fuera un jugador normal.
Como ponerlo en el servidor...
Una vez ya grabado, saldremos del servidor e iremos a la carpeta '
scriptfiles' del servidor en el que hemos grabado.
Allн encontraremos un archivo con el nombre que introducimos anteriormente, con la extensiуn .rec
Copiamos ese archivo a la carpeta... npcmodes/recordings/
Una vez allн abrimos pawno.exe (.../pawno/pawno.exe), y daremos crearemos un nuevo archivo.
Borramos todo, y empezamos a crearlo...
pawn Код:
#include <a_npc>
main(){}
#define REC_NAME "test" // Aquн deberбn de poner el nombre del archivo .rec
#define NPC_TYPE 0 // 0 serб a pie, cambiamos a 1 si grabemos en vehнculo.
public OnRecordingPlaybackEnd() //Cuando la reproducciуn del bot ha terminado..
{
StartRecordingPlayback(NPC_TYPE, REC_NAME); //Volvemos a empezarla...
return 1;
}
#if NPC_TYPE == 0
public OnNPCSpawn() //Cuando el bot spawnea
{
StartRecordingPlayback(NPC_TYPE, REC_NAME); //Comenzamos la reproducciуn del bot.
return 1;
}
#else
public OnNPCEnterVehicle(vehicleid, seatid) //Cuando el bot entra a un vehнculo
{
StartRecordingPlayback(NPC_TYPE, REC_NAME);
return 1;
}
public OnNPCExitVehicle() //Cuando el bot sale de un vehнculo
{
StopRecordingPlayback();
return 1;
}
#endif
Bien, ahora guardamos este .pwn en .../npcmodes con cualquier nombre (despuйs serб usado).
Bien, una vez compilado y guardado, abrimos el FS/GM donde haremos que el NPC comienze.
Ahora, conectaremos el NPC al servidor:
pawn Код:
new NPC_Veh; //Solo si nuestro NPC fue grabado en un vehнculo.
public OnGameModeInit()
{
ConnectNPC("nombre", "script"); //en nombre se pone el nombre del NPC, y en script el nombre del .amx/.pwn que creemos anteriormente
NPC_Veh = CreateVehicle(400, 0.0, 0.0, 0.0, 0.0, -1, -1, 5000); //Si el NPC va en vehнculo, crearemos el vehнculo del NPC...
return 1;
}
Una vez que tengamos esto, nuestro NPC, ya se conectarб, pero aъn no aparecerб... para evitar registros, diбlogos etc, haremos los siguiente: en todas las siguientes callbacks pondremos arriba:
pawn Код:
if(IsPlayerNPC(playerid)) return 1;
- OnPlayerConnect
- OnPlayerDisconnect
- OnPlayerRequestClass
- OnPlayerRequestSpawn
Como en este ejemplo:
pawn Код:
public OnPlayerConnect(playerid)
{
if(IsPlayerNPC(playerid)) return 1;
//siempre poner arriba del todo, antes de las demбs funciones
return 1;
}
Ese cуdigo harб que si el jugador es un NPC, no se cumpla las funciones de OnPlayerConnect, para asн evitar registros etc.
Ahora nos dirigiremos a OnPlayerSpawn
pawn Код:
public OnPlayerSpawn(playerid)
{
if(IsPlayerNPC(playerid))
{
new npcname[24];
GetPlayerName(playerid, npcname, 24);
if(!strcmp(npcname, "nombre", true)) //En nombre el name del NPC
{
//Aquн podremos darle demбs funciones, como SetPlayerSkin, etc.
PutPlayerInVehicle(playerid, NPC_Veh, 0); // Si grabemos el NPC dentro de un vehнculo, lo introducimos a el.
}
return 1;
}
//Lo otro para players normales va aquн!
return 1;
}
Compilamos, y ya deberнa de empezar nuestro NPC.
Funciones y callbacks para NPCs
Las siguientes funciones y callbacks solo funcionarбn si las introducimos en el .pwn del NPC (.../npcmodes/name.pwn)
Funciones:
ConnectNPC(name[], script[])- name[] : Nombre del NPC
- script[] : Nombre del archivo .amx en /npcmodes
GetDistanceFromMeToPoint(Float:x, Float:y, Float:z, Float:Distance)- Obtiene la distancia que hay entre el NPC y un punto determinado.
- Float:x : Coordenada X
- Float:y : Coordenada Y
- Float:z : Coordenada Z
- Float:Distance : Donde el valor serб devuelto
GetMyFacingAngle(Float:Angle)- Obtiene el бngulo del NPC.
- Float:Angle : Donde el valor serб devuelto
GetMyPos(Float:x, Float:y, Float:z)- Obtiene la posiciуn del NPC.
- Float:x : Donde el valor X serб devuelto
- Float:y : Donde el valor Y serб devuelto
- Float:z : Donde el valor Z serб devuelto
PauseRecordingPlayback()- Sirve para pausar la reproducciуn del NPC.
- Esta funciуn no tiene parбmetros
ResumeRecordingPlayback()- Sirve para reanudar la reproducciуn del NPC, si antes habнa sido pausada.
- Esta funciуn no tiene parбmetros
SendChat(msg[])- Envнa un mensaje como si el NPC lo hubiera escrito.
SendCommand(commandtext[])- Esta funciуn hace que el NPC ejecute un comando.
- commandtext[] : El comando.
SetMyFacingAngle(Float:ang)- Esta funciуn cambia el бngulo del NPC.
- Float:ang : El бngulo nuevo.
SetMyPos(Float:x, Float:y, Float:z)- Cambia las coordenadas al NPC.
- Float:x : Coordenada X
- Float:y : Coordenada Y
- Float:z : Coordenada Z
StartRecordingPlayback(playbacktype, recordname[])- Comienza a reproducirse el NPC.
- playbacktype : el tipo de grabaciуn
- recordname[] : Nombre del archivo .rec
StopRecordingPlayback()- Paraliza por completo el NPC.
- Esta funciуn no tiene parбmetros.
Otro
Como forzar a un NPC reproducir una animaciуn.
Tambiйn editar '
maxnpc' en server.cfg al nъmero mбximo de NPCs que quieran conectar, ya que si no el NPC no podrб conectar. (Gracias a
EnzoMetlc por recordarmelo)
Saludos y espero que os haya servido!
Respuesta: Crear NPC (bots) + sus funciones. -
Swedky - 17.10.2013
Buen tuto.
Pero te faltу mencionar que no deben tener el 'maxnpc' en el "server.cfg" en "0".
Por que ese pequeсo detalle me cabreу por 4 meses ¬¬.
Saludos.
Re: Crear NPC (bots) + sus funciones. -
PT - 17.10.2013
Muy bueno
+rep
AW: Crear NPC (bots) + sus funciones. -
ipsBruno - 17.10.2013
Muy bueno
adri1!
He creado un "creador de peatones"
https://sampforum.blast.hk/showthread.php?tid=470399
Saludos.
Respuesta: Crear NPC (bots) + sus funciones. -
Leososa - 19.10.2013
Adri1, impecable! Lo probarй! .
Una pregunta їSi quiero crear + de 1 NPC, cуmo lo empleo?їHago los mismo dos veces?
Respuesta: Crear NPC (bots) + sus funciones. -
RafaelZam - 22.10.2013
buen tuto C: +Rep
Respuesta: Crear NPC (bots) + sus funciones. -
Swedky - 23.10.2013
Encontrй un pequeсo error en el post:
Quote:
Originally Posted by adri1
GetMyPos(Float:PosX, Float:PosY, Float:PosZ)- Obtiene el бngulo del NPC.
- Float:PosX: Donde el valor PosX serб devuelto
- Float:PosY: Donde el valor PosY serб devuelto
- Float:PosZ: Donde el valor PosZ serб devuelto
|
No lo creo e_e...
Respuesta: Crear NPC (bots) + sus funciones. -
adri1 - 23.10.2013
Quote:
Originally Posted by EnzoMetlc
Encontrй un pequeсo error en el post:
No lo creo e_e...
|
Gracias, ya lo edito, y de paso dejo un ejemplo de que se puede hacer con esto:
[ame="http://www.youtube.com/watch?v=uBrsdBh3Ko8"]*******[/ame]
Respuesta: Crear NPC (bots) + sus funciones. -
adrianxd - 23.10.2013

exelente casi igual que el juego
Re: Crear NPC (bots) + sus funciones. -
asderwi - 08.11.2015
Quote:
Originally Posted by adri1
En este tutorial vamos a aprender a como realizar NPCs (bots) que parezcan que tenga vida propia.
- Crear bot
- Como ponerlo en el servidor
- Funciones y callbacks para NPCs
Crear bot
їQuй necesitaremos para grabarlo? Nota: Tambiйn podemos usar otro grabador de NPC, pero este es el que viene por defecto en SA:MP
їComo grabar? - Cargamos el filterscript:
Aсadimos 'npc_record' a la lнnea 'filterscripts' de nuestro server.cfg y guardamos...
- Abrimos nuestro servidor, entramos....
Una vez dentro, deberemos de logearnos como administrador RCON (contraseсa en server.cfg) con el siguiente comando: /rcon login contraseсa
- Una vez ya logeados como admin RCON... podremos ejecutar los cmds siguientes:
/vrecord [nombre]- [nombre] se refiere al nombre del archivo que tendremos posteriormente (.rec)
- /vrecord servirб para grabar en vehнculo, es decir, que si queremos crear un NPC/bot que controle un vehнculo, deberemos subirnos a uno, y empezar a grabar desde el vehнculo con este comando.
Nota: Para el comando /vrecord se necesitarб estar en un vehнculo.
/ofrecord [nombre]- [nombre] se refiere al nombre del archivo que tendremos posteriormente (.rec)
- /ofrecord servirб para grabar a pie, es decir para correr, saltar, andar, hacer animaciones, todo lo que hagamos serб reproducido despuйs.
/stoprecord [nombre]- Cuando hayamos terminado de grabar, usaremos este comando, para paralizar la grabaciуn y obtener asн el archivo .rec.
Explicaciуn: para crear un bot, necesitaremos grabarlo, lo que haremos serб ejecutar uno de esos 2 comandos (depende de lo que queramos), y entonces estaremos grabando, desde el momento que ejecutamos el comando, hasta el momento que paralizamos la grabaciуn (/stoprecord), el recorrido, animaciones, etc serбn grabados en un archivo .rec para despuйs ser reproducido como si fuera un jugador normal.
Como ponerlo en el servidor...
Una vez ya grabado, saldremos del servidor e iremos a la carpeta ' scriptfiles' del servidor en el que hemos grabado.
Allн encontraremos un archivo con el nombre que introducimos anteriormente, con la extensiуn .rec
Copiamos ese archivo a la carpeta... npcmodes/recordings/
Una vez allн abrimos pawno.exe (.../pawno/pawno.exe), y daremos crearemos un nuevo archivo.
Borramos todo, y empezamos a crearlo...
pawn Код:
#include <a_npc> main(){}
#define REC_NAME "test" // Aquн deberбn de poner el nombre del archivo .rec #define NPC_TYPE 0 // 0 serб a pie, cambiamos a 1 si grabemos en vehнculo.
public OnRecordingPlaybackEnd() //Cuando la reproducciуn del bot ha terminado.. { StartRecordingPlayback(NPC_TYPE, REC_NAME); //Volvemos a empezarla... return 1; }
#if NPC_TYPE == 0
public OnNPCSpawn() //Cuando el bot spawnea { StartRecordingPlayback(NPC_TYPE, REC_NAME); //Comenzamos la reproducciуn del bot. return 1; }
#else
public OnNPCEnterVehicle(vehicleid, seatid) //Cuando el bot entra a un vehнculo { StartRecordingPlayback(NPC_TYPE, REC_NAME); return 1; }
public OnNPCExitVehicle() //Cuando el bot sale de un vehнculo { StopRecordingPlayback(); return 1; } #endif
Bien, ahora guardamos este .pwn en .../npcmodes con cualquier nombre (despuйs serб usado).
Bien, una vez compilado y guardado, abrimos el FS/GM donde haremos que el NPC comienze.
Ahora, conectaremos el NPC al servidor:
pawn Код:
new NPC_Veh; //Solo si nuestro NPC fue grabado en un vehнculo.
public OnGameModeInit() { ConnectNPC("nombre", "script"); //en nombre se pone el nombre del NPC, y en script el nombre del .amx/.pwn que creemos anteriormente NPC_Veh = CreateVehicle(400, 0.0, 0.0, 0.0, 0.0, -1, -1, 5000); //Si el NPC va en vehнculo, crearemos el vehнculo del NPC... return 1; }
Una vez que tengamos esto, nuestro NPC, ya se conectarб, pero aъn no aparecerб... para evitar registros, diбlogos etc, haremos los siguiente: en todas las siguientes callbacks pondremos arriba:
pawn Код:
if(IsPlayerNPC(playerid)) return 1;
- OnPlayerConnect
- OnPlayerDisconnect
- OnPlayerRequestClass
- OnPlayerRequestSpawn
Como en este ejemplo:
pawn Код:
public OnPlayerConnect(playerid) { if(IsPlayerNPC(playerid)) return 1; //siempre poner arriba del todo, antes de las demбs funciones return 1; }
Ese cуdigo harб que si el jugador es un NPC, no se cumpla las funciones de OnPlayerConnect, para asн evitar registros etc.
Ahora nos dirigiremos a OnPlayerSpawn
pawn Код:
public OnPlayerSpawn(playerid) { if(IsPlayerNPC(playerid)) { new npcname[24]; GetPlayerName(playerid, npcname, 24); if(!strcmp(npcname, "nombre", true)) //En nombre el name del NPC { //Aquн podremos darle demбs funciones, como SetPlayerSkin, etc. PutPlayerInVehicle(playerid, NPC_Veh, 0); // Si grabemos el NPC dentro de un vehнculo, lo introducimos a el. } return 1; } //Lo otro para players normales va aquн! return 1; }
Compilamos, y ya deberнa de empezar nuestro NPC.
Funciones y callbacks para NPCs
Las siguientes funciones y callbacks solo funcionarбn si las introducimos en el .pwn del NPC (.../npcmodes/name.pwn)
Funciones:
ConnectNPC(name[], script[])- name[] : Nombre del NPC
- script[] : Nombre del archivo .amx en /npcmodes
GetDistanceFromMeToPoint(Float , Float:y, Float:z, Float istance)- Obtiene la distancia que hay entre el NPC y un punto determinado.
- Float
: Coordenada X
- Float:y : Coordenada Y
- Float:z : Coordenada Z
- Float
istance : Donde el valor serб devuelto
GetMyFacingAngle(Float:Angle)- Obtiene el бngulo del NPC.
- Float:Angle : Donde el valor serб devuelto
GetMyPos(Float , Float:y, Float:z)- Obtiene la posiciуn del NPC.
- Float
: Donde el valor X serб devuelto
- Float:y : Donde el valor Y serб devuelto
- Float:z : Donde el valor Z serб devuelto
PauseRecordingPlayback()- Sirve para pausar la reproducciуn del NPC.
- Esta funciуn no tiene parбmetros
ResumeRecordingPlayback()- Sirve para reanudar la reproducciуn del NPC, si antes habнa sido pausada.
- Esta funciуn no tiene parбmetros
SendChat(msg[])- Envнa un mensaje como si el NPC lo hubiera escrito.
SendCommand(commandtext[])- Esta funciуn hace que el NPC ejecute un comando.
- commandtext[] : El comando.
SetMyFacingAngle(Float:ang)- Esta funciуn cambia el бngulo del NPC.
- Float:ang : El бngulo nuevo.
SetMyPos(Float , Float:y, Float:z)- Cambia las coordenadas al NPC.
- Float
: Coordenada X
- Float:y : Coordenada Y
- Float:z : Coordenada Z
StartRecordingPlayback(playbacktype, recordname[])- Comienza a reproducirse el NPC.
- playbacktype : el tipo de grabaciуn
- recordname[] : Nombre del archivo .rec
StopRecordingPlayback()- Paraliza por completo el NPC.
- Esta funciуn no tiene parбmetros.
Otro
Como forzar a un NPC reproducir una animaciуn.
Tambiйn editar ' maxnpc' en server.cfg al nъmero mбximo de NPCs que quieran conectar, ya que si no el NPC no podrб conectar. (Gracias a EnzoMetlc por recordarmelo)
Saludos y espero que os haya servido!
|
bonito ahora funcionaria mejor si cambias y colocas esto pollito ve
#define NPC_TYPE 2
#if NPC_TYPE == 2