hlmod.hu
https://hlmod.hu/

[TUT] NPC készítése
https://hlmod.hu/viewtopic.php?f=14&t=6289
Oldal: 1 / 2

Szerző:  Bence98007 [ 2012.10.13. 23:13 ]
Hozzászólás témája:  [TUT] NPC készítése

[kozep]Avagy hogyan készítsünk NPC-t?[/kozep]



Üdv!

Sokat írtak, hogy nem tudnak NPC-t készíteni. Na most ebben a tutban megmutatom hogyan is működik ez a dolog. DE! Az elején tisztázzunk pár dolgot: NPC (azaz Non Playable Character) nem foglalja a szerver slotjait, mivel nem BOT. Ez csak egy "fejlettebb" entity.

Kezdjünk hozzá!

1.

Először csináljunk egy funkciót

SMA Forráskód: [ Mindet kijelol ]
  1. public spawn_npc(id)


Majd csináljuk meg az entitynket:
SMA Forráskód: [ Mindet kijelol ]
  1. new ent = create_entity("info_target")


Megjegyzés: Ezzel hozzuk létre majd az NPC bábunkat :D

Az NPC-nek egy origint kell adjuk, így:

SMA Forráskód: [ Mindet kijelol ]
  1. new Float:origin[3]
  2.  
  3. entity_get_vector(id,EV_VEC_origin,origin)
  4. entity_set_origin(ent,origin);
  5.  
  6. origin[2] += 300.0
  7. entity_set_origin(id,origin)


Megjegyzés: Ez állítja majd be az originjét az NPC-nek.


2.

Most a solidunkat kell beépítenünk:

SMA Forráskód: [ Mindet kijelol ]
  1. new Float:maxs[3] = {16.0,16.0,36.0}
  2. new Float:mins[3] = {-16.0,-16.0,-36.0}
  3. entity_set_size(ent,mins,maxs)
  4. entity_set_int(ent,EV_INT_solid, 2)


Megjegyzés: Ezzel egy BBOX solidot készítettünk.

3.

Na a solidunk megvan, mostmár élet kell, és sebzés.

SMA Forráskód: [ Mindet kijelol ]
  1. entity_set_float(ent,EV_FL_takedamage,1.0)
  2. entity_set_float(ent,EV_FL_health,100.0)


Megjegyzés: Állítsd át a takedamage-t 1-re, és HP-t ad, nem pedig sebez xD
A health-al adtunk az entitynknek életet. Ezt növelheted ha úgy tetszik.


4.

Beállítunk az NPC-nek egy modellt.

SMA Forráskód: [ Mindet kijelol ]
  1. entity_set_string(ent,EV_SZ_classname,"npc_onna");
  2. entity_set_model(ent,"models/onna.mdl");


Megjegyzés: Ezzel készítettünk egy classname-t, és modellt adtunk az NPC-nek. Ha gondolod módosíthatod a modellt.

5.

Na eddig megvagyunk. Most adni kell az NPC-nek egy animációt.

SMA Forráskód: [ Mindet kijelol ]
  1. entity_set_float(ent,EV_FL_animtime,2.0)
  2. entity_set_float(ent,EV_FL_framerate,1.0)
  3. entity_set_int(ent,EV_INT_sequence,0);


6.

Ha eddig eljutottunk, megcsinálhatjuk a plugin_initünket.

Először egy thinket regisztrálunk

SMA Forráskód: [ Mindet kijelol ]
  1. register_think("npc_onna","npc_think");


Megjegyzés: Az npc_onna (1. paraméter) annak kell lennie, amit megadtál a classname-nél.

Na most pedig elkészítjük az NPC-nek.

SMA Forráskód: [ Mindet kijelol ]
  1. entity_set_float(ent,EV_FL_nextthink,halflife_time() + 0.01)



Az alábbiakban beállíthatunk az npc-nek egyedi thinkeket.)(pl.: körbe sétáljon a pályán, új animációt csináljon stb.)

SMA Forráskód: [ Mindet kijelol ]
  1. public npc_think(id)
  2. {
  3. // Ide tedd be a thinkjeidet!
  4. entity_set_float(id,EV_FL_nextthink,halflife_time() + 0.01)
  5. }



7.

Ha eddig kész az NPC-nk, adunk neki egy fegyvert, hogy ne a semmivel sebezzen minket.


SMA Forráskód: [ Mindet kijelol ]
  1. public give_weapon(ent)
  2. {
  3. new entWeapon = create_entity("info_target")
  4.  
  5. entity_set_string(entWeapon, EV_SZ_classname, "npc_weapon")
  6.  
  7. entity_set_int(entWeapon, EV_INT_movetype, MOVETYPE_FOLLOW)
  8. entity_set_int(entWeapon, EV_INT_solid, SOLID_NOT)
  9. entity_set_edict(entWeapon, EV_ENT_aiment, ent)
  10. entity_set_model(entWeapon, "models/p_gauss.mdl")
  11. }


FIGYELEM! Le kell töltetned a játékosokkal a modellt, és csak p_ modellt használhatsz!


Na és a tutorialom végén, az egész kód, amiben nyugodtan szerkeszthetsz, állítgathatod stb.

[ablak]SMA Forráskód: [ Mindet kijelol ]#include <amxmodx>
#include <engine>
 
public plugin_init()
{
register_clcmd("onna", "onna")
register_think("npc_onna","npc_think");
}
 
public plugin_precache()
{
precache_model("models/onna.mdl")
precache_model("models/p_gauss.mdl")
}
 
public onna(id)
{
 
new Float:origin[3]
 
entity_get_vector(id,EV_VEC_origin,origin)
 
new ent = create_entity("info_target")
give_weapon(ent)
 
entity_set_origin(ent,origin);
origin[2] += 300.0
entity_set_origin(id,origin)
 
entity_set_float(ent,EV_FL_takedamage,1.0)
entity_set_float(ent,EV_FL_health,100.0)
 
entity_set_string(ent,EV_SZ_classname,"npc_onna");
entity_set_model(ent,"models/onna.mdl");
entity_set_int(ent,EV_INT_solid, 2)
 
entity_set_byte(ent,EV_BYTE_controller1,125);
entity_set_byte(ent,EV_BYTE_controller2,125);
entity_set_byte(ent,EV_BYTE_controller3,125);
entity_set_byte(ent,EV_BYTE_controller4,125);
 
new Float:maxs[3] = {16.0,16.0,36.0}
new Float:mins[3] = {-16.0,-16.0,-36.0}
entity_set_size(ent,mins,maxs)
 
entity_set_float(ent,EV_FL_animtime,2.0)
entity_set_float(ent,EV_FL_framerate,1.0)
entity_set_int(ent,EV_INT_sequence,0);
 
entity_set_float(ent,EV_FL_nextthink,halflife_time() + 0.01)
 
drop_to_floor(ent)
return 1;
}
 
public give_weapon(ent)
{
new entWeapon = create_entity("info_target")
 
entity_set_string(entWeapon, EV_SZ_classname, "npc_weapon")
 
entity_set_int(entWeapon, EV_INT_movetype, MOVETYPE_FOLLOW)
entity_set_int(entWeapon, EV_INT_solid, SOLID_NOT)
entity_set_edict(entWeapon, EV_ENT_aiment, ent)
entity_set_model(entWeapon, "models/p_gauss.mdl")
}
 
public npc_think(id)
{
// Ide tedd be a thinkjeidet!
entity_set_float(id,EV_FL_nextthink,halflife_time() + 0.01)
}[/ablak]


Használat:
Beírod a konzoba: onna
és ahova nézel, készít egy NPC-t!

Remélem segítettem vele!

Hamarosan mégjobb, menüs, és mentési lehetőségekkel rendelkező, "okosabb" NPC-t hozok el nektek!

Megköszönni nem szégyen!

Jó szórakozást vele.

Szerző:  DeteCT0R [ 2012.10.14. 09:34 ]
Hozzászólás témája:  Re: [TUT] |HOW TO| NPC készítése

Szep leiras :)Am alieden van mind2 rol leiras :Damikor kellet enis onan neztem :Des megis lehet olni oket.

Szerző:  Bence98007 [ 2012.10.14. 10:09 ]
Hozzászólás témája:  Re: [TUT] |HOW TO| NPC készítése

Igen, azt fogom majd kiposztolni! De csak ha összegyűlik 5 köszönet!

Szerző:  fear_ezmegmi [ 2012.10.14. 11:23 ]
Hozzászólás témája:  Re: [TUT] |HOW TO| NPC készítése

Én azért még pár dolgot részleteztem volna ,de így is kapsz 1 köszönömöt ,mert látszik ,hogy sokat dolgoztál vele.

Szerző:  Bence98007 [ 2012.10.14. 12:28 ]
Hozzászólás témája:  Re: [TUT] |HOW TO| NPC készítése

Köszönöm! :D

Szerző:  Bence98007 [ 2012.10.16. 20:23 ]
Hozzászólás témája:  Re: [TUT] |HOW TO| NPC készítése

Na már van 2 köszönöm, ha még lesz 3, jön a menüs NPC!

Szerző:  Metal [ 2012.10.17. 11:04 ]
Hozzászólás témája:  Re: [TUT] |HOW TO| NPC készítése

Ajh, annyira de annyira belekötnék szinte mindenbe...

pl: "Ha eddig kész az NPC-nk, adunk neki egy fegyvert, hogy ne a semmivel sebezzen minket." <- Ez SEBEZ??? Hol??

Szerző:  kiki [ 2012.10.17. 12:55 ]
Hozzászólás témája:  Re: [TUT] |HOW TO| NPC készítése

Lehetne magyarul a tutorialt, kérlek javítsd!


Idézet:
Az NPC-nek egy origint kell adjuk, így:


Idézet:
Megjegyzés: Ez állítja majd be az originjét az NPC-nek.


Idézet:
Most a solidunkat kell beépítenünk:


Idézet:
Megjegyzés: Ezzel egy BBOX solidot készítettünk.


Idézet:
Na a solidunk megvan, mostmár élet kell, és sebzés.


ezt lehetne részletesebben:
Idézet:
Először egy thinket regisztrálunk


Idézet:
Na most pedig elkészítjük az NPC-nek.


mit?
Idézet:
Megjegyzés: Ezzel 1/100 mp alatt megcsináltuk az entitynket, tehát nagyon gyorsan!


Idézet:
Az alábbiakban beállíthatunk az npc-nek egyedi thinkeket.)(pl.: körbe sétáljon a pályán, új animációt csináljon stb.)


nem sebezne..
Idézet:
Ha eddig kész az NPC-nk, adunk neki egy fegyvert, hogy ne a semmivel sebezzen minket.

Szerző:  Metal [ 2012.10.17. 13:26 ]
Hozzászólás témája:  Re: [TUT] |HOW TO| NPC készítése

Idézet:
Megjegyzés: Ezzel 1/100 mp alatt megcsináltuk az entitynket, tehát nagyon gyorsan!

Ezt én se értem... nincs értelme

Szerző:  Bence98007 [ 2012.10.17. 14:41 ]
Hozzászólás témája:  Re: [TUT] |HOW TO| NPC készítése

:| majd ha lesz időm megcsinálom...
Metal bácsi: 1mp törve 1000 -rel, ennyi idő alatt meg tudja csinálni az entityt. (Ha nem így van, szólj!)

Oldal: 1 / 2 Minden időpont UTC+02:00 időzóna szerinti
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/