dynamic code reloading / компилим start.exe [old]

Общие вопросы по OpenKore обсуждаются здесь. Можно сказать, что это - основной раздел форума.
Возник вопрос? Вам сюда.

Модератор: 4epT

Правила форума
Все вопросы по OK не касающиеся плагинов и макросов публикуются в этом разделе.
Перед тем как что то писать, пожалуйста, удостоверьтесь что данная тема не поднималась, вы полностью изучили мануалы по конфигурационным файлам бота и не нашли там решения.
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8204
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

dynamic code reloading / компилим start.exe [old]

Сообщение piroJOKE »

Note: Тема немного сокращена.

Jerry, 2006-10-13:
Кто-нибудь за свю жизнь хоть раз использовал "dynamic code reloading", или хотя бы знает о его существовании ? :)
piroJOKE:
Кажется слышал, что эта штука работает только когда ты работаешь прямо из-под перла, а не из под start/wxstart. Короче, не знаю. Эм... а о чем вообще речь? Грубо говоря, откуда ты выцепил такое словосочетание?
Jerry:
копался в сырцах хотел понять как работают конфиги и плагины.
Ты кстати, знаешь, как они работают? Там какое-нибудь подобие интерпретатора есть, или тупо как параметры проверяется?
piroJOKE:
Плагины это вообще ЛОЛ. Я сначала думал что они просто врезаются в код где угодно, но ничего подобного.
Просто модули содержат в ключевых местах вызов каких-то функций... Вот к этим местам и могут подключаться плагины, только и всего!
Ну вот пример... В плагине написано:
my $hook = Plugins::addHook('AI_post', \&doCommand);
Эта штука просто подлючается к \src\functions.pl вот тут:
Plugins::callHook('AI_post');
И всё.
piroJOKE:
PS: Ты смотрел команду rc ("reload code") ?
piroJOKE:
Помучался немного с запуском без start.exe - пока ничего не получилось. Кочаю новый Перл, может в этом дело.
Jerry:
(...)
В скиппере есть С-подобный интерпретатор. Т.е. конфиги там пишутся прямо чуть лии не кодом.
Вот так:

Код: Выделить всё

OnServerMsg(string msg):

  if ( IsMatchPattern(".*White RO.*", msg) == 1 ) then
    Print("White RO is announced!")
    Say("public", "/omg")
    WhiteROAnnounce = 1
  endif

  if ( WhiteROAnnounce == 1 and IsMatchPattern("аЗЕТ *([0-9]+)\.([0-9]+) *- *([0-9]+)\.([0-9]+)", msg) == 1 ) then
    Print("White RO will start since " + GetMatchedSubString(1) + ":" + GetMatchedSubString(2) + " until " + GetMatchedSubString(3) + ":" + GetMatchedSubString(4))
    WhiteROStart = ( ToInt(GetMatchedSubString(1)) * 60 * 60 ) + ( ToInt(GetMatchedSubString(2)) * 60 )
    WhiteROEnd   = ( ToInt(GetMatchedSubString(3)) * 60 * 60 ) + ( ToInt(GetMatchedSubString(4)) * 60 )
  endif

  if ( WhiteROAnnounce == 1 and IsMatchPattern("[АТВг№|НХЎ|г№]+ *([0-9]+) №Т·Х", msg) == 1 ) then
    Print("White RO will start in " + GetMatchedSubString(1) + "minutes")
    WhiteROStart = Now() + ( ToInt(GetMatchedSubString(1)) * 60 )
    WhiteROEnd   = WhiteROStart + ( 3600 )
  endif

end
piroJOKE:
А... ага, это я видел. Согласись, голову там сломать можно.
Но результат на выходе... будет ли польза от такой imho чрезмерной гибкости?
Jerry:
фиг знает, как показывает практика, 95% юзеров нужна одна большая красная кнопка "ботать" и ничего больше :)
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8204
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

piroJOKE, 2006-10-16:
Продолжаем разговор. Наконец-то я запустил OpenKore без start.exe/wxstart.exe! ^_____^

Для этого мне пришлось заапдейтить ActivePerl до текущей версии (хух!?);
а еще установить в нем (через ppm) модудь Carp::Assert (я еще на всякий поставил Carp::Assert::More).

Заработало.

Теперь работает и динамическая перезагрузка кода:
rc
Checking functions.pl for errors...
D:/!t5020/src/functions.pl syntax OK
functions.pl passed syntax check.
Reloading functions.pl...
Reloaded.
(по умолчанию только functions.pl, но можно написать, например, rc all, и тогда... ;) )

ЗЫ: Ну и разумеется, нужны dll-ки, описанные тут: http://forums.openkore.com/viewtopic.php?t=13501 ("Download link for start.exe & XSTools.dll")

ЗЗЫ: Как скомпилировать СВОЙ start.exe ?
piroJOKE:
Хм... запустился даже древний win32gui-интерфейс. (Запуск: openkore.pl --interface=Win32). Это стрёмная разработка Аммак-Боя; тех времен, когда он еще активно сотрудничал с OpenKore-овцами. А потом он, подлец, забил на O.K. (почти забил), и сам доработал интерфейс, а теперь им торгует под торговой маркой "KoreAdvance Pro".

А вот WX отчего-то не заработал... Ругаеццо.
TK-тоже самое (а что это вообще такое?)
VX-тоже самое (правда не сильно-то и надо было)

Древний Win32 интерфейс. Юникод не поддерживаеццо, поэтому названия НПЦей закоцались:
Изображение
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

Зы. Там ваще изврат.
Но моно забацать и WX интерфейс.
Нуно только установить всего того WX монстра прямо в перл.

(piroJOKE: Эй! Стой, раз-да! Я еще не закончил публикацию СТАРЫХ постов!)
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8204
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

Jerry, 2006-10-16:
Как скомпилировать СВОЙ start.exe ?
отфл. Я в свое время задался тем же вопросом :) Ты еще спроси, как откомпилить xstools :)
piroJOKE:
Ну ладно, мы посмеялись. А теперь объясни, что тут смешного?
ЗЫ: В XSTools я даже не лезу, ибо C.
Jerry:
Смешное:
Весь опенсорсовый мир давно пришел к тому, что процесс установки из исходников должен заключаться в следющем: ./configure; make; make install.
Девелопмент опенкоры же за три года мало того, что не сподобился изобрести человеческий механизм сборки, так чтобы больше вопросы по этому поводу не возникали вообще - юзерам про компиляцию вообще рекомендуется забыть как факт. Их видимо настолько задолбали вопли "как собрать" "почему не собирается" и тд, что они вместо того чтобы оформить процесс по человечески - даже отдельным файликом написали - "сцуки не компилите кору, качайте exe". Вообще даже мейкфайл выкинули из исходников.
Щас вроде как исправляться начали, в том 193SVN5019 который тута выложен - даже вроде какието батники для сборки wxstart есть. А насчет xstools и поныне - поди догадайся, как ее собирать.
piroJOKE:
Бат-ники? Ух ты, шайтан-арба, а я и не заметил... О_о
Хм... а кто такой 'perlapp'? У меня такого нет. Не иначе, какая-то внешняя приблуда.
Щас вроде как исправляться начали, в том 193SVN5019 который тута выложен - даже вроде какието батники для сборки wxstart есть. А насчет xstools и поныне - поди догадайся, как ее собирать.
А там обычно всё лишнее из релизов убирают. Считается, что юзеру это не нужно. Ровно как те же eAthena-вцы удаляют сырцы из релизов (убил бы).
Jerry:
зы даже афина которой год от роду - из svn под линухом собирается тока в путь, что txt что sql, под винду есть уже написанные проекты для VC, и для 7, и для 8, хочешь сей а хочешь куй..
Jerry:
perlapp идет вместе с Perl Dev Kit
не знаю, как из релизов, но достатый из свн кор наводит именно на такие размышления :)
piroJOKE:
Ага... PDK надо, а оно еще и платное (?)...
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8204
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

piroJOKE:
Собрались оба exe-шника, правда WX не работает... Та же ошибка что и при запуске из .pl-файла:

Код: Выделить всё

Program terminated unexpectedly. Error message:
Can't locate Wx.pm in @INC at D:/!t5020/src/Interface/Wx.pm line 29.
BEGIN failed--compilation aborted at D:/!t5020/src/Interface/Wx.pm line 29.
Compilation failed in require at (eval 136) line 1.
BEGIN failed--compilation aborted at (eval 136) line 1.

A more detailed error report is saved to errors.txt
Press ENTER to exit this program.
Процесс сборки WX:

Код: Выделить всё

D:\!t5020>perlapp --trim Pod::Usage --icon src\build\openkore.ico --lib src --no
runlib --nologo --force --exe wxstart.exe start.pl --add Wx;Wx::Grid;Wx::Html;Wx
::XRC
Wx.pm:
        error: Can't locate Wx.pm
        refby: perlapp --add
Wx\Grid.pm:
        error: Can't locate Wx\Grid.pm
        refby: perlapp --add
Wx\Html.pm:
        error: Can't locate Wx\Html.pm
        refby: perlapp --add
I18N\Langinfo.pm:
        error: Can't locate I18N\Langinfo.pm
        refby: C:\Soft\Perl\lib\encoding.pm line 41
Wx\XRC.pm:
        error: Can't locate Wx\XRC.pm
        refby: perlapp --add

Created 'wxstart.exe'
start.exe собрался удачней, и запускается без проблем; но без варнинга всё равно не обошлось. Сборка:

Код: Выделить всё

D:\!t5020>perlapp --trim Pod::Usage --icon src\build\openkore.ico --lib src --no
runlib --nologo --force --exe start.exe start.pl
I18N\Langinfo.pm:
        error: Can't locate I18N\Langinfo.pm
        refby: C:\Soft\Perl\lib\encoding.pm line 41
Created 'start.exe'
piroJOKE:
Ага, это ему нужен пакет I18N, исправлю пост выше позже...
(...)
Ммммда, поставил все пакеты, что касались этого i18n - ругань не пропала; и кроме того я заметил что мой start.exe больше "фирменного" на 234к. Гррр.
piroJOKE:
Под WX нужны библиотеки, как пишут тут: http://forums.openkore.com/viewtopic.php?p=105565
ЗЫ: ...Размер библиотек ~23 Мб. @_@
ЗЗЫ: Симпатичные скриншоты всяких интерфейсов, на основе этих библиотек: http://wxwidgets.org/about/screensh.htm О_о
Jerry:
WX это просто кроссплатформенная библиотека графических элементов.. Как и VX и TK.
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8204
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

piroJOKE:
По большому счету, компилировать действительно смысла нету. Вот ты, Jerry, скажи, зачем это может понадобиться?
Jerry:
Это неправильная постановка вопроса. Проект опенсорсный, значит он должен компилироваться, если такое возможно. Не то чтобы совсем должен, скажем так, это правило хорошего тона.
Зачем это может понадобиться - это вопрос другой, это может понадобиться в десятках случаев.
piroJOKE:
Собственно я так и рассуждал. Но предполагал что ты уже придмал этот самый один из десяти случаев.
Jerry:
Их даже придумывать не нужно. Если ты захотел что-то изменить не в перловых скриптах, или запускать измененные перловые скрипты на машине, где нет перлового интерпретатора - то это нужно компилировать.
piroJOKE:
Эээ, погоди, ты это несерьёзно!
start.exe и wxstart.exe - это маленькие интерпретаторы. Всё, что в них уже "вмонтировано" - это интерфейс + кусочек от сети.
Вся папка src читается при старте. В ней можно изменять всё что угодно, и изменения будут подхвачены.
Это более чем гибкий механизм.

(Ты не знал? ;) )
Jerry:
мм ну значит перл вычеркиваем :)
а что тогда значит "они даже исходники из релизов выбрасывают"?
piroJOKE:
То я про еА говорил, ты присмотрись.
А вот это, что весь src перечитывается - это и есть причина их предупреждений "здесь ничего не надо компилировать".
piroJOKE:
Йааахуууу! Я WX скомпилил. ^____^

Чего я сюда залез писать... ага...
Так вот, я поставил Wx-0.26-wxmsw2.6.2-win32-u-5.8.6.zip (3.6 mb),
но не ставил wxWidgets-2.7.1.zip (21mb),
хотя по доке надо было ставить и то, и то.

Тем не менее всё скомпилилось (почему так произошло?), кроме единственной ошибки
насчет этого долбанного i18n - то же, что и в консольной версии... :\
-- [конец] -- [2006-10-17] --
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Аватара пользователя
Jerry
Профессионал
Сообщения: 1047
Зарегистрирован: Сб ноя 04, 2006 12:26 pm

Сообщение Jerry »

кстати кто видел - в девелопменте мы с вцлкой насчет компиляции пожгли немного :)
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8204
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

Ой, я мельком посмотрел так... А к чем пришли? ;)
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Аватара пользователя
Jerry
Профессионал
Сообщения: 1047
Зарегистрирован: Сб ноя 04, 2006 12:26 pm

Сообщение Jerry »

нуу ... смотря где. :) Вроде бы все хорошо должно быть
b0tter
Энтузиаст
Сообщения: 67
Зарегистрирован: Вт ноя 14, 2006 10:33 am

Сообщение b0tter »

Пытался компилировать SVN 5438 (ActivePerl 5.8.8 Build 820,PDK 6.0)
копирую *.dll с XSTools->src\auto\XSTools
В батниках вот это:
Для start.exe

Код: Выделить всё

perlapp --trim Pod::Usage --icon src\build\openkore.ico --lib src --norunlib --nologo --force --exe start.exe start.pl
Для wxstart.exe

Код: Выделить всё

perlapp --trim Pod::Usage --icon src\build\openkore.ico --lib src --norunlib --nologo --force --exe wxstart.exe start.pl --add Wx;Wx::Grid;Wx::Html;Wx::XRC
start.pl Запускается нормально.При запуске start.exe вот это:

Код: Выделить всё

D:\downloads\1\openkore>start.exe
Starting OpenKore, please wait...
/PerlApp/XSTools.pm: No such file or directory at /PerlApp/XSTools.pm line 112
BEGIN failed--compilation aborted at D:/downloads/1/openkore/src/webstart/../Fas
tUtils.pm line 19.
Compilation failed in require at D:/downloads/1/openkore/src/webstart/../Utils/D
ataStructures.pm line 23.
BEGIN failed--compilation aborted at D:/downloads/1/openkore/src/webstart/../Uti
ls/DataStructures.pm line 23.
Compilation failed in require at D:/downloads/1/openkore/src/webstart/../Plugins
.pm line 35.
BEGIN failed--compilation aborted at D:/downloads/1/openkore/src/webstart/../Plu
gins.pm line 35.
Compilation failed in require at D:/downloads/1/openkore/src/webstart/../Setting
s.pm line 37.
BEGIN failed--compilation aborted at D:/downloads/1/openkore/src/webstart/../Set
tings.pm line 37.
Compilation failed in require at src\webstart\webstart.pl line 28
.
Опять наш любимый webstart :x

До этого компилировал версии 538x-все компилировалось прекрасно.

Никто кто не в курсе как лечить, ибо качать 10 mb exe дюже дорого.
Open Your Mind. Use Open Source.
DInvalid
Грамотный
Сообщения: 368
Зарегистрирован: Вт ноя 14, 2006 4:54 pm

Сообщение DInvalid »

piroJOKE писал(а):Jerry, 2006-10-13:Цитата:Кто-нибудь за свю жизнь хоть раз использовал "dynamic code reloading", или хотя бы знает о его существовании ? :)
Использую при отладке/ковырянии в чем либо...
При этом запускаю обычным способом... start\wxstart
Пишу rc AI - перегружает исходники AI ... иногда не срабатывает правда =)
Аватара пользователя
4epT
macro-маньячина
Сообщения: 2795
Зарегистрирован: Чт дек 21, 2006 1:23 pm
Сервер RO:: 4game
Discord: ya4ept#8494

Сообщение 4epT »

блин писал-писал топик, потом оперу закрыл и всё похерилось, дану накуй, пойду в блокноте напишу, потом сюда выложу..

в п***у этот офтопик, ну правда очень обидно.. :evil:

Добавлено спустя 29 минут 27 секунд:

ладно не буду я вы*****ться и напишу по простому.

При запуске коры в папке TEMP создаются папки типа:
pdk-user
pdk-user-3636
pdk-user-2154
...

pdk - Perl Dev Kit, приставка папки для временных файлов, используемая perl для винды.
uesr - ваш логин в видне
3636, 1254, ... - pid, id процесса из perl-программы (в нашем случае openkore), который запущен.

Америкосы пишут (источник):
TEMP папки, заканчивающиеся процессом id ВСЕГДА должны быть удалены. Исключение - когда программа заканчивается, не выполняя процесс "cleanup" (очистки). Это это происходит когда что-то резко завершает процесс, как запрос POSIX::_exit ().
Суть проблеммы можно понять заглянув в папку TEMP и увидев скока места занимает папки pdk-***-****.

Ну нас с Click'ом вознивла идея:

А что если положить эти dll-ки в саму кору (в отдельную папочку), и перекомпилировать ехе-шники так чтобы они ссылались на них. Тогда ничего не будет засоряться и ехе-шники будут весить меньше.

Тока вот dll-ки не будут удалсяться? :)

Добавлено спустя 15 минут 57 секунд:

Кстати интересная заметка:
Если консольку закрыть командой quit, во папки удаляются, а если крестиком, то нефига не удаляется.

А в wxstart'е наоборот :)
Быстро и качественно напишу конфиг (макрос)! Стучи!
¤ Свежий бот ¤ Config checker ¤ Manual ¤
Изображение
Изображение
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8204
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

Хм... а если запустить openkore.pl - создаюццо эти временные файлы? То есть, может это и есть решение - установить на машину Перл, и не парить себе мосги?...
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Аватара пользователя
4epT
macro-маньячина
Сообщения: 2795
Зарегистрирован: Чт дек 21, 2006 1:23 pm
Сервер RO:: 4game
Discord: ya4ept#8494

Сообщение 4epT »

piroJOKE, не ну сам подумай нафига нужно парить мозги, устанавливать перл.. нюбы и без этого страдают..

"а если запустить openkore.pl" - хз, проверь у меня нет перла :)
Быстро и качественно напишу конфиг (макрос)! Стучи!
¤ Свежий бот ¤ Config checker ¤ Manual ¤
Изображение
Изображение
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8204
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

4epT
"Страдают" - это не самое лучшее описание ситуации, в частности, потому что они (нупы) никак не страдают от наличия лишних временных файлов. :twisted:
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download