Un Tutorial como crear NPC

Ir abajo

Un Tutorial como crear NPC

Mensaje  Marcos_Ort el Dom Mayo 16, 2010 8:46 am

Bueno empesare explicando que es NPC, es un sistema de replays aplicados a terceros es desir es como gravarte a ti mismo asiendo algo y luego verlo en vivo y en directo.

enpesemos lo primero que devemos aser es abrir el: server.cfg y en la linea Filterscript agregamos esto: npc_record esto nos agregara tres comandos para administradores rcon:

/vrecord te gravas en un vehiculo

/ofrecord te gravas andando a pie

/stoprecord detienes la gravacion

muy bien para empesar entramos al server y nos logeamos como rcon, ahora vamos a elegir el personaje que queremos gravar o el vehiculo, una ves elegido vemos que recorrido ba a ase este "bot", una ves desidido lo llevamos a la pratica, ponemos: /vrecord nombre o /ofrecord nombre y empesar a gravar disiendonos: Recording: started, ahora lo que ases es aser el recorrido que ara el NPC, una ves que termines de acerlo pones /stoprecord, automaticamente en la carpeta scriptfiles aparesera un archivo llamado: elnombrequeelegiste.rec, este lo moves a: npcmodes\recordings, hay estaria finalizado la primera parte, ahora creamos un nuevo archivo .pwn, con el mismo nombre que el archivo.rec, y en este ponemos:
Spoiler:
#include <a_npc>
new gPlaybackFileCycle=0;
#define NUM_PLAYBACK_FILES 1 //este numero depende de cuanto .rec unas
main(){}
NextPlayback()
{
// Reset the cycle count if we reach the max
if(gPlaybackFileCycle==NUM_PLAYBACK_FILES) gPlaybackFileCycle = 0;

if(gPlaybackFileCycle==0) {
StartRecordingPlayback(PLAYER_RECORDING_TYPE_DRIVER,"aca pone el name de el .rcord");
}

gPlaybackFileCycle++;
}
public OnRecordingPlaybackEnd()
{
NextPlayback();
}

eso es para gravar un peaton para gravar un vehiculo agregas al final de todo:
Código:
public OnNPCEnterVehicle(vehicleid, seatid)
{
NextPlayback();
}
public OnNPCExitVehicle()
{
StopRecordingPlayback();
gPlaybackFileCycle = 0;
}

lo antrior ase que la gravacion que isiste se repita una y otra y otra vez.
ahora esplicare algunos codigos:
Código:
#define NUM_PLAYBACK_FILES 1

ese codigo sirve para definir cuantos gravaciones bayas a unir en el FS, para eso remplasa el 1 por el total de gravaciones.
Código:
if(gPlaybackFileCycle==0) {
StartRecordingPlayback(PLAYER_RECORDING_TYPE_DRIVER,"nombre de el .rec");
}

muy bien este es el codigo que une las gravaciones, ejemplo para unir 2 gravaciones quedaria asi:
if(gPlaybackFileCycle==0) {
StartRecordingPlayback(PLAYER_RECORDING_TYPE_DRIVER,"gravacion 1");
}
else if(gPlaybackFileCycle==1) {
StartRecordingPlayback(PLAYER_RECORDING_TYPE_DRIVER,"gravacion 2");
}

Nota: cada ves que agreges uno nuevo sumele un numero a los numeritos que estan en verde en el code anterior.
bueno con eso tenemos todo, copilamos el .pwn y lo guardamos en la carpeta npcmodes.

ahora el ultimo paso:
creamos un nuevo archivo .pwn y ponemos este code:
Spoiler:
#pragma tabsize 0
#include <a_samp>
public OnFilterScriptInit()
{
ConnectNPC("nombre de el npc jemplo police","aca pone el name de el amx que creamos antes sin el .amx final");
return 1;
}
public OnPlayerConnect(playerid)
{
if(IsPlayerNPC(playerid)) {
new ip_addr_npc[64+1];
new ip_addr_server[64+1];
GetServerVarAsString("bind",ip_addr_server,64);
GetPlayerIp(playerid,ip_addr_npc,64);

if(!strlen(ip_addr_server)) {
ip_addr_server = "127.0.0.1";
}

if(strcmp(ip_addr_npc,ip_addr_server,true) != 0) {
// this bot is remote connecting
printf("NPC: Got a remote NPC connecting from %s and I'm kicking it.",ip_addr_npc);
Kick(playerid);
return 0;
}
printf("NPC: Connection from %s is allowed.",ip_addr_npc);
}

return 1;
}
public OnPlayerRequestClass(playerid, classid)
{
if(!IsPlayerNPC(playerid)) return 0;

new playername[64];
GetPlayerName(playerid,playername,64);//hasta aca te aconsejo no modificar nada
if(!strcmp(playername,"el nombre que pusimos arriba ejemplo police",true)) {
SetSpawnInfo(playerid,cordenadas dnde nacera);//me olvide antes de gravar ase un /save de la pocicion en donde nace
}
return 0;
}
public OnPlayerSpawn(playerid)
{
if(!IsPlayerNPC(playerid)) return 1;

new playername[64];
GetPlayerName(playerid,playername,64);

if(!strcmp(playername,"nombre que pusimos arriba ejemplo police",true)) {
PutPlayerInVehicle(playerid,1,0);//esto ponelo si el bot va a estar en un vehiculo
SetPlayerColor(playerid,0xFFFFFFFF);//hay pone el color con el que se vera el bot en el mapa
}
return 1;
}

a este archivo copilalo y guardalo en la carpeta filterscrpt y lo agregas al server.cfg como un FS mas.

PD a mi me funciono de dies =D

tuto by: [sXe]m3rc3nari0
post oficial: pawnoscripting.com
en caso de copiar el tuto poner los derechos de autor y un lick asa este post.

Extra:
si no tenes el FS: npc_record aca les dejo el code:
Spoiler:
//-------------------------------------------------
//
// Recording player data for NPC playback
// Kye 2009
//
//-------------------------------------------------

#pragma tabsize 0

#include <a_samp>
#include <core>
#include <float>

#include "../include/gl_common.inc"

//-------------------------------------------------
public OnPlayerConnect(playerid)
{
SendClientMessage(playerid,0xFF0000FF,"/vrecord /ofrecord /stoprecord");
}
public OnPlayerCommandText(playerid, cmdtext[])
{
new cmd[256];
new idx;
cmd = strtok(cmdtext, idx);

if(!IsPlayerAdmin(playerid)) return 0; // this is an admin only script

// Start recording vehicle data (/vrecord recording_name[])
// Find the recording_name[] file in /scriptfiles/
if(strcmp(cmd, "/vrecord", true) == 0) {
new tmp[512];
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) {
SendClientMessage(playerid,0xFF0000FF,"Usage: /vrecord {name}");
return 1;
}
if(!IsPlayerInAnyVehicle(playerid)) {
SendClientMessage(playerid,0xFF0000FF,"Recording: Get in a vehicle.");
return 1;
}
StartRecordingPlayerData(playerid,PLAYER_RECORDING_TYPE_DRIVER,tmp);
SendClientMessage(playerid,0xFF0000FF,"Recording: started.");
return 1;
}

// Start recording onfoot data (/ofrecord recording_name[])
// Find the recording_name[] file in /scriptfiles/
if(strcmp(cmd, "/ofrecord", true) == 0) {
new tmp[512];
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) {
SendClientMessage(playerid,0xFF0000FF,"Usage: /ofrecord {name}");
return 1;
}
if(IsPlayerInAnyVehicle(playerid)) {
SendClientMessage(playerid,0xFF0000FF,"Recording: Leave the vehicle and reuse the command.");
return 1;
}
StartRecordingPlayerData(playerid,PLAYER_RECORDING_TYPE_ONFOOT,tmp);
SendClientMessage(playerid,0xFF0000FF,"Recording: started.");
return 1;
}

// Stop recording any data
if(strcmp(cmd, "/stoprecord", true) == 0) {
StopRecordingPlayerData(playerid);
SendClientMessage(playerid,0xFF0000FF,"Recording: stopped.");
return 1;
}

return 0;
}

//-------------------------------------------------
// EOF

Espero Que te sirva
avatar
Marcos_Ort

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

Ver perfil de usuario

Volver arriba Ir abajo

Re: Un Tutorial como crear NPC

Mensaje  Michael_Sollozo el Dom Mayo 16, 2010 11:09 am

Si son cosas mui largas usa el spoiler lo digo muchas veces.
avatar
Michael_Sollozo

Mensajes : 124
Fecha de inscripción : 25/04/2010
Localización : España

Ver perfil de usuario

Volver arriba Ir abajo

Volver arriba

- Temas similares

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