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