Страница 1 из 1

Вытаскиваем карты из клиента, преобразуем их в поля для Kore

Добавлено: Ср дек 27, 2006 1:08 pm
piroJOKE
Вытаскиваем карты из клиента, преобразуем их в поля для OpenKore
(мини-гайд)

Сразу скажу, что в этой процедуре, как правило, нет необходимости. Самодельные карты встречаются редко, т.к. администрация приватных серваков не располагает в 99% случаев ни ресурсами, ни художественным вкусом. И тем не менее... Ага, а еще иногда встречаются серверы, на которых древние, устаревшие версии карт. Вот в этом случае это может пригодиться.
Для полноценного подключения новой карты нужны 3 вещи:
- сама карта .fld
- упоминание о карте в файле tables\maps.txt
- прописаные порталы к этой карте
Для начала идем вот сюда: http://openkore.sourceforge.net/grftool/ , и скачиваем GRF Tool (0.6 Мб); это инструмент для извлечения ресурсов из grf-файлов;

Для работы так же требуется установленный на компутере ActivePerl, http://www.activestate.com/store/activeperl/download (15.2 Мб). Он понадобится нам для исполнения скрипта-конвертора. (Замечание: оказалось, ставить Перл не обязательно, см. эту заметку).

Открываем GRF Tool-ом ваш grf-файл. Ставим фильтр *.gat (карты рельефа местности и проходимость клеточек) - выгружаем все файлы (Ctrl-A, Extract). Ставим другой фильтр - *.rsw (карты высот воды) - и тоже выгружаем их всех в ту же папку. Закрываем GRF Tool; он нам больше тут не понадобится.

Берем из дистрибутива OpenKore скрипт \fields\tools\gat2fld.pl, и ложим его в ту же папку, куда мы только что выгружали карты. Запускаем скрипт, просто покликав на него. Можно идти курить. ;)

Удаляем *.gat, *.rsw и скрипт. Всё, у нас осталась папочка с *.fld-файлами - готовые поля для Kore. Пол-дела уже сделано.

На этом месте я обычно беру какое-то средство для сравнения каталогов, и выясняю, что именно изменилось. Т.е. какие файлы на самом деле изменились. Например, TotalCommader, и встроенная в нем фича "синхронизация каталогов".

Теперь беремся за файл \tables\maps.txt. Мы должны либо дополнить его, либо создать заново. Обратите внимание, у нас получились .fld-файлы, но в maps.txt рудиментально указан перечень .rsw-файлов. Что еще... там через разделители указаны расширенные названия карт, насколько я помню, их писать не обятательно.

Мда... а список карт "с нуля" можно получить, например, дав команду dir *.fld /b > maps.txt (находясь в каталоге с нашими .fld), и потом в текстовом редакторе заменив все .fld на .rsw#mymap#.

Теперь возьмемся за синонимы карт. Я выше кажется говорил, что GRF Tool нам больше не понадобится? Ха-ха, я вас гнусно обманул! Понадобиться, и еще не раз.

Да, а вот сами синонимы лежат в файле resnametable.txt. В нем первое поле каждой строки - это как карту видно в клиенте, а второе - как называется ее файл данных. Ну-с... по моим сведениям, Kore не поддерживает механизма синонимов, поэтому нам просто надо внимательно изучить этот файл, и сделать дубликаты .fld файлов, согласно него - и, включить их в наш maps.txt, если их там еще нет.

(Кстати, в клиенте есть список карт, вот он - mapnametable.txt, казалось бы, достаточно просто переименовать файл в maps.txt, но нет, он почему-то не полный (?!).)

Всё. Поля укладываем в \fields, список карт maps.txt - в \tables, и можно запускаться. Остались правда нерабочими порталы.... Но это уже совсем другая история (см. ниже в теме мини-FAQ по записи порталов).

* * *

Дополнительные материалы: варп через нпц

Добавлено: Сб янв 06, 2007 1:12 pm
piroJOKE
(....) смежная по смыслу тема: viewtopic.php?t=413 ("Цветные красивые карты локаций в OpenKore")

Добавлено: Вт фев 20, 2007 10:50 pm
piroJOKE
ЗЗЫ: Небольшое, опциональное дополнение. Вы можете хранить карты .fld в сжатом виде, экономя место на диске.
Вот статья про это: viewtopic.php?t=1409 ("Насчет хранения полей .fld в сжатом виде - плюсы и минусы")

Добавлено: Чт дек 06, 2007 1:54 pm
piroJOKE
Вытаскиваем карты из клиента, учитывая подстановки из resnametable.txt.

Извлекаем файлы из grf в какой-нибудь каталог; участвуют *.gat, *.rsw, и resnametable.txt. После извлечения они лежат так же, как и в grf-ке, т.е., resnametable ложится прямо в наш каталог, внутри каталога образуется папка data, и там лежат все поля. Преобразуем поля клиента в fld при помощи gat2fld.pl. Удаляем *.gat, *.rsw. В нашем каталоге, рядом с resnametable.txt делаем bat-ник:

grep .rsw resnametable.txt|gsar -F -s".rsw#" -r".fld " > tmp.lst
for /F "eol=; tokens=1,2*" %%i in (tmp.lst) do @copy data\%%j data\%%i
del tmp.lst
pause

После выполнения этого bat-ника папка с полями распухает примерно на 30%, т.к. были созданы копии файлов. По идее, у нас получается полная копия всех полей, какие только есть в клиенте - со всеми возможными подстановками. Разумеется, о maps.txt нужно позаботиться отдельно.

Были использованы инструменты:
GrfTools - для извлечения данных из grf-ки
ActivePerl - для исполнения gat2fld.pl
UnxUtils - GNU шные утилиты от юниха (у нас в Даунлоаде) - оттуда grep, gsar

* * *

Теперь вопрос к знатокам - стоит ли полученное таким образом из kRO Sakray заливать в SVN OpenKore?

Добавлено: Чт дек 06, 2007 3:39 pm
kLabMouse
piroJOKE писал(а):Теперь вопрос к знатокам - стоит ли полученное таким образом из kRO Sakray заливать в SVN OpenKore?
Не все. Ибо на Сакрее немного карты не такие как у всех (они когда-то будут такие но пока нет). Потому стоит пихать только те которые с другими клиентами одинаковы. Или даже создать скриптик для заполнения филдов.

Добавлено: Чт дек 06, 2007 4:09 pm
piroJOKE
Это само собой. ))) Я ж этим безобразием для ОК не первый раз занимаюсь. )))

На самом деле, меня волнуют "клоны", которые занимают лишние 16 Мб. Вот стоит ли ИХ пихать в SVN?

Пример(ы):

new_1-1.fld
new_1-2.fld
new_1-3.fld
new_1-4.fld
new_2-1.fld
new_2-2.fld
new_2-3.fld
new_2-4.fld
new_3-1.fld
...
priest_3-1.fld
pvp_c_room.fld
pvp_n_1-1.fld
pvp_n_1-2.fld
pvp_n_1-3.fld
pvp_n_1-4.fld
pvp_n_1-5.fld
pvp_n_2-1.fld
pvp_n_2-2.fld
...
turbo_n_1.fld
turbo_n_16.fld
turbo_n_4.fld
turbo_n_8.fld
wizard_1-1.fld
...
и т.д. и т.п.

Ы?

Добавлено: Чт дек 06, 2007 4:15 pm
kLabMouse
piroJOKE
Возможно. Но например ПВП и Турботрек нах не нужен.

Добавлено: Чт дек 06, 2007 9:18 pm
4epT
new_1-1.fld
new_1-2.fld
new_1-3.fld
new_1-4.fld
это же одна и таже карта, и кора это понимает..

Добавлено: Чт дек 06, 2007 10:22 pm
piroJOKE
4epT
Эту-то оно понимает (правда через анальную клоаку), а как насчет остальных job-карт?... :(

Разумеется, оптимальным было бы написать поддержку resnametable для ОК, но мне это не по зубам. :(

Добавлено: Ср янв 30, 2008 1:26 pm
piroJOKE
Получено предварительное "добро" на создание дубликатов карт вроде y_airport и т.п., короче, перцы, готовьтесь к распуханию ваших fields-папок метров этак на 10...15! :twisted:

ЗЫ: Вот тут с Кали был разговор: http://forums.openkore.com/viewtopic.ph ... 108#210108

Добавлено: Вс май 04, 2008 6:14 pm
4epT
(* pJ: о запуске перловских скриптов без установки ActivePerl, средствами ОК *)

мастхев:
piroJOKE писал(а):Ура! Решение найдено!
Итак, положим нам надо запустить перловский скрипт c:\temp\zzzz.pl
Пишем:
start.exe ! c:\temp\zzzz.pl
Всё! :twisted:

ЗЫ: Обнаружилось это на примере запуска Посейдоныча: viewtopic.php?p=49003#49003

ЗЗЫ: Кстати, теперь любой желающий сможет сам выдернуть поля из клиента скриптом \fields\tools\gat2fld.pl

Re: Вытаскиваем карты из клиента, преобразуем их в поля для Kore

Добавлено: Чт фев 19, 2009 1:12 pm
piroJOKE
Небольшой FAQ по записи порталов.

Порталы - точки перехода между картами или зонами внутри одной карты. Без порталов ОК "не знает", как попасть на соседнюю карту.

По умолчанию запись новых порталов в ОК уже включена. (Иногда ОК даже сама записывает новый портал, когда бод случайно наступает на него).

Управляет режимом записи порталов переменная portalRecord 2 в config.txt. Сами порталы записываются в файл portals.txt, а пути между порталами ОК автоматически записывает в portalsLOS.txt.

NB! Записывайте новые порталы в режиме portalRecord 1 (а не в portalRecord 2, который стоит по умолчанию, ибо в режиме portalRecord 2 неверно записываются ассиметричные порталы!).

Чтобы записать новые порталы, лучше всего запустить ОК в режиме wxstart, перевести ai в manual, включить карту и погонять ОК по точкам порталов. Или, как вариант - то же самое проделать в режиме xKore 1.

После записи порталов следует перезапустить ОК, она предложит перекомпилировать порталы, соглашаемся; всё, ОК знает новые пути.

* * *

Q: Новые порталы вроде записал, но отчего-то при перезапуске ОК не запустилась их компиляция, что делать? reload all тоже не помогает.

A: По-моему reload нифига не перечитывает порталы, и уж точно не ре-компилирует их! (не проверял!).

Скомпилировать порталы очень просто. Закрываем ОК. Очищаем содержимое файла \tables\portalsLOS.txt (но не удаляем его!). Запускаем ОК. В этот момент ОК перекомпилирует все порталы заново. Но это может занять несколько минут.

Разумеется, это не нужно делать в каждом экземпляре ОК; можно погонять одного из ботов по всем переходам между картами, скомпилировать его порталы, и скопировать \tables\portals.txt и \tables\portalsLOS.txt в другие экземпляры ОК.

* * *

Q: Часть порталов не записалась, wtf?

A: Да, иногда порталы не записываются с первого раза. Причина не известна. Следует проверять, все ли порталы сохранились (источник, см. картинки).