Сразу к сути. О том, как оно работает.
Сайт состоит из одной единственной страницы и множества асинхронных запросов. То есть индексироваться поисковыми системами не будет, а значит предназначен не для рекламы проекта. И маленькая ссылка на мою рефералку с логотипа в левом верхнем углу пользы не приносит никакой. Что, кстати, можно отнести к минусам такой конструкции сайта.
Еще один минус - javascript. К сожалению ни один браузер не может похвастаться идеальным исполнением этого языка программирования. Чем больше и сложнее скрипт, тем больше шанс на глюки, подвисания и прочие неприятности, вызывающие попаболь. И даже тот же фейсбук, бывает, глючит.
К плюсам же стоит отнести его быстродействие (я сейчас не говорю о тех, для кого сервер с сайтом физически находится на другом континенте). Асинхронные запросы позволяют получить только самую нужную информацию с сервера, без лишних букаф, что позволяет избежать перезагрузки страницы.
Итак, о сервисах. Многие из них опираются на данные непосредственно с игрового сервера, что подразумевает их актуальность. Описания api можно найти здесь: http://forum.unit-online.ru/topic/158871
1. Онлайн игроковДанные в формате json берутся с игрового сервера (http://api.unit-online.ru/online) и просто сортируются и приводятся в удобочитаемый вид. Итого получаем список всех, кто в игре, за исключением тех, у кого куплен "невидимка". Количество "невидимок" в игре, кстати, получаем оттуда же.
2. РейтингиВсё то же самое, что и с "онлайном игроков". Здесь у нас есть возможность выбирать какую именно информацию получать с игрового сервера - pvp-рейтинг, pve-рейтинг, сортировать по уровням и так далее.
3. КланыВсё аналогично. Хотя игровой сервер даёт нам информацию только о существющих кланах - их названиях, сайтах, составах и даже должностях. Данные о расформированных хранится уже у нас (о том, откуда они берутся у нас, чуть ниже).
4. Клановые зоныТут просто список - http://api.unit-online.ru/zones. Всё что нужно - привести в удобочитаемый вид.
5. ПредметыА именно оружие и броня, других данных игровой сервер пока не предоставляет, хотя в скором времени обещали. 15 октября, если быть точнее (http://forum.unit-online.ru/topic/158871?post=543e52650684db3a191c585b). Так вот, тут пришлось использовать "друхходовочку", которая делает целую кучу запросов к серверу, отчего эта страница загружается медленнее других. Сначала берём весь список оружия (или брони, или шлемов, или прочего), после чего берём ID каждого полученного предмета и делаем запрос к серверу, чтобы получить зарактеристики каждого конкретного предмета.
Например, сейчас в игре 479 разных видов оружия и чтобы получить весь список с характеристиками нужно сделать один запрос ко всему списку и 479 запросов, чтобы получить характекристики. Не айс, правда?
6. Поиск игрокаНаверное, самый короткий скрипт. Ищем игрока по нику и получаем http://api.unit-online.ru/online?type=user&name=Zion.
До этого момента сайт использовал только javascript и html, то есть мог работать на самом дерьмовом хостинге.
Далее упомяну уже мои "фичи".
7. КартаСама по себе карта, хоть и хорошего разрешения, бесполезна. Пришлось таки собрать информацию об NPC и сохранить их имена и координаты. А также названия и координаты заводов, локаций, терминалов и прочего. Для удобства также приделал проверку локаций на клановую принадлежность: если клан владеет данной локацией, то на карте это будет отображено.
8. Информация о персонажеГде угодно на сайте нажав на ник персонажа откроется окно с его информацией. Открытых сервисов админитрация проекта для этого не предоставляет и тут приходится изобретать костыль. Обращаемся к игровой инфе персонажа (http://unit-online.ru/character?id=10482472), лично я использовал для этого curl. Находим следующиую строку:
Спойлер
<script>
var flashvars={data:"5a696f6e23313030322337233023373223333023302330233130303630234d50352331303130332353636f757423352337233723382337233523313030302330233023302330233023363123302335303332233023302330232330235a696f6e232323d09ed0bdd0bbd0b0d0b9d0bd2c20d0b8d181d182d0bed180d0b8d18f20d181d0bed0b1d18bd182d0b8d0b92c20d180d0b5d0b9d182d0b8d0bdd0b3d0b82c20d181d0bed181d182d0b0d0b2d18b20d0bad0bbd0b0d0bdd0bed0b22c20d0bad0bbd0b0d0bdd0bed0b2d18bd0b520d182d0b5d180d180d0b8d182d0bed180d0b8d0b82c20d0bfd0bed0b8d181d0ba20d0bfd0b5d180d181d0bed0bdd0b0d0b6d0b5d0b92c20d0bad0b0d180d182d0b020d0b820d0bcd0bdd0bed0b3d0bed0b520d0b4d180d183d0b3d0bed0b520d0bdd0b02020202020202020202020202020202020202020202020202020202020687474703a2f2f756e69742d6170692d73657276696365732e636f6d2336332e3538232b302e303023302330233023302330"},
params={menu:"false",scale:"noScale",allowFullscreen: "true",allowScriptAccess:"always",bgcolor:"",wmode:"direct"};
swfobject.embedSWF("/static/swf/charinfo.swf?v=1","altContent","100%","100%","10.0.0","/static/swf/expressInstall.swf",flashvars,params,{});
</script>
Внутри массива flashvars в переменной data видим кучу букв и цифр. Это и есть вся информация о персонаже, правда в hex-представлении. Переводим из hex в нормальный вид и дело в шляпе.
Один недостаток: эта информация обновляется не очень-то часто, то есть не может быть абсолютно актуальной.
9. История событийПерво-наперво понадобится cron, который будет собирать информацию об игроках, кланах и клановых территориях каждые пять минут. Идея простая: записать текущее состояние игрока - его уровень, клан и так далее. Через пять минут снова записать то же самое и сравнить с предыдущими данными - если отличаются, то записать "такой-то перешёл на такой-то уровень" или "сменил клан на такой-то". А дальше только выводить эти данные в читабельном виде и сделать возможность сортировки.
Этот же скрипт записывает время входа и выхода в игру каждого игрока. То есть на данный момент у меня дохрена данных и можно было бы составить график для каждого игрока... но благодарности за труды ждать бесполезно. Об этом, кстати, ниже.
10. API с историей событийСобственно, изначальная идея создания сайта состояла именно в этом скрипте. Точнее говоря в том, чтобы сделать историю событий общедоступной, как и api-сервисы, предоставляемые разработчиками игры.
На данный момент назвать этот скрипт API, то есть application programming interface, можно с натяжкой. Тем не менее, свою основную функцию он исполняет.
Что именно выводит скрипт: информация об игроках - смена уровня, клана, никнейма; информация о кланах - регистрация, расформирование, смена названия; клановые зоны - смена владельца зоны.
Скрипт испольщует асинхронный запрос, что в разы упрощает уго использование: вставляем на сайт две строки кода и оно работает.
Спойлер
Указываем элемент, в который будет выводиться информация:
<script>var element_id='latest_events'</script>
где latest_events - нужно заменить на id вашего элемента. И следующей строкой добавить скрипт-обработчик:
<script type='text/javascript' src='http://unit-api-services.com/api/events.js'></script>
Как пример: этот скрипт сейчас используется у Царапычей (http://tcarapichi.ru).
Пара слов о платности на время новогодних праздниковТут можно много и долго гнуть пальцы о жиде-разработчике и скупердяях-игроках. Или о жадности всего русского народа в целом :)
Я надеялся немного подзаработать и купить подарков персонажу, ведь я потратил немало времени, купил домен и хостинг. Я расчитывал так, что из 280 постоянных посетителей сайта - а именно столько их было к тому моменту - хотя бы человек 30-40 отдадут мне по штуке рублей, деньги-то небольшие. В итоге через систему регистрации прошли 131 человек, а я получил чуть меньше 10к рублей.
Опечалился.
В итогеРеализация такого сайта оказалась даже проще, чем я представлял. JS, HTML, немного PHP и MySQL - вот и всё.
Для меня это хороший опыт в программировании и не очень хороший в маркетинге :)