OK final release
![](/ubbthreads/images/graemlins/laugh.gif)
Remember to add in player's action my.enable_scan and enable_detect
![](/ubbthreads/images/graemlins/wink.gif)
To show You that everything is working I've added some laser
![](/ubbthreads/images/graemlins/wink.gif)
Paste image below to Your working folder and name it laser.jpg
![](/ubbthreads/images/graemlins/wink.gif)
Code:
entity* laser;
var temp_ang;
var my_target2[3];
var my_angle[3];
define _speed, skill1;
function sentry_turnto(angle)
{
angle = ang(angle - MY.PAN);
if (angle > 10)
{temp = my._speed;}
else
{
if(angle < -10){temp = -my._speed;}
else{temp = my._speed * angle * 0.1;}
}
MY.PAN += temp * time_step;
}
function laser_targeting
{
laser = me;
my.passable = on; my.oriented = on; my.facing = off;
my.flare = on; my.bright = on; my.invisible = on;
my.overlay = on; my.transparent = on; my.alpha = 90;
while(you)
{
proc_late();
c_setminmax(me);
vec_set(my.x, you.x);
vec_lerp(my.x,you.x,my_target2.x,0.5);
vec_set(temp, you.x);
vec_sub(temp, my.x);
vec_to_angle(my.pan,temp);
my.tilt += 90;
my.scale_y = vec_dist(you.x,my_target2.x) / 12; //12 is the height of the bmap (jpg above)
wait(1);
}
}
function sentry_event
{
c_trace(my.x,player.x,ignore_me | ignore_passable);
if(result != 0) && (you == player) //if nothing between sentry and player
{
if(event_type == event_detect) &&(you == player) //if in range
{
vec_diff(temp,player.pos,my.pos);
result = vec_to_angle(my_angle,temp);
sentry_turnto(my_angle.PAN); //rotating sentry
vec_set(temp,you.x);
vec_sub(temp,my.x);
vec_to_angle(temp_ang,temp); //check differnce of pan
if(cos(temp_ang - my.pan)> 0.99) //if I'm looking at player start shooting
{
vec_set(my_target2.x, you.x);
laser.invisible = off;
laser.v += 6 *time_step; //moving skin
}
else //if I'm not looking at player stop shooting
{
laser.invisible = on;
}
}
}
else //or if something is between me and player, also stop shooting
{
laser.invisible = on;
}
}
action sentry_fun
{
my.enable_scan = on;
my.enable_detect = on;
my._speed = 2; //turning speed
my.event = sentry_event;
laser = ent_create("laser.jpg",my.x,laser_targeting);//create laser
while(me)
{
c_scan(my.x,my.pan,vector(140,40,1000),SCAN_ENTS | SCAN_LIMIT | IGNORE_ME); //check if something is in my scan cone range
wait(1);
}
}