|
Tehnokrat
Модератор
Откуда: Новосибирск Регистрация: Окт. 2003
Всего: 489 сообщений
|
Я "еxport variable" как-раз с помощью ArtMoney искал, сначала по значению, потом по имени. Адреса точно не меняются при каждом запуске. Да хоть бы и менялись, поиск по имени занимает доли секунды и совпадение всего одно (если переменная не содержит текст). Но вот я попытался свою прогу начать писать и сразу понял, что это будет посложнее, чем первоначально представлялось. Хотелось бы знать, как добраться до адресного пространства чужого процесса. Может найду в инете готовый компонент, облегчу себе жисть
Цитата:
Не только изменив файл, но и поставив патч (вроде от Нойда). И если мне не изменяет память - то не в файл, а на экран, хотя я не помню. А было бы здорово, всё меньше проблем. Как появится время посмортю. Кроме того, я даже знаю функцию, которая эти отладочные сообщения и выдаёт. Будем смотреть.
Точно говорю - в файл, а имя ему - debug.log В маппере работает (вроде я какой-то патч ставил), а вот в Фоле - нет. Тока непонятно, что это нам даёт - односторонняя связь получается. Краткие итоги: Пока два способа намечается 1. поиск переменной в памяти 2. изменение какой-нибудь процедуры. По поводу изменения процедуры - в файл писать сложно, по-моему лучше посылать системное сообщение внешней проге, WM_COPYDATA кажется.
----- Прошлое можно узнать, но нельзя изменить. Будущее можно изменить, но нельзя узнать.
|
Отправлено: 18:51 - 5 Мая, 2006
|
|
Ray
Модератор
Откуда: Донецк,Украина Регистрация: Янв. 2004
Всего: 746 сообщений
|
Ха Всё гораздо проще! Советую ознакомиться. Это пока набросок. За граматику не винить, писал быстро. За смысловые ошибки/неточности/неправильную инфу тоже. Будут вопросы - порешаем.
Цитата: Но вот я попытался свою прогу начать писать и сразу понял, что это будет посложнее, чем первоначально представлялось. Хотелось бы знать, как добраться до адресного пространства чужого процесса.
Ты не представляешь, сколько у меня на это ушло времени и нервов. Хоть это очень легко. Как я написал в доке - этим уже не надо заниматься, всё это решается проще. Но если интересно - у меня есть готовый пример, могу дать.
Цитата: Точно говорю - в файл, а имя ему - debug.log В маппере работает (вроде я какой-то патч ставил), а вот в Фоле - нет. Тока непонятно, что это нам даёт - односторонняя связь получается.
В фолле прекрасно работает. Я неоднократно проверял. И связь не только односторонняя. Если непонятно из доки - спрашивайте. Кроме того, у меня данный файл теперь называется foinp.con
Цитата: Краткие итоги: Пока два способа намечается 1. поиск переменной в памяти 2. изменение какой-нибудь процедуры.
1.Не надо. Можно проще. 2.Тем более не надо. По второму - думаю понятно. А по первому - долго, нудно, глючно. Кроме того ограниченность вывода текста. А при помощи дебаггера я писал в файл такие конструкции: op_debug_msg("This is for fonline"; op_debug_msg("{100}{}{This is for fonline}"; И получал в файле foinp.con: ******* This is for fonline {100}{}{This is for fonline} ******* Единственное что меня беспокоит - время прошедшее с определённого действия на одном компе и его отображения на другом. (Добавление от 1:19 - 6 Мая, 2006.) Вот так можно протестить дебаггер и каркас проги (запуск фола, а также работу в фоновом режиме (увидеть не получится ) Линк
----- Не бывает невозможных задач – бывает мало времени.
|
Отправлено: 0:26 - 6 Мая, 2006
|
|
Tehnokrat
Модератор
Откуда: Новосибирск Регистрация: Окт. 2003
Всего: 489 сообщений
|
Ну, если всё это работает, я не стану продолжать возиться с переменными. Щас буду опыты ставить на Фоле, а потом всё обдумывать. Кстати, я не уверен, что стоит с прошками связываться - все хары, умения и перки новому игроку (на сервере) можно выставлять в скрипте.
----- Прошлое можно узнать, но нельзя изменить. Будущее можно изменить, но нельзя узнать.
|
Отправлено: 18:51 - 6 Мая, 2006
|
|
Tehnokrat
Модератор
Откуда: Новосибирск Регистрация: Окт. 2003
Всего: 489 сообщений
|
to Ray Значит так, передача данных из Фола через debug.log в принципе работает, если не считать того, твоя прога 111.exe постоянно выполняет "недопустимую операцию". Ray, может расскажешь подробно чего делают твои проги, технологию, так сказать? А вот с передачей данных в Фол, извини, не понял. Я попытался изменять содержимое msg-файлов во время работы Фола, но он их не перечитывает. Может я чего-то не так понял. Объясни, что значит загадочная фраза:
Цитата:
2) Команды, полученные приложением fonline.exe с сервера, обрабатываются и записываются в файл “foout.con” (или в нужный msg файл) Они обрабатываются двигом фолла при помощи скриптовой системы (см. “mrfixit”)
----- Прошлое можно узнать, но нельзя изменить. Будущее можно изменить, но нельзя узнать.
|
Отправлено: 11:30 - 7 Мая, 2006 | ИСПРАВЛЕНО: Tehnokrat - 14:30 - 7 Мая, 2006
|
|
Ray
Модератор
Откуда: Донецк,Украина Регистрация: Янв. 2004
Всего: 746 сообщений
|
Цитата:
если не считать того, твоя прога 111.exe постоянно выполняет "недопустимую операцию". Ray, может расскажешь подробно чего делают твои проги, технологию, так сказать?
Интересно Эта прога не делает ничего. Просто висит в фоновом режиме и всё. Странно, раньше всё работало, я просто выкинул всё лишнее и оставил каркас. Да и у меня всё работает. Надо смотреть. Исходник нужен? Могу отправить на мыло.
Цитата: А вот с передачей данных в Фол, извини, не понял. Я попытался изменять содержимое msg-файлов во время работы Фола, но он их не перечитывает.
А вот с этим я прогнал. Я думал каждый раз смотрит из файла. Буду думать. Кстати, если выйти и снова войти на карту - фолл перечитает таки msg по новой.
Цитата: Объясни, что значит загадочная фраза:
Вообще, в mrfixit реализовано скриптовое чтение строк. Я хотел этим воспользоваться.
Цитата: в файл “foout.con” (или в нужный msg файл)
Я придумал вариант обработки событий. Возможно он ещё изменится (к тому же проблема с msg - см. выше), но идея была такова (слегка изменилась по сравнению с диз. доком): foout.con - пока описывать не буду fonline.msg - содержит список всех карт. И ещё какие-нибудь данные, пока не определённые(дополнятся в ходе разработки) number.msg содержит id(номера) всех игроков и предметов. Позже раскажу зачем. map"имя карты".msg - основные файлы событий. Имеют структуру: [members] {id}{}{координаты} ...... [items] {id}{}{координаты} [actions] {}{}{команды для исполнения} Скорее всего всё будет менятся - это черновой вариант. А пока идея такова. Как только игрок переходит на определённую карту, на ней уже могут находится другие игроки. Тогда происходит растановка игроков и предметов и начинают выполняться действия, начиная с последнего. P.S. Я так подумал - придётся отключать все системные кнопки(кража, лечение, ремонт, пипбой) и заменять их интерфейсными эквивалентами лечения, журнала и пр. Карту мира наверное тоже придётся выключить. Без неё можно, думаю, обойтись. Связанно это с согласованием внутриигрового времени.
----- Не бывает невозможных задач – бывает мало времени.
|
Отправлено: 13:46 - 7 Мая, 2006
|
|
Tehnokrat
Модератор
Откуда: Новосибирск Регистрация: Окт. 2003
Всего: 489 сообщений
|
Цитата:
-------------------------------------------------------------------------------- если не считать того, твоя прога 111.exe постоянно выполняет "недопустимую операцию". Ray, может расскажешь подробно чего делают твои проги, технологию, так сказать? -------------------------------------------------------------------------------- Интересно Эта прога не делает ничего. Просто висит в фоновом режиме и всё. Странно, раньше всё работало, я просто выкинул всё лишнее и оставил каркас. Да и у меня всё работает. Надо смотреть. Исходник нужен? Могу отправить на мыло.
У меня Форточки 98, может поэтому. Кидай все исходники на моё мыло, в том числе и той проги, которая с памятью Фола работает.
Цитата:
P.S. Я так подумал - придётся отключать все системные кнопки(кража, лечение, ремонт, пипбой) и заменять их интерфейсными эквивалентами лечения, журнала и пр. Карту мира наверное тоже придётся выключить. Без неё можно, думаю, обойтись. Связанно это с согласованием внутриигрового времени.
Я тоже об этом думал, и полностью согласен. Придётся обходится без карты мира и многого другого, но зато можно будет сделать ну очень большую локальную карту. Конечно это будет не совсем Фол, или вернее - совсем не Фол, но зато появляется возможность поиграть в хорошей компании Я думаю, что к серверу цеплять Фол вообще незачем, он будет стоять где-то в инете и отправлять клиентам инфу, полученную от одного из клиентов, а также сигналы синхронизации типа "все обработали ход, готов к следующему"
----- Прошлое можно узнать, но нельзя изменить. Будущее можно изменить, но нельзя узнать.
|
Отправлено: 14:34 - 7 Мая, 2006 | ИСПРАВЛЕНО: Tehnokrat - 17:56 - 7 Мая, 2006
|
|
Ray
Модератор
Откуда: Донецк,Украина Регистрация: Янв. 2004
Всего: 746 сообщений
|
В фоловском двиге дурацкая система работы с данными. На 99% уверен, что для передачи данных в фолл надо будет править двиг(а жаль, мне так вариант с msg нравился).
----- Не бывает невозможных задач – бывает мало времени.
|
Отправлено: 17:03 - 7 Мая, 2006
|
|
Tehnokrat
Модератор
Откуда: Новосибирск Регистрация: Окт. 2003
Всего: 489 сообщений
|
Да всё нормально будет, я сейчас пишу поиск переменной в памяти Фола на асме, так что работать должно быстро. А ещё я выяснил интересный факт - при запуске Фола под разными системами - Вынь98 и ВыньXP адрес переменной (export variable) НЕ ИЗМЕНИЛСЯ!
----- Прошлое можно узнать, но нельзя изменить. Будущее можно изменить, но нельзя узнать.
|
Отправлено: 18:18 - 9 Мая, 2006
|
|
Anchorite
Пользователь
Откуда: Не здесь Регистрация: Янв. 2003
Всего: 283 сообщения
|
Ребята, а как вы собираетесь СИНХРОНИЗИРОВАТЬ все это свое хозяйство (ресурсы и карты? Где гарантия что: 1. Карта одного игрока совпадает с картой другого (напроходимая стена у одного это широченное шоссе у другого)? 2. RedRider BB Gun у одного игрока это не Vindicator Minigun у другого? 3. APA MKII одного это не Leather Armor другого? Я понимаю, что передвинуть объект с одного место на другое это не так сложно, но ведь на этом все не кончается. Готов поспорить, что рано или поздно в вашей ситуации FO2 превратиться в простой РЕНДЕРЕР для вашей самописной сторонней проги. И тогда возникнет ворос: "А то ли я вообще делаю? И может стоит написать СВОЙ двиг с использованием ресурсов FO?"
|
Отправлено: 23:16 - 9 Мая, 2006
|
|
Ray
Модератор
Откуда: Донецк,Украина Регистрация: Янв. 2004
Всего: 746 сообщений
|
Цитата:
Готов поспорить, что рано или поздно в вашей ситуации FO2 превратиться в простой РЕНДЕРЕР для вашей самописной сторонней проги. И тогда возникнет ворос: "А то ли я вообще делаю? И может стоит написать СВОЙ двиг с использованием ресурсов FO?"
Не исключено, что так всё и обернётся. За исключением двух мелочей: во-первых, двиг писать бессмысленно. Уж лучше что по новей и красивей. И, во-вторых, я занимаюсь этим не из за мечты скажем создать fonline. Я таким раньше вообще не увлекался. Для меня это в первую очередь возможность посмотреть на фолл по другому. Поковырятся в содержимом, посмотреть что и как работает, но уже с другой стороны (я рад, что эту тему перенесли сюда). Ну и было бы интересно создать нечто подобное
Цитата:
Ребята, а как вы собираетесь СИНХРОНИЗИРОВАТЬ все это свое хозяйство (ресурсы и карты? Где гарантия что: 1. Карта одного игрока совпадает с картой другого (напроходимая стена у одного это широченное шоссе у другого)?
Поэтому я и писал в доке, что при запуске проги надо проверять текущую версию на сервере. С игрой будут поставляться карты, скрипты и т.п. Но согласен, надо сделать проверку от "умельцев", которые захотят поправить данные сами, а потом запустить игру. Но в данный момент это наименьшее из бед. (Добавление от 12:27 - 10 Мая, 2006.)
Цитата: Да всё нормально будет, я сейчас пишу поиск переменной в памяти Фола на асме, так что работать должно быстро.
Я думаю больше нет смысла возиться с памятью. Ниже приведен список байт, которые нужно изменить, чтобы фолл каждый раз при вызове ф-ии msg_string считывал данные из файла. Это работает, я проверел (заходил в фолл, смотрел диалог - потом переключался в винду менял данные и смотрел по новой. Данные изменялись.) Осталось выяснить - будут ли какие либо тормоза. На моей машине это увы проверить не получится (я тормозов не заметил) offset: 0x96F8A orig: 000F85A500 изм: FF7400EB02 Версия игры: оригинальная английская или Фаргус Посмотрите кто-нибудь. Я надеюсь три дня мороки не пропадут зря.
----- Не бывает невозможных задач – бывает мало времени.
|
Отправлено: 11:23 - 10 Мая, 2006
|
|
|
|