Example #1
0
 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() . "");
                     }
                 }
             }
         }
     }
 }
Example #2
0
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 .= '&nbsp;<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;
}