Вторник, 05 Ноября 2024, 19:40

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Отображение вещей (браузерная игра)
СааааааааааашаДата: Понедельник, 21 Ноября 2011, 02:25 | Сообщение # 1
был не раз
Сейчас нет на сайте
Пишу если можно так сказать клона одной браузерной игры, и не спрашивайте зачем.
Интересует как правильно отображаться вещи персонажа в инвентаре/анкете, то есть как производить выборку
Все вещи персонажей хранятся в таблице inv где есть тип вещи и ее id (для поиска в таблице вещей), слот вещи, так же одета вещь или нет.
если слот занят то выводим одну строке, а если пуст то другую, вообщем как оптимизировать код? что бы обойтись без кучи кода, вот пример кода для проверки одной вещи =)

$sql_helm = mysql_query("SELECT * FROM inv WHERE owner='$user' AND obj_slot='helm' AND active=1");
$helm = mysql_fetch_array($sql_helm);
if($helm){
$id = $take_items[id];
$obj_type = $take_items[obj_type];
$obj_id = $take_items[obj_id];
$obj_slot = $take_items[obj_slot];
$take_obj_type_id = mysql_query('SELECT * FROM '.$obj_type.' WHERE id='.$obj_id.'');
$display_items = mysql_fetch_array($take_obj_type_id);
$img = $display_items[img];
$name = $display_items[name];
print('<a onmouseover="tooltip(this,\''.$name.'\')" onmouseout="hide_info(this)" href="/pers.php?act=unwear&slot='.$obj_slot.'&id='.$id.'"><li class=\'slot slot-'.$n.' '.$st.' tooltip\'><img src='.$img.'></li></a>');
}else{
print("<li class='slot slot-1 helmet helmet-empty tooltip'></li>");
}

и так нужно 30 раз, понимаю что можно через массив, но все попытки прошли безрезультатно
где так так думал (без кода, только логика =) )
выбираем данные с таблицы где активность = 1
понадобиться 3 переменные id вещи в инвентаре, тип вещи и ее id в соответствующей таблице, что бы получить, х-ки, имя, и т.д.
после каждого прохождения циклом по таблице мы сохраняем переменные с соответствующими данными и выводим вещь через код указанные выше, если не все слоты были заняты то для них выводим "<li class='slot slot-1 helmet helmet-empty tooltip'></li> где вместо helmet будет название вещи, может кто помочь?

Добавлено (21.11.2011, 02:20)
---------------------------------------------
хотя кажется и тут проблемы, тогда если можно предложите решение для моего случая

Добавлено (21.11.2011, 02:25)
---------------------------------------------
куча кода, от которого нету толку cry

RipDevДата: Пятница, 02 Декабря 2011, 16:21 | Сообщение # 2
гейм-дизайнер
Сейчас нет на сайте
Саааааааааааша, не очень понятно.
Quote (Саааааааааааша)
Интересует как правильно отображаться вещи персонажа в инвентаре/анкете, то есть как производить выборку

Тебе все равно придется тупо, всю таблицу рисовать, поэтому по порядку извлекаешь ид и рисуешь.
Quote (Саааааааааааша)
если слот занят то выводим одну строке, а если пуст то другую, вообщем как оптимизировать код? что бы обойтись без кучи кода, вот пример кода для проверки одной вещи =)

Если слот занят то он занят, это одно обращение к конкретному полю?
Напиши по понятней чего ты хочеш? Код я не понял т.к пхп не знаю.
Quote (Саааааааааааша)
и так нужно 30 раз,

а это уже жестко.


Взгляни на сей изукрашенный образ, на тело, полное изъянов, составленное из частей, болезненное, исполненное многих мыслей, в которых нет ни определённости, ни постоянства.
СааааааааааашаДата: Вторник, 06 Декабря 2011, 04:00 | Сообщение # 3
был не раз
Сейчас нет на сайте
Вот так сделал, может кому-то пригодиться
В таблице хранятся поля под каждый слот, если слот пуст то значение равно 0, если занят то отображаться id вещи. Сначала отправляю запрос в таблицу, получаю ответ, в переменные сохраняю значение каждого слота, потом:

for($i = 1; $i <=15; $i++){
if($items_array[$i] >= 1){
$obj_type = mysql_query("SELECT inv.obj_type FROM inv WHERE id='$items_array[$i]'");
$obj_type = mysql_fetch_array($obj_type);
$sql = mysql_query("SELECT * FROM $obj_type[obj_type] WHERE id IN(SELECT inv.obj_id FROM inv WHERE id='$items_array[$i]')");
$sql = mysql_fetch_array($sql);
print("<li class='slot slot-$i $slot[$i] tooltip'><img src='$sql[img]'/></li>");
}
else{
print("<li class='slot slot-$i $slot[$i] $slot[$i]-empty tooltip'></li>");
}
}

Циклом перебираю каждую переменную (не нужно косо смотреть из-за использования for), если значение >= 1 то мигрирую в таблицу вещей и получаю картинку, название и т.д.
Если 0, то отображаю пустой слот, запросов много, как сделать по другому не знаю, да и остановил работу, сложно одному делать все (
WormixLolProДата: Четверг, 15 Декабря 2011, 17:52 | Сообщение # 4
частый гость
Сейчас нет на сайте
чтоооо? что за извращение с циклом for? тут и прекрасно подойдет while а
for($i = 1; $i <=15; $i++){
это ни к чему вообще. лишняя нагрузка
ElDarcoДата: Пятница, 23 Декабря 2011, 16:02 | Сообщение # 5
почетный гость
Сейчас нет на сайте
А не проще все сделать в виде класса и все хранить в одной таблице. А возможности предметы вызывать именно из класса? Не?
jc04Дата: Воскресенье, 25 Декабря 2011, 21:22 | Сообщение # 6
почетный гость
Сейчас нет на сайте
Quote (WormixLolPro)
чтоооо? что за извращение с циклом for? тут и прекрасно подойдет while

С каких это пор цикл for даёт нагрузку? Сто раз уже проверялось, нет никакой разницы между этими циклами, не вводите людей в заблуждение.


Моя игра: Браузерный Сталкер
Игра в разработке: Аномалия
AvtokratorДата: Воскресенье, 05 Февраля 2012, 02:29 | Сообщение # 7
был не раз
Сейчас нет на сайте
Через ООП реализуйте и будет вам счастье!
Зачем такой громозкий код...?
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг