[Tutorial] NPC kйszнtйs
#1

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.
  • /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.
Ebben a leнrбsban, kйszнtьnk egy NPC-t, mely jбrműt vezet. A szervereden, gйpeld a /vrecord [fбjlnйv] parancsot: /vrecord mynpc.
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
Most vegyьk бt hogy a kуdban szereplő algoritmusoknak mi a szerepe!

Code:
#define RECORDING "mynpc" // Ez annak a fбjlnak a neve, melyet te felvettйl a szerveren a .rec fбjl
A .rec fбjl neve amit felvettьnk a szerveren. Itt a neve "mynpc", йs ezйrt lett a neve "mynpc".

Code:
#define RECORDING_TYPE 1 // Az NPC jбtйkos tнpusa, ha 1 autуt vezet, ha 2 gyalogos
Az NPC tнpus definiбlбsa

Code:
#include <a_npc>
SA-MP, NPC fьggvйnykцnyvtбrak beбgyazбsa.

Code:
public OnRecordingPlaybackEnd ( )
{
  StartRecordingPlayback ( RECORDING_TYPE, RECORDING );
  return 1;
}
Ez a kуd sor elйri, hogy elindнtja az NPC feladatait. Ha az NPC befejezte a neki felvett feladatokat, elkezdi ъjra.

Code:
public OnNPCEnterVehicle ( vehicleid, seatid )
{
  StartRecordingPlayback ( RECORDING_TYPE, RECORDING );
  return 1;
}
Ez elindнtja a paramйterek kцzt megadott felvйtelt, amikor az NPC egy jбrműbe ьl.

Code:
public OnNPCExitVehicle ( )
{
  StopRecordingPlayback ( );
  return 1;
}
Ha az NPC elhagyja az egyik jбrműt, abbahagyja a felvйtelt.

Code:
public OnNPCSpawn ( )
{
  StartRecordingPlayback ( RECORDING_TYPE, RECORDING );
  return 1;
}
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.

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;
}
NPC jбtйkos hozzбadбsa a jбtйkhoz, OnGameModeInit ( ) fьggvйnyben.

Code:
public OnFilterScriptInit ( )
{
  print ( "my filterscript" );
  ConnectNPC ( "MyFirstNPC", "mynpc" );
  return 1;
}
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!

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;
}
A NPC jбtйkosnak adunk egy jбrműt.

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;
}
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!

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;
}
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:

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;
}
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.

Code:
if ( IsPlayerNPC ( playerid ) ) return 1;
- 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у:

Code:
maxnpc number_goes_here
Ezt нrd be a server.cfg-be, ha nem lett volna ott, йs az йrtйkйt нrd 0-ra:

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
Reply
#2

ezt csak most vettem йszre jу munka ezt ki is stickyzem (kicsit furбn hangzik lol)
Reply
#3

Quote:
Originally Posted by Coli
Quote:

A leнrбst "kc" нrta. Magyarosнtбs: [RKS]Ricsi. Forrбs: Creating NPCs

Ezt szerintem нrd oda angolul is, nehogy "kc" fйlreйrtse

Ьdv:Coli
Kцsz amъgy azйrt нrtam hogy "kc" mert az volt a neve.

Quote:
Originally Posted by Kaboose
ezt csak most vettem йszre jу munka ezt ki is stickyzem (kicsit furбn hangzik lol)
Kцsz.
Reply
#4

Quote:
Originally Posted by Coli
tudom h az a neve....
Csak furcsбlltam hogy idйzőjelbe tetted, bбr йn is mind1. xD
Reply
#5

Jу-jу lett,de most nem azйrt minden magyar a kc fйle leнrбst fordнtja,nem нr цnnбllуt,
ez olyan snazz...(Ez a 3. fordнtбs tudomбsom szerint...)
Reply
#6

Quote:
Originally Posted by .:: ZeX ::.
Jу-jу lett,de most nem azйrt minden magyar a kc fйle leнrбst fordнtja,nem нr цnnбllуt,
ez olyan snazz...(Ez a 3. fordнtбs tudomбsom szerint...)
Mйg annak idejйn amikor kiadtбk a sa-mp 0.3a -s verziуt, a Magyar fуrumon kellett egy felhasznбlуnak egy Magyar nyelvű leнrбs az NPC kйszнtйsről (mert nem tudott Angolul). Ezйrt segнtettem neki annyiban hogy lefordнtottam neki ezt a leнrбst Magyar nyelvre (Azйrt fordнtottam mert mйg nem йrtettem olyan szinten az NPC-khez hogy leнrбst нrjak hozzбjuk. Nem voltam biztos benne hogy mindent jуl tudok rуluk.).

Aztбn a hбla az volt hogy kitцrцltйk az egйszet a Magyar fуrumrуl.. azуta se jбrok nagyon rб.

Majd нrok egy sajбtot.
Reply
#7

Hy!

Йn mindent ъgy csinбltam ahogy kell (Gondolom йn ) a jбrműves NPC-nйl de lбthatatlan a jбrműve... Beleraktam Script -be is ( mert ugyanis йn gmodba raktam előszцr ) de akkor is lбthatatlan neki

PLS Help!
Reply
#8

Quote:
Originally Posted by M1K1
Йn mindent ъgy csinбltam ahogy kell (Gondolom йn ) a jбrműves NPC-nйl de lбthatatlan a jбrműve... Beleraktam Script -be is ( mert ugyanis йn gmodba raktam előszцr ) de akkor is lбthatatlan neki
Lehet hogy a jбrmű nem abban az interiorban van amiben te vagy йs nйzed.
Йs a jбrmű ott van a szerveren, vezeti a jбtйkos йs nem lehet lбtni, vagy egyбltalбn nincs jбrmű?

Itt van az egyik NPC szkriptem, hбtha segнt:

Code:
#include <a_samp>

new BotVehicle;
new Tram;

public OnFilterScriptInit ( )
{
  ConnectNPC ( "SanAndreasTrain", "Bot" );
  ConnectNPC ( "SanFierroTram", "Tram" );
  BotVehicle = AddStaticVehicle(537,0.0,0.0,0.0,0.0,1,1);
  Tram = AddStaticVehicle(449,0.0,0.0,0.0,0.0,1,74);
  return 1;
}

public OnPlayerSpawn ( playerid )
{
  if ( IsPlayerNPC ( playerid ) )
  {
    new npcname [ MAX_PLAYER_NAME ];
    GetPlayerName ( playerid, npcname, sizeof ( npcname ) );
    if ( !strcmp ( npcname, "SanAndreasTrain", true ) )
    {
      PutPlayerInVehicle ( playerid, BotVehicle, 0 );
      return 1;
    }
    if ( !strcmp ( npcname, "SanFierroTram", true ) )
    {
      PutPlayerInVehicle ( playerid, Tram, 0 );
      return 1;
    }
    return 1;
  }
  return 1;
}
Reply
#9

Kцsz. 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
Reply
#10

Nбlam nem műkцdik.
Egyбltalбn nem csinбl semmit a szerver.

Quote:
Originally Posted by [RKS
Ricsi ]
kc wrote this topic, I translated the topic into a Hungarian language. Source topic: http://forum.sa-mp.com/index.php?topic=119947.0
NPC Kйszitйs
Reply
#11

Quote:
Originally Posted by Hun_Norberto
Nбlam nem műkцdik.
Egyбltalбn nem csinбl semmit a szerver.

Quote:
Originally Posted by [RKS
Ricsi ]
kc wrote this topic, I translated the topic into a Hungarian language. Source topic: http://forum.sa-mp.com/index.php?topic=119947.0
NPC Kйszitйs
A server.cfg -ben a maxnpc sor mцgй mi van нrva?
Reply
#12

na szуval mindet hibбtlanul megcsinбltam .. elvileg.. legalбbb is mйg csak 1 warningom se volt.. minde a helyбn van de nem lбtom az NPC-t .. nincsen bent vagy nem tudom nem jelenнti meg pedig elvileg minden jу.
Reply
#13

Szevasztok!
Fogjuk rб egy kicsikйt kezdő scripter vagyok йrtek egy pбr dologhoz
De most kifejezetten az NPC йrdekel autу nйlkьl, nekem :
(32) : warning 235: public function lacks forward declaration (symbol "OnGameModeInit")
(35) : error 017: undefined symbol "ConnectNPC"
(39) : warning 235: public function lacks forward declaration (symbol "OnFilterScriptInit")
(42) : error 017: undefined symbol "ConnectNPC"
Ezeket нrja ki foggalmam nincs, hogy mit kйne velьk csinбlni, totбlisan elrontottam XD
Valaki leнrnб nekem a teljes NPCs dolgot hogy hogy kell egy gyalogos NPCt megcsinбlni?
Kцssz
Reply
#14

Frissнtsd a 0.3 szervercsomagra a fбjljaidat.
Reply
#15

Kicsit fordнtуprogram hangulatъ...

Meg nem бrtana frissнteni...

Egyйbkйnt jу
Reply
#16

HElp plz valaki! Azt нrja ki, mikor beнrom, hogy /vrecord, hogy Unknown command. Prуbбltam leszedni ъj npc_record-ot, de mйg mindig semmi. VAlaki segнtsen
Reply
#17

Ha talбn бtnйzznйd a dripduulsokat akor lehet menne mert hнbбt talбlni nem nehйz ha figyelsz, valamit nem jуl csinбltбl.
Reply
#18

nem akar felcsatlakozni a szerverre az npc :S
Reply
#19

Csatlakoztatni az npc-t a mod-ba kell? o.O
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)