public function drop_loot($user_id) { if ($this->error == 1) { return; } if ($this->npc['dropable'] == 1) { $seldrop = myquery("SELECT * FROM game_npc_drop WHERE npc_id=" . $this->templ['npc_id'] . ";"); if ($seldrop != false and mysql_num_rows($seldrop)) { $sum_chance = 0; $massiv = array(0); $m_last = 1; $mes = ""; $lcm = array(); $str = ""; $r = 0; $no_loot = 0; //Обработаем профессию "Охотник" if ($this->templ['npc_id'] == npc_id_olen) { if (checkCraftTrain($user_id, 8)) { $r = $r + 2 * getCraftLevel($user_id, 8); } else { $no_loot = 1; } } while ($chance = mysql_fetch_array($seldrop)) { $lcm[] = $chance['random_max']; } mysql_data_seek($seldrop, 0); $lcm = lcm_arr($lcm); while ($chance = mysql_fetch_array($seldrop)) { $this_chance = ($chance['random'] + $r) * $lcm / gcd($lcm, $chance['random_max']); $massiv = array_merge($massiv, array_fill($m_last, $this_chance, $chance)); $m_last += $this_chance; } if ($m_last < $lcm + 1) { $massiv = array_merge($massiv, array_fill($m_last, $lcm + 1 - $m_last, array('items_id' => 0))); } $drop = $massiv[mt_rand(1, $lcm)]; if ($drop['items_id'] != 0 and $no_loot == 0) { $it_user_id = 0; $priznak = 2; $kol_predmetov = mt_rand($drop['mincount'], $drop['maxcount']); $map_name = 0; $map_xpos = 0; $map_ypos = 0; for ($cikl = 1; $cikl <= $kol_predmetov; $cikl++) { $add_result = array(0); if ($drop['kuda'] == 1) { $it_user_id = $user_id; $priznak = 0; //проверим вес if ($drop['drop_type'] == 1) { $item = mysql_fetch_array(myquery("SELECT * FROM game_items_factsheet WHERE id=" . $drop['items_id'] . "")); } elseif ($drop['drop_type'] == 2) { $item = mysql_fetch_array(myquery("SELECT * FROM craft_resource WHERE id=" . $drop['items_id'] . "")); } list($CW, $CC) = mysql_fetch_array(myquery("SELECT CW,CC FROM view_active_users WHERE user_id={$it_user_id}")); $prov = mysqlresult(myquery("SELECT COUNT(*) FROM game_wm WHERE user_id={$it_user_id} AND type=1"), 0, 0); if ($CC - $CW < $item['weight'] and $prov == 0) { //инвентарь заполнен. На землю его! $it_user_id = 0; $priznak = 2; list($map_name, $map_xpos, $map_ypos) = mysql_fetch_array(myquery("SELECT map_name,map_xpos,map_ypos FROM game_users_map WHERE user_id={$it_user_id}")); $drop['kuda'] = 0; } } //если предмет if ($drop['drop_type'] == 1) { if ($priznak == 0) { $Item = new Item(); $add_result = $Item->add_user($drop['items_id'], $it_user_id, 0, 0, 1); // не получилось добавить один - не выйдет и остальные. if ($add_result[0] == 0) { break; } } else { if (!isset($item)) { $item = mysql_fetch_array(myquery("SELECT * FROM game_items_factsheet WHERE id=" . $drop['items_id'] . "")); } myquery("INSERT INTO game_items (user_id,item_id,priznak,ref_id,item_uselife,item_uselife_max,item_cost,map_name,map_xpos,map_ypos) VALUES ('{$it_user_id}','" . $drop['items_id'] . "','{$priznak}',0,'" . $item['item_uselife'] . "','" . $item['item_uselife_max'] . "','" . $item['item_cost'] . "','{$map_name}','{$map_xpos}','{$map_ypos}')"); } } elseif ($drop['drop_type'] == 2) { if ($drop['kuda'] == 1) { $Res = new Res($item, 0); $Res->add_user(0, $it_user_id, 1); if ($this->templ['npc_id'] == npc_id_olen) { myquery("INSERT INTO craft_stat (build_id, gp, res_id, dob, vip, dat, user, type) values (0, 0, " . $drop['items_id'] . ", 0, 1, " . time() . ", {$it_user_id}, 'z')"); setCraftTimes($it_user_id, 8, 1, 1); add_exp_for_craft($it_user_id, 8); } } elseif ($drop['kuda'] == 0) { $Res = new Res(0, $drop['items_id']); $Res->add_map(0, 0, 1, 0, $map_name, $map_xpos, $map_ypos); myquery("INSERT INTO craft_resource_market (user_id,town,col,price,res_id,opis,map_name,map_xpos,map_ypos) VALUES (0,0,1,0," . $drop['items_id'] . ",'','" . $map_name . "','" . $map_xpos . "','" . $map_ypos . "')"); } } if ($it_user_id > 0) { if ($drop['drop_type'] == 1) { $mes = '<font color=\\"#eeeeee\\">После убийства монстра ты ' . echo_sex('увидел', 'увидела') . ' оставшийся от него предмет: <b>' . $item['name'] . '</b>.Ты быстро ' . echo_sex('подобрал', 'подобрала') . ' выпавший предмет и ' . echo_sex('положил', 'положила') . ' его в свой инвентарь!</font>'; } elseif ($drop['drop_type'] == 2) { $mes = '<font color=\\"#eeeeee\\">После убийства монстра ты ' . echo_sex('заметил', 'заметила') . ', как он выронил из рук: <b>' . $item['name'] . '<b/>. Не мешкая ты быстро ' . echo_sex('подобрал', 'подобрала') . ' выпавший ресурс и ' . echo_sex('положил', 'положила') . ' его в свой инвентарь!</font>'; } $result = myquery("INSERT game_battles SET attacker_id=" . $user_id . ", target_id=0, map_name=" . $map_name . ", map_xpos=" . $map_xpos . ", map_ypos=" . $map_ypos . ", contents='" . $mes . "', post_time=" . time() . ""); } } } } } }
function create_response($npc_id) { $response = '<br />Для данного монстра добавлены выпадающие предметы: <table border=1 cellspacing=2 cellpadding=2>'; //Форма добавлени лута $response .= '<tr><td> <div id="content" onclick="hideSuggestions();"> <table bgcolor="#003E00" border=0 cellspacing=2 cellpadding=2> <tr><td>Вариант выпадения: </td><td> <select id="variant"> <option value="0" selected>Выпадает постоянно</option> <option value="1">Выпадает один раз</option> </select> </td></tr> <tr><td>Тип дроповой вещи: </td><td> <select id="drop_type" onChange="switch_type(this)"> <option value="1" selected>Предмет</option> <option value="2">Ресурс</option> </select> <input id="keyword" type="text" size="50" onkeyup="handleKeyUp(event)" value=""><div style="display:none;" id="scroll"><div id="suggest"></div></div> </td></tr> <tr><td> Шанс выпадения:</td><td> <input id="chance" size="10" type="text" value="0"> из <input type="text" id="chance_max" size="10" value="100"> </td></tr> <tr><td> Куда выпадает предмет: </td><td> <select id="kuda"> <option value="0" selected>Падает на землю</option> <option value="1">Перемещается в инвентарь</option> </select> </td></tr> <tr><td>Количество одновременно "падающих" предметов</td><td>От <input type="text" maxsize="5" size="5" id="mincount" value="1"> до <input type="text" maxsize="5" size="5" id="maxcount" value="1"></td></tr> <tr><td colspan="2"><!--Если из монстра выпадает более 1 предмета, то для каждого предмета можно задать шанс выпадания среди всего списка выпадающих предметов<br><input type="text" maxsize="3" size="5" id="random_all" value="0"> - % выпадания этого элемента среди всего списка--></td></tr> </table> </div></td> <td><input style="width:100%" type="button" value="Добавить" onclick="save_res(\'new\')"></td></tr>'; $sel = myquery("SELECT * FROM game_npc_drop WHERE npc_id=" . $npc_id . ""); $i = 0; $lcm = array(); $all = 0; while ($drop = mysql_fetch_array($sel)) { $i++; $response .= '<tr><td> <table border=0 cellspacing=2 cellpadding=2'; if ($i % 2 == 0) { $response .= ' bgcolor="#00004F"'; } else { $response .= ' bgcolor="#420000"'; } $response .= '> <tr><td>Вариант выпадения: </td><td> <select id="variant' . $drop['id'] . '"> <option value="0" '; if ($drop['variant'] == 0) { $response .= 'selected'; } $response .= '>Выпадает постоянно</option> <option value="1" '; if ($drop['variant'] == 1) { $response .= 'selected'; } $response .= '>Выпадает один раз</option> </select> </td></tr> <tr><td>Тип дроповой вещи: </td><td> <select id="drop_type' . $drop['id'] . '" onChange="switch_type(this)"> <option value="1" '; if ($drop['drop_type'] == 1) { $response .= 'selected'; } $response .= '>Предмет</option> <option value="2" '; if ($drop['drop_type'] == 2) { $response .= 'selected'; } $response .= '>Ресурс</option> </select>'; $name_item = ""; if ($drop['drop_type'] == 1) { $selname = myquery("SELECT name FROM game_items_factsheet WHERE id=" . $drop['items_id'] . ""); if (mysql_num_rows($selname) > 0) { list($name_item) = mysql_fetch_array($selname); } } elseif ($drop['drop_type'] == 2) { $selname = myquery("SELECT name FROM craft_resource WHERE id=" . $drop['items_id'] . ""); if (mysql_num_rows($selname) > 0) { list($name_item) = mysql_fetch_array($selname); } } $response .= ' <input id="name_items' . $drop['id'] . '" type="text" size="50" value="' . $name_item . '">'; $response .= '</td></tr> <tr><td> Шанс выпадения:</td><td> <input id="chance' . $drop['id'] . '" size="10" type="text" value="' . $drop['random'] . '"> из <input type="text" id="chance_max' . $drop['id'] . '" size="10" value="' . $drop['random_max'] . '"> </td></tr> <tr><td> Куда выпадает предмет: </td><td> <select id="kuda' . $drop['id'] . '"> <option value="0" '; if ($drop['kuda'] == 0) { $response .= 'selected'; } $response .= '>Падает на землю</option> <option value="1" '; if ($drop['kuda'] == 1) { $response .= 'selected'; } $response .= '>Перемещается в инвентарь</option> </select> </td></tr> <tr><td>Количество одновременно "падающих" предметов</td><td>От <input type="text" maxsize="5" size="5" id="mincount' . $drop['id'] . '" value="' . $drop['mincount'] . '"> до <input type="text" maxsize="5" size="5" id="maxcount' . $drop['id'] . '" value="' . $drop['maxcount'] . '"></td></tr> <tr><td colspan="2"><!--Если из монстра выпадает более 1 предмета, то для каждого предмета можно задать шанс выпадания среди всего списка выпадающих предметов<br><input type="text" maxsize="3" size="5" id="random_all' . $drop['id'] . '" value="0"> - % выпадания этого элемента среди всего списка--></td></tr> </table></td> <td><input style="width:100%" type="button" value="Сохранить" onclick="save_res(\'' . $drop['id'] . '\')"><br /><br /><br /><input style="width:100%" type="button" value="Удалить" onclick="delete_res(\'' . $drop['id'] . '\')"></td></tr>'; $lcm[] = $drop['random_max']; } $lcm = lcm_arr($lcm); if ($lcm != 0) { mysql_data_seek($sel, 0); while ($chance = mysql_fetch_array($sel)) { $all += $chance['random'] * $lcm / gcd($lcm, $chance['random_max']); } if ($all <= $lcm) { $response .= "</table><br /><br />Общий шанс лута: <font color=green><b><u>" . $all . "/" . $lcm . "</u></b></font> (" . round(100 * $all / $lcm, 2) . "%)"; } else { $response .= "</table><br /><br />Общий шанс лута: <font color=red><b><u>" . $all . "/" . $lcm . "</u></b></font> (" . round(100 * $all / $lcm, 2) . "%)"; } } else { $response .= "</table><br /><br />Лута нет."; } return $response; }