hlmod.hu
https://hlmod.hu/

[TUT]Npc készítés máshogy
https://hlmod.hu/viewtopic.php?f=14&t=6486
Oldal: 1 / 1

Szerző:  peti.97 [ 2012.10.31. 18:12 ]
Hozzászólás témája:  [TUT]Npc készítés máshogy

[kozep]Miért kell egy harmadik is?[/kozep]
1) Mert a másik 2 más parancsokat használ.
2) Mert ezeket a parancsokat használják a legtöbben. (Dr.Npc, Lézer mod, stb)
3) Mert ha már dolgoztam vele mért ne osszam meg?


Itt a kód, megjegyzésekkel együtt:
[ablak]
SMA Forráskód: [ Mindet kijelol ]
  1. /* Plugin generated by AMXX-Studio */
  2.  
  3. #include <amxmodx>
  4. #include <fakemeta>
  5. #include <xs>
  6.  
  7. #define PLUGIN "NPC 0.2"
  8. #define VERSION "0.2"
  9. #define AUTHOR "Itep"
  10.  
  11. new const g_npcModel[] = "models/player/gsg9/gsg9.mdl",
  12. g_fegyomdl[] = "models/p_gauss.mdl";
  13.  
  14.  
  15. public plugin_init() {
  16. register_plugin(PLUGIN, VERSION, AUTHOR)
  17. register_clcmd("NPC", "spawn");
  18. }
  19.  
  20. public plugin_precache()
  21. {
  22. precache_model(g_npcModel)
  23. precache_model(g_fegyomdl)
  24. }
  25.  
  26.  
  27. public spawn(id)
  28. {
  29. new g_npc = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target")); //Létrehozzuk az NPC-t
  30. engfunc(EngFunc_SetModel, g_npc, g_npcModel); //Beállítjuk a modelljét
  31. new Float:maxs[3] = {16.0,16.0,36.0}
  32. new Float:mins[3] = {-16.0,-16.0,-36.0}
  33. engfunc(EngFunc_SetSize, g_npc,mins,maxs); //Beállítjuk a "méretét"
  34.  
  35. // Lehelyezzük oda ahova a célkeresztünk néz
  36. new Float:origin[3], Float:TD[3], Float:TE[3], Float:N[3];
  37. pev(id, pev_origin, origin ); //lekérjük a mi pozíciónkat
  38. velocity_by_aim( id, 512, TD ); //azt is hogy hova nézünk (512 távolágon belül)
  39. xs_vec_add( TD, origin, TE );
  40. engfunc( EngFunc_TraceLine, origin, TE, DONT_IGNORE_MONSTERS, id, 0 );
  41. new Float:fF;
  42. get_tr2( 0, TR_flFraction, fF );
  43. if ( fF < 1.0 )
  44. {
  45. get_tr2( 0, TR_vecEndPos, TE );
  46. get_tr2( 0, TR_vecPlaneNormal, N );
  47. }
  48. xs_vec_mul_scalar( N, 36.5, N ); //a 36.5 távolság a faltól (hogy ne rakja bele)
  49. xs_vec_add( TE, N, origin );
  50. engfunc(EngFunc_SetOrigin, g_npc, origin); //itt helyezzük le az NPC-t
  51.  
  52. //Beállítjuk hogy merre nézzen
  53. new Float:angles[3];
  54. pev(id, pev_angles, angles); //lekérjük a mi nézési szögünket
  55. angles[0]=0.0; // hogy ne feküdjön
  56. set_pev(g_npc, pev_angles, angles); //beállítjuk neki ugyan azt mint a milyenk
  57.  
  58. set_pev(g_npc, pev_solid, SOLID_BBOX); // Szilárdságát itt tudjuk állítani
  59. set_pev(g_npc, pev_classname, "npc_elso"); //Megadjuk a nevét
  60.  
  61.  
  62. // Beállítunk neki egy animációt
  63. set_pev(g_npc, pev_animtime, 2.0); // állandó értékű
  64. set_pev(g_npc, pev_framerate, 1.0); // állandó értékű
  65. set_pev(g_npc, pev_sequence, 1); // az animáció sorszáma
  66.  
  67. // Beállítjuk a bone pozíciót
  68. set_pev(g_npc, pev_controller_0, 125);
  69. set_pev(g_npc, pev_controller_1, 125);
  70. set_pev(g_npc, pev_controller_2, 125);
  71. set_pev(g_npc, pev_controller_3, 125);
  72.  
  73. // Beállítjuk a hp-ját
  74. set_pev(g_npc, pev_takedamage, 1.0); // Ha ez 0 akkor halhatatlan
  75. set_pev(g_npc, pev_health, 100.0); // Ez a hp-ja
  76.  
  77. // Adunk neki fegyvert
  78. give_item(g_npc);
  79.  
  80.  
  81. return PLUGIN_CONTINUE;
  82. }
  83.  
  84. public give_item(ent)
  85. {
  86. new g_fegyo = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
  87. set_pev(g_fegyo, pev_classname, "npc_weapon");
  88. set_pev(g_fegyo, pev_solid, SOLID_NOT);
  89. set_pev(g_fegyo, pev_movetype, MOVETYPE_FOLLOW); // beállítjuk hogy kövesse az Npc-t.
  90. set_pev(g_fegyo, pev_aiment, ent);
  91. set_pev(g_fegyo, pev_sequence, 1);
  92. engfunc(EngFunc_SetModel, g_fegyo, g_fegyomdl);
  93. }

 [/ablak]
Ha hibáztam valahol, jelezzétek.
Ha van rá igény részletesebben, tagoltabban is bemutatom.


*Egy valamit nem értek a fent látható, működőkepés kódban: miért lehet átmenni az emberen, amikor solid_bbox-ra van rakva?

Szerző:  Metal [ 2012.11.03. 13:51 ]
Hozzászólás témája:  Re: [TUT]Npc készítés máshogy

Tök fölösleges, de hagyom. Ha n NPCt akarnék letenni a mapra, akkor nem vacakolnák azzal, hogy oda tegye, ahova nézek.
Blokkolás: Lehet nem info_target classt kéne használni, hanem másmilyet. (pl. func_breakable, vagy más)

Szerző:  Bence98007 [ 2012.11.03. 13:55 ]
Hozzászólás témája:  Re: [TUT]Npc készítés máshogy

vagy func_wall

Szerző:  peti.97 [ 2012.11.03. 14:15 ]
Hozzászólás témája:  Re: [TUT]Npc készítés máshogy

Metal írta:
Tök fölösleges, de hagyom. Ha n NPCt akarnék letenni a mapra, akkor nem vacakolnák azzal, hogy oda tegye, ahova nézek.
Blokkolás: Lehet nem info_target classt kéne használni, hanem másmilyet. (pl. func_breakable, vagy más)


1) Ha kint lett volna, 1 nappal kevesebbet szaroztam volna (mivel a set_pev-et gyakrabban használják mint az entity_set-et)
2) Ez volt az első amit próbáltam ( func_breakable ). Ugyan az a hatás.

(De azért köszönöm hogy kinthagytad)

Szerző:  Metal [ 2012.11.03. 14:24 ]
Hozzászólás témája:  Re: [TUT]Npc készítés máshogy

Hogy most set_pev-et(fakemeta) vagy entity_set-et (engine)) hazsnálsz, az attól függ, milyen modult alkalmazol, a hatás ugyanaz lesz. Érdemes csak egyet használni.
Ha nem jó, az probléma, valahol elakad, vagy valamelyik parancs felüldefiniálja az értékét. Először csak az entityt pakold le a méretével s modeljével (bone, stb dolgot addig pakold ki belőle). Ha így ok, akkor a további kódban hasal el.

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