Я хотел бы поделиться опытом написания собственных ресурсов для сайтов муонлайн ... локаторы игроков, статы, состояния и прочее - это заезженная тема, её мы поднимать не будем ... в интернете куча исходников, выполняющие всё что душе угодно, я же хотел бы рассказать о том, как реализовать на сайте такие ресурсы как просмотр и изменение инвенторя аккаунта, анализатор одежды на чаре, примерочные, автоматические магазины и прочие полезности. Для начала стоит отметить , что работать придётся сразу с двумя ( как правило ) разными СУБД ... С mssql, в котором и хранится вся необходимая информация и mysql, как правило, в которую эту информацию нужно занести.
1. Первое, на что я хочу обратить ваше внимание - это на то, что в php должен быть настроен модуль работы с mssql (mysql, как правило, есть везде ) ... что бы посмотреть эти настройки - воспользуйтесь стандартной функцией phpinfo
2. Что бы проверить, всё ли правильно работает, выполним простенький запрос к базе данных и посмотрим на результат :
@$msconnect=mssql_connect("$host","$alogin","$apass") or die ("can't connect to server");
@$msdb=mssql_select_db("$db",$msconnect) or die ("can't select database");
Предварительно в переменные $alogin ; $apass ; $db ; $host записываете натройки вашего сервера. Если всё прошло без сообщений о невозможности соединения - можно приступать непосредственно к программированию.
3. первая проблема, с которой вы, скорее всего, столкнётесь - это неправильная длина возвращаемой строки, при запросе :
$query = "SELECT Items from warehouse WHERE AccountID='$acc_id'";
Скорее всего у вас будет возвращена строка длиной в 255 символов, остальное же будет обрезаться. Есть 2 пути решения прпоблемы:
а. Можно запрос разделить на подзапросы :
query ("SELECT substring(inventory,0,510), substring(inventory,511,510), substring(inventory,1021,510),
substring(inventory,1531,510), substring(inventory,2041,510), substring(inventory,2551,510) from character where name='$char'");
б. Данный метод не очень удобен, лучше просто формат ячейки переводить из varbinary в text или image :
$query = "SELECT CAST(Items AS IMAGE) from warehouse WHERE AccountID='$acc_id'";
4. Получили мы эту строку, что же делать дальше ? А дальше всё очень просто : нужно перевести её из бинарного вида к привычному. Есть много функций, я использую bin2hex ... мне так привычнее. Мой код выглядит примерно так :
$symbol= "";
$uncoded="";
$itog="";
$lenght = strlen($content);
$index=1;
$k=1;
for ($i=0; $i<$lenght; $i++){
$j =$i+1;
$symbol = substr($content, $start, 1);
$uncoded .= bin2hex($symbol);
$start++;
}
где $content содержит строку инвенторя ... На выходе получаем строку, длиной 2400 символов, в рюкзаке 120 квадратов ... каждый занимает 20 символов соответственно. Если вещи в квадрате банка нет - в ячейке inventory, место, отвечающее за этот квадрат заполняется символами "FFFFFFFFFFFFFFFFFFFF" от нас лишь требуется строку ;$uncoded разбить на подстроки в 20 сиволов и проверить на равенство "FFFFFFFFFFFFFFFFFFFF" ... если совпадает - значит квадрат пуст, если же нет - значит там вещь :
$start = 0;
$j= 0;
for ($i=0; $i<120; $i++){
if( substr($uncoded, $start, 20) != "ffffffffffffffffffff"){
$items[$j]= substr($uncoded, $start, 20);
echo $items[$j]."<br>";
$j++;
}
$start+=20;
}
Отредактировано Stierus (2006-08-16 03:29:30)