Selaa lähdekoodia

Merge branch 'Rune_Rolls'

Iñigo Valentin 5 vuotta sitten
vanhempi
sitoutus
7ab0f409c4

+ 4 - 0
application/API/v3/profile/PUT.php

@@ -352,6 +352,10 @@
             $statement->execute();
         }
 
+        // Instantiate and calculate efficiency:
+        $instance = new Rune($rune->{"rune_id"});
+        
+
         // Assigned?
         if (intval($rune->{"occupied_id"}) != 0){
             $statement = $db->prepare("

+ 0 - 1
application/entity/Artifact_Effect.php

@@ -89,7 +89,6 @@
                 $this->value = $r["value"];
                 $this->enchant = $r["enchant"];
                 $this->grind = $r["grind"];
-                
                 $statement = $db->prepare("
                   SELECT name
                   FROM k_artifact_effect

+ 91 - 5
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,8 +201,21 @@
                 }
                 $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();
+                if ($this->efficiency == null || $this->efficiency == "" || intval($this->efficiency) == 0){
+                    $this->efficiency = $this->calculate_efficiency();
+                    $this->max_efficiency = $this->calculate_maximum_efficiency();
+                    $statement = $db->prepare("
+                      UPDATE rune
+                      SET
+                        efficiency = :efficiency,
+                        max_efficiency = :max_efficiency
+                      WHERE id = :rune
+                    ");
+                    $statement->bindValue(':efficiency', $this->efficiency, SQLITE3_FLOAT);
+                    $statement->bindValue(':max_efficiency', $this->max_efficiency, SQLITE3_FLOAT);
+                    $statement->bindValue(':rune', $this->id, SQLITE3_INTEGER);
+                    $q = $statement->execute();
+                }
             }
         }
 
@@ -310,7 +323,7 @@
                 }
             }
             for ($i = 1; $i <= 4; $i ++){
-                if ($this->stats[$i] != null && $this->stats[$i]->value > 0){
+                if (sizeof($this->stats) > $i && $this->stats[$i] != null && $this->stats[$i]->value > 0){
                     $value = $this->stats[$i]->value;
                     $value = $this->stats[$i]->value;
                     $statement = $db->prepare($query);
@@ -366,5 +379,78 @@
             return $max_efficiency;
         }
 
+        /**
+         * Calcuates how many rolls each substat has.
+         *
+         * DON'T USE: Error margins are as high as 85%, which is ridiculous.
+         *
+         */
+        private function calculate_rolls(){
+            global $db;
+            $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
+              ";
+            if ($this->innate_stat != null && $this->innate_stat->value > 0){
+                $this->innate_stat->rolls = 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"];
+                    $this->innate_stat->efficiency = 100 * (($value - $min_initial) / ($max_initial - $min_initial));
+                }
+            }
+            $max_rolls = floor(max($this->level, 12) / 3);
+            $rolls = 0;
+            for ($i = 1; $i <= 4; $i ++){
+                if ($this->stats[$i] != null && $this->stats[$i]->value > 0){
+                    $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 = $r_initial["min"];
+                        $max_initial = $r_initial["max"];
+                        $avg_initial = ($min_initial + $max_initial) / 2;
+                        $min_upgrade = $r_upgrade["min"];
+                        $max_upgrade = $r_upgrade["max"];
+                        $avg_upgrade = ($min_upgrade + $max_upgrade) / 2;
+                        $rolls = round(max($value - $avg_initial, 0) / $avg_upgrade);
+                        $this->stats[$i]->rolls = $rolls;
+                        $this->stats[$i]->efficiency = ((5 * $value) - ( 4 * $min_upgrade + $min_initial)) / ( ($max_initial - $min_initial + (4 * ($max_upgrade + $min_upgrade))));
+                    }
+                }
+            }
+        }
+
     }
 ?>

+ 2 - 0
application/helper/HTML_Helper.php

@@ -477,6 +477,8 @@
                     $name = str_replace("Proportional", "Rel.", $name);
                     $name = str_replace("Counterattack", "Counter", $name);
                     $name = str_replace("Dealt by Attacking Together", "Attacking Together", $name);
+                    $name = str_replace("HP condition is bad", "bad HP", $name);
+                    $name = str_replace("HP condition is good", "good HP", $name);
                 }
                 $html .= $name;
                 $html .= "</td>\n";

BIN
application/sw.sqlite


+ 114 - 46
install_data/install_base.sql

@@ -621,55 +621,123 @@ CREATE TABLE k_artifact_stat(
     id INT NOT NULL PRIMARY KEY,
     name TEXT UNIQUE
 );
-INSERT INTO k_artifact_stat VALUES(100,'HP');
-INSERT INTO k_artifact_stat VALUES(101,'ATK');
-INSERT INTO k_artifact_stat VALUES(102,'DEF');
+
 CREATE TABLE k_artifact_effect(
     id INT NOT NULL PRIMARY KEY,
-    name TEXT UNIQUE
+    name TEXT UNIQUE,
+    deprecated INT NOT NULL CHECK(deprecated IN (1, 0))
 );
-INSERT INTO k_artifact_effect VALUES (200, 'ATK+ Proportional to Lost HP up to {}%');
-INSERT INTO k_artifact_effect VALUES (201, 'DEF+ Proportional to Lost HP up to {}%');
-INSERT INTO k_artifact_effect VALUES (202, 'SPD+ Proportional to Lost HP up to {}%');
-INSERT INTO k_artifact_effect VALUES (203, 'SPD Under Inability +{}%');
-INSERT INTO k_artifact_effect VALUES (204, 'ATK Increasing Effect +{}%');
-INSERT INTO k_artifact_effect VALUES (205, 'DEF Increasing Effect +{}%');
-INSERT INTO k_artifact_effect VALUES (206, 'SPD Increasing Effect +{}%');
-INSERT INTO k_artifact_effect VALUES (207, 'CRIT Rate Increasing Effect +{}%');
-INSERT INTO k_artifact_effect VALUES (208, 'Damage Dealt by Counterattack +{}%');
-INSERT INTO k_artifact_effect VALUES (209, 'Damage Dealt by Attacking Together +{}%');
-INSERT INTO k_artifact_effect VALUES (210, 'Bomb Damage +{}%');
-INSERT INTO k_artifact_effect VALUES (211, 'Damage Dealt by Reflect DMG +{}%');
-INSERT INTO k_artifact_effect VALUES (212, 'Crushing Hit DMG +{}%');
-INSERT INTO k_artifact_effect VALUES (213, 'Damage Received Under Inability -{}%');
-INSERT INTO k_artifact_effect VALUES (214, 'CRIT DMG Received -{}%');
-INSERT INTO k_artifact_effect VALUES (215, 'Life Drain +{}%');
-INSERT INTO k_artifact_effect VALUES (216, 'HP when Revived +{}%');
-INSERT INTO k_artifact_effect VALUES (217, 'Attack Bar when Revived +{}%');
-INSERT INTO k_artifact_effect VALUES (218, 'Additional Damage by {}% of HP');
-INSERT INTO k_artifact_effect VALUES (219, 'Additional Damage by {}% of ATK');
-INSERT INTO k_artifact_effect VALUES (220, 'Additional Damage by {}% of DEF');
-INSERT INTO k_artifact_effect VALUES (221, 'Additional Damage by {}% of SPD');
-INSERT INTO k_artifact_effect VALUES (300, 'Damage Dealt on Fire +{}%');
-INSERT INTO k_artifact_effect VALUES (301, 'Damage Dealt on Water +{}%');
-INSERT INTO k_artifact_effect VALUES (302, 'Damage Dealt on Wind +{}%');
-INSERT INTO k_artifact_effect VALUES (303, 'Damage Dealt on Light +{}%');
-INSERT INTO k_artifact_effect VALUES (304, 'Damage Dealt on Dark +{}%');
-INSERT INTO k_artifact_effect VALUES (305, 'Damage Received from Fire -{}%');
-INSERT INTO k_artifact_effect VALUES (306, 'Damage Received from Water -{}%');
-INSERT INTO k_artifact_effect VALUES (307, 'Damage Received from Wind -{}%');
-INSERT INTO k_artifact_effect VALUES (308, 'Damage Received from Light -{}%');
-INSERT INTO k_artifact_effect VALUES (309, 'Damage Received from Dark -{}%');
-INSERT INTO k_artifact_effect VALUES (400, '[Skill 1] CRIT DMG +{}%');
-INSERT INTO k_artifact_effect VALUES (401, '[Skill 2] CRIT DMG +{}%');
-INSERT INTO k_artifact_effect VALUES (402, '[Skill 3] CRIT DMG +{}%');
-INSERT INTO k_artifact_effect VALUES (403, '[Skill 4] CRIT DMG +{}%');
-INSERT INTO k_artifact_effect VALUES (404, '[Skill 1] Recovery +{}%');
-INSERT INTO k_artifact_effect VALUES (405, '[Skill 2] Recovery +{}%');
-INSERT INTO k_artifact_effect VALUES (406, '[Skill 3] Recovery +{}%');
-INSERT INTO k_artifact_effect VALUES (407, '[Skill 1] Accuracy +{}%');
-INSERT INTO k_artifact_effect VALUES (408, '[Skill 2] Accuracy +{}%');
-INSERT INTO k_artifact_effect VALUES (409, '[Skill 3] Accuracy +{}%');
+
+INSERT INTO k_artifact_effect VALUES (200, 'ATK+ Proportional to Lost HP up to {}%', 0);
+INSERT INTO k_artifact_effect VALUES (201, 'DEF+ Proportional to Lost HP up to {}%', 0);
+INSERT INTO k_artifact_effect VALUES (202, 'SPD+ Proportional to Lost HP up to {}%', 0);
+INSERT INTO k_artifact_effect VALUES (203, 'SPD Under Inability +{}%', 1);
+INSERT INTO k_artifact_effect VALUES (204, 'ATK Increasing Effect +{}%', 0);
+INSERT INTO k_artifact_effect VALUES (205, 'DEF Increasing Effect +{}%', 0);
+INSERT INTO k_artifact_effect VALUES (206, 'SPD Increasing Effect +{}%', 0);
+INSERT INTO k_artifact_effect VALUES (207, 'CRIT Rate Increasing Effect +{}%', 1);
+INSERT INTO k_artifact_effect VALUES (208, 'Damage Dealt by Counterattack +{}%', 0);
+INSERT INTO k_artifact_effect VALUES (209, 'Damage Dealt by Attacking Together +{}%', 0);
+INSERT INTO k_artifact_effect VALUES (210, 'Bomb Damage +{}%', 0);
+INSERT INTO k_artifact_effect VALUES (211, 'Damage Dealt by Reflect DMG +{}%', 1);
+INSERT INTO k_artifact_effect VALUES (212, 'Crushing Hit DMG +{}%', 1);
+INSERT INTO k_artifact_effect VALUES (213, 'Damage Received Under Inability -{}%', 1);
+INSERT INTO k_artifact_effect VALUES (214, 'CRIT DMG Received -{}%', 0);
+INSERT INTO k_artifact_effect VALUES (215, 'Life Drain +{}%', 0);
+INSERT INTO k_artifact_effect VALUES (216, 'HP when Revived +{}%', 0);
+INSERT INTO k_artifact_effect VALUES (217, 'Attack Bar when Revived +{}%', 0);
+INSERT INTO k_artifact_effect VALUES (218, 'Additional Damage by {}% of HP', 0);
+INSERT INTO k_artifact_effect VALUES (219, 'Additional Damage by {}% of ATK', 0);
+INSERT INTO k_artifact_effect VALUES (220, 'Additional Damage by {}% of DEF', 0);
+INSERT INTO k_artifact_effect VALUES (221, 'Additional Damage by {}% of SPD', 0);
+INSERT INTO k_artifact_effect VALUES (222, "CRIT DMG + up to {}% as the enemy's HP condition is good", 0);
+INSERT INTO k_artifact_effect VALUES (223, "CRIT DMG + up to {}% as the enemy's HP condition is bad", 0);
+INSERT INTO k_artifact_effect VALUES (224, 'Single-target skill CRIT DMG +{}% on your turn', 0);
+INSERT INTO k_artifact_effect VALUES (300, 'Damage Dealt on Fire +{}%', 0);
+INSERT INTO k_artifact_effect VALUES (301, 'Damage Dealt on Water +{}%', 0);
+INSERT INTO k_artifact_effect VALUES (302, 'Damage Dealt on Wind +{}%', 0);
+INSERT INTO k_artifact_effect VALUES (303, 'Damage Dealt on Light +{}%', 0);
+INSERT INTO k_artifact_effect VALUES (304, 'Damage Dealt on Dark +{}%', 0);
+INSERT INTO k_artifact_effect VALUES (305, 'Damage Received from Fire -{}%', 0);
+INSERT INTO k_artifact_effect VALUES (306, 'Damage Received from Water -{}%', 0);
+INSERT INTO k_artifact_effect VALUES (307, 'Damage Received from Wind -{}%', 0);
+INSERT INTO k_artifact_effect VALUES (308, 'Damage Received from Light -{}%', 0);
+INSERT INTO k_artifact_effect VALUES (309, 'Damage Received from Dark -{}%', 0);
+INSERT INTO k_artifact_effect VALUES (400, '[Skill 1] CRIT DMG +{}%', 0);
+INSERT INTO k_artifact_effect VALUES (401, '[Skill 2] CRIT DMG +{}%', 0);
+INSERT INTO k_artifact_effect VALUES (402, '[Skill 3] CRIT DMG +{}%', 0);
+INSERT INTO k_artifact_effect VALUES (403, '[Skill 4] CRIT DMG +{}%', 0);
+INSERT INTO k_artifact_effect VALUES (404, '[Skill 1] Recovery +{}%', 0);
+INSERT INTO k_artifact_effect VALUES (405, '[Skill 2] Recovery +{}%', 0);
+INSERT INTO k_artifact_effect VALUES (406, '[Skill 3] Recovery +{}%', 0);
+INSERT INTO k_artifact_effect VALUES (407, '[Skill 1] Accuracy +{}%', 0);
+INSERT INTO k_artifact_effect VALUES (408, '[Skill 2] Accuracy +{}%', 0);
+INSERT INTO k_artifact_effect VALUES (409, '[Skill 3] Accuracy +{}%', 0);
+
+CREATE TABLE k_artifact_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_artifact_roll_type VALUES(1, 0, 1, 1, 'Initial and upgrade for artifacts');
+CREATE TABLE k_artifact_stat_roll(
+    type INT NOT NULL REFERENCES k_artifact_roll_type(id),
+    effect INT NOT NULL REFERENCES k_artifact_effect(id),
+    min FLOAT NOT NULL,
+    max FLOAT NOT NULL,
+    PRIMARY KEY(type, effect)
+);
+INSERT INTO k_artifact_stat_roll VALUES (1, 200, 9, 14); -- ATK+ Proportional to Lost HP
+INSERT INTO k_artifact_stat_roll VALUES (1, 201, 9, 14); -- DEF+ Proportional to Lost HP
+INSERT INTO k_artifact_stat_roll VALUES (1, 202, 9, 14); -- SPD+ Proportional to Lost HP
+INSERT INTO k_artifact_stat_roll VALUES (1, 204, 3, 5); -- ATK Increasing Effect
+INSERT INTO k_artifact_stat_roll VALUES (1, 205, 2, 4); -- DEF Increasing Effect
+INSERT INTO k_artifact_stat_roll VALUES (1, 206, 4, 6); -- SPD Increasing Effect
+INSERT INTO k_artifact_stat_roll VALUES (1, 207, 3, 6); -- Crit Rate Increasing Effect
+INSERT INTO k_artifact_stat_roll VALUES (1, 208, 2, 4); -- Damage Dealt by Counterattack
+INSERT INTO k_artifact_stat_roll VALUES (1, 209, 2, 4); -- Damage Dealt by Attacking Together
+INSERT INTO k_artifact_stat_roll VALUES (1, 210, 2, 4); -- Bomb damage
+INSERT INTO k_artifact_stat_roll VALUES (1, 211, 1, 3); -- Damage Dealt by Reflect DMG
+INSERT INTO k_artifact_stat_roll VALUES (1, 212, 2, 4); -- Crushing Hit DMG
+INSERT INTO k_artifact_stat_roll VALUES (1, 213, 1, 3); -- Damage Received Under Inability
+INSERT INTO k_artifact_stat_roll VALUES (1, 214, 2, 4); -- CRIT DMG Received
+INSERT INTO k_artifact_stat_roll VALUES (1, 215, 5, 8); -- Life Drain
+INSERT INTO k_artifact_stat_roll VALUES (1, 216, 4, 6); -- HP when Revived
+INSERT INTO k_artifact_stat_roll VALUES (1, 217, 4, 6); -- Attack Bar when Revived
+INSERT INTO k_artifact_stat_roll VALUES (1, 218, 0.2, 0.3); -- Additional Damage by {}% of HP
+INSERT INTO k_artifact_stat_roll VALUES (1, 219, 2, 4); -- Additional Damage by {}% of ATK
+INSERT INTO k_artifact_stat_roll VALUES (1, 220, 2, 4); -- Additional Damage by {}% of DEF
+INSERT INTO k_artifact_stat_roll VALUES (1, 221, 25, 40); -- Additional Damage by {}% of SPD
+INSERT INTO k_artifact_stat_roll VALUES (1, 222, 4, 6); -- CRIT DMG + as the enemys condtion is good
+INSERT INTO k_artifact_stat_roll VALUES (1, 223, 8, 12); -- CRIT DMG + as the enemys condtion is bad
+INSERT INTO k_artifact_stat_roll VALUES (1, 224, 2, 4); -- Single-target skill CRIT DMG +{}% on your turn
+INSERT INTO k_artifact_stat_roll VALUES (1, 300, 3, 5); --Damage Dealt on Fire
+INSERT INTO k_artifact_stat_roll VALUES (1, 301, 3, 5); -- Damage Dealt on Water
+INSERT INTO k_artifact_stat_roll VALUES (1, 302, 3, 5); -- Damage Dealt on Wind
+INSERT INTO k_artifact_stat_roll VALUES (1, 303, 3, 5); -- Damage Dealt on Light
+INSERT INTO k_artifact_stat_roll VALUES (1, 304, 3, 5); -- Damage Dealt on Dark
+INSERT INTO k_artifact_stat_roll VALUES (1, 305, 4, 6); -- Damage Received from Fire
+INSERT INTO k_artifact_stat_roll VALUES (1, 306, 4, 6); -- Damage Received from Water
+INSERT INTO k_artifact_stat_roll VALUES (1, 307, 4, 6); -- Damage Received from Wind
+INSERT INTO k_artifact_stat_roll VALUES (1, 308, 4, 6); -- Damage Received from Light
+INSERT INTO k_artifact_stat_roll VALUES (1, 309, 4, 6); -- Damage Received from Dark
+INSERT INTO k_artifact_stat_roll VALUES (1, 400, 4, 6); -- [Skill 1] CRIT DMG
+INSERT INTO k_artifact_stat_roll VALUES (1, 401, 4, 6); -- [Skill 2] CRIT DMG
+INSERT INTO k_artifact_stat_roll VALUES (1, 402, 4, 6); -- [Skill 3] CRIT DMG
+INSERT INTO k_artifact_stat_roll VALUES (1, 403, 4, 6); -- [Skill 4] CRIT DMG
+INSERT INTO k_artifact_stat_roll VALUES (1, 404, 4, 6); -- [Skill 1] Recovery
+INSERT INTO k_artifact_stat_roll VALUES (1, 405, 4, 6); -- [Skill 2] Recovery
+INSERT INTO k_artifact_stat_roll VALUES (1, 406, 4, 6); -- [Skill 3] Recovery
+INSERT INTO k_artifact_stat_roll VALUES (1, 407, 4, 6); -- [Skill 1] Accuracy
+INSERT INTO k_artifact_stat_roll VALUES (1, 408, 4, 6); -- [Skill 2] Accuracy
+INSERT INTO k_artifact_stat_roll VALUES (1, 409, 4, 6); -- [Skill 3] Accuracy
+
+INSERT INTO k_artifact_stat VALUES(100,'HP');
+INSERT INTO k_artifact_stat VALUES(101,'ATK');
+INSERT INTO k_artifact_stat VALUES(102,'DEF');
 CREATE TABLE k_enchantment(
     id INT NOT NULL PRIMARY KEY,
     name TEXT UNIQUE