db->query($s); $r = $q->fetchArray(SQLITE3_ASSOC); $this->uid = $r["uid"]; $this->id = $r["id"]; if (strlen($r["building"]) > 0){ // TODO Entity $this->monster = new Building($this->db, $r["building"]); } if (strlen($r["unit"]) > 0){ $this->unit = new K_Unit($this->db, $r["unit"], $complete); } $this->stars = $r["stars"]; $this->level = $r["level"]; $this->hp = $r["hp"]; $this->attack = $r["attack"]; $this->defense = $r["defense"]; $this->speed = $r["speed"]; $this->crit_rate = $r["crit_rate"]; $this->crit_damage = $r["crit_damage"]; $this->resistance = $r["resistance"]; $this->accuracy = $r["accuracy"]; $this->experience = $r["experience"]; $this->exp_gained = $r["exp_gained"]; $this->exp_gain_rate = $r["exp_gain_rate"]; $this->costume = $r["costume"]; // TODO: Create entities? $this->attribute = $r["attribute"]; $this->source = new K_Source($this->db, $r["source"]); // TODO: Instantiate? $this->create_time = date_create($r["create_time"]); $this->homunculus = $r["homunculus"]; $this->homunculus_name = $r["homunculus_name"]; #$this->avg_rune_efficiency = $r["avg_rune_efficiency"]; #$this->fodder = $r["fodder"]; #$this->in_storage = $r["in_storage"]; #$this->ignore_for_fusion = $r["ignore_for_fusion"]; #$this->priority = $r["priority"]; #$this->notes = $r["notes"]; if ($complete){ $this->load_runes(); $s = "SELECT level " . "FROM " . " unit_skill, " . " k_skill " . "WHERE " . " k_skill.id = unit_skill.skill AND " . " unit = '$this->id' " . "ORDER BY slot;"; $q = $this->db->query($s); while ($r = $q->fetchArray(SQLITE3_ASSOC)){ array_push($this->skill_levels, $r["level"]); } $s = "SELECT exp " . "FROM k_experience " . "WHERE " . " stars = $this->stars AND " . " level = $this->level;"; error_log($s); $q = $this->db->query($s); $r = $q->fetchArray(SQLITE3_ASSOC); $this->experience_level = $r["exp"]; $this->experience_level_up = $r["exp"] - $this->exp_gained; } } /** * Loads the information about the equiped runes. * It is autoatically called at construction time if the * $complete parameter is true (by default). No point in calling it * twice. */ public function load_runes(){ $this->rune = []; $s = "SELECT id " . "FROM rune " . "WHERE assigned_to = '$this->id'; "; $q = $this->db->query($s); while ($r = $q->fetchArray(SQLITE3_ASSOC)){ array_push($this->rune, new Rune($this->db, $r["id"])); } foreach ($this->rune as $rune){ $this->sum_rune_stat($rune->main_stat, $rune->main_stat_value); $this->sum_rune_stat($rune->innate_stat, $rune->innate_stat_value); $this->sum_rune_stat($rune->substat_1, $rune->substat_1_value + $rune->substat_1_grind); $this->sum_rune_stat($rune->substat_2, $rune->substat_2_value + $rune->substat_2_grind); $this->sum_rune_stat($rune->substat_3, $rune->substat_3_value + $rune->substat_3_grind); $this->sum_rune_stat($rune->substat_4, $rune->substat_4_value + $rune->substat_4_grind); } $this->rune_attack = ceil($this->rune_attack); $this->rune_defense = ceil($this->rune_defense); $this->rune_hp = ceil($this->rune_hp); } /** * Calculates the stat increase by a rune property. * * @param string $stat Stat type. * @param int $value Stat increase value. */ private function sum_rune_stat($stat, $value){ switch ($stat){ case "ATK": $this->rune_attack += $value; break; case "DEF": $this->rune_defense += $value; break; case "HP": $this->rune_hp += $value; break; case "SPD": $this->rune_speed += $value; break; case "CRR": $this->rune_crit_rate += $value; break; case "CRD": $this->rune_crit_damage += $value; break; case "ACC": $this->rune_accuracy += $value; break; case "RES": $this->rune_resistance += $value; break; case "ATK%": $this->rune_attack += ($this->attack * $value / 100); break; case "DEF%": $this->rune_defense += ($this->defense * $value / 100); break; case "HP%": $this->rune_hp += ($this->hp * $value / 100); break; } } } ?>