25.11.2009, 11:34
(
Last edited by mamorunl; 18/03/2011 at 05:45 PM.
)
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...
Dit ziet er misschien verwarrend uit, dus nemen we het even door lijn voor lijn.
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".
Zoals het commentaar al zegt, dit is het type van je opgenomen pad. Als je /ofrecord hebt gebruikt zou het dus 2 moeten zijn.
Vanzelfsprekend de SA-MP functies includen.
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.
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.
Dit stuk code voorkomt dat de NPC zijn pad blijft volgen als de NPC uit zijn voertuig gaat.
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.
Met de kennis van de nieuwe functie gaan we nu proberen de NPC verbinding te laten maken met je gamemode of filterscript.
Of als je de NPC in een filterscript verbinding wilt laten maken...
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!
Of als je de NPC in een filterscript verbinding wilt laten maken...
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
Als je nog een NPC wil toevoegen, is de structuur hetzelfde en makkelijk aan te passen. Hier is een voorbeeld voor 2 NPC's.
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.
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...
...toe aan je server.cfg bestand om dit probleem op te lossen.
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
pawn Code:
#define RECORDING "mynpc" //Dit is de bestandsnaam van je opgenomen bestand, zonder extensie!
pawn Code:
#define RECORDING_TYPE 1 //1 Voor in een voertuig en 2 voor te voet.
pawn Code:
#include <a_npc>
pawn Code:
public OnRecordingPlaybackEnd() StartRecordingPlayback(RECORDING_TYPE, RECORDING);
pawn Code:
public OnNPCEnterVehicle(vehicleid, seatid) StartRecordingPlayback(RECORDING_TYPE, RECORDING);
pawn Code:
public OnNPCExitVehicle() StopRecordingPlayback();
pawn Code:
public OnNPCSpawn() StartRecordingPlayback(RECORDING_TYPE, RECORDING);
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.
pawn Code:
public OnGameModeInit()
{
ConnectNPC("MyFirstNPC","mynpc");
return 1;
}
pawn Code:
public OnFilterScriptInit()
{
ConnectNPC("MyFirstNPC","mynpc");
return 1;
}
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;
}
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;
}
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;
}
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;
}
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;
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