| Отображение вещей (браузерная игра) | 
|  | 
| 
| Саааааааааааша | Дата: Понедельник, 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)---------------------------------------------
 куча кода, от которого нету толку
  |  |  |  |  | 
| 
| 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 |  | был не раз Сейчас нет на сайте | Через ООП реализуйте и будет вам счастье! Зачем такой громозкий код...?
 |  |  |  |  |