05.12.2009, 13:09
kc wrote this topic, I translated the topic into a Hungarian language. Source topic: http://forum.sa-mp.com/index.php?topic=119947.0
A leнrбst "kc" нrta. Magyarosнtбs: [RKS]Ricsi. Forrбs: Creating NPCs
NPC kйszнtйs
Ebben a leнrбsban bemutatom nektek, hogyan kell "NPC", botokat, szerver бltal vezйnyelt jбtйkosokat kйszнteni.
Felvenni a lejбtszуfбjlt
Előszцr nekьnk fel kell venni az NPC hasznбlatбt a .rec fбjlt. A szervereden jelentkezz be RCON adminisztrбtornak. Ha megvan, tцltsd be a NPC felvйtel szkriptet: "/rcon loadfs npc_record". Itt most tudunk hбrom parancsot hasznбlni, melyek az NPC felvйtelйhez szьksйgesek.
Vedd fel azt az ъtvonalat, ahol szeretnйd, hogy az NPC jбtйkosod mozogjon. Ha megvan, gйpeld a /stoprecord parancsot. A szervermappбd, szkriptfбjljai mappбban lesz egy "fбjlnйv.rec" fбjl. Esetьnkben "mynpc.rec". Helyezd бt ezt a fбjlt, a szervermappa/npcmodes/recordings mappбba.
Eddig felvettьk az NPC-d ъtvonalбt, йs бthelyeztьk a megfelelő mappбba.
Irбnyнtani az NPC-t
Az npcmodes mappбban sok fбjlt vehettйl йszre, ezek az NPC viselkedйsйt szolgбljбk. Most hozzunk lйtre egy NPC-t!
Hozz lйtre egy ъj Pawn szkript fбjlt, йs нrd bele ( йrdemes az elejйhez нrni ):
Most vegyьk бt hogy a kуdban szereplő algoritmusoknak mi a szerepe!
A .rec fбjl neve amit felvettьnk a szerveren. Itt a neve "mynpc", йs ezйrt lett a neve "mynpc".
Az NPC tнpus definiбlбsa
SA-MP, NPC fьggvйnykцnyvtбrak beбgyazбsa.
Ez a kуd sor elйri, hogy elindнtja az NPC feladatait. Ha az NPC befejezte a neki felvett feladatokat, elkezdi ъjra.
Ez elindнtja a paramйterek kцzt megadott felvйtelt, amikor az NPC egy jбrműbe ьl.
Ha az NPC elhagyja az egyik jбrműt, abbahagyja a felvйtelt.
Amikor az NPC elkezdi a jбtйkot, a paramйterek kцzt megadott NPC fбjl nevйt meghнvja (elindнtja ).
Mint lбtod ez egyszerű. Ha megvan, fordнtsd le a szkriptet.
Ha valamilyen hibбt нr ki, akkor nйzd бt a forrбskуdot, nem-e hagytбl el valahonnan zбrуjelet, stb.
Ezt a szkriptet tedd be a szervermappa/npcmodes mappбba.
Csatlakoztatni az NPC-t
A ConnectNPC ( ) fьggvйny csatlakoztatja az NPC-nket a szerverhez.
NPC jбtйkos hozzбadбsa a jбtйkhoz, OnGameModeInit ( ) fьggvйnyben.
Most, hogy meghatбroztuk, hogy a NPC jбtйkos jбrműt vezessen, mбr csak adni kell neki egy eszkцzt, amit vezethet.
Ha az NPC jбtйkosod nincs jбrműben, hagyd ki ezt a rйszt!
A NPC jбtйkosnak adunk egy jбrműt.
Ha az NPC jбrműve nem az NPC jбtйkos helyzetйnйl van, akkor a jбrmű az NPC jбtйkoshoz kerьl.
Most, hogy az NPC jбrműve az NPC jбtйkosnбl van, mбr csak bele kell őt tenni. Ha az NPC jбtйkosod gyalogos, hagyd ki ezt a lйpйst!
Ha kettő, vagy tцbb NPC-t akarsz a szerveredre, akkor kьlцn neveket kell adni, йs vigyбzni rб, hogy ne keveredjenek egymбs funkciуi. Itt egy pйlda, ami kettő NPC jбtйkost hoz lйtre:
Fordнtsd le a szkriptet, йs kйszen vagy!
Problйmбk
- Az NPC elhagyja a szervert:
Valami tцrli, vagy kбrt okoz az NPC-dben.
- Az NPC-d egyбtalбn nem csatlakozik a szerverhez:
Lehetsйges, hogy a szervered jelszуval van vйdve, ezйrt nem tud felcsatlakozni.
- Nem tцlti be a felvйtelt kйszнtő szkriptet:
Prуbбld meg ъjra betцlteni a szkriptet, vagy szerezd be ъjra.
- Az NPC-m бll a kezdőhelyйn, йs nem csinбl semmit.
Menny vissza az OnPlayerSpawn ( ) fьggvйnyhez, йs nйzd meg hogy mindent rendben нrtбl-e meg.
- Az NPC-t RC5 verziуban kйszнtettem, йs most nem műkцdik:
A server.cfg-nйl egy vбltozу:
Ezt нrd be a server.cfg-be, ha nem lett volna ott, йs az йrtйkйt нrd 0-ra:
kc wrote this topic, I translated the topic into a Hungarian language. Source topic: http://forum.sa-mp.com/index.php?topic=119947.0
A leнrбst "kc" нrta. Magyarosнtбs: [RKS]Ricsi. Forrбs: Creating NPCs
A leнrбst "kc" нrta. Magyarosнtбs: [RKS]Ricsi. Forrбs: Creating NPCs
NPC kйszнtйs
Ebben a leнrбsban bemutatom nektek, hogyan kell "NPC", botokat, szerver бltal vezйnyelt jбtйkosokat kйszнteni.
Felvenni a lejбtszуfбjlt
Előszцr nekьnk fel kell venni az NPC hasznбlatбt a .rec fбjlt. A szervereden jelentkezz be RCON adminisztrбtornak. Ha megvan, tцltsd be a NPC felvйtel szkriptet: "/rcon loadfs npc_record". Itt most tudunk hбrom parancsot hasznбlni, melyek az NPC felvйtelйhez szьksйgesek.
- /vrecord [fбjlnйv] - Elindнt egy felvйtelt, amikor az NPC jбrműt vezet.
- /ofrecord [fбjlnйv] - Elindнt egy felvйtelt, amikor az NPC gyalog kцzlekedik.
- /stoprecord - Leбllнtja az aktuбlisan futу felvйtelt.
Vedd fel azt az ъtvonalat, ahol szeretnйd, hogy az NPC jбtйkosod mozogjon. Ha megvan, gйpeld a /stoprecord parancsot. A szervermappбd, szkriptfбjljai mappбban lesz egy "fбjlnйv.rec" fбjl. Esetьnkben "mynpc.rec". Helyezd бt ezt a fбjlt, a szervermappa/npcmodes/recordings mappбba.
Eddig felvettьk az NPC-d ъtvonalбt, йs бthelyeztьk a megfelelő mappбba.
Irбnyнtani az NPC-t
Az npcmodes mappбban sok fбjlt vehettйl йszre, ezek az NPC viselkedйsйt szolgбljбk. Most hozzunk lйtre egy NPC-t!
Hozz lйtre egy ъj Pawn szkript fбjlt, йs нrd bele ( йrdemes az elejйhez нrni ):
Code:
#define RECORDING "mynpc" // Ez az NPC-d neve, melyet felvettйl
#define RECORDING_TYPE 1 // Az NPC kцzlekedйse, 1 ha jбrműt vezet, 2 ha gyalogol
#include <a_npc> // Az NPC fьggvйnykцnyvtбr beбgyazбsa
public OnRecordingPlaybackEnd ( )
{
StartRecordingPlayback ( RECORDING_TYPE, RECORDING );
return 0;
}
#if RECORDING_TYPE == 1 // Ha az NPC tнpusa jбrműves vezető
public OnNPCEnterVehicle ( vehicleid, seatid )
{
StartRecordingPlayback ( RECORDING_TYPE, RECORDING );
return 0;
}
public OnNPCExitVehicle ( )
{
StopRecordingPlayback ( );
return 0;
}
#else // Viszont ha gyalogos
public OnNPCSpawn ( )
{
StartRecordingPlayback ( RECORDING_TYPE, RECORDING );
return 0;
}
#endif
Code:
#define RECORDING "mynpc" // Ez annak a fбjlnak a neve, melyet te felvettйl a szerveren a .rec fбjl
Code:
#define RECORDING_TYPE 1 // Az NPC jбtйkos tнpusa, ha 1 autуt vezet, ha 2 gyalogos
Code:
#include <a_npc>
Code:
public OnRecordingPlaybackEnd ( )
{
StartRecordingPlayback ( RECORDING_TYPE, RECORDING );
return 1;
}
Code:
public OnNPCEnterVehicle ( vehicleid, seatid )
{
StartRecordingPlayback ( RECORDING_TYPE, RECORDING );
return 1;
}
Code:
public OnNPCExitVehicle ( )
{
StopRecordingPlayback ( );
return 1;
}
Code:
public OnNPCSpawn ( )
{
StartRecordingPlayback ( RECORDING_TYPE, RECORDING );
return 1;
}
Mint lбtod ez egyszerű. Ha megvan, fordнtsd le a szkriptet.
Ha valamilyen hibбt нr ki, akkor nйzd бt a forrбskуdot, nem-e hagytбl el valahonnan zбrуjelet, stb.
Ezt a szkriptet tedd be a szervermappa/npcmodes mappбba.
Csatlakoztatni az NPC-t
A ConnectNPC ( ) fьggvйny csatlakoztatja az NPC-nket a szerverhez.
Code:
ConnectNPC ( "Dave", "mynpc" );
- "Dave" - Az NPC jбtйkos neve. Az NPC jбtйkosokat a nevьk alapjбn lehet megkьlцnbцztetni.
- "mynpc" - Az NPC jбtйkos .AMX szkriptje, melyet behelyeztьnk a szervermappa/npcmodes mappбba.
Code:
public OnGameModeInit ( )
{
print ( "my gamemode" );
ConnectNPC ( "MyFirstNPC", "mynpc" );
return 1;
}
Code:
public OnFilterScriptInit ( )
{
print ( "my filterscript" );
ConnectNPC ( "MyFirstNPC", "mynpc" );
return 1;
}
Ha az NPC jбtйkosod nincs jбrműben, hagyd ki ezt a rйszt!
Code:
new MyFirstNPCVehicle; // Globбlis vбltozу
public OnGameModeInit ( )
{
print ( "my gamemode" );
ConnectNPC ( "MyFirstNPC", "mynpc" );
MyFirstNPCVehicle = AddStaticVehicle ( 400, 0.0, 0.0, 5.0, 0.0, 3, 3 );
return 1;
}
Code:
new MyFirstNPCVehicle; // Globбlis vбltozу
public OnFilterScriptInit ( )
{
print ( "my filterscript" );
ConnectNPC ( "MyFirstNPC", "mynpc" );
MyFirstNPCVehicle = CreateVehicle ( 400, 0.0, 0.0, 5.0, 0.0, 3, 3, 5000 );
return 1;
}
Most, hogy az NPC jбrműve az NPC jбtйkosnбl van, mбr csak bele kell őt tenni. Ha az NPC jбtйkosod gyalogos, hagyd ki ezt a lйpйst!
Code:
public OnPlayerSpawn ( playerid )
{
if ( IsPlayerNPC ( playerid ) ) // Ellenőrzi a szerver, hogy a jбtйkos NPC jбtйkos-e
{
new npcname [ MAX_PLAYER_NAME ]; // Lйtrehozunk egy vбltozуt, ami az NPC jбtйkos nevйt tбrolja
GetPlayerName ( playerid, npcname, sizeof ( npcname ) ); // A szerver lekйri az NPC jбtйkos nevйt, eltбrolja a vбltozуba
if ( !strcmp ( npcname, "MyFirstNPC", true ) ) // Цsszehasonlнtja a jбtйkos nevйt a "MyFirstNPC" nйvvel
{
PutPlayerInVehicle ( playerid, MyFirstNPCVehicle, 0 ); // Beletesszьk a jбtйkost az NPC jбtйkos jбrművйbe
}
return 1;
}
// Ha a jбtйkos normбlis jбtйkos, azaz nem NPC jбtйkos, azok funkciуi itt lesznek
return 1;
}
Code:
public OnPlayerSpawn ( playerid )
{
if ( IsPlayerNPC ( playerid ) ) // Ellenőrzi a szerver, hogy a jбtйkos NPC jбtйkos-e
{
new npcname [ MAX_PLAYER_NAME ]; // Lйtrehozunk egy vбltozуt
GetPlayerName ( playerid, npcname, sizeof ( npcname ) ); // Megkeressьk az NPC jбtйkos nevйt
if ( !strcmp ( npcname, "MyFirstNPC", true ) ) // Цsszehasonlнtsuk a jбtйkos nevйt a "MyFirstNPC" nйvvel
{
PutPlayerInVehicle ( playerid, MyFirstNPCVehicle, 0 ); // Beletesszьk a jбtйkost, a jбrműbe
return 1; // Visszatйrйsi йrtйk
}
if ( !strcmp ( npcname, "MySecondNPC", true ) ) // Ellenőrzik a kцvetkező nйvvel
{
PutPlayerInVehicle(playerid, AnotherVehicleID, 0); // Betesszьk őt a jбrműbe
return 1; // Visszatйrйsi йrtйk
}
return 1; // Visszatйrйsi йrtйk
}
// Azok a jбtйkosok, melyek nem NPC-k, azok funkciуi ide jцnnek
return 1;
}
Problйmбk
- Az NPC elhagyja a szervert:
Valami tцrli, vagy kбrt okoz az NPC-dben.
Code:
if ( IsPlayerNPC ( playerid ) ) return 1;
Lehetsйges, hogy a szervered jelszуval van vйdve, ezйrt nem tud felcsatlakozni.
- Nem tцlti be a felvйtelt kйszнtő szkriptet:
Prуbбld meg ъjra betцlteni a szkriptet, vagy szerezd be ъjra.
- Az NPC-m бll a kezdőhelyйn, йs nem csinбl semmit.
Menny vissza az OnPlayerSpawn ( ) fьggvйnyhez, йs nйzd meg hogy mindent rendben нrtбl-e meg.
- Az NPC-t RC5 verziуban kйszнtettem, йs most nem műkцdik:
A server.cfg-nйl egy vбltozу:
Code:
maxnpc number_goes_here
Code:
maxnpc number_goes_here 0
kc wrote this topic, I translated the topic into a Hungarian language. Source topic: http://forum.sa-mp.com/index.php?topic=119947.0
A leнrбst "kc" нrta. Magyarosнtбs: [RKS]Ricsi. Forrбs: Creating NPCs



Beleraktam Script -be is ( mert ugyanis йn gmodba raktam előszцr ) de akkor is lбthatatlan neki
De sokat ondolkoztam mitől lehetne lбthatatlan йs нgy eszembe jutott hogy egy arйnбba raktam kocsikat... йs gondoltam annak a LinkVehicleInterior -ja nem engedi... нgy hбt "zцldbe raktam" йs mбr lбtszуdik az NPC-m