Explorar o código

Merge branch 'Rune_Rolls'

Iñigo Valentin %!s(int64=5) %!d(string=hai) anos
pai
achega
8f2c0bcaf2

+ 2 - 147
application/API/v3/profile/PUT.php

@@ -15,152 +15,7 @@
 
     global $db;
 
-    /**
-     * Calculates the currrent efficiency of a rune.
-     *
-     * @param mixed[] $rune JSON fragment of the rune.
-     * @return int Efficiency (0-100)
-     */
-    function calculate_efficiency($rune){
-        $efficiency = 0.0;
-        $level = $rune->{"upgrade_curr"};
-        $stars = $rune->{"class"};
-        // Ancient stars are + 10
-        if ($stars > 10){
-            $stars -= 10;
-        }
-        $list = null;
-        // Main stat
-        $main_stat = $rune->{"pri_eff"}[0];
-        switch ($main_stat){
-            case RUNE_STAT_ID::HP:
-                $list = RUNE_STAT_VALUES::HP;
-                break;
-            case RUNE_STAT_ID::HP_P:
-                $list = RUNE_STAT_VALUES::HP_P;
-                break;
-            case RUNE_STAT_ID::ATK:
-                $list = RUNE_STAT_VALUES::ATK;
-                break;
-            case RUNE_STAT_ID::ATK_P:
-                $list = RUNE_STAT_VALUES::ATK_P;
-                break;
-            case RUNE_STAT_ID::DEF:
-                $list = RUNE_STAT_VALUES::DEF;
-                break;
-            case RUNE_STAT_ID::DEF_P:
-                $list = RUNE_STAT_VALUES::DEF_P;
-                break;
-            case RUNE_STAT_ID::SPD:
-                $list = RUNE_STAT_VALUES::SPD;
-                break;
-            case RUNE_STAT_ID::CRR:
-                $list = RUNE_STAT_VALUES::CRR;
-                break;
-            case RUNE_STAT_ID::CRD:
-                $list = RUNE_STAT_VALUES::CRD;
-                break;
-            case RUNE_STAT_ID::ACC:
-                $list = RUNE_STAT_VALUES::ACC;
-                break;
-            case RUNE_STAT_ID::RES:
-                $list = RUNE_STAT_VALUES::RES;
-                break;
-        }
-        $efficiency += floatval($list[$stars][$level]) / floatval($list[6][15]);
-        // Innate stat
-        if ($rune->{"prefix_eff"}[0] > 0){
-            $innate_stat = $rune->{"pri_eff"}[0];
-            $innate_stat_value = $rune->{"pri_eff"}[1];
-            $efficiency += floatval($innate_stat_value) / (5 * floatval(RUNE_SUBSTAT_MAX_VALUES::SUBSTAT[$innate_stat][6]));
-        }
-        // Substats
-        for ($i = 0; $i <= 3; $i ++){
-            if (sizeof($rune->{"sec_eff"}) > $i){
-                $substat = $rune->{"sec_eff"}[$i][0];
-                $substat_value = $rune->{"sec_eff"}[$i][1];
-                $efficiency += floatval($substat_value) / (5 * floatval(RUNE_SUBSTAT_MAX_VALUES::SUBSTAT[$substat][6]));
-            }
-        }
-        $efficiency = $efficiency / 2.8 * 100;
-        if ($efficiency > 100){
-            $efficiency = 100;
-        }
-        return $efficiency;
-    }
 
-    /**
-     * Calculates the maximum efficiency of a rune.
-     *
-     * @param mixed[] $rune JSON fragment of the rune.
-     * @return int Maximum efficiency (0-100)
-     */
-    function calculate_maximum_efficiency($rune){
-        $efficiency = 0.0;
-        $stars = $rune->{"class"};
-        // Ancient stars are + 10
-        if ($stars > 10){
-            $stars -= 10;
-        }
-        $list = null;
-        // Main stat
-        $main_stat = $rune->{"pri_eff"}[0];
-        switch ($main_stat){
-            case RUNE_STAT_ID::HP:
-                $list = RUNE_STAT_VALUES::HP;
-                break;
-            case RUNE_STAT_ID::HP_P:
-                $list = RUNE_STAT_VALUES::HP_P;
-                break;
-            case RUNE_STAT_ID::ATK:
-                $list = RUNE_STAT_VALUES::ATK;
-                break;
-            case RUNE_STAT_ID::ATK_P:
-                $list = RUNE_STAT_VALUES::ATK_P;
-                break;
-            case RUNE_STAT_ID::DEF:
-                $list = RUNE_STAT_VALUES::DEF;
-                break;
-            case RUNE_STAT_ID::DEF_P:
-                $list = RUNE_STAT_VALUES::DEF_P;
-                break;
-            case RUNE_STAT_ID::SPD:
-                $list = RUNE_STAT_VALUES::SPD;
-                break;
-            case RUNE_STAT_ID::CRR:
-                $list = RUNE_STAT_VALUES::CRR;
-                break;
-            case RUNE_STAT_ID::CRD:
-                $list = RUNE_STAT_VALUES::CRD;
-                break;
-            case RUNE_STAT_ID::ACC:
-                $list = RUNE_STAT_VALUES::ACC;
-                break;
-            case RUNE_STAT_ID::RES:
-                $list = RUNE_STAT_VALUES::RES;
-                break;
-        }
-        $efficiency += floatval($list[$stars][15]) / floatval($list[6][15]);
-        // Innate stat
-        if ($rune->{"prefix_eff"}[0] > 0){
-            $innate_stat = $rune->{"pri_eff"}[0];
-            $innate_stat_value = $rune->{"pri_eff"}[1];
-            $efficiency += floatval($innate_stat_value) / (5 * floatval(RUNE_SUBSTAT_MAX_VALUES::SUBSTAT[$innate_stat][6]));
-        }
-        // Substats
-        for ($i = 0; $i <= 3; $i ++){
-            if (sizeof($rune->{"sec_eff"}) > $i){
-                $substat = $rune->{"sec_eff"}[$i][0];
-                $efficiency += floatval(RUNE_SUBSTAT_MAX_VALUES::SUBSTAT[$substat][$stars]) / (5 * floatval(RUNE_SUBSTAT_MAX_VALUES::SUBSTAT[$substat][6]));
-            }
-        }
-        $efficiency = $efficiency / 2.8 * 100;
-        if ($efficiency > 100){
-            $efficiency = 100;
-        }
-        return $efficiency;
-    }
-    
     /**
      * Parses an artifact and saves it to the database.
      *
@@ -413,8 +268,8 @@
             $lock = 1;
         }
         $statement->bindValue(":locked", $lock, SQLITE3_INTEGER);
-        $efficiency = calculate_efficiency($rune);
-        $max_efficiency = calculate_maximum_efficiency($rune);
+        $efficiency = null;
+        $max_efficiency = null;
         $statement->bindValue(":efficiency", $efficiency, SQLITE3_FLOAT);
         $statement->bindValue(":max_efficiency", $max_efficiency, SQLITE3_FLOAT);
         $statement->execute();

+ 102 - 2
application/entity/Rune.php

@@ -171,8 +171,8 @@
                 $this->quality = $r["quality"];
                 $this->original_quality = $r["original_quality"];
                 $this->value = $r["value"];
-                $this->efficiency = $r["efficiency"];
-                $this->max_efficiency = $r["max_efficiency"];
+                //$this->efficiency = $r["efficiency"];
+                //$this->max_efficiency = $r["max_efficiency"];
                 $this->locked = $r["locked"];
 
                 // Get substats
@@ -201,6 +201,8 @@
                 }
                 $this->quality_name = $this->get_quality_name($this->quality);
                 $this->original_quality_name = $this->get_quality_name($this->original_quality);
+                $this->efficiency = $this->calculate_efficiency();
+                $this->max_efficiency = $this->calculate_maximum_efficiency();
             }
         }
 
@@ -266,5 +268,103 @@
             }
         }
 
+        /**
+         * Calcuates the efficiency of the rune.
+         *
+         * @return float Efficiency
+         */
+        private function calculate_efficiency(){
+            global $db;
+            $eff = [0.0, 0.0, 0.0, 0.0, 0.0];
+
+            $query = "
+              SELECT
+                min,
+                max
+              FROM
+                k_rune_roll_type,
+                k_rune_stat_roll
+              WHERE
+                k_rune_roll_type.id = k_rune_stat_roll.type AND
+                k_rune_roll_type.ancient = :ancient AND
+                k_rune_roll_type.initial = :initial AND
+                k_rune_roll_type.upgrade = :upgrade AND
+                k_rune_stat_roll.stars = :stars AND
+                k_rune_stat_roll.stat = :stat
+              ";
+
+            // Fixed stat 
+            if ($this->innate_stat != null && $this->innate_stat->value > 0){
+                $value = $this->innate_stat->value;
+                $statement = $db->prepare($query);
+                $statement->bindValue(':ancient', $this->ancient, SQLITE3_INTEGER);
+                $statement->bindValue(':initial', 1, SQLITE3_INTEGER);
+                $statement->bindValue(':upgrade', 0, SQLITE3_INTEGER);
+                $statement->bindValue(':stars', $this->stars, SQLITE3_INTEGER);
+                $statement->bindValue(':stat', $this->innate_stat->stat, SQLITE3_INTEGER);
+                $r = $statement->execute()->fetchArray(SQLITE3_ASSOC);
+                if ($r){
+                    $min_initial = 0;//$r["min"];
+                    $max_initial = $r["max"];
+                    $eff[0] = ($value - $min_initial) / (9 * ($max_initial - $min_initial));
+                }
+            }
+            for ($i = 1; $i <= 4; $i ++){
+                if ($this->stats[$i] != null && $this->stats[$i]->value > 0){
+                    $value = $this->stats[$i]->value;
+                    $value = $this->stats[$i]->value;
+                    $statement = $db->prepare($query);
+                    $statement->bindValue(':ancient', $this->ancient, SQLITE3_INTEGER);
+                    $statement->bindValue(':initial', 1, SQLITE3_INTEGER);
+                    $statement->bindValue(':upgrade', 0, SQLITE3_INTEGER);
+                    $statement->bindValue(':stars', $this->stars, SQLITE3_INTEGER);
+                    $statement->bindValue(':stat', $this->stats[$i]->stat, SQLITE3_INTEGER);
+                    $r_initial = $statement->execute()->fetchArray(SQLITE3_ASSOC);
+                    $statement = $db->prepare($query);
+                    $statement->bindValue(':ancient', $this->ancient, SQLITE3_INTEGER);
+                    $statement->bindValue(':initial', 0, SQLITE3_INTEGER);
+                    $statement->bindValue(':upgrade', 1, SQLITE3_INTEGER);
+                    $statement->bindValue(':stars', $this->stars, SQLITE3_INTEGER);
+                    $statement->bindValue(':stat', $this->stats[$i]->stat, SQLITE3_INTEGER);
+                    $r_upgrade = $statement->execute()->fetchArray(SQLITE3_ASSOC);
+                    if ($r_initial && $r_upgrade){
+                        $min_initial = 0;//$r_initial["min"];
+                        $max_initial = $r_initial["max"];
+                        $min_upgrade = 0;//$r_upgrade["min"];
+                        $max_upgrade = $r_upgrade["max"];
+                        $eff[$i] = ((5 * $value) - ( 4 * $min_upgrade + $min_initial)) / ( 9 * ($max_initial - $min_initial + (4 * ($max_upgrade + $min_upgrade))));
+                    }
+                }
+            }
+            $efficiency = 0.0;
+            for ($i = 0; $i <= 4; $i ++){
+                $efficiency += $eff[$i];
+            }
+            $efficiency *= 100;
+            return $efficiency;
+        }
+
+        /**
+         * Calcuates the maximum efficiency of the rune.
+         *
+         * @return float Efficiency
+         */
+        private function calculate_maximum_efficiency(){
+            $max_efficiency = $this->efficiency;
+            if ($this->level < 12){
+                $max_efficiency += (1/9);
+            }
+            if ($this->level < 9){
+                $max_efficiency += (1/9);
+            }
+            if ($this->level < 6){
+                $max_efficiency += (1/9);
+            }
+            if ($this->level < 3){
+                $max_efficiency += (1/9);
+            }
+            return $max_efficiency;
+        }
+
     }
 ?>

BIN=BIN
application/sw.sqlite


+ 533 - 0
install_data/install_base.sql

@@ -30321,4 +30321,537 @@ INSERT INTO k_unit_transformation VALUES(23612,23600,23512);
 INSERT INTO k_unit_transformation VALUES(23613,23600,23513);
 INSERT INTO k_unit_transformation VALUES(23614,23600,23514);
 INSERT INTO k_unit_transformation VALUES(23615,23600,23515);
+
+
+CREATE TABLE k_rune_roll_type(
+    id INT NOT NULL PRIMARY KEY,
+    ancient INT NOT NULL CHECK(ancient IN (1, 0)),
+    initial INT NOT NULL CHECK(initial IN (1, 0)),
+    upgrade INT NOT NULL CHECK(upgrade IN (1, 0)),
+    description TEXT
+);
+INSERT INTO k_rune_roll_type VALUES(1, 0, 1, 0, 'Initial values for non-ancient runes');
+INSERT INTO k_rune_roll_type VALUES(2, 0, 0, 1, 'Upgrade values for non-ancient runes');
+INSERT INTO k_rune_roll_type VALUES(3, 1, 1, 0, 'Initial values for ancient runes');
+INSERT INTO k_rune_roll_type VALUES(4, 1, 0, 1, 'Upgrade values for ancient runes');
+
+CREATE TABLE k_rune_stat_roll(
+    type INT NOT NULL REFERENCES k_rune_roll_type(id),
+    stat INT NOT NULL REFERENCES k_rune_stat(id),
+    stars INT NOT NULL CHECK(stars BETWEEN 1 AND 6),
+    min INT NOT NULL,
+    max INT NOT NULL,
+    PRIMARY KEY(type, stat, stars)
+);
+INSERT INTO k_rune_stat_roll VALUES (1, 1, 1, 15, 60); -- HP NonA INI 
+INSERT INTO k_rune_stat_roll VALUES (1, 1, 2, 30, 105); -- HP NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 1, 3, 45, 165); -- HP NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 1, 4, 60, 225); -- HP NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 1, 5, 90, 300); -- HP NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 1, 6, 135, 375); -- HP NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 2, 1, 1, 2); -- HP% NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 2, 2, 1, 3); -- HP% NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 2, 3, 2, 5); -- HP% NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 2, 4, 3, 6); -- HP% NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 2, 5, 4, 7); -- HP% NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 2, 6, 5, 8); -- HP% NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 3, 1, 1, 4); -- ATK NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 3, 2, 2, 5); -- ATK NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 3, 3, 3, 8); -- ATK NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 3, 4, 4, 10); -- ATK NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 3, 5, 8, 15); -- ATK NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 3, 6, 10, 20); -- ATK NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 4, 1, 1, 2); -- ATK% NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 4, 2, 1, 3); -- ATK% NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 4, 3, 2, 5); -- ATK% NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 4, 4, 3, 6); -- ATK% NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 4, 5, 4, 7); -- ATK% NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 4, 6, 5, 8); -- ATK% NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 5, 1, 1, 4); -- DEF NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 5, 2, 2, 5); -- DEF NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 5, 3, 3, 8); -- DEF NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 5, 4, 4, 10); -- DEF NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 5, 5, 8, 15); -- DEF NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 5, 6, 10, 20); -- DEF NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 6, 1, 1, 2); -- DEF% NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 6, 2, 1, 3); -- DEF% NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 6, 3, 2, 5); -- DEF% NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 6, 4, 3, 6); -- DEF% NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 6, 5, 4, 7); -- DEF% NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 6, 6, 5, 8); -- DEF% NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 8, 1, 1, 1); -- SPD NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 8, 2, 1, 2); -- SPD NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 8, 3, 1, 3); -- SPD NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 8, 4, 2, 4); -- SPD NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 8, 5, 3, 5); -- SPD NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 8, 6, 4, 6); -- SPD NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 9, 1, 1, 1); -- CRR NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 9, 2, 1, 2); -- CRR NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 9, 3, 1, 3); -- CRR NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 9, 4, 2, 4); -- CRR NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 9, 5, 3, 5); -- CRR NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 9, 6, 4, 6); -- CRR NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 10, 1, 1, 2); -- CRD NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 10, 2, 1, 3); -- CRD NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 10, 3, 2, 4); -- CRD NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 10, 4, 2, 5); -- CRD NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 10, 5, 3, 5); -- CRD NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 10, 6, 4, 7); -- CRD NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 11, 1, 1, 2); -- RES NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 11, 2, 1, 3); -- RES NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 11, 3, 2, 4); -- RES NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 11, 4, 2, 5); -- RES NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 11, 5, 3, 7); -- RES NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 11, 6, 4, 8); -- RES NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 12, 1, 1, 2); -- ACC NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 12, 2, 1, 3); -- ACC NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 12, 3, 2, 4); -- ACC NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 12, 4, 2, 5); -- ACC NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 12, 5, 3, 7); -- ACC NonA INI
+INSERT INTO k_rune_stat_roll VALUES (1, 12, 6, 4, 8); -- ACC NonA INI
+INSERT INTO k_rune_stat_roll VALUES (2, 1, 1, 15, 60); -- HP NonA UPG 
+INSERT INTO k_rune_stat_roll VALUES (2, 1, 2, 30, 105); -- HP NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 1, 3, 45, 165); -- HP NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 1, 4, 60, 225); -- HP NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 1, 5, 90, 300); -- HP NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 1, 6, 135, 375); -- HP NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 2, 1, 1, 2); -- HP% NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 2, 2, 1, 3); -- HP% NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 2, 3, 2, 5); -- HP% NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 2, 4, 3, 6); -- HP% NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 2, 5, 4, 7); -- HP% NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 2, 6, 5, 8); -- HP% NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 3, 1, 1, 4); -- ATK NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 3, 2, 2, 5); -- ATK NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 3, 3, 3, 8); -- ATK NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 3, 4, 4, 10); -- ATK NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 3, 5, 8, 15); -- ATK NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 3, 6, 10, 20); -- ATK NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 4, 1, 1, 2); -- ATK% NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 4, 2, 1, 3); -- ATK% NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 4, 3, 2, 5); -- ATK% NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 4, 4, 3, 6); -- ATK% NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 4, 5, 4, 7); -- ATK% NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 4, 6, 5, 8); -- ATK% NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 5, 1, 1, 4); -- DEF NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 5, 2, 2, 5); -- DEF NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 5, 3, 3, 8); -- DEF NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 5, 4, 4, 10); -- DEF NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 5, 5, 8, 15); -- DEF NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 5, 6, 10, 20); -- DEF NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 6, 1, 1, 2); -- DEF% NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 6, 2, 1, 3); -- DEF% NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 6, 3, 2, 5); -- DEF% NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 6, 4, 3, 6); -- DEF% NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 6, 5, 4, 7); -- DEF% NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 6, 6, 5, 8); -- DEF% NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 8, 1, 1, 1); -- SPD NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 8, 2, 1, 2); -- SPD NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 8, 3, 1, 3); -- SPD NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 8, 4, 2, 4); -- SPD NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 8, 5, 3, 5); -- SPD NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 8, 6, 4, 6); -- SPD NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 9, 1, 1, 1); -- CRR NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 9, 2, 1, 2); -- CRR NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 9, 3, 1, 3); -- CRR NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 9, 4, 2, 4); -- CRR NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 9, 5, 3, 5); -- CRR NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 9, 6, 4, 6); -- CRR NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 10, 1, 1, 2); -- CRD NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 10, 2, 1, 3); -- CRD NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 10, 3, 2, 4); -- CRD NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 10, 4, 2, 5); -- CRD NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 10, 5, 3, 5); -- CRD NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 10, 6, 4, 7); -- CRD NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 11, 1, 1, 2); -- RES NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 11, 2, 1, 3); -- RES NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 11, 3, 2, 4); -- RES NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 11, 4, 2, 5); -- RES NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 11, 5, 3, 7); -- RES NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 11, 6, 4, 8); -- RES NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 12, 1, 1, 2); -- ACC NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 12, 2, 1, 3); -- ACC NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 12, 3, 2, 4); -- ACC NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 12, 4, 2, 5); -- ACC NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 12, 5, 3, 7); -- ACC NonA UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 12, 6, 4, 8); -- ACC NonA UPG
+
+INSERT INTO k_rune_stat_roll VALUES (1, 1, 1, 15, 60); -- HP A INI -- TODO: UPDATE FROM HERE...
+INSERT INTO k_rune_stat_roll VALUES (1, 1, 2, 30, 105); -- HP A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 1, 3, 45, 165); -- HP A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 1, 4, 60, 225); -- HP A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 1, 5, 90, 300); -- HP A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 1, 6, 135, 375); -- HP A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 2, 1, 1, 2); -- HP% A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 2, 2, 1, 3); -- HP% A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 2, 3, 2, 5); -- HP% A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 2, 4, 3, 6); -- HP% A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 2, 5, 4, 7); -- HP% A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 2, 6, 5, 8); -- HP% A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 3, 1, 1, 4); -- ATK A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 3, 2, 2, 5); -- ATK A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 3, 3, 3, 8); -- ATK A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 3, 4, 4, 10); -- ATK A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 3, 5, 8, 15); -- ATK A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 3, 6, 10, 20); -- ATK A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 4, 1, 1, 2); -- ATK% A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 4, 2, 1, 3); -- ATK% A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 4, 3, 2, 5); -- ATK% A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 4, 4, 3, 6); -- ATK% A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 4, 5, 4, 7); -- ATK% A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 4, 6, 5, 8); -- ATK% A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 5, 1, 1, 4); -- DEF A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 5, 2, 2, 5); -- DEF A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 5, 3, 3, 8); -- DEF A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 5, 4, 4, 10); -- DEF A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 5, 5, 8, 15); -- DEF A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 5, 6, 10, 20); -- DEF A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 6, 1, 1, 2); -- DEF% A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 6, 2, 1, 3); -- DEF% A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 6, 3, 2, 5); -- DEF% A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 6, 4, 3, 6); -- DEF% A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 6, 5, 4, 7); -- DEF% A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 6, 6, 5, 8); -- DEF% A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 8, 1, 1, 1); -- SPD A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 8, 2, 1, 2); -- SPD A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 8, 3, 1, 3); -- SPD A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 8, 4, 2, 4); -- SPD A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 8, 5, 3, 5); -- SPD A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 8, 6, 4, 6); -- SPD A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 9, 1, 1, 1); -- CRR A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 9, 2, 1, 2); -- CRR A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 9, 3, 1, 3); -- CRR A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 9, 4, 2, 4); -- CRR A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 9, 5, 3, 5); -- CRR A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 9, 6, 4, 6); -- CRR A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 10, 1, 1, 2); -- CRD A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 10, 2, 1, 3); -- CRD A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 10, 3, 2, 4); -- CRD A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 10, 4, 2, 5); -- CRD A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 10, 5, 3, 5); -- CRD A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 10, 6, 4, 7); -- CRD A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 11, 1, 1, 2); -- RES A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 11, 2, 1, 3); -- RES A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 11, 3, 2, 4); -- RES A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 11, 4, 2, 5); -- RES A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 11, 5, 3, 7); -- RES A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 11, 6, 4, 8); -- RES A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 12, 1, 1, 2); -- ACC A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 12, 2, 1, 3); -- ACC A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 12, 3, 2, 4); -- ACC A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 12, 4, 2, 5); -- ACC A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 12, 5, 3, 7); -- ACC A INI
+INSERT INTO k_rune_stat_roll VALUES (1, 12, 6, 4, 8); -- ACC A INI -- TODO: ... UNTIL HERE
+INSERT INTO k_rune_stat_roll VALUES (2, 1, 1, 15, 60); -- HP A UPG 
+INSERT INTO k_rune_stat_roll VALUES (2, 1, 2, 30, 105); -- HP A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 1, 3, 45, 165); -- HP A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 1, 4, 60, 225); -- HP A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 1, 5, 90, 300); -- HP A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 1, 6, 135, 375); -- HP A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 2, 1, 1, 2); -- HP% A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 2, 2, 1, 3); -- HP% A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 2, 3, 2, 5); -- HP% A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 2, 4, 3, 6); -- HP% A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 2, 5, 4, 7); -- HP% A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 2, 6, 5, 8); -- HP% A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 3, 1, 1, 4); -- ATK A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 3, 2, 2, 5); -- ATK A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 3, 3, 3, 8); -- ATK A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 3, 4, 4, 10); -- ATK A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 3, 5, 8, 15); -- ATK A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 3, 6, 10, 20); -- ATK A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 4, 1, 1, 2); -- ATK% A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 4, 2, 1, 3); -- ATK% A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 4, 3, 2, 5); -- ATK% A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 4, 4, 3, 6); -- ATK% A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 4, 5, 4, 7); -- ATK% A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 4, 6, 5, 8); -- ATK% A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 5, 1, 1, 4); -- DEF A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 5, 2, 2, 5); -- DEF A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 5, 3, 3, 8); -- DEF A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 5, 4, 4, 10); -- DEF A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 5, 5, 8, 15); -- DEF A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 5, 6, 10, 20); -- DEF A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 6, 1, 1, 2); -- DEF% A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 6, 2, 1, 3); -- DEF% A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 6, 3, 2, 5); -- DEF% A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 6, 4, 3, 6); -- DEF% A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 6, 5, 4, 7); -- DEF% A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 6, 6, 5, 8); -- DEF% A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 8, 1, 1, 1); -- SPD A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 8, 2, 1, 2); -- SPD A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 8, 3, 1, 3); -- SPD A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 8, 4, 2, 4); -- SPD A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 8, 5, 3, 5); -- SPD A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 8, 6, 4, 6); -- SPD A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 9, 1, 1, 1); -- CRR A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 9, 2, 1, 2); -- CRR A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 9, 3, 1, 3); -- CRR A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 9, 4, 2, 4); -- CRR A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 9, 5, 3, 5); -- CRR A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 9, 6, 4, 6); -- CRR A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 10, 1, 1, 2); -- CRD A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 10, 2, 1, 3); -- CRD A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 10, 3, 2, 4); -- CRD A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 10, 4, 2, 5); -- CRD A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 10, 5, 3, 5); -- CRD A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 10, 6, 4, 7); -- CRD A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 11, 1, 1, 2); -- RES A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 11, 2, 1, 3); -- RES A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 11, 3, 2, 4); -- RES A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 11, 4, 2, 5); -- RES A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 11, 5, 3, 7); -- RES A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 11, 6, 4, 8); -- RES A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 12, 1, 1, 2); -- ACC A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 12, 2, 1, 3); -- ACC A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 12, 3, 2, 4); -- ACC A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 12, 4, 2, 5); -- ACC A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 12, 5, 3, 7); -- ACC A UPG
+INSERT INTO k_rune_stat_roll VALUES (2, 12, 6, 4, 8); -- ACC A UPG
+
+CREATE TABLE k_rune_grind_roll_type(
+    id INT NOT NULL PRIMARY KEY,
+    ancient INT NOT NULL CHECK(ancient IN (1, 0)),
+    initial INT NOT NULL CHECK(initial IN (1, 0))
+    upgrade INT NOT NULL CHECK(upgrade IN (1, 0))
+    description TEXT
+);
+INSERT INTO k_rune_grind_roll_type VALUES(1, 0, 1, 0, 'Non-ancient gem');
+INSERT INTO k_rune_grind_roll_type VALUES(2, 0, 0, 0, 'Non-ancient grindstone');
+INSERT INTO k_rune_grind_roll_type VALUES(3, 1, 1, 0, 'Ancient gem');
+INSERT INTO k_rune_grind_roll_type VALUES(4, 1, 0, 0, 'Ancient grindstone');
+
+CREATE TABLE k_rune_grind_roll(
+    type INT NOT NULL REFERENCES k_rune_grind_roll_type(id),
+    stat INT NOT NULL REFERENCES k_rune_stat(id),
+    quality INT NOT NULL REFERENCES k_quality(id),
+    min INT NOT NULL,
+    max INT NOT NULL,
+    PRIMARY KEY(type, stat, quality)
+);
+
+INSERT INTO k_rune_grind_roll VALUES (1, 1, 1, 100, 210); -- HP NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 1, 2, 130, 280); -- HP NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 1, 3, 200, 370); -- HP NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 1, 4, 290, 480); -- HP NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 1, 5, 400, 640); -- HP NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 2, 1, 2, 6); -- HP% NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 2, 2, 3, 9); -- HP% NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 2, 3, 5, 11); -- HP% NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 2, 4, 7, 13); -- HP% NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 2, 5, 9, 15); -- HP% NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 3, 1, 8, 16); -- ATK NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 3, 2, 10, 20); -- ATK NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 3, 3, 15, 27); -- ATK NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 3, 4, 20, 34); -- ATK NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 3, 5, 28, 44); -- ATK NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 4, 1, 2, 6); -- ATK% NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 4, 2, 3, 9); -- ATK% NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 4, 3, 5, 11); -- ATK% NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 4, 4, 7, 13); -- ATK% NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 4, 5, 9, 15); -- ATK% NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 5, 1, 8, 16); -- DEF NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 5, 2, 10, 20); -- DEF NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 5, 3, 15, 27); -- DEF NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 5, 4, 20, 34); -- DEF NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 5, 5, 28, 44); -- DEF NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 6, 1, 2, 6); -- DEF% NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 6, 2, 3, 9); -- DEF% NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 6, 3, 5, 11); -- DEF% NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 6, 4, 7, 13); -- DEF% NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 6, 5, 9, 15); -- DEF% NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 8, 1, 1, 4); -- SPD NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 8, 2, 2, 5); -- SPD NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 8, 3, 3, 6); -- SPD NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 8, 4, 5, 7); -- SPD NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 8, 5, 7, 11); -- SPD NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 9, 1, 1, 4); -- CRR NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 9, 2, 2, 5); -- CRR NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 9, 3, 3, 6); -- CRR NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 9, 4, 4, 8); -- CRR NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 9, 5, 6, 10); -- CRR NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 10, 1, 2, 6); -- CRD NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 10, 2, 3, 7); -- CRD NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 10, 3, 4, 8); -- CRD NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 10, 4, 5, 10); -- CRD NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 10, 5, 7, 12); -- CRD NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 11, 1, 2, 6); -- RES NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 11, 2, 3, 8); -- RES NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 11, 3, 5, 10); -- RES NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 11, 4, 6, 11); -- RES NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 11, 5, 8, 13); -- RES NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 12, 1, 2, 6); -- ACC NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 12, 2, 3, 8); -- ACC NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 12, 3, 5, 10); -- ACC NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 12, 4, 6, 11); -- ACC NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (1, 12, 5, 8, 13); -- ACC NonA GEM
+INSERT INTO k_rune_grind_roll VALUES (2, 1, 1, 80, 180); -- HP NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 1, 2, 100, 260); -- HP NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 1, 3, 180, 310); -- HP NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 1, 4, 230, 510); -- HP NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 1, 5, 430, 610); -- HP NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 2, 1, 1, 5); -- HP% NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 2, 2, 2, 7); -- HP% NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 2, 3, 3, 8); -- HP% NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 2, 4, 4, 9); -- HP% NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 2, 5, 5, 12); -- HP% NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 3, 1, 4, 12); -- ATK NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 3, 2, 6, 16); -- ATK NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 3, 3, 10, 22); -- ATK NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 3, 4, 12, 26); -- ATK NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 3, 5, 18, 34); -- ATK NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 4, 1, 1, 5); -- ATK% NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 4, 2, 2, 7); -- ATK% NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 4, 3, 3, 8); -- ATK% NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 4, 4, 4, 9); -- ATK% NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 4, 5, 5, 12); -- ATK% NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 5, 1, 4, 12); -- DEF NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 5, 2, 6, 16); -- DEF NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 5, 3, 10, 22); -- DEF NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 5, 4, 12, 26); -- DEF NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 5, 5, 18, 34); -- DEF NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 6, 1, 1, 5); -- DEF% NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 6, 2, 2, 7); -- DEF% NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 6, 3, 3, 8); -- DEF% NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 6, 4, 4, 9); -- DEF% NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 6, 5, 5, 12); -- DEF% NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 8, 1, 1, 3); -- SPD NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 8, 2, 1, 3); -- SPD NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 8, 3, 2, 4); -- SPD NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 8, 4, 3, 5); -- SPD NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 8, 5, 4, 6); -- SPD NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 9, 1, 1, 2); -- CRR NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 9, 2, 1, 3); -- CRR NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 9, 3, 2, 4); -- CRR NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 9, 4, 3, 5); -- CRR NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 9, 5, 4, 6); -- CRR NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 10, 1, 1, 3); -- CRD NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 10, 2, 2, 4); -- CRD NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 10, 3, 2, 5); -- CRD NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 10, 4, 3, 5); -- CRD NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 10, 5, 4, 7); -- CRD NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 11, 1, 1, 3); -- RES NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 11, 2, 2, 4); -- RES NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 11, 3, 2, 5); -- RES NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 11, 4, 3, 7); -- RES NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 11, 5, 4, 8); -- RES NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 12, 1, 1, 3); -- ACC NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 12, 2, 2, 4); -- ACC NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 12, 3, 2, 5); -- ACC NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 12, 4, 3, 7); -- ACC NonA GRIND
+INSERT INTO k_rune_grind_roll VALUES (2, 12, 5, 4, 8); -- ACC NonA GRIND
+
+INSERT INTO k_rune_grind_roll VALUES (3, 1, 1, 100, 210); -- HP A GEM -- TODO: From here...
+INSERT INTO k_rune_grind_roll VALUES (3, 1, 2, 130, 280); -- HP A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 1, 3, 200, 370); -- HP A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 1, 4, 290, 480); -- HP A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 1, 5, 400, 640); -- HP A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 2, 1, 2, 6); -- HP% A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 2, 2, 3, 9); -- HP% A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 2, 3, 5, 11); -- HP% A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 2, 4, 7, 13); -- HP% A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 2, 5, 9, 15); -- HP% A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 3, 1, 8, 16); -- ATK A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 3, 2, 10, 20); -- ATK A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 3, 3, 15, 27); -- ATK A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 3, 4, 20, 34); -- ATK A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 3, 5, 28, 44); -- ATK A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 4, 1, 2, 6); -- ATK% A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 4, 2, 3, 9); -- ATK% A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 4, 3, 5, 11); -- ATK% A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 4, 4, 7, 13); -- ATK% A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 4, 5, 9, 15); -- ATK% A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 5, 1, 8, 16); -- DEF A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 5, 2, 10, 20); -- DEF A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 5, 3, 15, 27); -- DEF A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 5, 4, 20, 34); -- DEF A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 5, 5, 28, 44); -- DEF A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 6, 1, 2, 6); -- DEF% A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 6, 2, 3, 9); -- DEF% A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 6, 3, 5, 11); -- DEF% A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 6, 4, 7, 13); -- DEF% A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 6, 5, 9, 15); -- DEF% A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 8, 1, 1, 4); -- SPD A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 8, 2, 2, 5); -- SPD A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 8, 3, 3, 6); -- SPD A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 8, 4, 5, 7); -- SPD A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 8, 5, 7, 11); -- SPD A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 9, 1, 1, 4); -- CRR A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 9, 2, 2, 5); -- CRR A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 9, 3, 3, 6); -- CRR A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 9, 4, 4, 8); -- CRR A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 9, 5, 6, 10); -- CRR A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 10, 1, 2, 6); -- CRD A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 10, 2, 3, 7); -- CRD A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 10, 3, 4, 8); -- CRD A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 10, 4, 5, 10); -- CRD A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 10, 5, 7, 12); -- CRD A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 11, 1, 2, 6); -- RES A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 11, 2, 3, 8); -- RES A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 11, 3, 5, 10); -- RES A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 11, 4, 6, 11); -- RES A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 11, 5, 8, 13); -- RES A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 12, 1, 2, 6); -- ACC A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 12, 2, 3, 8); -- ACC A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 12, 3, 5, 10); -- ACC A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 12, 4, 6, 11); -- ACC A GEM
+INSERT INTO k_rune_grind_roll VALUES (3, 12, 5, 8, 13); -- ACC A GEM
+INSERT INTO k_rune_grind_roll VALUES (4, 1, 1, 80, 180); -- HP A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 1, 2, 100, 260); -- HP A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 1, 3, 180, 310); -- HP A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 1, 4, 230, 510); -- HP A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 1, 5, 430, 610); -- HP A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 2, 1, 1, 5); -- HP% A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 2, 2, 2, 7); -- HP% A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 2, 3, 3, 8); -- HP% A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 2, 4, 4, 9); -- HP% A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 2, 5, 5, 12); -- HP% A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 3, 1, 4, 12); -- ATK A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 3, 2, 6, 16); -- ATK A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 3, 3, 10, 22); -- ATK A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 3, 4, 12, 26); -- ATK A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 3, 5, 18, 34); -- ATK A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 4, 1, 1, 5); -- ATK% A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 4, 2, 2, 7); -- ATK% A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 4, 3, 3, 8); -- ATK% A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 4, 4, 4, 9); -- ATK% A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 4, 5, 5, 12); -- ATK% A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 5, 1, 4, 12); -- DEF A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 5, 2, 6, 16); -- DEF A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 5, 3, 10, 22); -- DEF A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 5, 4, 12, 26); -- DEF A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 5, 5, 18, 34); -- DEF A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 6, 1, 1, 5); -- DEF% A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 6, 2, 2, 7); -- DEF% A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 6, 3, 3, 8); -- DEF% A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 6, 4, 4, 9); -- DEF% A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 6, 5, 5, 12); -- DEF% A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 8, 1, 1, 3); -- SPD A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 8, 2, 1, 3); -- SPD A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 8, 3, 2, 4); -- SPD A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 8, 4, 3, 5); -- SPD A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 8, 5, 4, 6); -- SPD A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 9, 1, 1, 2); -- CRR A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 9, 2, 1, 3); -- CRR A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 9, 3, 2, 4); -- CRR A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 9, 4, 3, 5); -- CRR A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 9, 5, 4, 6); -- CRR A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 10, 1, 1, 3); -- CRD A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 10, 2, 2, 4); -- CRD A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 10, 3, 2, 5); -- CRD A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 10, 4, 3, 5); -- CRD A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 10, 5, 4, 7); -- CRD A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 11, 1, 1, 3); -- RES A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 11, 2, 2, 4); -- RES A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 11, 3, 2, 5); -- RES A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 11, 4, 3, 7); -- RES A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 11, 5, 4, 8); -- RES A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 12, 1, 1, 3); -- ACC A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 12, 2, 2, 4); -- ACC A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 12, 3, 2, 5); -- ACC A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 12, 4, 3, 7); -- ACC A GRIND
+INSERT INTO k_rune_grind_roll VALUES (4, 12, 5, 4, 8); -- ACC A GRIND  -- TODO: ... until here
+
+
+
 COMMIT;

+ 2 - 2
install_data/install_data.sql

@@ -127,8 +127,8 @@ CREATE TABLE rune(
     quality INT NOT NULL REFERENCES k_quality(id),
     original_quality INT NOT NULL REFERENCES k_quality(id),
     value INT NOT NULL CHECK(value > 0),
-    efficiency FLOAT NOT NULL CHECK(efficiency BETWEEN 0 AND 100),
-    max_efficiency FLOAT NOT NULL CHECK(max_efficiency BETWEEN 0 AND 100),
+    efficiency FLOAT CHECK(efficiency BETWEEN 0 AND 100),
+    max_efficiency FLOAT CHECK(max_efficiency BETWEEN 0 AND 100),
     locked INT NOT NULL CHECK(locked IN (0, 1))
 );
 CREATE TABLE rune_stat(