db = new Db(); $this->max_value = 10; } public function createCardData($rare_chance = 33) { $color = self::$card_colors[mt_rand(0, (count(self::$card_colors) - (mt_rand(0, 100) < $rareChance ? 0 : 2)))]; $shape = self::$card_shapes[mt_rand(0, (count(self::$card_shapes) - (mt_rand(0, 100) < $rareChance ? 0 : 1)))]; $plus = mt_rand(1, $this->max_value); $minus = mt_rand(1, $this->max_value); return [ 'color' => $color, 'shape' => $shape, 'plus' => $plus, 'minus' => $minus, ]; } private function getMaxId() { return $this->db->query('SELECT TOP 1 `id` FROM `base_cards` ORDER BY `id` DESC;')->fetch()['id']; } public function getCard($id = false) { if ($id === false) { $id = mt_rand(1, $this->getMaxId()); } $query = 'SELECT * FROM `base_cards` WHERE `id`=?'; $card_data = $this->db->query($query, [$id])->result(); if ($card_data) { if (!is_null($card_data['owned'])) { $card_data['is_shadow'] = true; } return new Card($card_data); } return false; } public function getPack() { $pack = [ 'cost' => 0, 'cards' => [], ]; for ($i = 0; $i < 4; $i++) { $card = $this->getCard(); $pack['cards'][] = $card; if (!$card->is_shadow) { $this->db->execute('UPDATE `base_cards` SET `is_packed` WHERE `id`=?', [$card->id]); } } $pack['cost'] = array_reduce($pack['cards'], function($total, $card) { return $total + $card->getCost(); }, 0); return $pack; } }