» TeamX (Архив Форума)«


Форум TeamX » Исследования » Fallout online (... или что-то в этом духе)

Переход по темам
<< Пред. След. >>
Единственная страница этой темы

 
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
 

Переход по темам
<< Пред. След. >>
Единственная страница этой темы


Powered by Ikonboard 2.1.9 RUS
Modified by RU.Board Team
© 2000 Ikonboard.com