Возникла проблема со спрайтом луча (В просто народе называют "Луч смерти"), не могли бы подсказать, как сделать его отключение, к примеру отдельным форвардом, а лучше конечно переменной (или сделать отключение при убийстве лучом)
- Код: Выделить всё
#include <amxmodx>
#include <fun>
new sprSaber
public plugin_init()
{
register_clcmd("say /luch", "test")
}
public plugin_precache() sprSaber = precache_model("sprites/laserbeam.spr")
public test(id)
{
if(!is_user_alive(id)) return PLUGIN_HANDLED
new tid[2];
tid[0] = id;
tid[1] = 1;
set_task(0.1,"lightsaber",0,tid,2,"a",300);
return PLUGIN_HANDLED
}
public lightsaber(id[])
{
new vec[3];
new aimvec[3];
new lseffvec[3];
new length;
new speed = 65;
get_user_origin(id[0],vec,1);
get_user_origin(id[0],aimvec,2);
lseffvec[0]=aimvec[0]-vec[0];
lseffvec[1]=aimvec[1]-vec[1];
lseffvec[2]=aimvec[2]-vec[2];
length=sqrt(lseffvec[0]*lseffvec[0]+lseffvec[1]*lseffvec[1]+lseffvec[2]*lseffvec[2]);
lseffvec[0]=lseffvec[0]*speed/length;
lseffvec[1]=lseffvec[1]*speed/length;
lseffvec[2]=lseffvec[2]*speed/length;
new vorigin[3];
new maxpl = get_maxplayers() +1;
new teama[32],teamv[32];
get_user_team(id[0],teama,31);
for(new a = 1; a < maxpl; a++)
{
if(is_user_alive(a) != 0)
{
get_user_origin(a,vorigin);
if (get_distance(vec,vorigin)<100)
{
if(a != id[0])
{
get_user_team(a,teamv,31);
if(!equal(teama,teamv,2))
{
if(id[1] != 0)
{
user_kill(a,id[0]);
new frag = get_user_frags(id[0]);
set_user_frags(id[0], frag + 1);
}
}
else if(id[1] == 2)
{
user_kill(a,id[0]);
new frag = get_user_frags(id[0]);
set_user_frags(id[0], frag + 1);
}
}
}
}
}
// beam effect between point and entity
message_begin( MSG_BROADCAST,SVC_TEMPENTITY);
write_byte ( 1 ); //TE_BEAMENTPOINT 1
write_short (id[0]); // ent
write_coord (lseffvec[0]+vec[0]); //end position
write_coord (lseffvec[1]+vec[1]);
write_coord (lseffvec[2]+vec[2]+10);
write_short (sprSaber); // sprite
write_byte (0); // start frame
write_byte (15); // frame rate in 0.1's
write_byte (1); // byte (life in 0.1's
write_byte (20); // line width in 0.1's
write_byte (5); // noise amplitude in 0.01's
write_byte (0); // RGB color
write_byte (200);
write_byte (0);
write_byte (255); // brightness
write_byte (10); // scroll speed in 0.1's
message_end();
return PLUGIN_CONTINUE;
}
public sqrt(num)
{
new div = num;
new result = 1;
while (div > result) // end when div == result, or just below
{
div = (div + result) / 2; // take mean value as new divisor
result = num / div;
}
return div;
}
P/s в данном случае проблема в таске, set_task(0.1,"lightsaber",0,tid,2,"a",300); - ибо по окончанию таймера (300) - луч отключается