Page 1 of 1

Возможно ли ?

Posted: 25.02.2011 14:23
by Venom
Всем привет !
Возникла некоторая проблемка, помогите разрешить :

Суть :
Лучник атакует цель, которая стоит за преградой(стеной), но в радиусе поражения.
Если после атаки, спустя 1,5 секунды мы не нанесли урон, ищем новую цель и атакуем её.

Проблема :
Если за преградой находится более одной цели, то лучник захватывает атаку на одну из них и при условии:
if (InJournalBetweenTimes('System: Вы нанесли', starttime, Now) = 0)
then ignore(victim);
атаку на следующего !!!не перебрасывает.

Code: Select all

 .....    
   if FindType(Pers[m], Ground) <> 0 then  
     begin
          If isDead(self) then exit;
           arbalet;
            while FindType(Pers[m], Ground) <> 0 do 
              begin
victim :=finditem;
attack(victim);
wait(1500);
if (InJournalBetweenTimes('System: Вы нанесли', starttime, Now) = 0) then ignore(victim);
.....
ЗЫ.
Две цели стоят за стенкой. Стрелок берет атаку на одну из целей. В это время вторая цель может выйти из за стенки и убить стрелка либо подойти к нему и не быть атакованной.

Posted: 25.02.2011 15:12
by bugger
Возможно из-за параметра starttime у тебя такой глюк. Не уверен правда.

Posted: 25.02.2011 15:41
by Vizit0r
так и не понял проблему

Posted: 25.02.2011 16:10
by MuDaCk
Vizit0r wrote:так и не понял проблему
Проблема в том, что даже после игнора предмета, атака остаётся на первую цель.

Posted: 25.02.2011 16:34
by Venom
Поправил первый пост

Posted: 25.02.2011 16:49
by bugger
Делай проверку на дистанцию до цели.
И атакуй ближайшего.

Posted: 25.02.2011 16:53
by Venom
bugger wrote:Делай проверку на дистанцию до цели.
И атакуй ближайшего.

Code: Select all

FindDistance := 12; 
FindVertical := 40;
указано.
через getdistance делать пробовал.

Posted: 25.02.2011 19:50
by bugger
Объясню суть.
Чтобы не случалось такой фигни, тебе надо чтобы каждую секунду делалась проверка на моба возле себя.
Как?
Сейчас вижу следующую идею:
Моб респится через каждые х секунд.

Ты приходишь на локу, запускается скрипт.

Поиск всех мобов заданного типа на локации, причем добавлять ид каждого в Tstrings. Добавляем так: добавил-> проигнорировал.

И дальше делаем так:
Ищем нового моба - по идее если они не в игнор листе, значит новый моб.
Дальше проходим по нашему листу тстрингс(возможно придется сбросить игнор, а потом заново добавить), и смотрим нет ли кого у кого дистанция меньше критической(2 допустим). Если таких нет, то атакуем последнюю цель, если её убили удаляем из тстрингса(в принципе удаление можно сделать на этапе просмотра дистанции). Ну и дальше твои рутины.

Стоит помнить, что тут нет потоков, так что желательно исключать бесконечных циклов или долгих циклов вроде while true if isdead break;. Посмотри у меня в теме скрипты есть фишинг скрипт с таймером для хп.

Posted: 28.02.2011 13:10
by MuDaCk
bugger wrote:Объясню суть.
Чтобы не случалось такой фигни, тебе надо чтобы каждую секунду делалась проверка на моба возле себя.
Как?
Сейчас вижу следующую идею:
Моб респится через каждые х секунд.

Ты приходишь на локу, запускается скрипт.

Поиск всех мобов заданного типа на локации, причем добавлять ид каждого в Tstrings. Добавляем так: добавил-> проигнорировал.

И дальше делаем так:
Ищем нового моба - по идее если они не в игнор листе, значит новый моб.
Дальше проходим по нашему листу тстрингс(возможно придется сбросить игнор, а потом заново добавить), и смотрим нет ли кого у кого дистанция меньше критической(2 допустим). Если таких нет, то атакуем последнюю цель, если её убили удаляем из тстрингса(в принципе удаление можно сделать на этапе просмотра дистанции). Ну и дальше твои рутины.

Стоит помнить, что тут нет потоков, так что желательно исключать бесконечных циклов или долгих циклов вроде while true if isdead break;. Посмотри у меня в теме скрипты есть фишинг скрипт с таймером для хп.
Лично Я нифига не понял... :oops:

Posted: 28.02.2011 15:48
by bugger
Чуть попозже распишу :)