Selaa lähdekoodia

Parser now includes data for k_unit_source, k_unit_essence and k_skill_effect. Some small bugs have been fixed. It is functional now.

Iñigo Valentin 5 vuotta sitten
vanhempi
sitoutus
970aa95e9f
1 muutettua tiedostoa jossa 109 lisäystä ja 21 poistoa
  1. 109 21
      parser/swarfarm_parser

+ 109 - 21
parser/swarfarm_parser

@@ -16,14 +16,7 @@
      */
     CONST PATH = __DIR__ . "/../";
 
-    $args = array(
-        "verbosity" => 3,
-        "override_images" => false,
-        "skip_downloads" => false,
-        "only_downloads" => false,
-        "only_new" => false
-    );
-    /**
+    /*
      * Script verbosity
      *
      * 0: Critical
@@ -33,11 +26,13 @@
      * 4: Debug
      * 5: Trace
      */
-    $verbosity = 4;
-
-    $override_images = false;
-
-    $skip_downloads = false;
+    $args = array(
+        "verbosity" => 4,
+        "override_images" => false,
+        "skip_downloads" => false,
+        "only_downloads" => false,
+        "only_new" => false
+    );
 
     /**
      * Echoes an output message to stdout, depending on the verbosity level.
@@ -321,6 +316,7 @@
             $q = $statement->execute();
             $r = $q->fetchArray(SQLITE3_ASSOC);
             if (!$r){
+                // New skill, insert directly
                 $statement = $db->prepare("
                   INSERT INTO k_skill(
                     id,
@@ -355,7 +351,7 @@
                 $statement->bindValue(":passive", $skill->passive, SQLITE3_INTEGER);
                 $statement->bindValue(":aoe", $skill->aoe, SQLITE3_INTEGER);
                 $statement->bindValue(":max_level", $skill->max_level, SQLITE3_INTEGER);
-                $statement->bindValue(":multiplier_formula", $skill->multiplier_formula, SQLITE3_INTEGER);
+                $statement->bindValue(":multiplier_formula", $skill->multiplier_formula, SQLITE3_TEXT);
                 output(4, "QUERY: " . $statement->getSQL(true));
                 $statement->execute();
                 $url = 'https://swarfarm.com/static/herders/images/skills/' . $skill->icon_filename;
@@ -374,11 +370,16 @@
                     output(4, "QUERY: " . $statement->getSQL(true));
                     $statement->execute();
                 }
-                // TODO: Get data for other tables: 
-                // k_skill_effect
+                foreach ($skill->effects as $effect){
+                    $statement = $db->prepare("INSERT INTO k_skill_effect (skill, effect) VALUES (:skill, :effect);");
+                    $statement->bindValue(":skill", $skill->com2us_id, SQLITE3_INTEGER);
+                    $statement->bindValue(":effect", $effect->effect->id, SQLITE3_INTEGER);
+                    output(4, "QUERY: " . $statement->getSQL(true));
+                    $statement->execute();
+                }
             }
             else{
-                // Compare all values
+                // Existing skill, compare all values
                 if ($r["name"] != $skill->name){
                     $statement = $db->prepare("UPDATE k_skill SET name = :name WHERE id = :id;");
                     $statement->bindValue(":name", $skill->name, SQLITE3_TEXT);
@@ -445,6 +446,25 @@
                     $statement->execute();
                 }
 
+                // Compare existing effects
+                $statement = $db->prepare("SELECT count(effect) AS c FROM k_skill_effect WHERE skill = :skill;");
+                $statement->bindValue(":skill", $skill->com2us_id, SQLITE3_INTEGER);
+                $q = $statement->execute();
+                $r = $q->fetchArray(SQLITE3_ASSOC);
+                if ($r["c"] != sizeof($skill->effects)){
+                    $statement = $db->prepare("DELETE FROM k_skill_effect WHERE skill = :skill;");
+                    $statement->bindValue(":skill", $skill->com2us_id, SQLITE3_INTEGER);
+                    output(4, "QUERY: " . $statement->getSQL(true));
+                    $statement->execute();
+                    foreach ($skill->effects as $effect){
+                        $statement = $db->prepare("INSERT INTO k_skill_effect (skill, effect) VALUES (:skill, :effect);");
+                        $statement->bindValue(":skill", $skill->com2us_id, SQLITE3_INTEGER);
+                        $statement->bindValue(":effect", $effect->effect->id, SQLITE3_INTEGER);
+                        output(4, "QUERY: " . $statement->getSQL(true));
+                        $statement->execute();
+                    }
+                }
+
                 // Image download
                 $out = PATH . "public/img/skill/" . sprintf('%08d', $skill->com2us_id) . ".png";
                 $url = 'https://swarfarm.com/static/herders/images/skills/' . $skill->icon_filename;   
@@ -550,7 +570,12 @@
                 $statement->bindValue(":can_awaken", $unit->can_awaken, SQLITE3_INTEGER);
                 $statement->bindValue(":awaken_bonus", $unit->awaken_bonus, SQLITE3_TEXT);
                 $statement->bindValue(":skill_ups_to_max", $unit->skill_ups_to_max, SQLITE3_INTEGER);
-                $statement->bindValue(":leader_skill", $unit->leader_skill, SQLITE3_INTEGER);
+                if (isset($unit->leader_skill->id)){
+                    $statement->bindValue(":leader_skill", $unit->leader_skill, SQLITE3_INTEGER);
+                }
+                else{
+                    $statement->bindValue(":leader_skill", null, SQLITE3_INTEGER);
+                }
                 $statement->bindValue(":hp", $unit->base_hp, SQLITE3_INTEGER);
                 $statement->bindValue(":attack", $unit->base_attack, SQLITE3_INTEGER);
                 $statement->bindValue(":defense", $unit->base_defense, SQLITE3_INTEGER);
@@ -577,6 +602,7 @@
                 $out = PATH . "public/img/unit/" . sprintf('%08d', $unit->com2us_id) . ".png";
                 download($url, $out);
 
+                // Skills (not in database yet, but they will be once skills are parsed)
                 foreach ($unit->skills as $skill){
                     $statement = $db->prepare("INSERT INTO k_unit_skill (unit, skill) VALUES (:unit, :skill);");
                     $statement->bindValue(":unit", $unit->com2us_id, SQLITE3_INTEGER);
@@ -584,9 +610,25 @@
                     output(4, "QUERY: " . $statement->getSQL(true));
                     $statement->execute();
                 }
-                // TODO: Get data for other tables: 
-                // k_unit_essence
-                // k_unit_source
+
+                // Essences to awaken
+                foreach ($unit->awaken_cost as $essence){
+                    $statement = $db->prepare("INSERT INTO k_unit_essence (unit, item, amount) VALUES (:unit, :item, :amount);");
+                    $statement->bindValue(":unit", $unit->com2us_id, SQLITE3_INTEGER);
+                    $statement->bindValue(":item", $essence->item->com2us_id, SQLITE3_INTEGER);
+                    $statement->bindValue(":amount", $essence->quantity, SQLITE3_INTEGER);
+                    output(4, "QUERY: " . $statement->getSQL(true));
+                    $statement->execute();
+                }
+
+                // Unit sources
+                foreach ($unit->source as $source){
+                    $statement = $db->prepare("INSERT INTO k_unit_source (unit, source) VALUES (:unit, :source);");
+                    $statement->bindValue(":unit", $unit->com2us_id, SQLITE3_INTEGER);
+                    $statement->bindValue(":source", $source->id, SQLITE3_INTEGER);
+                    output(4, "QUERY: " . $statement->getSQL(true));
+                    $statement->execute();
+                }
             }
             else{
                 // Compare all values
@@ -662,6 +704,13 @@
                     output(4, "QUERY: " . $statement->getSQL(true));
                     $statement->execute();
                 }
+                if (isset($unit->leader_skill->id) && $r["leader_skill"] != $unit->leader_skill->id){
+                    $statement = $db->prepare("UPDATE k_unit SET leader_skill = :leader_skill WHERE id = :id;");
+                    $statement->bindValue(":leader_skill", $unit->leader_skill->id, SQLITE3_TEXT);
+                    $statement->bindValue(":id", $unit->com2us_id, SQLITE3_INTEGER);
+                    output(4, "QUERY: " . $statement->getSQL(true));
+                    $statement->execute();
+                }
                 if ($r["hp"] != $unit->base_hp){
                     $statement = $db->prepare("UPDATE k_unit SET hp = :hp WHERE id = :id;");
                     $statement->bindValue(":hp", $unit->base_hp, SQLITE3_INTEGER);
@@ -810,6 +859,45 @@
                     }
                 }
 
+                // Essences to awaken
+                $statement = $db->prepare("SELECT count(item) AS c FROM k_unit_essence WHERE unit = :unit;");
+                $statement->bindValue(":unit", $unit->com2us_id, SQLITE3_INTEGER);
+                $q = $statement->execute();
+                $r = $q->fetchArray(SQLITE3_ASSOC);
+                if ($r["c"] != sizeof($unit->awaken_cost)){
+                    $statement = $db->prepare("DELETE FROM k_unit_essence WHERE unit = :unit;");
+                    $statement->bindValue(":unit", $unit->com2us_id, SQLITE3_INTEGER);
+                    output(4, "QUERY: " . $statement->getSQL(true));
+                    $statement->execute();
+                    foreach ($unit->awaken_cost as $essence){
+                        $statement = $db->prepare("INSERT INTO k_unit_essence (unit, item, amount) VALUES (:unit, :item, :amount);");
+                        $statement->bindValue(":unit", $unit->com2us_id, SQLITE3_INTEGER);
+                        $statement->bindValue(":item", $essence->item->com2us_id, SQLITE3_INTEGER);
+                        $statement->bindValue(":amount", $essence->quantity, SQLITE3_INTEGER);
+                        output(4, "QUERY: " . $statement->getSQL(true));
+                        $statement->execute();
+                    }
+                }
+
+                // Unit sources
+                $statement = $db->prepare("SELECT count(source) AS c FROM k_unit_source WHERE unit = :unit;");
+                $statement->bindValue(":unit", $unit->com2us_id, SQLITE3_INTEGER);
+                $q = $statement->execute();
+                $r = $q->fetchArray(SQLITE3_ASSOC);
+                if ($r["c"] != sizeof($unit->source)){
+                    $statement = $db->prepare("DELETE FROM k_unit_source WHERE unit = :unit;");
+                    $statement->bindValue(":unit", $unit->com2us_id, SQLITE3_INTEGER);
+                    output(4, "QUERY: " . $statement->getSQL(true));
+                    $statement->execute();
+                    foreach ($unit->source as $source){
+                        $statement = $db->prepare("INSERT INTO k_unit_source (unit, source) VALUES (:unit, :source);");
+                        $statement->bindValue(":unit", $unit->com2us_id, SQLITE3_INTEGER);
+                        $statement->bindValue(":source", $source->id, SQLITE3_INTEGER);
+                        output(4, "QUERY: " . $statement->getSQL(true));
+                        $statement->execute();
+                    }
+                }
+
                 // Image download
                 $out = PATH . "public/img/unit/" . sprintf('%08d', $unit->com2us_id) . ".png";
                 $url = 'https://swarfarm.com/static/herders/images/monsters/' . $unit->image_filename;