Подскажите ходилку ?

Anything and all.

Moderators: Murderator+, Murderator

DerMeister =)
Expert!
Posts: 1032
Joined: 2006-02-25 21:48:38

Post by DerMeister =) »

Не выдумывайте велосипед ;) существует огромное кол-во хороших (быстрых) алгоритмов для нахождения пути, причём многие из них можно найти в исходниках для различных языков программирования (прежде всего С++). Если уж взялись за идею, так воплотите её не "как получиться", а как "следует" ;). Помню, я даже заморачивался с этой темой и даже нашел какой-то алгоритм, причём с кодом на перле ;), но далее не пошло из-за того, что не хватает уошных команд и базы тайлов.
---------------
Это был "Поиск в ширину". На мой взгляд, самый лучший вариант, для нашего случая.
DerMeister сейчас на нейрале!
CONDOMchick
Posts: 362
Joined: 2005-04-23 20:18:57

Post by CONDOMchick »

Может я чего-то не понимаю, но как встроенная в клиент догонялка безовсяких доп. прог обходит препятствия?
Dragon World. [since 2004]
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

CONDOMchick wrote:Может я чего-то не понимаю, но как встроенная в клиент догонялка безовсяких доп. прог обходит препятствия?


это называется pathfind. В самом клиенте реализован алгоритм (см. выше, я писал об этом). Его можно использовать из ИзиУО и Пинжекта, там сделан вызов клиентского pathfind-а.
Ни один скрипт не работает? Пора обновить Инжект...
Все работает, но хочется большего? Пора переходить на стелс...
CONDOMchick
Posts: 362
Joined: 2005-04-23 20:18:57

Post by CONDOMchick »

Edred wrote:
CONDOMchick wrote:Может я чего-то не понимаю, но как встроенная в клиент догонялка безовсяких доп. прог обходит препятствия?


это называется pathfind. В самом клиенте реализован алгоритм (см. выше, я писал об этом). Его можно использовать из ИзиУО и Пинжекта, там сделан вызов клиентского pathfind-а.


При отключенном в опцяих петфайнде, клиентская догонялка работает...
Dragon World. [since 2004]
DerMeister =)
Expert!
Posts: 1032
Joined: 2006-02-25 21:48:38

Post by DerMeister =) »

ХЗ. Вообще, в пинжекте просто эмулируется двойное нажатие мышкой. Пчфайнд и срабатывает, но не надежно. Чтобы было надежнее, надо использовать trace... Вот он то и вызывает функцию поиска пути из клиента. Чего не понятного то?
DerMeister сейчас на нейрале!
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

CONDOMchick wrote:При отключенном в опцяих петфайнде, клиентская догонялка работает...


А при чем здесь это? Ты мозги компу тоже из менюшки игры включаешь/выключаешь? Опция pathfind и алгоритм pathfind в клиенте - это разные вещи. Первая - всего-навсего команда клиенту при дабл клике правой кнопкой мыши использовать этот патчфинд для прохождения к указанной точке. Отключение, уверяю тебя, сам патчфинд не отключит, отключит только его задействование по дабл клику правой кнопкой мыши.
Ни один скрипт не работает? Пора обновить Инжект...
Все работает, но хочется большего? Пора переходить на стелс...
CONDOMchick
Posts: 362
Joined: 2005-04-23 20:18:57

Post by CONDOMchick »

Edred wrote:
CONDOMchick wrote:При отключенном в опцяих петфайнде, клиентская догонялка работает...


А при чем здесь это? Ты мозги компу тоже из менюшки игры включаешь/выключаешь? Опция pathfind и алгоритм pathfind в клиенте - это разные вещи. Первая - всего-навсего команда клиенту при дабл клике правой кнопкой мыши использовать этот патчфинд для прохождения к указанной точке. Отключение, уверяю тебя, сам патчфинд не отключит, отключит только его задействование по дабл клику правой кнопкой мыши.


Ладно.
Но зачем ДЕЛАТЬ то, что уже сделано до вас?
Ведь существуют программы работающие непосредственно с самим клиентом...
Dragon World. [since 2004]
DerMeister =)
Expert!
Posts: 1032
Joined: 2006-02-25 21:48:38

Post by DerMeister =) »

Хмм, сомневаюсь, что они с инжектом дружат. И еще: хочешь помоч - не мешай ;)
DerMeister сейчас на нейрале!
CONDOMchick
Posts: 362
Joined: 2005-04-23 20:18:57

Post by CONDOMchick »

DerMeister =) wrote:Хмм, сомневаюсь, что они с инжектом дружат. И еще: хочешь помоч - не мешай ;)


Ладно - я то не мешаю, но ты видать тоже не сильно помогаешь)
лучше воспользуйся ссылкой www.google.ru
Удачи.
Dragon World. [since 2004]
dmitrykit
Posts: 247
Joined: 2005-06-12 22:12:15

Post by dmitrykit »

DerMeister =) wrote:ХЗ. Вообще, в пинжекте просто эмулируется двойное нажатие мышкой. Пчфайнд и срабатывает, но не надежно. Чтобы было надежнее, надо использовать trace... Вот он то и вызывает функцию поиска пути из клиента. Чего не понятного то?


zabluzdajesha, tam polnostju realizovann mehanizm pathfinda, s vozmoznostju vytaschit' cherez trace tile, i uznat' prohodimost' i prochije prochije... nevnimateljno vidimo chitajesh forum;)
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post by Destruction »

dmitrykit wrote:
DerMeister =) wrote:ХЗ. Вообще, в пинжекте просто эмулируется двойное нажатие мышкой. Пчфайнд и срабатывает, но не надежно. Чтобы было надежнее, надо использовать trace... Вот он то и вызывает функцию поиска пути из клиента. Чего не понятного то?


zabluzdajesha, tam polnostju realizovann mehanizm pathfinda, s vozmoznostju vytaschit' cherez trace tile, i uznat' prohodimost' i prochije prochije... nevnimateljno vidimo chitajesh forum;)

Я форум не читаю, но насколько мне известно - никто полностью его не реализовывал, а просто запускалась функция из клиента.

Разве не за этим Grin так усердно капался в клиенте ? Даже мне показал, где оно там лежит :-)

Другое дело, что вы могли вырвать дизассемблерный код и воткнуть в любое место своей программы, но это не реализация, а притыривание, очень даже эффективное - чтобы каждый раз не прописывать адрес в клиенте.
Last edited by Destruction on 2006-09-29 22:53:50, edited 1 time in total.
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post by Destruction »

Кто там просил маркировку тайлов ?

У меня оно в моей личной библиотечке лежит :-) Запускаем, не забыв указать файл.

Биндим на любую клавишу "mfgi resend", и когда отходим далеко и возвращаемся - жамкаем клавишу.

Когда надоест бродить - пишем "BREAK FNC", не напишите - не запишет в файл.

Собственно мне надо было немного - 2000 тайлов разметить, под конец лаги стали вылезать, небольшие, так, что на слабых машинах особо не порезвишся :-)

Code: Select all

sub Des.Mark_Possible_Tiles() 
   var x = uo.getX();
   var y = uo.getY();
   var file = "tiles.dat"
   var f = file(file);
   f.create()
   f.open()
   deljournal("BREAK FNC")
   while true
      if uo.getGlobal(str(uo.getX())+":"+str(uo.getY())) == "N/A" then
      uo.mfgi("add","2760",str(uo.getX()),str(uo.getY()),str(uo.getZ()+2),"5555")
         x = uo.getX();
         y = uo.getY();
         uo.setGlobal(str(x)+":"+str(y),"true")
         f.writeln(str(x)+" "+str(y))
      else
         wait(10)
      endif
      if uo.injournal("BREAK FNC") then
         f.close()
         return
      endif
   wend
endsub


И если вдруг кому-понадобится, соответсвенно один из вариантов проверки тайла на проходимость:

Code: Select all

Sub isPossibleTile_init(file)
     file = file(file)
     file.open()
     var x, y
     while not file.eof()
          x = safe call file.readnumber()
          y = safe call file.readnumber()
          uo.setglobal(str(x)+":"+str(y),"1")
     wend
     uo.setGlobal("isPossibleTile_init", "1")
endsub

sub isPossibleTile(x, y)
     if NOT uo.getGlobal("isPossibleTile_init") == "1" then
          isPossibleTile_init("tiles.dat") ; имя файла с тайлами, должно лежать в папке с Injection, если указан не абсалютный путь.
     endif
     if uo.getGlobal(str(x)+":"+str(y))=="1" then
          return 1
     endif
     return 0
endsub

sub main()
     if isPossibleTile(5500, 1800) then
          ;// по тайлу можно ходить
     else
          ;// по тайлу нельзя ходить
     endif
endsub
BulldoZer
Posts: 95
Joined: 2006-11-02 11:57:11

Post by BulldoZer »

Ну так получилось? кротчайший путь)
Post Reply