[Tutorial] Een NPC maken
#1

Let op: Dit bericht is orgineel gemaakt door kc_, ik neem dus geen credits voor deze tutorial. Ik heb hem alleen vertaald!

Het opnemen van een playback bestand
Als eerste moeten we een playback bestand opnemen. Start een server met een gamemode, maakt niet uit welke, en login in de rcon. (Typ "/rcon login <wachtwoord hier>" ) en laad npc_record (Typ "/rcon loadfs npc_record" )
Er zijn 3 commands in het npc_record filterscript om op te nemen.

/vrecord <bestandsnaam> - Dit is om een pad voor een voertuig op te nemen.
/ofrecord <bestandsnaam> - Dit is om een pad te voet op te nemen.
/stoprecord - Stopt het opnemen van beide typen.

In deze tutorial gaan we een voertuig pad maken.

Stap dus in een voertuig, typ /vrecord mynpc en rijd een beetje rond om op te nemen.

Als je klaar bent typ je /stoprecord. Sluit het spel af en ga naar je "scriptfiles" map. Er moet daar een bestand onder de naam "mynpc.rec" staan. Verplaats dit bestand naar <Jouw SA-MP server map>/npcmodes/recordings/

Als je dit gedaan hebt heb je een pad voor je NPC gemaakt, en staat het in de goede map.

De NPC beheren
Je hebt misschien opgemerkt dat er heel veel kleine pawn scripts staan in de npcmodes map. Dit zijn alleenstaande miniscripts wie de NPC's beheren. Laten we er maar eens eentje maken voor jouw opgenomen pad!

Maak een nieuw bestand in pawno en vervang alle inhoud met...

pawn Code:
#define RECORDING "mynpc" //Dit is de bestandsnaam van je opgenomen bestand, zonder extensie!
#define RECORDING_TYPE 1 //1 Voor in een voertuig en 2 voor te voet.

#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
Dit ziet er misschien verwarrend uit, dus nemen we het even door lijn voor lijn.

pawn Code:
#define RECORDING "mynpc" //Dit is de bestandsnaam van je opgenomen bestand, zonder extensie!
Zoals het commentaar al zegt, dit is de bestandsnaam van het pad dat je opgenomen hebt. Ons playback bestand hebben we mynpc genoemd, en de bestandsnaam was mynpc.rec dus gebruiken we "mynpc".

pawn Code:
#define RECORDING_TYPE 1 //1 Voor in een voertuig en 2 voor te voet.
Zoals het commentaar al zegt, dit is het type van je opgenomen pad. Als je /ofrecord hebt gebruikt zou het dus 2 moeten zijn.

pawn Code:
#include <a_npc>
Vanzelfsprekend de SA-MP functies includen.

pawn Code:
public OnRecordingPlaybackEnd() StartRecordingPlayback(RECORDING_TYPE, RECORDING);
OnRecordingPlaybackEnd is een functie wie in "npc_a" zit. Dit stukje code zorgt ervoor dat je NPC opnieuw begint als het bij het einde is van je opgenomen pad.

pawn Code:
public OnNPCEnterVehicle(vehicleid, seatid) StartRecordingPlayback(RECORDING_TYPE, RECORDING);
Dit is nog een functie wie in "npc_a" zit. Het zorgt ervoor dat de NPC begint met het volgen van zijn pad wanneer je de NPC in een voertuig stopt.

pawn Code:
public OnNPCExitVehicle() StopRecordingPlayback();
Dit stuk code voorkomt dat de NPC zijn pad blijft volgen als de NPC uit zijn voertuig gaat.

pawn Code:
public OnNPCSpawn() StartRecordingPlayback(RECORDING_TYPE, RECORDING);
Laat de NPC beginnen met afspelen als hij spawnt.

Zoals je wel kan zien is het allemaal erg simpel.

Sla nu je script op als "mynpc.pwn" in de <SA-MP server map>/npcmodes/ map en compile je script. Als het gecompiled is kan je nu de laatste stap van de tutorial volgen. Als de compiler errors of waarschuwingen geeft, kijk dan of je wel de 0.3 compiler hebt. Kijk ook of je misschien haakjes - { en } - vergeten hebt. Compiled hij nog steeds niet? Reageer dan even!

Je NPC laten verbinden
We hebben de opname, we hebben het script, nu moeten we de NPC in je filterscript of gamemode verbinding laten maken.
Sluit je script en laad de gamemode of filterscript waar je hem in wil laden. Ik laat je eerst kennis maken met de ConnectNPC functie, een zeer belangrijke functie voor de NPC's. Laten we kijken hoe de functie precies in elkaar zit.

pawn Code:
ConnectNPC("Neozftw","mynpc");

"Neozftw" - Dit is de naam van de NPC. Met deze naam kan je de NPC's onderscheiden van de andere.
"mynpc" - Dit is de bestandsnaam van het script dat je in de bovenstaande stap hebt gemaakt.
Met de kennis van de nieuwe functie gaan we nu proberen de NPC verbinding te laten maken met je gamemode of filterscript.

pawn Code:
public OnGameModeInit()
{
  ConnectNPC("MyFirstNPC","mynpc");
  return 1;
}
Of als je de NPC in een filterscript verbinding wilt laten maken...

pawn Code:
public OnFilterScriptInit()
{
  ConnectNPC("MyFirstNPC","mynpc");
  return 1;
}
Zo. We hebben het pad opgenomen in een voertuig, dus moeten we een voertuig voor de NPC maken. Een NPC die een voertuig rijd kan niet rijden zonder voertuig, dat is duidelijk.

OnGameModeInit ziet er nu zo uit, ik heb nu een voertuig aangemaakt voor de NPC...
WAARSCHUWING: Als je NPC niet in een voertuig zit kan je deze stap overslaan!
pawn Code:
new MyFirstNPCVehicle; //Globale variable!
public OnGameModeInit()
{
  ConnectNPC("MyFirstNPC","mynpc");
  MyFirstNPCVehicle = CreateVehicle(400, 0.0, 0.0, 5.0, 0.0, 3, 3, 5000); //De positie van het voertuig maakt niet uit!
  return 1;
}
Of als je de NPC in een filterscript verbinding wilt laten maken...

pawn Code:
new MyFirstNPCVehicle; //Globale variable!
public OnFilterScriptInit()
{
  ConnectNPC("MyFirstNPC","mynpc");
  MyFirstNPCVehicle = CreateVehicle(400, 0.0, 0.0, 5.0, 0.0, 3, 3, 5000); //De positie van het voertuig maakt niet uit!
  return 1;
}
Zoals het commentaar al zegt, de positie van het voertuig maakt niet uit. Het voertuig word bij het begin van het pad geplaatst.

Dan nog een ding voordat je in-game kan gaan en je NPC kan testen. We moeten de NPC in zijn voertuig zetten.
Ik heb dit gedaan met OnPlayerSpawn...
WAARSCHUWING: Als je NPC niet in een voertuig zit kan je deze stap overslaan
pawn Code:
public OnPlayerSpawn(playerid)
{
  if(IsPlayerNPC(playerid)) //Kijken of de gespawnde speler een NPC is
  {
    new npcname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, npcname, sizeof(npcname)); //De naam aanvragen
    if(!strcmp(npcname, "MyFirstNPC", true)) //Kijken of de naam klopt
    {
      PutPlayerInVehicle(playerid, MyFirstNPCVehicle, 0); //NPC in zijn voertuig stoppen
    }
    return 1;
  }
  //Ander gescript voor de normale spelers hier
  return 1;
}
Als je nog een NPC wil toevoegen, is de structuur hetzelfde en makkelijk aan te passen. Hier is een voorbeeld voor 2 NPC's.

pawn Code:
public OnPlayerSpawn(playerid)
{
  if(IsPlayerNPC(playerid)) //Kijken of de gespawnde speler een NPC is
  {
    new npcname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, npcname, sizeof(npcname)); //De naam aanvragen
    if(!strcmp(npcname, "MyFirstNPC", true)) //Kijken of de naam klopt
    {
      PutPlayerInVehicle(playerid, MyFirstNPCVehicle, 0); //NPC in zijn voertuig stoppen
    }
    else if(!strcmp(npcname, "MySecondNPC", true))
    {
      PutPlayerInVehicle(playerid, AnotherVehicleID, 0);
    }
    return 1;
  }
  //Ander gescript voor de normale spelers hier
  return 1;
}
Compile je gamemode of filterscript, en ga maar kijken in-game! Met een beetje geluk rijd/loopt je NPC nu rond, volgens het pad wat je opgenomen hebt. Gefeliciteerd! Je hebt je eerste NPC gemaakt. Als het niet gewerkt heeft, lees dan de onderstaande FAQ door of laat een reactie achter. Vragen? Laat dan ook een bericht achter!

Vaak voorkomende problemen

Mijn NPC gaat gelijk weg nadat hij op de server komt
Je script wil waarschijnlijk dat je NPC inlogd, of je hebt een anti-cheat/ping kicker wie je NPC tegenhoud om verbinding te maken. Je kan dit toevoegen op elke functie in pawno dat NPC's gebruiken, bijvoorbeeld OnPlayerRequestClass of OnPlayerRequestSpawn.
pawn Code:
if(IsPlayerNPC(playerid)) return 1;
Voor een simpele, effectieve manier om NPC's uit te zonderen voor loops, kijk dan naar foreach van ******.

Mijn NPC maakt helemaal geen verbinding!
Dit is waarschijnlijk omdat je server een wachtwoord heeft.

Ik kan het "npc_record" filterscript niet laden
Je hebt of het filterscript niet geladen, of het is al geladen. Probeer door te gaan.

Mijn NPC staat bij zijn spawn punt maar doet niets
Ga terug en doe het OnPlayerSpawn gedeelte opnieuw.

Mijn NPC's maakten eerst wel verbinding, maar toen ik geupdate heb naar RC5 of hoger niet meer.
Er is een nieuwe maxnpc variable in server.cfg dat standaard 0 is.
Voeg...
Code:
maxnpc nummer_hier
...toe aan je server.cfg bestand om dit probleem op te lossen.
Reply
#2

Goed gedaan mooie tutorial
Reply
#3

eindelijk een NL ding
Reply
#4

Sticky!:P
Reply
#5

goed gedaan man
top
Reply
#6

Quote:
Originally Posted by SeriousGameplay
Goed gedaan mooie tutorial
Quote:
Originally Posted by XRVX
goed gedaan man
top
Bedankt
Reply
#7

Ik heb een probleempje

Als ik /vrecord lstaxi typ nadat ik heb ingelogd met mijn pass op de NPC, gebeurt er niets. Ik krijg ook geen melding dat ik ga opnemen ofzo. Als ik dan rondrijd en weer /stoprecord typ, kan ik hem ook nergens terugvinden. Ook niet bij de scriptfiles...
Reply
#8

Je moet wel het filterscript laden.
Reply
#9

Erg netjes en handig ^^
Reply
#10

Quote:
Originally Posted by Jochemd
Ik heb een probleempje

Als ik /vrecord lstaxi typ nadat ik heb ingelogd met mijn pass op de NPC, gebeurt er niets. Ik krijg ook geen melding dat ik ga opnemen ofzo. Als ik dan rondrijd en weer /stoprecord typ, kan ik hem ook nergens terugvinden. Ook niet bij de scriptfiles...
Krijg je dan helemaal niks? of wel? Dit kan het zijn
- SERVER: Unknown command = Filterscript nog niet geladen
- '' = (niks) Je moet inloggen als RCON
Try it out!
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)