Как составить правильный запрос

Автор logic, 2010 Авг. 22, 09:26

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Ключевые слова [SEO] веб сайтыпомощь webзапрос

logic

Подскажите, как составить правильно запрос, чтоб занести вещь в сундук

mssql_query("declare @inv varbinary(1920); set @inv=(SELECT Items FROM warehouse where AccountID='acc123');print @inv;");
$wareg = substr(mssql_get_last_message(),2);
if($chk_res_chr
  • <20)
{
for ($i=0;$i<60;$i++)
{
$showitem = substr($wareg,($i*32),32);
if ($showitem=="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF") {
$showitem = "00003115A5C8000600A0000000000000"; // Если в сундуке есть место, заменяем ffff на перчатки Bronza

$update = mssql_query ("UPDATE ....  Вот тут как правильно дополнить?

break;




}
}


}




Народ, ну что поможет кто?
И еще может кто объяснить функцию Вафлана, на проверку свободного места в сундуке?
function smartsearch($whbin,$itemX,$itemY) {
if (substr($whbin,0,2)=='0x') $whbin=substr($whbin,2);
$items    = str_repeat('0', 120);
$itemsm = str_repeat('1', 120);
$i    = 0;
while ($i<120) {
$_item    = substr($whbin,(32*$i), 32);
$type    = (hexdec(substr($_item,18,2))/16);
$type  = round($type);

$res    = mssql_fetch_row(mssql_query("select x,y from EB_ITEMS
where id_cat='".$type."' and id_item='".hexdec(substr($_item,0,2))."'"));
$y    = 0;
while($y<$res[1]) {
$y++;$x=0;
while($x<$res
  • ) {
$items    = substr_replace($items, '1', ($i+$x)+(($y-1)*8), 1);
$x++;
}
}
$i++;
}
$y    = 0;
while($y<$itemY) {
$y++;$x=0;
while($x<$itemX) {
$x++;
$spacerq[$x+(8*($y-1))] = true;
}
}
$walked    = 0;
$i    = 0;
while($i<120) {
if (isset($spacerq[$i])) {
$itemsm    = substr_replace($itemsm, '0', $i-1, 1);
$last    = $i;
$walked++;
}
if ($walked==count($spacerq)) $i=119;
$i++;
}
$useforlength    = substr($itemsm,0,$last);
$findslotlikethis='^'.str_replace('++','+',str_replace('1','+[0-1]+', $useforlength));
$i=0;$nx=0;$ny=0;
while ($i<120) {
if ($nx==8) { $ny++; $nx=0; }
if ((eregi($findslotlikethis,substr($items, $i, strlen($useforlength)))) && ($itemX+$nx<9) && ($itemY+$ny<16))
return $i;
$i++;
$nx++;
}
return 1337;
}

mssql_query("declare @inv varbinary(1920); set @inv=(SELECT Items FROM
warehouse where AccountID='acc123');print @inv;");
$wareg = substr(mssql_get_last_message(),2);


echo "<br>".smartsearch($wareg,2,3);

При этом выведет число 10, что это? Кол-во свободных клеток? Тогда 2*3 должно быть 6.
return 1337; Это как я понял, False, то есть нету свободного места.


Vaflan

#1
Цитата: logic от 2010 Авг. 22, 08:26  функцию Вафлана - smartsearch

Это не маё, SkyLine для DSW

Query:
UPDATE warehouse SET [Item] = 0xFFFFFFFF..FF WHERE AccountId = 'Vaflan'

GrInYa

#2
ЦитироватьИ еще может кто объяснить функцию Вафлана

[quote post='68996' date='22.8.2010, 11:08']Это не маё, SkyLine для DSW[/quote]

по моему это не скайлайна функция а Савойя

logic, сама функция ищет именно ту клетку где по горизонтали и вертикали в зависимости от длины вещей нету не одной занятой клетки и возвращает номер нужной клетки

ПС: правда сама функция не оптимальная...я написал функцию по проще

<?php
function change_spaces($i$space$x$y$vaultx) {
$county 0;
while(
$county <= $y) {
$countx 0;
while (
$countx $x) {
$space[$i] = '1';
$i++;
$countx++;
}
$i += ($vaultx $x);
$county++;
}
return 
$space;
};
function 
vaultexplore($vaultitems$itemx$itemy$vaultx 8$vaulty 15) {
if (
substr($vaultitems02) == '0x'$vaultitems substr($vaultitems2);
$vaultspace $vaultx $vaulty;
$i 0;
$space str_repeat('0'$vaultspace);
while (
$i $vaultspace) {
$county 0;
$falsey false;
$ylength false;
while (
$county $itemy) {
$countx 0;
$falsex false;
$xlength false;
while (
$countx $itemx) {
$place substr($vaultitems, (ITEM_CODE_LENGHT $i), ITEM_CODE_LENGHT);
if (
$place == ITEM_NULL and $space[$i] == '0'$countx++;
elseif (
$space[$i] == '0') {
$space change_spaces($i$space$itemx$itemy$vaultx);
$falsex true;
} else 
$falsex true;
$i++;
if (
$falsex) break;
if (
$countx == $itemx$xlength true;
}
if (
$falsex) break;
if (
$xlength) {
$county++;
$i -= $itemx;
}
if (
$county == $itemy) {
return (
$i - ($vaultx * ($itemy-1)));
}
$i += $vaultx;
}
}
return 
1337;
}
?>

logic

Цитата: GrInYa от 2010 Авг. 22, 12:12  по моему это не скайлайна функция а Савойя

logic, сама функция ищет именно ту клетку где по горизонтали и вертикали в зависимости от длины вещей нету не одной занятой клетки и возвращает номер нужной клетки

ПС: правда сама функция не оптимальная...я написал функцию по проще

<?php
function change_spaces($i$space$x$y$vaultx) {
$county 0;
while(
$county <= $y) {
$countx 0;
while (
$countx $x) {
$space[$i] = '1';
$i++;
$countx++;
}
$i += ($vaultx $x);
$county++;
}
return 
$space;
};
function 
vaultexplore($vaultitems$itemx$itemy$vaultx 8$vaulty 15) {
if (
substr($vaultitems02) == '0x'$vaultitems substr($vaultitems2);
$vaultspace $vaultx $vaulty;
$i 0;
$space str_repeat('0'$vaultspace);
while (
$i $vaultspace) {
$county 0;
$falsey false;
$ylength false;
while (
$county $itemy) {
$countx 0;
$falsex false;
$xlength false;
while (
$countx $itemx) {
$place substr($vaultitems, (ITEM_CODE_LENGHT $i), ITEM_CODE_LENGHT);
if (
$place == ITEM_NULL and $space[$i] == '0'$countx++;
elseif (
$space[$i] == '0') {
$space change_spaces($i$space$itemx$itemy$vaultx);
$falsex true;
} else 
$falsex true;
$i++;
if (
$falsex) break;
if (
$countx == $itemx$xlength true;
}
if (
$falsex) break;
if (
$xlength) {
$county++;
$i -= $itemx;
}
if (
$county == $itemy) {
return (
$i - ($vaultx * ($itemy-1)));
}
$i += $vaultx;
}
}
return 
1337;
}
?>
Спасибо за помощь, все сделал, теперь заносит как надо) Ну я вижу, что твоя ф-я с выбором сундука, но пока на первое время мне сойдет и Савоя.


Еще интересна вещь, каждая картинка имеет код, допустим
Dark Master Boots - 007C8000
Понял, что он берется из основного хекс кода вещи, но как преобразовывается?

GrInYa

также есть функция...но это по выбору...можешь сам изменять имена картинок и создать функцию для подбора

logic

#5
Цитата: GrInYa от 2010 Авг. 22, 23:06  также есть функция...но это по выбору...можешь сам изменять имена картинок и создать функцию для подбора
А что за ф-я то?
Вот есть хекс код ботинков.
Дальше идет открытие картинки img/misc/items/$num.gif
Вот главный вопрос, как узнается название картинки(хекс код) через основной хекс код ботинков? Нужно какие-то числа сложить правильно, но я незнаю какие, тогда получим аназвание картинки

Цитата: logic от 2010 Авг. 22, 20:52  Спасибо за помощь, все сделал, теперь заносит как надо) Ну я вижу, что твоя ф-я с выбором сундука, но пока на первое время мне сойдет и Савоя.


Еще интересна вещь, каждая картинка имеет код, допустим
Dark Master Boots - 007C8000
Понял, что он берется из основного хекс кода вещи, но как преобразовывается?
Гриня, как твоей функцией пользоваться?
Что за параметры $i, $space, $vaultx ? Проста та функция не верно считает свободную клетку, если в сундуке лежат винги, странно...

GrInYa

я же сказал...что можешь сам изменять имена картинок так как тебе будет удобно и из этого сделать функцию для подбора...а там в своей функции имя картинки...к примеру берём крис ехе:
его тип: 0 -> 00
его айди: 0 -> 00
если ехе: 1 -> 01
если анц: 0 -> 00
ну там добавим ещё уровень если вещи разные по уровням: 0 -> 00

в конец получаем 0000010000.гиф

ПС: это один пример как можно функцию создавать

Цитата: logic от 2010 Авг. 23, 08:49  Гриня, как твоей функцией пользоваться?
Что за параметры $i, $space, $vaultx ? Проста та функция не верно считает свободную клетку, если в сундуке лежат винги, странно...
$i -> номер клетки
$space -> сам сундук откуда можно узнать если есть свободное место в банке
$vaultx -> количество клеток в сундуке по горизонтали

PS: странно...я проверю на вингах...

logic

#7
Цитата: GrInYa от 2010 Авг. 23, 10:44  я же сказал...что можешь сам изменять имена картинок так как тебе будет удобно и из этого сделать функцию для подбора...а там в своей функции имя картинки...к примеру берём крис ехе:
его тип: 0 -> 00
его айди: 0 -> 00
если ехе: 1 -> 01
если анц: 0 -> 00
ну там добавим ещё уровень если вещи разные по уровням: 0 -> 00

в конец получаем 0000010000.гиф

ПС: это один пример как можно функцию создавать


$i -> номер клетки
$space -> сам сундук откуда можно узнать если есть свободное место в банке
$vaultx -> количество клеток в сундуке по горизонтали

PS: странно...я проверю на вингах...
Все гринь отбой)) Просто на вингах надо было в мумаркете ставить NO EFECT, если не поставить он просто их не считывал
Определение картинок подошло только  к свордам
Вот допустим Black Dragon Pants 00308000 , а по-твоему получилось  09100100

GrInYa

ну так я не писал определённую функцию...а дал пример как можно определить нужную картинку

logic

#9
Гринь, чет твоя функция не верно считает клетки, либо я не так сделал, проверь
Вот тут я хочу добавить вещь x=3,y=3, на скрине видно, что должна быть добавлена на 24 клетку(или 25 визуально), но оно выдает 30 клетку и вещь 3х3 съежает вообще.
Еще чаосы не воспринимает и как-то все ошибочно подсчитывает на 1-2 клетку  :huh:
Функция от савоя вобще камни не воспринимает

Вот функция, там две переменые у тебя были не объявлнные ITEM_CODE_LENGHT ,я заменил на 32, а ITEM_NULL на 0.
<?php
function change_spaces($i$space$x$y$vaultx) {
$county 0;
while(
$county <= $y) {
$countx 0;
while (
$countx $x) {
$space[$i] = '1';
$i++;
$countx++;
}
$i += ($vaultx $x);
$county++;
}
return 
$space;
};



function 
vaultexplore($vaultitems$itemx$itemy$vaultx 8$vaulty 15) {
if (
substr($vaultitems02) == '0x'$vaultitems substr($vaultitems2);
$vaultspace $vaultx $vaulty;
$i 0;
$space str_repeat('0'$vaultspace);
while (
$i $vaultspace) {
$county 0;
$falsey false;
$ylength false;
while (
$county $itemy) {
$countx 0;
$falsex false;
$xlength false;
while (
$countx $itemx) {
$place substr($vaultitems, (32 $i), 32);
if (
$place == and $space[$i] == '0'$countx++;
elseif (
$space[$i] == '0') {
$space change_spaces($i$space$itemx$itemy$vaultx);
$falsex true;
} else 
$falsex true;
$i++;
if (
$falsex) break;
if (
$countx == $itemx$xlength true;
}
if (
$falsex) break;
if (
$xlength) {
$county++;
$i -= $itemx;
}
if (
$county == $itemy) {
return (
$i - ($vaultx * ($itemy-1)));
}
$i += $vaultx;
}
}
return 
1337;
}

mssql_query("declare @inv varbinary(1920); set @inv=(SELECT Items FROM warehouse
where AccountID='login15');print @inv;"
);
$wareg substr(mssql_get_last_message(),2);


echo 
vaultexplore($wareg,3,3);

И еще вопрос, за что отвечают 000000000...... 5 и 6 цифра в хекс коде вещи, начиная с левого края?

GrInYa

ITEM_NULL = 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF';

хм...как бы я проверил функцию...проверю ещё раз внимательнее...проблем не должны быть...

пятая и шестая цифра отвечает за дурабилити вещей

Похожие темы (5)