[Tutorial] Como crear tu NPC [Por kc, Traducido por mi]
#1

Bueno gente, este tutorial esta en la parte inglesa, capas muchos no entienden un buen ingles y quieren saber como crearlo, yo hoy tradusco este tutorial para ustedes.


Grabar el NPC a un archivo.

Lo primero de todo sera grabar el movimiento del NPC a un archivo. Arranca un servidor (LVDM recomendado, pero puedes usar cualquiera.). Pon el FS npc_record.amx (que viene con SA:MP) y Loguate como administrador RCON en tu server y pone /Rcon loadfs npc_record...

Ahora tendremos 3 simples comandos:

/vrecord <Nombre de archivo> - Con esto empezaremos a grabar el NPC en un vehiculo.
/ofrecord <Nombre de Archivo> - Con esto empezaremos a grabar el NPC a Pie
/stoprecord . Con esto paramos de grabar un NPC

En este tutorial vamos a grabar un NPC desde un vehiculo. Bueno, entonses te metes a un vehiculo y empiezas a grabar con /vrecord TuNPC, (Nota: Tienes que estar loguado Rcon)

Maneja por donde quieres que valla tu NPC y cuando termines usa /Stoprecord

Cierra el juego o minimiza y ve al scriptfiles de tu server (TuServer/scriptfiles) y encontraras TuNPC.rec.
Movelo a TuServer/npcmodes/recordings/.
Listo? Entonses ya tienes tu NPC Grabado correctamente y hiciste el paso 1 bien!


Paso 2:

Controlando al NPC

Seguramente te diste cuenta que hay muchos .pwn en la carpeta npcmodes. Estos son "mini" scripts que controlan al npc.
Ahora vamos a crear el nuestro!
Empezamos un archivo nuevo en pawno, y lo del blank script lo remplazamos por esto:


pawn Код:
#define RECORDING "TuNPC" //Este es el nombre del archivo que grabaron in game
#define RECORDING_TYPE 1 //1 = en vehiculo 2= caminando

#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
Eso parece confuso para muchos... vamos a explicar linea por linea.

pawn Код:
#define RECORDING "TuNPC" //este TuNPC va a ser el nombre del la grabacion que le diste a tu NPC
Como dice el comentario, tienes que poner el nombre del NPC que grabaste in-game y recuerda que tiene que estar en Tu_Server/npcmodes/records


pawn Код:
#define RECORDING_TYPE 1 //Si esta en 1 quiere decir que el NPC esta en un auto, de lo contrario estaria en 2 y significaria que este a pie.
pawn Код:
#include <a_npc>
Este es el include que tiene las funciones de los NPC! Importantisimo.

pawn Код:
public OnRecordingPlaybackEnd() StartRecordingPlayback(RECORDING_TYPE, RECORDING);
OnRecordingPlaybackEnd es la callback que incluye el .inc de los npc. Este codigo de la linea hace grabando un loop, haciendo que cuando termine la grabacion del NPC, empieze de nuevo.


pawn Код:
public OnNPCEnterVehicle(vehicleid, seatid) StartRecordingPlayback(RECORDING_TYPE, RECORDING);
pawn Код:
public OnNPCEnterVehicle(vehicleid, seatid) StartRecordingPlayback(RECORDING_TYPE, RECORDING);
Esta callback tambien esta incluida en la library del NPC. Quiere decir que empezara a NPC cuando este en un vehiculo.

pawn Код:
public OnNPCExitVehicle() StopRecordingPlayback();
Con esta callback el NPC parara cuando baja de un vehiculo.

pawn Код:
public OnNPCSpawn() StartRecordingPlayback(RECORDING_TYPE, RECORDING);
Esto quiere decir empezara cuando Spawnee.


Ahora, savea este archivo en TuServer/npcmodes con el nombre que quieras ( En este tutorial lo voy a llamar "minpc", para que no se pierdan) , en este caso les hare el ejemplo de "minpc" y compila. Si hiciste todo bien tendria que compilar perfecto sin ningun error.
Terminamos el segundo paso!


Paso 3


Conectar tu NPC



Listo, tenemos la grabacion del NPC, y las funciones del NPC, ahora lo que falta es meterlo al gamemode o FS!

Cerra el pawnn con el nombre de "minpc" (O con el nombre que te guste) que habiamos abierto (Si compilo bien) y abre tu GM o FS con pawno. Es momento de introducir la funcion ConnectNPC, y como es el nombre que se usa para conectar el NPC al server. A continuaciуn se explicaran las funciones:


pawn Код:
ConnectNPC("Dave","TuNPC");
"Dave" - Es el parametro del nombre del NPC, con esto podes diferenciar NPC's de otros y aplicarles difentes funciones a cada uno.

minpc - Este es el nombre del archivo .pwn que pusimos en la carpeta TuServer/npcmodes (Ponganlo sin la extencion .pwn)

Y les quedaria algo asн:


pawn Код:
public OnGameModeInit()
{
  //print("my gamemode"); // No es nesesario.
  ConnectNPC("MiPrimerNPC","minpc");
  return 1;
}
O... Si queres ponerlo en un FS usa:

pawn Код:
public OnFilterScriptInit()
{
  // print("my filterscript");//Inesesario
  ConnectNPC("MiPrimerNPC","minpc");
  return 1;
}
Ahora, como creamos el NPC en un auto... tendremos que crear el vehiculo para que ande el NPC.

NOTA: Si tu NPC no esta en un vehiculo, salta este paso.

pawn Код:
new MiPrimerNPCVeh; //Global variable!
public OnGameModeInit()
{
  //print("Mi GM");//Inesesario
  ConnectNPC("MiPrimerNPC","minpc");
  MiPrimerNPCVeh= CreateVehicle(400, 0.0, 0.0, 5.0, 0.0, 3, 3, 5000);
  return 1;
}
O, si lo estas agregando a un FS:

pawn Код:
new MiPrimerNPCVeh; //Global variable!
public OnFilterScriptInit()
{
  print("Mi FS");
  ConnectNPC("MiPrimerNPC","minpc");
  MiPrimerNPCVeh = CreateVehicle(400, 0.0, 0.0, 5.0, 0.0, 3, 3, 5000);
  return 1;
}
Nota: No importa donde pongas el vehiculo, el NPC estara en ese vehiculo.


Listo, ya casi todo esta echo, solo nesesitamos meter al NPC al vehiculo.
Ahora solo tenemos que poner el NPC con este codigo:


pawn Код:
public OnPlayerSpawn(playerid)
{
  if(IsPlayerNPC(playerid)) //Checkea si el jugador es NPC
  {
    new npcname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, npcname, sizeof(npcname)); //Obtiene el nombre del NPC.
    if(!strcmp(npcname, "MiPrimerNPC", true)) //Chequea si el nombre del NPC es Correcto.
    {
      PutPlayerInVehicle(playerid, MiPrimerNPCVeh, 0); //Pone al NPC en su respectivo automovil.
    }
    return 1;
  }
  //Lo otro para players normales va aquн!
  return 1;
}

Y si quieres poner otro NPC es Asн:

pawn Код:
pawn Cуdigo:
public OnPlayerSpawn(playerid)
{
  if(IsPlayerNPC(playerid)) //Checkea si el jugador spawneo como NPC
  {
    new npcname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, npcname, sizeof(npcname)); //Obtenemos el Nombre del NPC
    if(!strcmp(npcname, "MiPrimerNPC", true)) //Chequea si el Nombre del NPC es el correcto
    {
      PutPlayerInVehicle(playerid, MiPrimerNPCVeh, 0); //Pone al NPC En su auto
      return 1;
    }
    if(!strcmp(npcname, "MiSegundoNPC", true))
    {
      PutPlayerInVehicle(playerid, MiSegundoNPCVeh, 0);
      return 1;
    }
    return 1;
  }
  //Players normales
  return 1;
}
Listo!. Ahora compila tu GM o FS y si hiciste todo bien, no tendras errores.
Ve al juego y pruebalo.


Problemas Comunes/Frecuentes


Mi NPC No entra del Todo al Server

Sencillo, el NPC no puede loguarse, por lo general. Se soluciona poniendo esto en OnPlayerConnect:

pawn Код:
if(IsPlayerNPC(playerid)) return 1;

Mi NPC se queda quieto en el spawn.
Probablemente hiciste algo mas del paso de OnPlayerSpawn. Hazlo denuevo!
o copia lo de onplayerspawn, tambien a onplayerconnect



*Habia otros problemas pero algunos no les veia sentido, si tienen uno por favor decirlo.


*Perdon si ven algo de la traduccion mal, es que lo traduci YO, no ****** Translate. Y me parecio que esta bien, si ven algun error de traduccion diganmelo.
Reply
#2

Exelente post. Muy bueno el aporte. Muy bien explicado e detallado parte por parte.

Saludos.
________________
Reply
#3

Gracias, pero igual los creditos van para KC. yo unicamente lo traduci, capas use otros terminos y lo detalle un poco mas, pero KC hizo todo.
Reply
#4

Buena traducciуn y tutorial.

Aunque te falto traducir esto:

pawn Код:
if(!strcmp(npcname, "MyFirstNPC", true)) //Checking if the NPC's name is MyFirstNPC
Reply
#5

Listo, arreglado.
Reply
#6

Tambiйn tienes que decir que cuando es solamente un npc en el server no hace falta
pawn Код:
if(!strcmp(npcname, "MiPrimerNPC", true)) //Chequea si el Nombre del NPC es el correcto
Con el IsPlayerNPC basta
Reply
#7

Yo puse lo que decia el post, no queria cambiar nada por que no entiendo mucho del tema y tego miedo en equivocarme.
Reply
#8

El mio se Conecta pero se sale Que sera?
Reply
#9

Quote:
Originally Posted by Daniel_Ruiz
Посмотреть сообщение
El mio se Conecta pero se sale Que sera?
Por las dudas agregб en OnPlayerConnect arriba de todo
PHP код:
    if (IsPlayerNPC(playerid))
        return 
1
Reply
#10

Quote:
Originally Posted by santi.arg
Посмотреть сообщение
Por las dudas agregб en OnPlayerConnect arriba de todo
PHP код:
    if (IsPlayerNPC(playerid))
        return 
1
Gracias me Sirvio

Pero como hago para que en Ves De estar en Aut se Quede Quieto y Haga una animacion?
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)