/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <fakemeta>
#include <xs>
#define PLUGIN "NPC 0.2"
#define VERSION "0.2"
#define AUTHOR "Itep"
new const g_npcModel[] = "models/player/gsg9/gsg9.mdl",
g_fegyomdl[] = "models/p_gauss.mdl";
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("NPC", "spawn");
}
public plugin_precache()
{
precache_model(g_npcModel)
precache_model(g_fegyomdl)
}
public spawn(id)
{
new g_npc = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target")); //Létrehozzuk az NPC-t
engfunc(EngFunc_SetModel, g_npc, g_npcModel); //Beállítjuk a modelljét
new Float:maxs[3] = {16.0,16.0,36.0}
new Float:mins[3] = {-16.0,-16.0,-36.0}
engfunc(EngFunc_SetSize, g_npc,mins,maxs); //Beállítjuk a "méretét"
// Lehelyezzük oda ahova a célkeresztünk néz
new Float:origin[3], Float:TD[3], Float:TE[3], Float:N[3];
pev(id, pev_origin, origin ); //lekérjük a mi pozíciónkat
velocity_by_aim( id, 512, TD ); //azt is hogy hova nézünk (512 távolágon belül)
xs_vec_add( TD, origin, TE );
engfunc( EngFunc_TraceLine, origin, TE, DONT_IGNORE_MONSTERS, id, 0 );
new Float:fF;
get_tr2( 0, TR_flFraction, fF );
if ( fF < 1.0 )
{
get_tr2( 0, TR_vecEndPos, TE );
get_tr2( 0, TR_vecPlaneNormal, N );
}
xs_vec_mul_scalar( N, 36.5, N ); //a 36.5 távolság a faltól (hogy ne rakja bele)
xs_vec_add( TE, N, origin );
engfunc(EngFunc_SetOrigin, g_npc, origin); //itt helyezzük le az NPC-t
//Beállítjuk hogy merre nézzen
new Float:angles[3];
pev(id, pev_angles, angles); //lekérjük a mi nézési szögünket
angles[0]=0.0; // hogy ne feküdjön
set_pev(g_npc, pev_angles, angles); //beállítjuk neki ugyan azt mint a milyenk
set_pev(g_npc, pev_solid, SOLID_BBOX); // Szilárdságát itt tudjuk állítani
set_pev(g_npc, pev_classname, "npc_elso"); //Megadjuk a nevét
// Beállítunk neki egy animációt
set_pev(g_npc, pev_animtime, 2.0); // állandó értékű
set_pev(g_npc, pev_framerate, 1.0); // állandó értékű
set_pev(g_npc, pev_sequence, 1); // az animáció sorszáma
// Beállítjuk a bone pozíciót
set_pev(g_npc, pev_controller_0, 125);
set_pev(g_npc, pev_controller_1, 125);
set_pev(g_npc, pev_controller_2, 125);
set_pev(g_npc, pev_controller_3, 125);
// Beállítjuk a hp-ját
set_pev(g_npc, pev_takedamage, 1.0); // Ha ez 0 akkor halhatatlan
set_pev(g_npc, pev_health, 100.0); // Ez a hp-ja
// Adunk neki fegyvert
give_item(g_npc);
return PLUGIN_CONTINUE;
}
public give_item(ent)
{
new g_fegyo = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
set_pev(g_fegyo, pev_classname, "npc_weapon");
set_pev(g_fegyo, pev_solid, SOLID_NOT);
set_pev(g_fegyo, pev_movetype, MOVETYPE_FOLLOW); // beállítjuk hogy kövesse az Npc-t.
set_pev(g_fegyo, pev_aiment, ent);
set_pev(g_fegyo, pev_sequence, 1);
engfunc(EngFunc_SetModel, g_fegyo, g_fegyomdl);
}