Line 114 :
$equipLocationCombinations = preg_grep("/.*?$combinationName.*?/i", Flux::config('EquipLocationCombinations')->toArray());
But view Monster Database is no problem
my index.php
<?php
if (!defined('FLUX_ROOT')) exit;
//$this->loginRequired();
$title = 'List Items';
require_once 'Flux/TemporaryTable.php';
try {
$tableName = "{$server->charMapDatabase}.items";
$fromTables = array("{$server->charMapDatabase}.item_db", "{$server->charMapDatabase}.item_db2");
$tempTable = new Flux_TemporaryTable($server->connection, $tableName, $fromTables);
$shopTable = Flux::config('FluxTables.ItemShopTable');
// Statement parameters, joins and conditions.
$bind = array();
$sqlpartial = "LEFT OUTER JOIN {$server->charMapDatabase}.$shopTable ON $shopTable.nameid = items.id ";
$sqlpartial .= "WHERE 1=1 ";
$itemID = $params->get('item_id');
if ($itemID) {
$sqlpartial .= "AND items.id = ? ";
$bind[] = $itemID;
}
else {
$opMapping = array('eq' => '=', 'gt' => '>', 'lt' => '<');
$opValues = array_keys($opMapping);
$itemName = $params->get('name');
$itemType = $params->get('type');
$equipLoc = $params->get('equip_loc');
$npcBuy = $params->get('npc_buy');
$npcBuyOp = $params->get('npc_buy_op');
$npcSell = $params->get('npc_sell');
$npcSellOp = $params->get('npc_sell_op');
$weight = $params->get('weight');
$weightOp = $params->get('weight_op');
$attack = $params->get('attack');
$attackOp = $params->get('attack_op');
$defense = $params->get('defense');
$defenseOp = $params->get('defense_op');
$range = $params->get('range');
$rangeOp = $params->get('range_op');
$slots = $params->get('slots');
$slotsOp = $params->get('slots_op');
$refineable = $params->get('refineable');
$forSale = $params->get('for_sale');
$custom = $params->get('custom');
if ($itemName) {
$sqlpartial .= "AND (name_japanese LIKE ? OR name_japanese = ?) ";
$bind[] = "%$itemName%";
$bind[] = $itemName;
}
if ($itemType && $itemType !== '-1') {
if (count($itemTypeSplit = explode('-', $itemType)) == 2) {
$itemType = $itemTypeSplit[0];
$itemType2 = $itemTypeSplit[1];
}
if (is_numeric($itemType) && (floatval($itemType) == intval($itemType))) {
$itemTypes = Flux::config('ItemTypes')->toArray();
if (array_key_exists($itemType, $itemTypes) && $itemTypes[$itemType]) {
$sqlpartial .= "AND type = ? ";
$bind[] = $itemType;
} else {
$sqlpartial .= 'AND type IS NULL ';
}
if (count($itemTypeSplit) == 2 && is_numeric($itemType2) && (floatval($itemType2) == intval($itemType2))) {
$itemTypes2 = Flux::config('ItemTypes2')->toArray();
if (array_key_exists($itemType, $itemTypes2) && array_key_exists($itemType2, $itemTypes2[$itemType]) && $itemTypes2[$itemType][$itemType2]) {
$sqlpartial .= "AND view = ? ";
$bind[] = $itemType2;
} else {
$sqlpartial .= 'AND view IS NULL ';
}
}
} else {
$typeName = preg_quote($itemType, '/');
$itemTypes = preg_grep("/.*?$typeName.*?/i", Flux::config('ItemTypes')->toArray());
if (count($itemTypes)) {
$itemTypes = array_keys($itemTypes);
$sqlpartial .= "AND (";
$partial = '';
foreach ($itemTypes as $id) {
$partial .= "type = ? OR ";
$bind[] = $id;
}
$partial = preg_replace('/\s*OR\s*$/', '', $partial);
$sqlpartial .= "$partial) ";
} else {
$sqlpartial .= 'AND type IS NULL ';
}
}
}
if ($equipLoc !== false && $equipLoc !== '-1') {
if(is_numeric($equipLoc) && (floatval($equipLoc) == intval($equipLoc))) {
$equipLocationCombinations = Flux::config('EquipLocationCombinations')->toArray();
if (array_key_exists($equipLoc, $equipLocationCombinations) && $equipLocationCombinations[$equipLoc]) {
if ($equipLoc === '0') {
$sqlpartial .= "AND (equip_locations = 0 OR equip_locations IS NULL) ";
} else {
$sqlpartial .= "AND equip_locations = ? ";
$bind[] = $equipLoc;
}
}
} else {
$combinationName = preg_quote($equipLoc, '/');
$equipLocationCombinations = preg_grep("/.*?$combinationName.*?/i", Flux::config('EquipLocationCombinations')->toArray());
if (count($equipLocationCombinations)) {
$equipLocationCombinations = array_keys($equipLocationCombinations);
$sqlpartial .= "AND (";
$partial = '';
foreach ($equipLocationCombinations as $id) {
if ($id === 0) {
$partial .= "(equip_locations = 0 OR equip_locations IS NULL) OR ";
} else {
$partial .= "equip_locations = ? OR ";
$bind[] = $id;
}
}
$partial = preg_replace('/\s*OR\s*$/', '', $partial);
$sqlpartial .= "$partial) ";
}
}
}
if (in_array($npcBuyOp, $opValues) && trim($npcBuy) != '') {
$op = $opMapping[$npcBuyOp];
if ($op == '=' && $npcBuy === '0') {
$sqlpartial .= "AND (price_buy IS NULL OR price_buy = 0) ";
}
else {
$sqlpartial .= "AND price_buy $op ? ";
$bind[] = $npcBuy;
}
}
if (in_array($npcSellOp, $opValues) && trim($npcSell) != '') {
$op = $opMapping[$npcSellOp];
if ($op == '=' && $npcSell === '0') {
$sqlpartial .= "AND IFNULL(price_sell, FLOOR(price_buy/2)) = 0 ";
}
else {
$sqlpartial .= "AND IFNULL(price_sell, FLOOR(price_buy/2)) $op ? ";
$bind[] = $npcSell;
}
}
if (in_array($weightOp, $opValues) && trim($weight) != '') {
$op = $opMapping[$weightOp];
if ($op == '=' && $weight === '0') {
$sqlpartial .= "AND (weight IS NULL OR weight = 0) ";
}
else {
$sqlpartial .= "AND CAST(weight/10 AS UNSIGNED INTEGER) $op ? ";
$bind[] = $weight;
}
}
if (in_array($attackOp, $opValues) && trim($attack) != '') {
$op = $opMapping[$attackOp];
if ($op == '=' && $attack === '0') {
$sqlpartial .= "AND (attack IS NULL OR attack = 0) ";
}
else {
$sqlpartial .= "AND attack $op ? ";
$bind[] = $attack;
}
}
if (in_array($defenseOp, $opValues) && trim($defense) != '') {
$op = $opMapping[$defenseOp];
if ($op == '=' && $defense === '0') {
$sqlpartial .= "AND (defence IS NULL OR defence = 0) ";
}
else {
$sqlpartial .= "AND defence $op ? ";
$bind[] = $defense;
}
}
if (in_array($rangeOp, $opValues) && trim($range) != '') {
$op = $opMapping[$rangeOp];
if ($op == '=' && $range === '0') {
$sqlpartial .= "AND (`range` IS NULL OR `range` = 0) ";
}
else {
$sqlpartial .= "AND `range` $op ? ";
$bind[] = $range;
}
}
if (in_array($slotsOp, $opValues) && trim($slots) != '') {
$op = $opMapping[$slotsOp];
if ($op == '=' && $slots === '0') {
$sqlpartial .= "AND (slots IS NULL OR slots = 0) ";
}
else {
$sqlpartial .= "AND slots $op ? ";
$bind[] = $slots;
}
}
if ($refineable) {
if ($refineable == 'yes') {
$sqlpartial .= "AND refineable > 0 ";
}
elseif ($refineable == 'no') {
$sqlpartial .= "AND IFNULL(refineable, 0) < 1 ";
}
}
if ($forSale) {
if ($forSale == 'yes') {
$sqlpartial .= "AND $shopTable.cost > 0 ";
}
elseif ($forSale == 'no') {
$sqlpartial .= "AND IFNULL($shopTable.cost, 0) < 1 ";
}
}
if ($custom) {
if ($custom == 'yes') {
$sqlpartial .= "AND origin_table LIKE '%item_db2' ";
}
elseif ($custom == 'no') {
$sqlpartial .= "AND origin_table LIKE '%item_db' ";
}
}
}
// Get total count and feed back to the paginator.
$sth = $server->connection->getStatement("SELECT COUNT(DISTINCT items.id) AS total FROM $tableName $sqlpartial");
$sth->execute($bind);
$paginator = $this->getPaginator($sth->fetch()->total);
$paginator->setSortableColumns(array(
'item_id' => 'asc', 'name', 'type', 'equip_locations', 'price_buy', 'price_sell', 'weight', 'attack', 'defense',
'range', 'slots', 'refineable', 'cost', 'origin_table'
));
$col = "origin_table, items.id AS item_id, name_japanese AS name, type, ";
$col .= "IFNULL(equip_locations, 0) AS equip_locations, price_buy, weight/10 AS weight, attack, ";
$col .= "defence AS defense, `range`, slots, refineable, cost, $shopTable.id AS shop_item_id, ";
$col .= "IFNULL(price_sell, FLOOR(price_buy/2)) AS price_sell, view";
$sql = $paginator->getSQL("SELECT $col FROM $tableName $sqlpartial GROUP BY items.id");
$sth = $server->connection->getStatement($sql);
$sth->execute($bind);
$items = $sth->fetchAll();
$authorized = $auth->actionAllowed('item', 'view');
if ($items && count($items) === 1 && $authorized && Flux::config('SingleMatchRedirectItem')) {
$this->redirect($this->url('item', 'view', array('id' => $items[0]->item_id)));
}
}
catch (Exception $e) {
if (isset($tempTable) && $tempTable) {
// Ensure table gets dropped.
$tempTable->drop();
}
// Raise the original exception.
$class = get_class($e);
throw new $class($e->getMessage());
}
?>
my view.php
<?php
if (!defined('FLUX_ROOT')) exit;
//$this->loginRequired();
$title = 'Viewing Item';
require_once 'Flux/TemporaryTable.php';
$tableName = "{$server->charMapDatabase}.items";
$fromTables = array("{$server->charMapDatabase}.item_db", "{$server->charMapDatabase}.item_db2");
$tempTable = new Flux_TemporaryTable($server->connection, $tableName, $fromTables);
$shopTable = Flux::config('FluxTables.ItemShopTable');
$itemID = $params->get('id');
$col = 'items.id AS item_id, name_english AS identifier, ';
$col .= 'name_japanese AS name, type, ';
$col .= 'price_buy, price_sell, weight/10 AS weight, attack, defence, `range`, slots, ';
$col .= 'equip_jobs, equip_upper, equip_genders, equip_locations, ';
$col .= 'weapon_level, equip_level, refineable, view, script, ';
$col .= 'equip_script, unequip_script, origin_table, ';
$col .= "$shopTable.cost, $shopTable.id AS shop_item_id";
$sql = "SELECT $col FROM {$server->charMapDatabase}.items ";
$sql .= "LEFT OUTER JOIN {$server->charMapDatabase}.$shopTable ON $shopTable.nameid = items.id ";
$sql .= "WHERE items.id = ? LIMIT 1";
$sth = $server->connection->getStatement($sql);
$sth->execute(array($itemID));
$item = $sth->fetch();
$isCustom = null;
if ($item) {
$title = "Viewing Item ($item->name)";
$isCustom = (bool)preg_match('/item_db2$/', $item->origin_table);
$mobDB = "{$server->charMapDatabase}.monsters";
$fromTables = array("{$server->charMapDatabase}.mob_db", "{$server->charMapDatabase}.mob_db2");
$mobTable = new Flux_TemporaryTable($server->connection, $mobDB, $fromTables);
$col = 'ID AS monster_id, iName AS monster_name, LV AS monster_level, ';
$col .= 'Race AS monster_race, (Element%10) AS monster_element, (Element/20) AS monster_ele_lv, ';
// Normal drops.
$col .= 'Drop1id AS drop1_id, Drop1per AS drop1_chance, ';
$col .= 'Drop2id AS drop2_id, Drop2per AS drop2_chance, ';
$col .= 'Drop3id AS drop3_id, Drop3per AS drop3_chance, ';
$col .= 'Drop4id AS drop4_id, Drop4per AS drop4_chance, ';
$col .= 'Drop5id AS drop5_id, Drop5per AS drop5_chance, ';
$col .= 'Drop6id AS drop6_id, Drop6per AS drop6_chance, ';
$col .= 'Drop7id AS drop7_id, Drop7per AS drop7_chance, ';
$col .= 'Drop8id AS drop8_id, Drop8per AS drop8_chance, ';
$col .= 'Drop9id AS drop9_id, Drop9per AS drop9_chance, ';
// Card drops.
$col .= 'DropCardid AS dropcard_id, DropCardper AS dropcard_chance, ';
// MVP rewards.
$col .= 'MVP1id AS mvpdrop1_id, MVP1per AS mvpdrop1_chance, ';
$col .= 'MVP2id AS mvpdrop2_id, MVP2per AS mvpdrop2_chance, ';
$col .= 'MVP3id AS mvpdrop3_id, MVP3per AS mvpdrop3_chance';
$sql = "SELECT $col FROM $mobDB WHERE ";
// Normal drops.
$sql .= 'Drop1id = ? OR ';
$sql .= 'Drop2id = ? OR ';
$sql .= 'Drop3id = ? OR ';
$sql .= 'Drop4id = ? OR ';
$sql .= 'Drop5id = ? OR ';
$sql .= 'Drop6id = ? OR ';
$sql .= 'Drop7id = ? OR ';
$sql .= 'Drop8id = ? OR ';
$sql .= 'Drop9id = ? OR ';
// Card drops.
$sql .= 'DropCardid = ? OR ';
// MVP rewards.
$sql .= 'MVP1id = ? OR ';
$sql .= 'MVP2id = ? OR ';
$sql .= 'MVP3id = ? ';
//$sql .= 'GROUP BY ID, iName';
$sth = $server->connection->getStatement($sql);
$res = $sth->execute(array_fill(0, 13, $itemID));
$dropResults = $sth->fetchAll();
$itemDrops = array();
$dropNames = array(
'drop1', 'drop2', 'drop3', 'drop4', 'drop5', 'drop6', 'drop7', 'drop8', 'drop9',
'dropcard', 'mvpdrop1', 'mvpdrop2', 'mvpdrop3'
);
// Sort callback.
function __tmpSortDrops($arr1, $arr2)
{
if ($arr1['drop_chance'] == $arr2['drop_chance']) {
return strcmp($arr1['monster_name'], $arr2['monster_name']);
}
return $arr1['drop_chance'] < $arr2['drop_chance'] ? 1 : -1;
}
foreach ($dropResults as $drop) {
foreach ($dropNames as $dropName) {
$dropID = $drop->{$dropName.'_id'};
$dropChance = $drop->{$dropName.'_chance'};
if ($dropID == $itemID) {
$dropArray = array(
'monster_id' => $drop->monster_id,
'monster_name' => $drop->monster_name,
'monster_level' => $drop->monster_level,
'monster_race' => $drop->monster_race,
'monster_element' => $drop->monster_element,
'monster_ele_lv' => $drop->monster_ele_lv,
'drop_id' => $itemID,
'drop_chance' => $dropChance
);
if (preg_match('/^dropcard/', $dropName)) {
$dropArray['drop_chance'] = $dropArray['drop_chance']*$server->cardDropRates/100;
$dropArray['type'] = 'card';
}
elseif (preg_match('/^drop/', $dropName)) {
$dropArray['drop_chance'] = $dropArray['drop_chance']*$server->dropRates/100;
$dropArray['type'] = 'normal';
}
elseif (preg_match('/^mvp/', $dropName)) {
$dropArray['drop_chance'] = $dropArray['drop_chance']*$server->mvpDropRates/100;
$dropArray['type'] = 'mvp';
}
if ($dropArray['drop_chance'] > 100) {
$dropArray['drop_chance'] = 100;
}
$itemDrops[] = $dropArray;
}
}
}
// Sort so that monsters are ordered by drop chance and name.
usort($itemDrops, '__tmpSortDrops');
}
?>
Anyone please help me? T.T