Guard Zone History
Предистория
Создание Guard Zone шло несколько долгих лет, за это время произошло много событий и изменений в проекте потому что то стало забываться, чтобы спасти положение я решил восстановить шаг за шагом процесс создания этого крупного и сложного проекта.
В 1998 Году я устроился на свою первую работу. В то время компания занималась созданием программных продуктов и автоматизации документа оборота на предприятиях. Для молодого амбициозного человека это было подходящее место показать свои силы и проявить выдержку. Не буду сильно углубляться в политику и тонокости работы тендерных компаний, просто заниматься исключительно бесполезной работой, которая не имела никакой интилектуальной направленности - мне быстро надоело и я с новыми силами стал изучать всюду окружающее меня виртуальное пространство.
Погружение в реальность
Я делал первые шаги по городу Британии. Это был не настоящий мир, уже пестрила графика с низким количеством цветов, дергающиеся персонажи проскакивали по экрану с криками «guards bank buy». Полу живые лошади, которые со мной разговаривали и без системно ходили. Бездвижные деревья, заборы и дома. Весь этот окружающий мир казалься жил в другом месте, был полностью подчинен компьютеру и следовал только его законам. Долгое время я был лишен всякого общения пока не наткнулся на случайного прохожего. У которого я попытался одолжить денег. Разговор завязался и я немного проникся тем миром в котором мне предстояло быть несколько долгих лет. Первая задача которую мне дал прохожий - поднять подаренную им кучку золотых монет. К моему удивлению поднять ее с земли оказалась черезмерно сложной задачей, на тот момент. Но мне помогли ее решить - это быстро сделала волшебная лошадь, которая к моменту начала разговора уже приобрела выраженное направление движения на слово деньги. Мир ожил.
В этом мире игроки делились на две группы: одни были небольшим сообществом, другие - одиночки. Первая группа людей занимались торговлей, организовывая гильдии и интернет сайты по общению с игроками ультимы. Тем самым зазывая работать на своих лидеров. Они чаще всего получали плату от вступления в гильдию и постоянным в ней присудствии. Одиночки чаще всего приносили доход тем самым огранизованным гильдиям. Он выражался в ресурсах, которыми наделена планета Сосарии, среди основных это были: деревья и руда.
Доход тратился, чаще всего, на обустройство мира, игроки строили дома и мебель. Другое способ потратить ресурс был увеличение характеристик персонажа. Для этого было необходимо использовать ресурс на утомительные и однообразные тренеровки, постоянно перекладывая и преобразовывая палки в стулья или корни растений в магические превращения.
Вообщем слабое место было найдено: все что приносило ресурс или довало прирост характеристик было однообразно и могло быть записано в законченную последовательность команд. Осталось только научить персонажа выполнять эти команды с небольшими поправками вовермя сбоев.
Этап первый - 2001/02/12
Началось все как у всех: настроил через меню команду на выполнение умения Hidden и стал ритмично нажимать на кнопку клавиатуры. После первого часа нажатий решил привести это в божеский вид и набросал простую программу которая в окно приложения бросала нужные мне события от клавиатуры.
Программа позволила без участия выполнять не сложные действия. Чаще всего они заключались в использовании одного предмета, или одного навыка персонажа. Это не давало большой перспективы и преимущества перед другими игроками. Поскольку все навыки тренеровка которых сводилась к ритмичному нажатию кнопки не представляли никакого интереса. Однако тренеровка затянулась, оказалось что нажимать одну кнопку не достаточно для хорошей тренеровки характеристик. Обычно персонажа который тренеруться необходимо было оставлять на несколько ночей без присмотра. Когда же приходило время узнать о результатах тренеровки обычно оказывалось, что персонаж убит или отсоеденен от сервера. Поэтому даже в таком простом алгоритме проходили сбои. Я решил победить первого врага - отсоеденение от сервера.
Процесс отсоеденения отловить оказалось достаточно легко - заголовок окна в игровом режиме содержал имя игрового сервера. Когда происходил сбой и клиент отсоеденялся - заголовок окна принимал стандартный текст. Для восстановления соеденения использовался простой алгоритм - с клавиатуры посылались команды набора в слепую логина, пароля и выбора персонажа.
Пока что это был не надежный алгоритм, пароль часто наберался не в том окне, соеденение с сервером иногда не устанавливалось. Поэтому результат получился не тот ожидалось. Все равно утро следующего дня не всегда давало стабильный результат стояния на макросе.
В это время я приводил программу в порядок, добавил меню настроек, улучшил внутренний макро язык. В настройках появилась опция для запуска нескольких игровых клиентов одновременно.
Один клиент стоял на макросе, а второй клиент был игровым. При выполнении макросов все действие обычно проходило в закрытом помещении, макросы писались из расчета того что игрок стоит на одном месте. Поэтому постоянно происходило усложнение статической модели управления персонажем. Для написания макроса появлялась необходимость определять положение предметов Появлялись реализации программы, которая чтает параметров персонажа по цвету пикселей на экране клиента. Определяет расход предметов и их пригодность к использованию.
Постоянные поиски решения приводили не всегда к хорошим результатам. Падения, утечки, ошибки сборки разных runtime постоянно не давали покоя. Решение было где-то рядом, но пока не хватало опыта и знания об мире ультимы.
Этап второй - 2001/11/16
Следующим шагом появилась потребность в написании макроса по добыче руды. Что потребовало от программы умение управлять персонажем в пространстве. Программа считывала координаты игрока и координаты дейсвия которое нужно было сделать мышкой. К таким действиям относились использование и выбор предмета.
Первая версия программы появилась через несколько дней.
Макрос значительно усложнился, внутренний язык теперь стал содержать процедуры. Каждая процедура привязывалась к определнным координатам в мире, и когда персонаж достигал этих координат процедура выполнялась.
Графический редизайн приложения, разработаны MDI окна. Обновлена панель инструментов и приведена в более менее нормальный вид.
Разработка зашла в тупик. Перспектив у данного направления небыло. Макро язык требовал перехода на объектное ориентирование, что требовало разработки гиганской по сложности парсеров, и документации на это изобретение. Второй момент который очень сильно усложнял жизнь - это не способность сколь угодно сложного макро языка решить проблему навигации и точного контроля за действиями персонажа.
Этап третий - 2002/10/10
Результат предыдущией разработки проекта показал - использование вторичных признаков те изображения на экране дает очень не стабильный результат. Игрок постоянно сбиваеться со своего пути, может удйти в непонятном направлении. Время реакции на команду очень большое и не может использоваться кроме как для копания, а хотелось расширить программу для ведения боевых действий!
Ответ напрасился сам собой - нужно использовать первоисточник. Необходимо получать информацию прямо от сервера и отсылать ответы обратно на сервер обходя игровой клиент.
Переходный момент состоялся успешно, первая версия этой задумки унаследовала только лучшее от предыдущих разработок. Во первых удален макро язык, на его место встал С++, он объектно ориентирован имеет много документации и библиотек. Во вторых эта и все последующие версии клиента работают с сервером на прямую, что гарантирует получение точной информации и мгновенной реакции на игровые события.
В качестве улучшений - была добавлена карта мира в документ, появилась возможность гибко управлять окном клиента, не допуская его показа при запуске клиента. Стабильность работы клиента также была повышена, теперь паденеие приводило к автоматической перезагруки и восстановлению соеденения.
