Skyrim: Помощник алхимика

В очередном отпуске решил съездить в Скайрим.

Игра удивила появлением странных багов с текстом навыков и квестов. Полез разбираться на форумы. Оказалось что причиной стал выход обновления 1.9, который якобы не успели перевести на русский. Во время поиска решения наткнулся на интересный сайт по игре — http://ru.elderscrolls.wikia.com

Игру я прохожу уже 3ий раз и когда дело дошло до алхимии, опять изучать свойства ингредиентов методом проб и ошибок мне уже не захотелось.
Есть сайт, который подсказывает рецепты для открытия свойств, однако он просит ввести название ингредиента на английском, что проблематично с русской версией Skyrim.

Последней каплей был Алхимический стол. Красивый сайт. Есть все данные — названия ингредиентов, список эффектов. Однако, быстро открыть свойства ингредиента он тоже не позволяет, не говоря уже о стоимости зелья.

Что делать? Сдуваю пыль с Visual Studio, прогреваю компилятор, перезаряжаю дебаггер, поехали…

Стоимость зелья высчитывается как сумма всех его эффектов. Эффекты имеют различную стоимость. Имея относительную стоимость «эффекта» можно подобрать ингредиенты так, чтобы получить максимально дорогое зелье.

На сбор данных и реализацию ушло где-то 4 часа.
alchemy-dictionary
Программа подсказывает рецепты для открытия всех свойств ингредиента. Кроме того, она может подобрать самые дорогие зелья из имеющихся ингредиентов.

Итак:

1. Находим в Скайриме алхимический стол. Открываем программу, переходим на вкладку «Поиск».
2. Выбираем все ингредиенты и запускаем поиск.
Программа задумается на пару секунд и выдаст топ-1000 зелий отсортированных по цене.
alchemy-search
3. Запоминаем первые 3 ингредиента, переключаемся в Скайрим и пытаемся найти их в своем инвентаре.
Если ингредиенты есть — отлично, варим зелье.
4. Возвращаемся в программу и снимаем галочки с тех ингредиентов, что закончились либо изначально отсутствовали. Повторяем поиск.

Повторяем последние 2 шага пока не надоест или не кончатся все ингредиенты )

В скобках у каждого рецепта указана относительная стоимость зелья. Полученные данные различаются с тем, что получается в игре, однако этого алгоритма более чем достаточно.
За 15 минут мне удалось сварить порядка 30-40 зелий, которые не могу продать до сих пор. Несколько штук хватает чтобы исчерпать весь запас золота продавца.

Программа написана на C# и ей нужен .NET Framework 4 или выше

Скачать SkyrimAlchemyHelper 1.2

UPD:
Обновил неверные названия (Соли, Хитин грязевого краба), добавил ингредиенты из Dawnguard, Heartfire, Dragonborn. Версия 1.2
Выложил исходники: https://bitbucket.org/ErtyHackward/skyrimalchemyhelper
Оказалось, что программа позволяет очень быстро прокачать навык Алхимия.

Нужен ли такой DC клиент?

Представь, ты находишь интересный релиз на сайте o-go.ru, нажимаешь по магнет-ссылке и сразу же смотришь его, как будто это файл с твоего компьютера. Классно, не правда ли?

Можно смотреть сериал сразу же, в любимом плеере, без ожидания загрузки.
Можно сразу же начать установку игры из образа. Причем будут скачаны только нужные для установки части образа.
Можно открыть большой архив через WinRAR и вытащить нужные файлы из него, опять же, не загружая все остальное.
Можно перетащить файл в Skype, vkontakte и пр.

Вообще не нужно ничего загружать, все просто работает.

Чтобы это осуществить, нужен DC клиент. Под капотом будет использоваться библиотека http://dokan-dev.net/en/
Она позволяет создавать виртуальные диски, которые выглядят как настоящие. Но обращения к файлам и папкам контролируются программой. Это позволяет создавать иллюзию присутствия файла в системе, когда его по факту нет.

Находишь файл в сети, добавляешь его в к себе в «облако». Файл сразу же появляется на виртуальном диске и с ним можно работать как с любым другим файлом, который есть на компьютере. При обращении какого-либо приложения к этому файлу, DC-клиент загрузит нужные блоки файла и передаст программе.

Конечно, если нет источников, программа просто зависнет. Но на популярных файлах это точно будет работать.

Такому клиенту вообще не нужен интерфейс, достаточно иконки в трее с возможностью «выключить» и поставить ограничение на использование канала.
Чтобы не создавать «паразитов», загружаемый файл будет сохраняться на жестком диске для последующей раздачи. Но, даже если нет свободного места, файл будет работать все равно.

Я мог бы сделать такой клиент, ну, скажем, за неделю. Но нужно ли?

Группировка строк

Потребовалось решить простую задачку: есть большой список строк (ip адресов), нужно подсчитать количество дублирующихся записей и отсортировать список по этому значению. Читать далее «Группировка строк»

Городской телефон бесплатно?

Не так давно я подключился к Good Line, и уже месяц звоню на городские телефоны бесплатно. Это не привилегия сотрудников, любой абонент может делать тоже самое. Сразу хочу сказать, что статья написана по моей инициативе, без моральной/материальной поддержки компании. Читать далее «Городской телефон бесплатно?»

Подводные камни XmlSerializer

Мне очень нравится возможность .NET выполнять xml сериализацию. Очень удобно сохранять и загружать практически любые данные.

Читать далее «Подводные камни XmlSerializer»

Здравствуй, Mercurial!

Около полугода назад я стал заниматься разработкой воксельной игры на подобии Minecraft. Сначала занимался один, потом нашел единомышленников. Они и подтолкнули меня перейти на Mercurial. Попробовал — понравилось. Я окончательно перевел все проекты с SVN на Mercurial и очень доволен. Читать далее «Здравствуй, Mercurial!»

Пора менять жесткий диск

Третьего дня обновил свой главный домашний компьютер, теперь у меня Intel Core i7 2600k, 8 Gb DDR3 1333, ATI Radeon 6850.

Предыдущая конфигурация была такая: AMD Athlon 64 X2 6000+, 4 Gb DDR2 800, Nvidia GeForce 9600 GT

Новая система в несколько раз мощнее предыдущей. Но разница работы в системе Windows 7 практически не заметна на глаз. Это «немного» удручает, ведь хочется почувствовать всю мощь системы. Оценка системы Windows однозначно указывает на «узкое место» — жесткий диск. Читать далее «Пора менять жесткий диск»

Костыль для Redmine

Введение

Redmine — отличная система управления проектами, написанная на ruby. Система бесплатная и с открытым исходным кодом. Устанавливается как на Unix так и на Windows. Redmine поддерживает работу с MySQL, PostgreSQL и SQLite. Отличное решение для малых и средних проектов.

Благодаря ребятам из Bitnami у нас есть замечательный пакет «все в одном», который устанавливает все необходимое, мы получаем рабочий redmine с минимальным количеством телодвижений. Скачать его можно здесь.

Система работает следующим образом. Устанавливаются 2 сервера Mongrel для выполнения самого redmine. Доступ к этим серверам разрешен только локально. Для обеспечения доступа из сети устанавливается apache c балансировкой между этими двумя серверами.

Используя redmine я столкнулся только с одной проблемой — через некоторое время бездействия (порядка 6 часов), он перестает работать. Помогает перезапуск сервера, и пляска по разным адресам в redmine, тогда, через некоторое время, он заводится и работает до следующего простоя.

Читать далее «Костыль для Redmine»

Почем методы? (Сравнение скорости работы методов в .NET)

Сегодня мы рассмотрим скорость работы методов.

К сравнению представлены следующие типы «методов»:

  1. вызов метода своего класса (this),
  2. вызов метода другого класса,
  3. вызов виртуального метода (virtual),
  4. вызов переопределенного виртуального метода (override),
  5. вызов события (event),
  6. вызов делегата на базе лямбда выражений (Lambda expressions).

Читать далее «Почем методы? (Сравнение скорости работы методов в .NET)»

.NET Свойства против полей. Что быстрее?

Третьего дня писал очень ресурсоёмкий алгоритм. Он был узким местом во время работы приложения, и, соответственно, его скорость работы серьезным образом отражалась на производительности всего приложения. Запустив профайлер заметил, что основная нагрузка приходилась на получение значений из свойств. Не долго думая, я заменил автоматические свойства полями. Профайлер показал значительный прирост производительности. На этом я и успокоился.

Однако этот факт не давал мне покоя — как же так, я везде и всегда старался следовать правилам написания кода, а тут оказывается что этим самым рубил его производительность? Я решил написать небольшой тест для оценки скорости работы свойств и полей. Вот что у меня получилось.
Читать далее «.NET Свойства против полей. Что быстрее?»