public function formatInfo() { $regExp = "/\\\$+(?:([\\/,*])?([0-9]*);)?([d+\\;(\\d*)?([1-9]*)([A-z])([1-3]*)(([A-z, ]*)\\:([A-z, ]*)\\;)?/"; $info = $this->tooltip_loc0; $attributes = $this->attributes; //TODO: rewrite after support $this in PHP 5.4.0 $this->info = preg_replace_callback($regExp, function ($match) use($attributes) { $select = ''; $match[5] = $match[5] ? $match[5] : '1'; $match[4] = strtolower($match[4]); switch ($match[4]) { case 'z': return "[Home]"; case 'l': return $match[8]; case 'g': return $match[7]; case 'h': $select = 'procChance'; break; case 'u': return ''; //$this->RegExpU($match); //$this->RegExpU($match); case 'v': $select = 'affected_target_level'; break; case 'q': $select = 'effect' . $match[5] . 'MiscValue'; break; case 'i': $select = 'spellTargets'; break; case 'b': $select = 'effect' . $match[5] . 'PointsPerComboPoint'; break; case 'm': case 's': $select = 'effect' . $match[5] . 'BasePoints'; break; case 'a': $select = 'effect' . $match[5] . 'radius'; break; case 'd': $select = 'durationID'; break; case 'o': $select = 'durationID, effect' . $match[5] . 'Amplitude, effect' . $match[5] . 'BasePoints'; break; case 't': $select = 'effect' . $match[5] . 'Amplitude'; break; case 'n': $select = 'procCharges'; break; case 'x': $select = 'effect' . $match[5] . 'ChainTarget'; break; default: break; } if ($match[3]) { $command = Yii::app()->db->createCommand()->select($select)->from('wow_spells')->where('spellID = :spellID'); if ($match[4] == 'o') { $value = $command->queryRow(false, array(':spellID' => $match[3])); } else { $value = $command->queryScalar(array(':spellID' => $match[3])); } } elseif ($match[4] == 'o') { $value = array($attributes['durationID'], $attributes['effect' . $match[5] . 'Amplitude'], $attributes['effect' . $match[5] . 'BasePoints']); } else { $value = $attributes[$select]; } if (is_array($value)) { $value = Spell::GetRealDuration($value[0], $value[1], $match[5]) * ($value[2] + 1); } if ($match[4] == 's' or $match[4] == 'm') { $value += 1; } elseif ($match[4] == 'i' and !$value) { $value = 'nearby'; } elseif ($match[4] == 'a') { $value = Spell::GetRadius($value, $match[5]); } elseif ($match[4] == 'd') { $value = Spell::GetDuration($value) . ' sec'; } elseif ($match[4] == 't') { $value /= 1000; } if ($match[2]) { if ($match[1] == "/") { $value = abs(($value + 1) / $match[2]); } else { if ($match[1] == "*") { $value = abs(($value + 1) * $match[2]); } } } return $value; }, $info); }