|
Tehnokrat
Модератор
Откуда: Новосибирск Регистрация: Окт. 2003
Всего: 489 сообщений
|
Предлагаю серьёзно обсудить возможность создания online игры на движке Fallout 2. А такая возможность существует (нет, сегодня не 1 апреля и я в здравом уме ). Сразу предупреждаю, не надо сюда постить на тему "чего бы я хотел видеть в такой игре", прошу предлагать реальные идеи и пути реализации, основанные на вашем знании "внутренностей" Фола и программирования. Для начала давайте забудем про многопользовательскую online игру и подумаем какие эксперименты можно провести и чего можно получить исходя из следующих начальных условий: предположим у нас есть чистый Фолл - всё выносим нафиг, оставляем одну пустую карту с парочкой объектов и пару-тройку скриптов для возможности экспериментирования. Имеем два компа на разных концах инета. Отсюда и будем плясать. Задачу можно разбить на три части: 1. Обеспечение двустороннего взаимодействия между скриптами Фола и какой-нибудь "левой" прогой. 2. Создание простейшего клиент-серверного приложения для обеспечения канала комп<=>комп через инет. 3. Создание скриптов, которые будут использовать вышеупомянутый канал для передачи данных и реагирования на полученные данные. Пункт 1. Сначала я хотел из внешней проги найти значение какой-нибудь GVAR, мониторить его и менять при необходимости, но выяснил, что адреса GVAR в адресном пространстве Фола не постоянны и меняются при каждом запуске игры, что не есть хорошо. Тогда я описал export variable. По-моему самое оно. При каждом запуске Фола адрес этой переменной не изменялся, даже когда я редактировал скрипт и добавлял туда другие переменные. Вот вам и канал "скрипт фола"<=>"левая прога". Это можно использовать не только для создания Фола online, но и для создания внешних "заплаток" на Фол. Если есть идеи получше, как обеспечить взаимодействие "скрипт"<=>"левая прога" - предлагайте. Ещё я попутно выяснил, что если в переменной не число, а строка, то эта переменная содержит адрес строки (ссылку на строку). К сожалению этот адрес изменяется при присвоении новой текстовой строки этой переменной внутри скрипта, но поскольку сам адрес переменной не меняется, вполне можно обеспечить передачу текстовых данных с одного Фола на другой. Что из всего этого можно в ближайшей перспективе получить? А вот что. 1. Представьте себе два компа с Фолами соединённые через инет нашей будующей клиент-серверной прогой. За одним из них сидит чел и тыкает мышкой в карту, чузен, соответственно переходит на новую позицию. В скрипте чуза по таймеру вызывается обработчик, который замечает смену позиции и сообщает новую позицию клиент-серверному приложению. Оно, в свою очередь, передаёт эту позицию на второй комп, в скрипт какого-нибудь субъекта и этот субъект послушно переходит на новое место. 2. Можно обеспечить передачу вещей "чузен на 2-м компе"<=>"субъект на 2-м компе" по команде чузена с 1-го компа. То есть субъект на 2-ом компе является как бы аватаром чузена с 1-го компа. 3. Можно создать что-то типа инетчата на движке Фола (вполне реально на интерфейсных функциях). Для начала достаточно. Предлагаю подумать, обсудить. Если есть желающие.
----- Прошлое можно узнать, но нельзя изменить. Будущее можно изменить, но нельзя узнать.
|
Отправлено: 18:16 - 2 Мая, 2006
|
|
Pavel
Модератор
Откуда: Одесса Украина Регистрация: Май 2004
Всего: 368 сообщений
|
Tehnokrat Ты в точку попал, экспорт вариаблы действительно не всегда меняется, но на разных компах он в разных местах. Ray уже работал над этим вопросом, для работы с динамикой на карте мира и не только, собственно весь мой мод от этого зависит. Более того, можно отслеживать и все переменные фала, вопрос только в алгоритме, он довольно долог.
----- В жизни нельзя быть уверенным на 100%, ведь никогда не знаешь когда...
|
Отправлено: 20:21 - 2 Мая, 2006
|
|
Spy
Реалист
Откуда: Все там будем... Регистрация: Май 2005
Всего: 374 сообщения
|
2 Tehnokrat Правильной дорогой движетесь, товарищь. При случае свяжись с Ray-ем. Он, насколько я помню, тоже писал некую "левую" прогу, которая работала с сегментом оперативки Фола.
----- Хочешь, чтобы что-то было сделано хорошо - сделай сам.
|
Отправлено: 20:27 - 2 Мая, 2006
|
|
Tehnokrat
Модератор
Откуда: Новосибирск Регистрация: Окт. 2003
Всего: 489 сообщений
|
То, что адреса переменных на разных компах разные, меня не слишком беспокоит, так-как найти переменную довольно легко по её имени. Там жёсткая структура - сначала идёт имя, потом какая-то фигня, видимо тип и ещё чего-то, а в конце значение (или адрес строки). Так что здесь проблем не вижу. А беспокоят меня две вещи - создание клиент-серверного приложения и боевой режим (в боевом режиме с управлением всё плохо, хотя Raven когда-то занимался эмуляцией боевого режима на стандартных функциях но всё это было сыро). С Ray'ем я поговорю, если он сам здесь объявится.
----- Прошлое можно узнать, но нельзя изменить. Будущее можно изменить, но нельзя узнать.
|
Отправлено: 22:04 - 2 Мая, 2006
|
|
Ray
Модератор
Откуда: Донецк,Украина Регистрация: Янв. 2004
Всего: 746 сообщений
|
Я здесь. Отвечу ближе к ночи - сейчас нет времени. P.S. Павел, спасибо за линк. Борду глючит, я пропустил новую тему.
----- Не бывает невозможных задач – бывает мало времени.
|
Отправлено: 20:06 - 3 Мая, 2006
|
|
Ray
Модератор
Откуда: Донецк,Украина Регистрация: Янв. 2004
Всего: 746 сообщений
|
Итак: Сразу скажу - скорее всего, на 99%, с боевым режимом сделать ничего не получится. За бой отвечает двиг, большинство скриптов в боевом режиме не работает. Переопределить действия нпс не получится. Но в принципе и без боя есть интересные задумки, но полноценного fonline не получится. Однако, и без этого есть интересные идеи. О них говорить думаю пока бессмысленно. Я когда увидел эту тему - у меня появилась идея как нормально сделать то, над чем я работал и что пока не получилось сделать. Таким образом можно сделать динамику, над которой я бился. Не знаю насколько реальна моя новая идея, надо будет подумать, посоветоваться. Но об этом ниже.
Цитата:
Сначала я хотел из внешней проги найти значение какой-нибудь GVAR, мониторить его и менять при необходимости, но выяснил, что адреса GVAR в адресном пространстве Фола не постоянны и меняются при каждом запуске игры, что не есть хорошо.
Я тоже с этого начинал. Однако, адреса GVAR меняются не только при каждом запуске игры, но и при смене локаций и пр. Что не есть хорошо.
Цитата:
Тогда я описал export variable. По-моему самое оно. При каждом запуске Фола адрес этой переменной не изменялся, даже когда я редактировал скрипт и добавлял туда другие переменные.
Лучше, но тоже не есть гуд. Как уже сказали, на разных машинах они в разных местах. Можно, конечно же при установке проги (мода\fonline) искать нужное место в памяти, но у меня это получалось долго и коряво (да и глючно). Если подскажешь нормальный способ поиска адреса в памяти - можно начинать думать. Правда я никогда клиент-серверное приложение не писал. Но надо же пробовать. Есть идея каким способом заставить реагировать фол на действия игроков на разных компах. Ничего особо сложного не должно быть, а там как получится. Но это как запасной вариант. Два других: Mynah предлагал (насколько я сейчас помню) приблизительно такой вариант: в определённый момент запускается нужная прога, с определённым ключём. В зависимости от ключа - выполняются определённые дествия. Для динамики это хорошо - для fonline не подходит. Я пытался реализовать эту идею, но возник ряд проблем, с которыми я не смог справиться. Вот какая идея посетила меня вчера: я не знаю, насколько это фантастично, но суть в следующем: как и в предыдущем варианте нужен ассемблер в чистом виде. Идея в том, чтобы заменить одну из фоловских скриптовых функций (которая не используется). Аргументом в функцию передавать строку. Функция бы не делала ничего, кроме записи полученной строки в файл. Запись в файл не так уж и сложно сделать. Проблема в том, как переопредилить (а перед этим найти) нужную функцию (а есть ли такая?) Это пока из области научной фантастики. Вот и всё, что пока хотелось сказать.
----- Не бывает невозможных задач – бывает мало времени.
|
Отправлено: 19:58 - 4 Мая, 2006
|
|
Pavel
Модератор
Откуда: Одесса Украина Регистрация: Май 2004
Всего: 368 сообщений
|
Хм, вот какая мысля меня посетила.. А если привязаться к тому, какой ресурс использует фалл? В смысле отслеживать обращение к скрипту, текстовику, фрм? Хотя на этом мало чего вообще построишь, но для надстройки над двигом самое оно... если сделать... хотя... На счет замены функции... так, это... взять хотя бы "obj_can_hear_obj", у меня она, как то, криво работала. А вообще, было бы очень хорошо достичь хоть какого то результата. Ведь и для динамики и для ФОнлайн нужна привязка к переменным, если сделать быстрый отлов местарасположения переменной в памяти, то всем сразу станет легче. Еще мысля... Есть стандартные функции, к примеру вывод квадрата с цветом и т.д. может есть и стандартная функция вывода переменной в специально отведенное место, а мы об этом не сном не духом... или я сказал бред?
----- В жизни нельзя быть уверенным на 100%, ведь никогда не знаешь когда...
|
Отправлено: 20:24 - 4 Мая, 2006
|
|
Tehnokrat
Модератор
Откуда: Новосибирск Регистрация: Окт. 2003
Всего: 489 сообщений
|
to Ray
Цитата:
Сразу скажу - скорее всего, на 99%, с боевым режимом сделать ничего не получится. За бой отвечает двиг, большинство скриптов в боевом режиме не работает. Переопределить действия нпс не получится.
Не факт, кстати, что не получится. Там есть интересная функция attack_complex с которой далеко не всё ясно. Возможно придётся вырубать боевой режим после каждого действия. А ещё есть такая идея - пусть боты деруться, а чузены типа командуют. Как? А фиг его знает, думать надо.
Цитата:
Но в принципе и без боя есть интересные задумки, но полноценного fonline не получится.
На полноценный я и не надеюсь, хочу вот понять, сколько из всего этого можно выжать по-максимуму.
Цитата:
Цитата: -------------------------------------------------------------------------------- Тогда я описал export variable. По-моему самое оно. При каждом запуске Фола адрес этой переменной не изменялся, даже когда я редактировал скрипт и добавлял туда другие переменные. -------------------------------------------------------------------------------- Лучше, но тоже не есть гуд. Как уже сказали, на разных машинах они в разных местах. Можно, конечно же при установке проги (мода\fonline) искать нужное место в памяти, но у меня это получалось долго и коряво (да и глючно). Если подскажешь нормальный способ поиска адреса в памяти - можно начинать думать. Правда я никогда клиент-серверное приложение не писал. Но надо же пробовать. Есть идея каким способом заставить реагировать фол на действия игроков на разных компах. Ничего особо сложного не должно быть, а там как получится. Но это как запасной вариант.
Я вот тоже никогда клиент-серверные приложения не писал... а придётся, если до него вообще дело дойдёт. Эти штуки не столь сложно писать, сколь сложно отлаживать, сам понимаешь почему. Насчёт variable - может расскажешь, как ты их искал, надо же от чего-то отталкиваться. В любом случае, я пока не готов сбрасывать их со счетов, и в ближайшее время изучу этот вопрос подробнее.
Цитата:
Mynah предлагал (насколько я сейчас помню) приблизительно такой вариант: в определённый момент запускается нужная прога, с определённым ключём. В зависимости от ключа - выполняются определённые дествия. Для динамики это хорошо - для fonline не подходит. Я пытался реализовать эту идею, но возник ряд проблем, с которыми я не смог справиться.
Что за проблемы? Давай будем вместе решать.
Цитата:
Вот какая идея посетила меня вчера: я не знаю, насколько это фантастично, но суть в следующем: как и в предыдущем варианте нужен ассемблер в чистом виде. Идея в том, чтобы заменить одну из фоловских скриптовых функций (которая не используется). Аргументом в функцию передавать строку. Функция бы не делала ничего, кроме записи полученной строки в файл. Запись в файл не так уж и сложно сделать. Проблема в том, как переопредилить (а перед этим найти) нужную функцию (а есть ли такая?) Это пока из области научной фантастики.
Не так уж и фантастично, но явно сложнее, чем через переменную. Придётся долго возиться с дебагером. Да и фиг знает какие там функции не используются - даже если они не задействованы в скриптовой системе, это ещё не значит, что куски их кода не задействованы в основной проге. Можно получить кучу нескучных глюков (Добавление от 21:12 - 4 Мая, 2006.) to Pavel
Цитата:
Хм, вот какая мысля меня посетила.. А если привязаться к тому, какой ресурс использует фалл? В смысле отслеживать обращение к скрипту, текстовику, фрм?
Обращения к файлам отслеживать можно (например Filemon это делает, значит сможем и мы), вот только не знаю, чего можно этим добиться. Ну узнаем мы, что было обращение к какому-то файлу и чего? Сам факт обращения мало чего даёт, хотелось бы получить передаваемую инфу, а как - не знаю.
Цитата:
А вообще, было бы очень хорошо достичь хоть какого то результата. Ведь и для динамики и для ФОнлайн нужна привязка к переменным, если сделать быстрый отлов местарасположения переменной в памяти, то всем сразу станет легче.
Во всяком случае с п.1 я твёрдо настроен разобраться. С остальными - по возможности.
Цитата:
Еще мысля... Есть стандартные функции, к примеру вывод квадрата с цветом и т.д. может есть и стандартная функция вывода переменной в специально отведенное место, а мы об этом не сном не духом... или я сказал бред?
Эт ты про интерфейсные функции видимо. Что-то вспоминаю следующего характера - изменив какую-то строку в конфигурационном файле толи Маппера, то ли самого Фола можно обеспечить вывод отладочных сообщений, переменных и ещё всякой фигни в спец. файл. Надо будет поразбираться. Так-что твоя мысль не бред, рациональное зерно в ней есть.
----- Прошлое можно узнать, но нельзя изменить. Будущее можно изменить, но нельзя узнать.
|
Отправлено: 21:09 - 4 Мая, 2006 | ИСПРАВЛЕНО: Tehnokrat - 23:28 - 9 Мая, 2006
|
|
Ray
Модератор
Откуда: Донецк,Украина Регистрация: Янв. 2004
Всего: 746 сообщений
|
Цитата: На счет замены функции... так, это... взять хотя бы "obj_can_hear_obj", у меня она, как то, криво работала.
Зачем же её? Вот лучше кандидат:
Цитата: int how_much(int val) - возвращает оценку результата "броска кубика" Аргументы: val - результат "броска кубика" Возвращаемое значение: ? Примечания: На самом деле аргументы принимать отказывается. Ни в одном скрипте не используется.
Даже с передаваемым аргументом. Но это всё лирика, надо искать.
Цитата: А ещё есть такая идея - пусть боты деруться, а чузены типа командуют. Как? А фиг его знает, думать надо.
Посмотрим.
Цитата: Насчёт variable - может расскажешь, как ты их искал, надо же от чего-то отталкиваться. В любом случае, я пока не готов сбрасывать их со счетов, и в ближайшее время изучу этот вопрос подробнее.
Отчего ж не рассказать: старым дедовским способом - перебором Для быстрого поиска вручную - нужна сортировка. Что не приемлимо. Я задавал значение определённой гвары, а потом, с учётом того, что размер переменной 4 байта сравнивал каждый четвёртый (при совподении проверял остаток числа). Поиск занимал от 30 сек до 2 мин. Но это уже от безысходности. Вообще-то есть хороший и быстрый способ поиска значения. Подозреваю, что именно он используется в ArtMoney. Там отсев нужных значений дело нескольких секунд. Правда кода такого поиска я не нашёл. Нашёл нечто схожее, с использованием страниц памяти (вроде так). Поиск и правда занимал 2-10 сек. Плохо только то, что в 60% случаев алгоритм вообще не находит нужных значений. Это всё проверялось на гварах. Плюнул я на это дело, когда понял, что и во время игры переменная может менять свой адресс в памяти (при открытии новых локаций). Export variable я не смотрел. Если адрес не изменяется во время игры - уже что-то.
Цитата: Что за проблемы? Давай будем вместе решать.
Вот такие: Во-первых, у меня так и не заработал ассемблер\дизассемблер Это так, к слову. Я как маньяк правил код вручную в хексовом редакторе (а вам слабо Ну да ладно, это мелочи. Вот кусок текста:
Цитата: 1)Найдены все нужные функции в fallout2.exe 2)Программа, которая вызывается двигом фолла приспособлена под нужные задачи (убрана функция, которая дожидалась окончания работы вызваной программы. С ней фолл благополучно падал, если прога вызывалась не вначале игры) 3)Выключен вызов проги (ereg\reg32a.exe) при старте (именно её мы и заменяем на свою) 4)Выключено ограничение запуска этой проги (в оригинале данная программа должна запускать всего-лишь в течении 5 дней(?месяцев) с времени установки игры) 5)Установлен вызов проги при изменении данных (переадресация на нужную функцию). Что отсталось сделать+мелкие проблемы 1)При вызове нужной программы винда переключается на неё, а фолл сворачивается. Нужно добиться, чтобы фолл оставался всё время активным. С этим пока не получается разобраться, хотя скорее всего, нужно поменять аргументы при вызове программы (функция имеет приблизительно такой вид: CreateProcessA("ereg\reg32a.exe", 0, 0, 0, 0, 0, 0, & V0, & (V104.cb), & (V148.hProcess))) 2)Ещё не успел разобраться, как фолл работает с гварами. Пока не знаю, как поставить проверку. Но не думаю, что это станет большой проблемой. 3)Передача аргументов в вызывающуюся программу. (Из оперы: Как это сделать руками или где достать нормальный дизассемблер...)
Для реализации динамики нужно исправить все прблемы. Для fonline - этот метод не подходит. Но раз уж просил... Метод с заменой функции мне нравится больше.
Цитата: Эт ты про интерфейсные функции видимо. Что-то вспоминаю следующего характера - изменив какую-то строку в конфигурационном файле толи Маппера, то ли самого Фола можно обеспечить вывод отладочных сообщений, переменных и ещё всякой фигни в спец. файл.
Не только изменив файл, но и поставив патч (вроде от Нойда). И если мне не изменяет память - то не в файл, а на экран, хотя я не помню. А было бы здорово, всё меньше проблем. Как появится время посмортю. Кроме того, я даже знаю функцию, которая эти отладочные сообщения и выдаёт. Будем смотреть.
----- Не бывает невозможных задач – бывает мало времени.
|
Отправлено: 0:45 - 5 Мая, 2006
|
|
Ray
Модератор
Откуда: Донецк,Украина Регистрация: Янв. 2004
Всего: 746 сообщений
|
Про гвары можно забыть - дебаггер отлично работает. При помощи него можно писать инфу из скриптов в файл.
----- Не бывает невозможных задач – бывает мало времени.
|
Отправлено: 10:15 - 5 Мая, 2006
|
|
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
|
|
Tehnokrat
Модератор
Откуда: Новосибирск Регистрация: Окт. 2003
Всего: 489 сообщений
|
to Anchorite
Цитата:
Ребята, а как вы собираетесь СИНХРОНИЗИРОВАТЬ все это свое хозяйство (ресурсы и карты? Где гарантия что: ...
Никаких гарантий понятно нет, но пока я исхожу из того, что у всех будут одинаковые карты, скрипты, версии Фола и т.п. Будет необходимость в дополнительной защите, уж эту-то проблему мы как-нибудь решим. И всех обладателей "Фола не той системы" отправим за обновлением.
Цитата:
И тогда возникнет ворос: "А то ли я вообще делаю? И может стоит написать СВОЙ двиг с использованием ресурсов FO?"
Я бы с удовольствием, но хотелось бы увидеть хоть что-нибудь "online" ещё при жизни Уже сколько раз поднимался вопрос о новом двиге для Фола, но нет его и поныне А тут хоть что-то реальное, что-то такое, что смогу сделать лично я и в обозримом будующем. Ну или хотя бы получить удовольствие от процесса работы над этим исследовательским проектом. to Ray Поздравляю Эти твои "три дня мороки" даром не пропали, всё действительно работает, и даже на моём компе (проц на 500 мегагерцов, оперативы всего 128 метров) протормозок не замечено. Интересные перспективы открываюся, и не только для этого проекта. Однако я тоже закончил свою прогу по поиску expert variable. И она даже работает
----- Прошлое можно узнать, но нельзя изменить. Будущее можно изменить, но нельзя узнать.
|
Отправлено: 19:50 - 10 Мая, 2006
|
|
Tehnokrat
Модератор
Откуда: Новосибирск Регистрация: Окт. 2003
Всего: 489 сообщений
|
Кажись пришло время обсудить концепцию сервера. Если написать полноценную серверную прогу, понадобится хостинг с Shell'ом. Я вот думаю, нельзя ли обойтись без этого и сделать сервер на CGI. Правда я в этом не разбираюсь, но вдруг кто разбирается? Вижу два возможных варианта: Вариант 1 Сервер принимает данные от клиента, хранит их и выдаёт по запросу других клиентов. Вариант 2 Сервер хранит адреса всех клиентов и при получении инфы от одного из клиентов рассылает её по адресам.
----- Прошлое можно узнать, но нельзя изменить. Будущее можно изменить, но нельзя узнать.
|
Отправлено: 19:18 - 14 Мая, 2006
|
|
Ray
Модератор
Откуда: Донецк,Украина Регистрация: Янв. 2004
Всего: 746 сообщений
|
2 Tehnokrat: Я думаю мы сработаемся Ты часом мысли читать не умеешь? Ты опять высказал то, что я давно обдумываю. По существу: я пока не очень разбираюсь в разработке подобных приложений, но... то, что ты написал вполне осуществимо. У меня сейчас есть предмет "Программирование в Интернет". Так вот, одна из лаб звучит "Разработка CGI-сценария" То что надо. Думаю справимся. Из двух вариантов я бы выбрал первый по двум причинам: 1) легче в реализации (в этом я на 100% уверен) 2) дело в том, что связь с определённым игроком(компом) может прерываться (характерно для диал-ап). А так пользователь сам будет получать данные тогда, когда они ему нужны. P.S. Я заканчиваю предварительный этап: выключение всех кнопок (сохранение, загрузка, лечение) и меню скилов. Плюс автоматический патч на msg и debug. P.P.S. Для передачи данных в фолл я так понимаю мы остановились на использовании msg? Просто уточнил. Скоро выложу немного обновлённую доку.
----- Не бывает невозможных задач – бывает мало времени.
|
Отправлено: 23:46 - 14 Мая, 2006
|
|
Tehnokrat
Модератор
Откуда: Новосибирск Регистрация: Окт. 2003
Всего: 489 сообщений
|
Я могу читать только те мысли, которые витают в воздухе
Цитата:
По существу: я пока не очень разбираюсь в разработке подобных приложений, но... то, что ты написал вполне осуществимо. У меня сейчас есть предмет "Программирование в Интернет". Так вот, одна из лаб звучит "Разработка CGI-сценария" То что надо. Думаю справимся. Из двух вариантов я бы выбрал первый по двум причинам: 1) легче в реализации (в этом я на 100% уверен) 2) дело в том, что связь с определённым игроком(компом) может прерываться (характерно для диал-ап). А так пользователь сам будет получать данные тогда, когда они ему нужны.
Вариант 1 действительно выглядет проще, но я опасаюсь потери синхронизации. Если один из клиентов начнёт тормозить, возникнут большие проблемы. При втором варианте можно будет приостанавливать игру до получения подтверждений от всех клиентов и выкидывать из игры те клиенты, которые долго не отвечают. Да, сложнее, но возможно это единственно верный способ избежать проблем с синхронизацией. Я тоже сижу на дайлапе, так что будем посмотреть. Кстати, чтобы не писать CGI-скрипт с нуля, можно взять за основу любой простой чат. Тот же принцип.
Цитата:
P.S. Я заканчиваю предварительный этап: выключение всех кнопок (сохранение, загрузка, лечение) и меню скилов. Плюс автоматический патч на msg и debug
Боевой режим, думаю, пока тоже лучше отключить, если есть возможность. Только не забывай записывать, где что лежит и какие изменения делаешь - пригодится.
Цитата:
P.P.S. Для передачи данных в фолл я так понимаю мы остановились на использовании msg? Просто уточнил. Скоро выложу немного обновлённую доку.
Вопрос нуждается в дополнительном изучении - что будет, если Фол обратится к msg-файлу как раз в тот момент, когда прога его меняет (глюк, обращение к master.dat или ещё чего)? С переменными то же самое. Я поэкспериментирую в свободное время. Как бы не пришлось забыть оба этих способа и начать ломать функции Фола. А вот получение данных из debug.log мне не очень нравится - слишком много посторонней фигни в этом файле. В принципе, способ передачи данных Фол<->клиент, роли не играет, пусть это будут заморочки того, кто будет писать клиент, если я - значит мои А доку лучше писать без привязки к конкретному способу (ИМХО). P.S. Я тоже надеюсь, что мы сработаемся P.P.S. Поскольку я начал эту тему, то готов взять на себя любую работу, которую не получится переложить на других, но уж если получится... я обязательно попытаюсь это сделать и заранее прошу на мои попытки не обижаться Осчусчаю, понимаешь, склонность к стратегическому планированию и руководящей работе (шутка юмора)
----- Прошлое можно узнать, но нельзя изменить. Будущее можно изменить, но нельзя узнать.
|
Отправлено: 20:42 - 15 Мая, 2006
|
|
Ray
Модератор
Откуда: Донецк,Украина Регистрация: Янв. 2004
Всего: 746 сообщений
|
Цитата: Вариант 1 действительно выглядет проще, но я опасаюсь потери синхронизации. Если один из клиентов начнёт тормозить, возникнут большие проблемы. При втором варианте можно будет приостанавливать игру до получения подтверждений от всех клиентов и выкидывать из игры те клиенты, которые долго не отвечают. Да, сложнее, но возможно это единственно верный способ избежать проблем с синхронизацией. Я тоже сижу на дайлапе, так что будем посмотреть.
Это самый сложный вопрос (ИМХО). Мы ж не можем запретить игроку на своей машине не ходить. Нет, можем конечно, но это не красиво. Нужно изучать этот вопрос. Пока ничего не могу ответить.
Цитата: Боевой режим, думаю, пока тоже лучше отключить, если есть возможность. Только не забывай записывать, где что лежит и какие изменения делаешь - пригодится.
Возможность есть. Изменения естественно записываю. Как же без этого.
Цитата: Вопрос нуждается в дополнительном изучении - что будет, если Фол обратится к msg-файлу как раз в тот момент, когда прога его меняет (глюк, обращение к master.dat или ещё чего)?
Ничего плохого. Я планирую поместить всё это в critter_p_proc. Он же срабатывает 10(вроде) раз в секунду. Срабатывает команда только при полном соответствии в названии. Если не полностью допишется в файл - ничего страшного, как допишется - сработает. Проблем с одновременным доступом вроде как быть не должно - т.к. один читает, а другой пишет, а не одновременно.
Цитата: А вот получение данных из debug.log мне не очень нравится - слишком много посторонней фигни в этом файле.
Во-первых, и фиг с ней. Никто не заставляет с ней работать. А, во-вторых, я могу её вырубить - долго, нудно, но не сложно.
Цитата: я обязательно попытаюсь это сделать и заранее прошу на мои попытки не обижаться
А я пока не против Только бы время было свободное.
----- Не бывает невозможных задач – бывает мало времени.
|
Отправлено: 21:12 - 15 Мая, 2006
|
|
Tehnokrat
Модератор
Откуда: Новосибирск Регистрация: Окт. 2003
Всего: 489 сообщений
|
Цитата:
Цитата: -------------------------------------------------------------------------------- Вопрос нуждается в дополнительном изучении - что будет, если Фол обратится к msg-файлу как раз в тот момент, когда прога его меняет (глюк, обращение к master.dat или ещё чего)? -------------------------------------------------------------------------------- Ничего плохого. Я планирую поместить всё это в critter_p_proc. Он же срабатывает 10(вроде) раз в секунду. Срабатывает команда только при полном соответствии в названии. Если не полностью допишется в файл - ничего страшного, как допишется - сработает. Проблем с одновременным доступом вроде как быть не должно - т.к. один читает, а другой пишет, а не одновременно. Цитата: -------------------------------------------------------------------------------- А вот получение данных из debug.log мне не очень нравится - слишком много посторонней фигни в этом файле. -------------------------------------------------------------------------------- Во-первых, и фиг с ней. Никто не заставляет с ней работать. А, во-вторых, я могу её вырубить - долго, нудно, но не сложно.
Я всегда склоняюсь к наиболее простым решениям. Поэтому передачу строк в Фол скорее всего буду делать именно через msg (при отсутствии вышеупомянутых проблем). Сразу могу сказать, что при передаче строк через переменную В Фол проблемы имеются (при передаче строк ИЗ Фола через переменную всё нормально). Думаю следует организовать несколько разных каналов - для передачи строк отдельно, чисел отдельно. Таких каналов может быть множество (но конечное число) для разных целей. Было бы неплохо вырубить лишнее из debug.log, если будет время и желание, но по остаточному принципу, в смысле времени P.S. Да... времени бы побольше...
----- Прошлое можно узнать, но нельзя изменить. Будущее можно изменить, но нельзя узнать.
|
Отправлено: 22:01 - 15 Мая, 2006
|
|
CryAngel
Пользователь Регистрация: Май 2006
Всего: 6 сообщений
|
Хотя эта идея как я вижу энтузиазма и не вызвала, но с точки зрения юзера , мне больше нравиться вариант написания своего движка на основе старых ресурсов. У этого варианта два основных момента - это вполне реально, и это будет нормально работать в сети, так как будет написано с расчетом на это; использование старых ресурсов необходимо для того, чтобы получился "фол в новой упаковке", а не "новая игра на пост-ядерную тему". Еще один плюс - не надо тратить время на создание всей графики. P.S. Сорь если пост не в тему, но под название темы он точно подходит.
|
Отправлено: 6:19 - 18 Мая, 2006
|
|
Shade92
Пользователь Регистрация: Май 2006
Всего: 6 сообщений
|
Какие новости? Что уже сделали? Что осталось сделать? Да и вобще проект жив?
|
Отправлено: 16:03 - 27 Сент., 2006
|
|
Tehnokrat
Модератор
Откуда: Новосибирск Регистрация: Окт. 2003
Всего: 489 сообщений
|
Проект дошёл до стадии создания клиент-серверного приложения, после чего был заморожен на неопределённый срок. Причина заключается в особенностях моего соединения с инетом.
----- Прошлое можно узнать, но нельзя изменить. Будущее можно изменить, но нельзя узнать.
|
Отправлено: 18:28 - 27 Сент., 2006
|
|
|
|