currentHp(); }; $fields['max_hp'] = function () { return $this->maxHp(); }; return $fields; } public function beforeSave($insert) { if ($insert && (int)$this->hp <= 0) { $this->hp = $this->maxHp(); } return parent::beforeSave($insert); } public function behaviors() { return [ TimestampBehavior::className(), ]; } public function rules() { return [ ['id', 'default', 'value' => 0], ['user_id', 'required'], ['user_id', 'exist', 'targetClass' => '\common\models\User', 'targetAttribute' => 'id'], ['pet_config_id', 'default', 'value' => ''], ['name', 'default', 'value' => ''], ['level', 'default', 'value' => 1], ['exp', 'default', 'value' => 0], ['feed', 'default', 'value' => 0], ['hp', 'default', 'value' => 0], ['hp', 'number', 'integerOnly' => true, 'min' => 0], ['last_feed_update_time', 'default', 'value' => 0], ['blood', 'default', 'value' => 0], ['attack', 'default', 'value' => 0], ['anti', 'default', 'value' => 0], ['crit', 'default', 'value' => 0], ['dodge', 'default', 'value' => 0], ['fighting_capacity', 'default', 'value' => 0], ['is_enter_war', 'default', 'value' => PetUtil::NOT_ENTER_WAR], ['is_enter_war', 'in', 'range' => PetUtil::ENTER_WAR_LIST], ['end_brooding_time', 'default', 'value' => 0], ['accelerate_brooding_gem', 'default', 'value' => 0], ['blood_train_count', 'default', 'value' => 0], ['attack_train_count', 'default', 'value' => 0], ['anti_train_count', 'default', 'value' => 0], ['crit_train_count', 'default', 'value' => 0], ['dodge_train_count', 'default', 'value' => 0], ['blood_add', 'default', 'value' => 0], ['attack_add', 'default', 'value' => 0], ['anti_add', 'default', 'value' => 0], ['crit_add', 'default', 'value' => 0], ['dodge_add', 'default', 'value' => 0], ['created_at', 'default', 'value' => 0], ['updated_at', 'default', 'value' => 0], ]; } public static function findByUserIDAndPetConfigID($userID, $petConfigID) { return self::findOne(['user_id' => $userID, 'pet_config_id' => $petConfigID]); } /** * @param $userID * @return static[] */ public static function findAllByUserID($userID) { return self::findAll(['user_id' => $userID]); } public static function findByPetID($petID) { return self::findOne(['id' => $petID]); } public static function findEnterWarPetByUserID($userID) { return self::findOne(['user_id' => $userID, 'is_enter_war' => PetUtil::ENTER_WAR]); } public function maxHp() { return max(1, (int)$this->blood + (int)$this->blood_add); } public function currentHp() { return max(0, min($this->maxHp(), (int)$this->hp)); } public function attackValue() { return max(0, (int)$this->attack + (int)$this->attack_add); } public function defenseValue() { return max(0, (int)$this->anti + (int)$this->anti_add); } }