::SA-RP:: San Andreas Roleplay
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.

Aka les dejo el tutorial para crear un NPC

2 participantes

Ir abajo

Aka les dejo el tutorial para crear un NPC Empty Aka les dejo el tutorial para crear un NPC

Mensaje  Marcos_Ort Lun Abr 12, 2010 6:15 pm

Funcionamiento del NPC


Bien, estas maravillas de SAMP tienen un proseso bastante particular. Consiste en primero grabar lo que nuestro NPC hará. Tiene que ser tal y como lo hara el NPC, él lo hara identicamente (es recomendable grabar sin lag, ya que a la hora de jugar no se verá muy bien). Ahora a lo que nos interesa, como hacerlo:

Primero van al archivo server.cfg, lo abren y en la linea filterscripts tienen que añadir 'npc_record'. Deberia quedarles asi:

dijo:

filterscripts npc_record


Si tienen mas solo agreguenlo al final, aqui un ejemplo:

dijo:

filterscripts ladmin4v2 gl_actions gl_realtime npc_record


recuerden que se separan por espacios.

Ahora pueden abrir su servidor y conectarse. Una vez dentro deben loguearse (identificarse) como administradores RCON, con el comando

dijo:

/rcon login [contraseña]


con la contraseña que pusieron en el archivo server.cfg

Ahora para grabar tienen dos opciones, a pie o en vehiculo (aun estoy viendo la forma de mezclarlos, pero cuando se pueda lo publicaré). Para grabar a pie solo tienen que ingresar el comando

dijo:

/ofrecord [nombre de la grabacion]


Recuerden que todo lo que hagan será grabado, incluso si disparas (no funcionan armas como la bazooka o el lanzacohetes, el resto si). Cuando terminen, solo pongan el comando

dijo:

/stoprecord

y se dejará de grabar.

Si la grabacion es en vehiculo solo tienen que estar dentro de uno, no es necesario que sea el mismo que se usara despues, pero yo les aconsejo que sea el mismo o uno con propiedades parecidas, mas que nada por la velocidad y la maniobrabilidad que tiene cada auto (por ej, no deben grabar con un banshee algo que despues va a hacer un bus).
Ahora, para grabar, metanse al auto y pongan el comando

dijo:

/vrecord [nombre de la grabacion]


La grabacion comenzará de inmediato y tomara en cuenta el recorrido que hagas, a la velocidad que lo hagas, creo que no funciona la vocina, pero es algo de menor importancia.
Luego para finalizar la grabacion solo pongan el comando

dijo:

/stoprecord



Cuando terminen cierren SAMP y su servidor, ahora trabajaremos con pawno.
Abran la carpeta de su server y entren en la carpeta scriptfiles, ahi deben estar sus grabaciones con los nombres que les pusieron, son archivos en formato REC. Cópienlos o cortenlos y los pegan en la carpeta recording que está dentro de la carpeta npcmodes.
Ahora abran pawno, creen un nuevo archivo y borren todo, dejen la ventana vacia, ahora vamos a crear el script que hará que funcione el archivo REC.

Deben poner esto:
#define RECORDING "XXXX" // --------> Aqui pongan el nobre del archivo rec que esta en la carpeta recordings
#define RECORDING_TYPE X // --------> Aqui cambien la X por un 1 si grabaron en auto y un 2 si fue a pie.

#include <a_npc> // ------> esta es la libreria del npc, solo disponible en samp server 0.3
main(){}
public OnRecordingPlaybackEnd() StartRecordingPlayback(RECORDING_TYPE, RECORDING); // ---> aqui se establese que al terminar la grabacion se incie. Es el efecto de bucle, si no lo quieren lean mas abajo.
#if RECORDING_TYPE == 1 // ----> esto es lo que se ejecuta si es una grabacion en auto.
public OnNPCEnterVehicle(vehicleid, seatid) StartRecordingPlayback(RECORDING_TYPE, RECORDING);
public OnNPCExitVehicle() StopRecordingPlayback();
#else //-----> esto se ejecuta su es a pie.
public OnNPCSpawn() StartRecordingPlayback(RECORDING_TYPE, RECORDING);
#endif

Ahora explico con más detalles.
Si quieren que su npc no haga un bucle, cambien
public OnRecordingPlaybackEnd() StartRecordingPlayback(RECORDING_TYPE, RECORDING);
por:
public OnRecordingPlaybackEnd() StopRecordingPlayback();
Asi, al terminar la grabacion, no se reproducira denuevo.

Ahora solo guarden y compilen en la carpeta npcmodes. Con el nombre con que ustedes reconozcan al npc.
Eso debira crearles el archivo .pwn y el .amx sino es por que hay algo mal en el script.

Ahora abran su gamemode. Pirmero tiene que ir a
public OnGameModeInit()
y conectar su NPC con el comando ConnectNPC("XXXX","ZZZZ" ); en las X va el nombre con el que su npc se conectará, y en las Z va el nombre del archivo .amx que crearon con el script que hicieron antes.
Deberia quedar algo así:
public OnGameModeInit()
{
SetGameModeText("mi gamemode" );
ConnectNPC("Juanito","npcjuan" );
return 1;
}

ahora hay dos cosas, si es un npc en vehiculo obviamente hay que darle uno, pero tiene que ser solo para él, asi que lo pondremos con una variable. Vamos al principio del gamemode, y despues de los include ponemos un new con el nombre del auto, aqui un ejemplo:

#include <a_samp>

new autoparajuanito;


Asi que ahora volvemos a public OnGameModeInit() y ponemos lo que es "autoparajuanito", le daremos un bufalo, es el 402, asi que ponemos el comando para agregar un auto.
AddStaticVehicle(402, 0.0, 0.0, 0.0, 0.0, 0, 0); esto indica el numero id del auto, las posisiones X Y y Z y el angulo de mira. Todo esta en cero, ya que la posision da lo mismo, al darle el auto al npc automáticamente se coloca en su grabacion. Recuerden que los 2 utlimos numeros son los colores del auto, en este caso es 0, que es el color negro.
Asi nos quedaria algo asi:
public OnGameModeInit()
{
SetGameModeText("mi gamemode" );
ConnectNPC("Juanito","npcjuan" );
autoparajuanito = AddStaticVehicle(402, 0.0, 0.0, 0.0, 0.0, 0, 0);
return 1;
}

Si tienen sistema de clases (para que el jugador escoja distintos skin) tienen que agregar if(IsPlayerNPC(playerid)) return 1; para que el npc no se quede pegado en la seleccion de clase.
Asi:
public OnPlayerRequestClass(playerid, classid)
{
if(IsPlayerNPC(playerid)) return 1;
if(classid == 0)
{
etc etc etc
}
}

Ahora van a public OnPlayerSpawn(playerid) y ponen esto:
public OnPlayerSpawn(playerid)
{
if(IsPlayerNPC(playerid)) //---->chekea si el conectado es un NPC
{
new npcname[MAX_PLAYER_NAME]; // -----> se crea una variable para usarla mas abajo
GetPlayerName(playerid, npcname, sizeof(npcname)); //----> Toma el nombre del NPC
if(!strcmp(npcname, "Juanito", true)) //-----> Compara el nombre del NPC
{
SetPlayerSkin(playerid, 226); // ----> establece el skin del npc
PutPlayerInVehicle(playerid, autoparajuanito, 0); //----> Coloca al NPC en su vehiculo, el 0 indica que es conuctor
ShowPlayerMarkers(1); // ----> es para que el npc se vea en el mapa con un icono, 1 para sí, 0 para que no
}
return 1;
}
return 1;
}

Recuerden que aqui va todo lo que involucra al npc, y se trata a cada npc por separado, mediante su nombre. Si quieren que tenga armas solo dénselas con el comando GivePlayerWeapon(playerid, XX, ZZZZ); en las X va el numero del arma, y el las Z la municion. para ver los números de armas visiten el samp wiki.

Ahora ya esta listo para que el npc se conecte sin problemas. Para poner otro npc solo deben conectarlo, y para que tenga tenga vehiculo deben crearle otro solo para él, y asignarselo igual que con el primero. Solo deben agregar otro if despues del if del npc anterior, osea algo así:

public OnPlayerSpawn(playerid)
{
if(IsPlayerNPC(playerid)) //---->chekea si el conectado es un NPC
{
new npcname[MAX_PLAYER_NAME]; // -----> se crea una variable para usarla mas abajo
GetPlayerName(playerid, npcname, sizeof(npcname)); //----> Toma el nombre del NPC
if(!strcmp(npcname, "Juanito", true)) //-----> Compara el nombre del NPC
{
SetPlayerSkin(playerid, 226);
PutPlayerInVehicle(playerid, autoparajuanito, 0);
ShowPlayerMarkers(1);
}
if(!strcmp(npcname, "Pedrito", true)) //-----> Compara el nombre del NPC otra vez.
{
SetPlayerSkin(playerid, 226);
PutPlayerInVehicle(playerid, autoparapedrito, 0);
ShowPlayerMarkers(1);
}
return 1;
}
return 1;
}

recurden que pueden ir jugando con todo esto, por ejemplo prueben cosas especiales para los npc, que sean visibles solo para algunos jugadores, que tengan textos 3d para identificarlos y cosas asi, por ejemplo un bus que diga arriba 'BUS a Las Venturas' entonces solo deben crear el new correspondiente, en este caso new Text3D:texto[MAX_PLAYERS];
y ahora dentro del if del npc ponen esto:
texto[playerid] = Create3DTextLabel("BUS a Las Venturas",COLOR_BLUE,30.0,40.0,50.0,60.0,0);
Attach3DTextLabelToPlayer(texto[playerid], playerid, 0.0,0.0,1.0); // >> el 1.0 indica que se ve atravez de los objetos

esto le creara un texto 3d color azul (COLOR_BLUE no funciona si no lo han definido, de ahi les explico), con las dimensiones especificadas y la distancia especificada.

Ahora les doy un pequeño conejito, para no tener que poner numeros a la hora de establecer colores en los comandos.
Solo pegen esto al principio de su gamemode, antes de los include:

#define COLOR_GREY 0xAFAFAFAA
#define COLOR_GREEN 0x33AA33AA
#define COLOR_RED 0xAA3333AA
#define COLOR_YELLOW 0xFFFF00AA
#define COLOR_WHITE 0xFFFFFFAA
#define COLOR_BLUE 0x375FFFFF
#define COLOR_BLACK 0x2C2727AA
#define COLOR_BROWN 0xA52A2AAA
#define COLOR_NARANJA 0xFF6400FF
#define COLOR_DORADO 0x966400FF
#define COLOR_CELESTE 0x0096FFFF
#define COLOR_AQUA 0x009696FF
#define COLOR_TRANSPARENTE 0xFFFFFF00

Asi, cuando pongan el color azul por ejemplo, en vez de tener que poner el número hexadecimal 0x375FFFFF solo tienen que poner COLOR_BLUE. Así es mucho más facil.

Bueno espero que con eso sea suficiente por ahora, cualquier cosa póngala como comentario abajo. Acepto dudas, preguntas y sugerencias siempre que las hagan de buena gana.
Marcos_Ort
Marcos_Ort

Mensajes : 106
Fecha de inscripción : 08/04/2010
Edad : 32
Localización : Paraguay

Volver arriba Ir abajo

Aka les dejo el tutorial para crear un NPC Empty Re: Aka les dejo el tutorial para crear un NPC

Mensaje  MontezDeOca Lun Abr 12, 2010 7:13 pm

Gracias Por el aporte pero ya es decicion de Adrian

MontezDeOca

Mensajes : 99
Fecha de inscripción : 31/03/2010

Volver arriba Ir abajo

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.