Page 2 of 2
Posted: 2006-09-27 20:41:13
by DerMeister =)
Не выдумывайте велосипед

существует огромное кол-во хороших (быстрых) алгоритмов для нахождения пути, причём многие из них можно найти в исходниках для различных языков программирования (прежде всего С++). Если уж взялись за идею, так воплотите её не "как получиться", а как "следует"

. Помню, я даже заморачивался с этой темой и даже нашел какой-то алгоритм, причём с кодом на перле

, но далее не пошло из-за того, что не хватает уошных команд и базы тайлов.
---------------
Это был "Поиск в ширину". На мой взгляд, самый лучший вариант, для нашего случая.
Posted: 2006-09-28 11:02:59
by CONDOMchick
Может я чего-то не понимаю, но как встроенная в клиент догонялка безовсяких доп. прог обходит препятствия?
Posted: 2006-09-28 14:13:34
by Edred
CONDOMchick wrote:Может я чего-то не понимаю, но как встроенная в клиент догонялка безовсяких доп. прог обходит препятствия?
это называется pathfind. В самом клиенте реализован алгоритм (см. выше, я писал об этом). Его можно использовать из ИзиУО и Пинжекта, там сделан вызов клиентского pathfind-а.
Posted: 2006-09-28 14:18:08
by CONDOMchick
Edred wrote:CONDOMchick wrote:Может я чего-то не понимаю, но как встроенная в клиент догонялка безовсяких доп. прог обходит препятствия?
это называется pathfind. В самом клиенте реализован алгоритм (см. выше, я писал об этом). Его можно использовать из ИзиУО и Пинжекта, там сделан вызов клиентского pathfind-а.
При отключенном в опцяих петфайнде, клиентская догонялка работает...
Posted: 2006-09-28 15:17:21
by DerMeister =)
ХЗ. Вообще, в пинжекте просто эмулируется двойное нажатие мышкой. Пчфайнд и срабатывает, но не надежно. Чтобы было надежнее, надо использовать trace... Вот он то и вызывает функцию поиска пути из клиента. Чего не понятного то?
Posted: 2006-09-28 18:06:51
by Edred
CONDOMchick wrote:При отключенном в опцяих петфайнде, клиентская догонялка работает...
А при чем здесь это? Ты мозги компу тоже из менюшки игры включаешь/выключаешь? Опция pathfind и алгоритм pathfind в клиенте - это разные вещи. Первая - всего-навсего команда клиенту при дабл клике правой кнопкой мыши использовать этот патчфинд для прохождения к указанной точке. Отключение, уверяю тебя, сам патчфинд не отключит, отключит только его задействование
по дабл клику правой кнопкой мыши.
Posted: 2006-09-28 19:10:45
by CONDOMchick
Edred wrote:CONDOMchick wrote:При отключенном в опцяих петфайнде, клиентская догонялка работает...
А при чем здесь это? Ты мозги компу тоже из менюшки игры включаешь/выключаешь? Опция pathfind и алгоритм pathfind в клиенте - это разные вещи. Первая - всего-навсего команда клиенту при дабл клике правой кнопкой мыши использовать этот патчфинд для прохождения к указанной точке. Отключение, уверяю тебя, сам патчфинд не отключит, отключит только его задействование
по дабл клику правой кнопкой мыши.
Ладно.
Но зачем ДЕЛАТЬ то, что уже сделано до вас?
Ведь существуют программы работающие непосредственно с самим клиентом...
Posted: 2006-09-28 21:16:45
by DerMeister =)
Хмм, сомневаюсь, что они с инжектом дружат. И еще: хочешь помоч - не мешай

Posted: 2006-09-29 05:52:28
by CONDOMchick
DerMeister =) wrote:Хмм, сомневаюсь, что они с инжектом дружат. И еще: хочешь помоч - не мешай

Ладно - я то не мешаю, но ты видать тоже не сильно помогаешь)
лучше воспользуйся ссылкой
www.google.ru
Удачи.
Posted: 2006-09-29 10:17:45
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;)
Posted: 2006-09-29 22:48:18
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 так усердно капался в клиенте ? Даже мне показал, где оно там лежит
Другое дело, что вы могли вырвать дизассемблерный код и воткнуть в любое место своей программы, но это не реализация, а притыривание, очень даже эффективное - чтобы каждый раз не прописывать адрес в клиенте.
Posted: 2006-09-29 22:53:09
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
Posted: 2007-08-29 10:38:35
by BulldoZer
Ну так получилось? кротчайший путь)