Всем привет! Хочу найти решение своей проблеме: Есть три объекта: -obj_player -obj_bot -obj_wall
У игрока и у бота есть переменная team. бот возвращает id ближайшего объекта obj_p_p (instance_nearest(x,y,obj_p_p)) (в obj_p_p нет ни одного скрипта. Это просто родительный объект для бота и игрока) Проблема в том что бот идёт атаковать сам себя потому что функция instance_nearest возвращает его же id. Если ставить instance_furthest то бот начинает атаковать самых далёких противников, в них также входят свои по команде.
if (instance_number(obj_player)+instance_number(obj_bot))=1 {exit;} var p; p=instance_nearest(x,y,obj_p_p) dir=set_angle(dir,point_direction(x,y,p.x,p.y),5) if collision_line(x,y,p.x,p.y,obj_wall,1,1) { mp_potential_step_object(p.x,p.y,1,obj_wall) }
Мне нужен скрипт который возвращает id врага у которого команда другая
Как один из вариантов. Сделай два новых объекта родителя для каждой из команд, например obj_p1_p и obj_p2_p, поставь им общего родителя obj_p_p (чтобы продолжал работать все скрипты, которые обращаются к obj_p_p). А через свой скрипт поиска ближайшего врага обращайся уже не к obj_p_p, а к родителю, соответствующему врагам.
У меня имеется один объект obj_player и obj_bot Но в комнате их может быть по 2-3 штуки. У этих объектов есть переменная team. Например в комнате два объекта obj_player и два obj_bot У одного obj_bot и obj_player team=1 У остальных team=3 (Всего у меня есть 3 команды) И как тогда?
Сделал так, но теперь объекты obj_bot атакают только игрока. У игрока team=1 и у бота team=1, и при этом бот всеровно атакует игрока. Так не должно быть
Добавлено (04.06.2014, 23:49) --------------------------------------------- Нашёл скрипт, но как я его не менял ничего не работает.
Код
if (instance_number(obj_player)+instance_number(obj_bot))=1 {exit;}
min1=1000000; //расстояние до ближайшего экземпляра. взято большое число, чтобы реальное найденное расстояние было меньше targ=0; //текущая цель. нужно обнулить перед выбором новой with (obj_p_p) //проверяемый объект
{ if collision_line(x,y,other.x,other.y,obj_wall,0,0) {continue} //не рассматривать тех, кто за стеной if team!=other.team {continue}
if distance_to_object(other) < min1 //если расстояние меньше минимума, значит этот экземпляр ближе { other.targ=id; //установка цели min1=distance_to_object(other); //присвоение нового минимального расстояния до ближайшего объекта } }
if targ=0 {exit;} if collision_line(x,y,targ.x,targ.y,obj_wall,1,1) {targ=0;min1=1000000} if targ=0 {exit;}
dir=set_angle(dir,point_direction(x,y,targ.x,targ.y),5) if collision_line(x,y,targ.x,targ.y,obj_wall,1,1) { mp_potential_step_object(targ.x,targ.y,1,obj_wall) }
if (instance_number(obj_player)+instance_number(obj_bot))=1 {exit;}
min1=1000000; //расстояние до ближайшего экземпляра. взято большое число, чтобы реальное найденное расстояние было меньше //targ=0; //текущая цель. нужно обнулить перед выбором новой with (obj_p_p) //проверяемый объект
{ if (collision_line(x+lengthdir_x(18,dir+90),y+lengthdir_y(18,dir+90),other.x,other.y,obj_wall,0,0) && collision_line(x+lengthdir_x(18,dir-90),y+lengthdir_y(18,dir-90),other.x,other.y,obj_wall,0,0)) {continue} //не рассматривать тех, кто за стеной if team=other.team {continue}
if distance_to_object(other) < min1 //если расстояние меньше минимума, значит этот экземпляр ближе { other.targ=id; //установка цели min1=distance_to_object(other); //присвоение нового минимального расстояния до ближайшего объекта } }
if targ=0 {exit;} if distance_to_point(targ.x,targ.y)>1400 {targ=0;min1=1000000} if targ=0 {exit;}
dir=set_angle(dir,point_direction(x,y,targ.x,targ.y),5) if (collision_line(x+lengthdir_x(18,dir+90),y+lengthdir_y(18,dir+90),targ.x,targ.y,obj_wall,0,0) && collision_line(x+lengthdir_x(18,dir+90),y+lengthdir_y(18,dir+90),targ.x,targ.y,obj_wall,0,0)) { mp_potential_step_object(targ.x,targ.y,1,obj_wall) }
Теперь появилась другая проблема. Как сделать так что-бы враг нормально выходил из-за стены и не пытался стрелять через стену. Писал вот такой код( (collision_line(x+lengthdir_x(18,dir+90),y+lengthdir_y(18,dir+90),targ.x,targ.y,obj_wall,0,0) && collision_line(x+lengthdir_x(18,dir+90),y+lengthdir_y(18,dir+90),targ.x,targ.y,obj_wall,0,0)) ), но ничего не работает