AVISO ESTA WEA NO ES MIA ASI KE NO WEBEEN POR LOS CREDITOS ES DE KINGWORLD DE PAWNOSCRIPTING.COM
/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 para CODIGO:
#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:
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:
#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.
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:
#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.
fUENTE
Extra:
si no tenes el FS: npc_record aca les dejo el code:
//-------------------------------------------------
//
// 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