* @author Slawkens * @copyright 2017 MyAAC * @link http://my-aac.org */ defined('MYAAC') or die('Direct access not allowed!'); class Creatures { private static $monstersList = null; private static $lastError = ''; public static function loadFromXML($show = false) { global $config, $db; try { $db->query("DELETE FROM `myaac_monsters`;"); } catch(PDOException $error) {} if($show) { echo '

Reload monsters.

'; echo "

All records deleted from table 'myaac_monsters' in database.

"; } try { self::$monstersList = new OTS_MonstersList($config['data_path'].'monster/'); } catch(Exception $e) { self::$lastError = $e->getMessage(); return false; } $items = array(); $items_db = $db->query('SELECT `id`, `name` FROM `' . TABLE_PREFIX . 'items`;'); foreach($items_db->fetchAll() as $item) { $items[$item['name']] = $item['id']; } //$names_added must be an array $names_added[] = ''; //add monsters foreach(self::$monstersList as $lol) { $monster = self::$monstersList->current(); if(!$monster->loaded()) { if($show) { warning('Error while adding monster: ' . self::$monstersList->currentFile()); } continue; } //load monster mana needed to summon/convince $mana = $monster->getManaCost(); //load monster name $name = $monster->getName(); //load monster health $health = $monster->getHealth(); //load monster speed and calculate "speed level" $speed_ini = $monster->getSpeed(); if($speed_ini <= 220) { $speed_lvl = 1; } else { $speed_lvl = ($speed_ini - 220) / 2; } //check "is monster use haste spell" $defenses = $monster->getDefenses(); $use_haste = 0; foreach($defenses as $defense) { if($defense == 'speed') { $use_haste = 1; } } //load race $race = $monster->getRace(); //load monster flags $flags = $monster->getFlags(); if(!isset($flags['summonable'])) $flags['summonable'] = '0'; if(!isset($flags['convinceable'])) $flags['convinceable'] = '0'; $loot = $monster->getLoot(); foreach($loot as &$item) { if(!Validator::number($item['id'])) { if(isset($items[$item['id']])) { $item['id'] = $items[$item['id']]; } } } if(!in_array($name, $names_added)) { try { $db->insert(TABLE_PREFIX . 'monsters', array( 'name' => $name, 'mana' => empty($mana) ? 0 : $mana, 'exp' => $monster->getExperience(), 'health' => $health, 'speed_lvl' => $speed_lvl, 'use_haste' => $use_haste, 'voices' => json_encode($monster->getVoices()), 'immunities' => json_encode($monster->getImmunities()), 'summonable' => $flags['summonable'] > 0 ? 1 : 0, 'convinceable' => $flags['convinceable'] > 0 ? 1 : 0, 'race' => $race, 'loot' => json_encode($loot) )); if($show) { success('Added: ' . $name . '
'); } } catch(PDOException $error) { if($show) { warning('Error while adding monster (' . $name . '): ' . $error->getMessage()); } } $names_added[] = $name; } } return true; } public static function getMonstersList() { return self::$monstersList; } public static function getLastError() { return self::$lastError; } }