Перейти к содержимому

Фотография
- - - - -

Нужно сопровождать нпц


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 7

#1
Dantello

Dantello
  • 53
    9
    Новогоднее
    • Lvl 27
    • Пользователь

Здравствуйте, помогите советом, как можно реализовать скрипт

Суть следующая: нужно двигаться по маршруту, но не отдаляться от нпц больше указанного расстояния

Пример:

>бежим по маршруту
>перегнали нпц на 1000 ренджа = пауза
>нпц в зоне 500 ренджа или ближе = бежим дальше по маршруту

Не понимаю как сделать движение по маршруту с паузой по условию


Сообщение отредактировал Dantello: 05 Февраль 2021 - 02:23

  • 0

#2
ScythLab

ScythLab

Задаешь маршрут - массив координат.

Делаешь цикл, в котором по очереди обрабатываешь точки.

Если расстояние до следующей точки более N единиц, то делишь отрезок на фрагменты по N единиц и в новом цикле перемещаешься внутри этого отрезка, если отрезок менее N единиц, то сразу бежишь к конечной точке отрезка.

После каждого перемещения рассчитываешь расстояние до НИПа и принимаешь решение о необходимости простоя. Причем здесь нужно также учитывать расстояние НИПа до твоей предыдущей/следующей точки, чтобы понять впереди тебя он по маршруту или позади. Ждешь когда НИП тебя догонит и продолжаешь движение.

 

Второй вариант чутка другой:

Такой же маршрут, ничего не делишь, а бежишь от точки к точке, но запускаешь нить, в которой контролируешь расстояние до НИПа.

Если обогнал НИПа, то в дополнительной нити даешь команду аля StopMove (и чтобы основной код не трепыхался), в той же нити ждешь пока НИП тебя догонит, как только НИП тебя догнал, основному коду разрешаешь двигаться по маршруту дальше.

 

Второй вариант сложнее в реализации, но красивее.


  • 1

Хобби: разработка непубличного бота для Lineage


#3
Dantello

Dantello
  • 53
    9
    Новогоднее
    • Lvl 27
    • Пользователь

Делаешь цикл, в котором по очереди обрабатываешь точки.


Первый вариант не очень подходит, так как маршруты очень длинные (между городами) и таких маршрутов всего более 30
Помру, пока буду обрабатывать столько точек

Второй вариант как раз и хотел реализовать, но не понимаю как дополнительной нитью заставить главный код останавливаться и продолжать работу

Но теперь понятно куда думать, спасибо за советы
  • 0

#4
ScythLab

ScythLab

так как маршруты очень длинные (между городами) и таких маршрутов всего более 30
да хоть миллион (и маршрутов, и точек в них), циклам без разницы что обрабатывать
  • 1

Хобби: разработка непубличного бота для Lineage


#5
pups

pups
как дополнительной нитью заставить главный код останавливаться и продолжать работу

либо делить главный код на N-ное количество тредов и запускать их поочередно через выполнение различных условий
либо через Script.Suspend паузить все треды, кроме того, в котором проверяется условие

upd. но если задача в том, чтобы просто бегать за нпс, то я не понимаю зачем весь этот гемор с маршрутами и дополнительными тредами, когда можно просто Engine.MoveTo в цикл закинуть :pacan:


Сообщение отредактировал pups: 08 Февраль 2021 - 01:30

  • 1

Discord: pups#9809


#6
Dantello

Dantello
  • 53
    9
    Новогоднее
    • Lvl 27
    • Пользователь

pups,

Спасибо за совет, но уже неактуально
Задача была не бегать за нпц, а идти впереди него, четко придерживаясь маршрута. И останавливать движение, чтобы не перегонять его


Сообщение отредактировал Dantello: 08 Февраль 2021 - 22:45

  • 0

#7
pups

pups

Dantello, так тем же Engine.MoveTo можно сделать, чтоб он бежал впереди


  • 0

Discord: pups#9809


#8
Dantello

Dantello
  • 53
    9
    Новогоднее
    • Lvl 27
    • Пользователь

pups,

Не знал, что так можно. Но все равно, у этого способа есть свои недостатки. Например, подобное будет выглядеть неестественно. И это заметят люди, которые помимо меня сопровождают данного нпц
Маршрут в данном случае, больше подходит на органичное перемещение


  • 0


Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных

Rawr.pro - Сделано с для игроков.