Jump to content
  • 0

Fatal error in Item Database (Flux CP)


ahhak1989

Question


  • Group:  Members
  • Topic Count:  4
  • Topics Per Day:  0.00
  • Content Count:  4
  • Reputation:   0
  • Joined:  12/12/12
  • Last Seen:  

Fatal error: Call to a member function toArray() on a non-object in /home/hakronr/public_html/modules/item/index.php on line 114

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

Edited by Emistry
Please use [CODEBOX] or Attachments for long contents.
Link to comment
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

×
×
  • Create New...