Forráskód Böngészése

Home (profile) page, guild page, code simplifications.

Iñigo Valentin 7 éve
szülő
commit
8b000fe98a
46 módosított fájl, 1671 hozzáadás és 1345 törlés
  1. 40 0
      application/Constant.php
  2. 5 0
      application/Controller.php
  3. 120 0
      application/entity/Guild.php
  4. 115 0
      application/entity/Guild_Member.php
  5. 63 0
      application/entity/K_Guild_Skill.php
  6. 89 0
      application/entity/K_Guild_Skill_Group.php
  7. 19 0
      application/entity/K_Unit.php
  8. 3 4
      application/entity/Rune.php
  9. 18 4
      application/entity/Unit.php
  10. 255 0
      application/helper/html.php
  11. 6 133
      application/helper/text.php
  12. 62 0
      application/page/Guild_Page.php
  13. 102 1
      application/page/Home_Page.php
  14. 20 7
      application/page/Report_Skillup_Page.php
  15. 287 0
      application/view/guild.php
  16. 111 0
      application/view/home.php
  17. 3 0
      application/view/inc/header.php
  18. 6 274
      application/view/monster.php
  19. 15 61
      application/view/monsters.php
  20. 64 843
      application/view/report_runeupgrade.php
  21. 9 9
      application/view/report_skillup.php
  22. 44 0
      data.sql
  23. 34 3
      install_base.py
  24. 60 6
      install_user.py
  25. 115 0
      public/css/guild.css
  26. 6 0
      public/css/home.css
  27. BIN
      public/img/layout/currency/darkportalenergy.png
  28. BIN
      public/img/layout/icon/leader.png
  29. BIN
      public/img/layout/icon/lock.png
  30. BIN
      public/img/layout/icon/nok.png
  31. BIN
      public/img/layout/icon/ok.png
  32. BIN
      public/img/layout/icon/rank_beg.png
  33. BIN
      public/img/layout/icon/rank_cha1.png
  34. BIN
      public/img/layout/icon/rank_cha2.png
  35. BIN
      public/img/layout/icon/rank_cha3.png
  36. BIN
      public/img/layout/icon/rank_con1.png
  37. BIN
      public/img/layout/icon/rank_con2.png
  38. BIN
      public/img/layout/icon/rank_con3.png
  39. BIN
      public/img/layout/icon/rank_fig1.png
  40. BIN
      public/img/layout/icon/rank_fig2.png
  41. BIN
      public/img/layout/icon/rank_fig3.png
  42. BIN
      public/img/layout/icon/rank_gua1.png
  43. BIN
      public/img/layout/icon/rank_gua2.png
  44. BIN
      public/img/layout/icon/rank_gua3.png
  45. BIN
      public/img/layout/icon/rank_leg.png
  46. BIN
      public/img/layout/icon/viceleader.png

+ 40 - 0
application/Constant.php

@@ -234,4 +234,44 @@
         "IMMEMORIAL_GRINDSTONE" => 4,
     ];
 
+    $GUILD_MEMBER_GRADE = [
+        "LEADER" => 1,
+        "VICELEADER" => 3,
+        "NORMAL" => 2
+    ];
+
+    $ARENA_RANKING_POINTS = [
+        "BEGINER" => 0,
+        "CHALLENGER_1" => 900,
+        "CHALLENGER_2" => 1000,
+        "CHALLENGER_3" => 1100,
+        "FIGHTER_1" => 1200,
+        "FIGHTER_2" => 1300,
+        "FIGHTER_3" => 1400,
+        "CONQUEROR_1" => 1500,
+        "CONQUEROR_2" => 1600,
+        "CONQUEROR_3" => 1700,
+        "GUARDIAN_1" => 1700,
+        "GUARDIAN_2" => 1700,
+        "GUARDIAN_3" => 1700,
+        "LEGEND" => 1700,
+    ];
+
+    $ARENA_RANKING_RANK = [
+        "BEGINER" => null,
+        "CHALLENGER_1" => null,
+        "CHALLENGER_2" => null,
+        "CHALLENGER_3" => null,
+        "FIGHTER_1" => null,
+        "FIGHTER_2" => null,
+        "FIGHTER_3" => null,
+        "CONQUEROR_1" => 10000,
+        "CONQUEROR_2" => 3000,
+        "CONQUEROR_3" => 1000,
+        "GUARDIAN_1" => 300,
+        "GUARDIAN_2" => 100,
+        "GUARDIAN_3" => 30,
+        "LEGEND" => 1,
+    ];
+
 ?>

+ 5 - 0
application/Controller.php

@@ -4,6 +4,7 @@
     require_once($path["helper"] . "db.php");
     require_once($path["helper"] . "text.php");
     require_once($path["helper"] . "net.php");
+    require_once($path["helper"] . "html.php");
     require_once(__DIR__ . "/Constant.php");
 
     /**
@@ -51,6 +52,10 @@
                     require_once($path["page"] . "Runes_Page.php");
                     $page = new Runes_Page($db);
                 }
+                elseif (strtoupper($pars[0]) == "GUILD"){
+                    require_once($path["page"] . "Guild_Page.php");
+                    $page = new Guild_Page($db);
+                }
                 elseif (strtoupper($pars[0]) == "MONSTERS"){
                     if (count($pars) == 1){
                         require_once($path["page"] . "Monsters_Page.php");

+ 120 - 0
application/entity/Guild.php

@@ -0,0 +1,120 @@
+<?php
+
+    require_once($path["entity"] . "Entity.php");
+    require_once($path["entity"] . "Guild_Member.php");
+
+
+    /**
+     * Guild.
+     *
+     * Represents an object from the table 'guild'.
+     */
+    class Guild extends Entity{
+
+        /**
+         * Guild identifier.
+         */
+        public $id;
+
+        /**
+         * Guild name.
+         */
+        public $name;
+
+        /**
+         * Guild level.
+         */
+        public $level;
+
+        /**
+         * Guild total experience.
+         */
+        public $experience;
+
+        /**
+         * Indicates if the guild is ecruiting.
+         */
+        public $recruiting;
+
+        /**
+         * Number of members.
+         */
+        public $total_members;
+
+        /**
+         * Leader {@see Guild_Member}.
+         */
+        public $leader;
+
+        /**
+         * Guild comment.
+         */
+        public $comment;
+
+        /**
+         * Guild notice.
+         */
+        public $notice;
+
+        /**
+         * List of {@see Guild_Member}s.
+         */
+        public $members = [];
+
+        /**
+         * Constructor.
+         *
+         * Searches the database and retrieves the information about the
+         * guild, populating it and it's items.
+         *
+         * @param SQLite3 $db Connection to the database.
+         * @param int $id Guild identifier.
+         */
+        public function __construct($db, $id){
+            global $path;
+            parent::__construct($db);
+            $s =
+              "SELECT " .
+              "  id, " .
+              "  name, " .
+              "  name, " .
+              "  level, " .
+              "  experience, " .
+              "  recruiting, " .
+              "  members, " .
+              "  leader, " .
+              "  comment, " .
+              "  notice " .
+              "FROM guild " .
+              "WHERE id = $id; ";
+            $q = $this->db->query($s);
+            $r = $q->fetchArray(SQLITE3_ASSOC);
+            if ($r){
+                $this->id = $r["id"];
+                $this->name = $r["name"];
+                $this->level = $r["level"];
+                $this->experience = $r["experience"];
+                $this->recruiting = $r["recruiting"];
+                $this->total_members = $r["members"];
+                $this->leader = $r["leader"];
+                $this->comment = $r["comment"];
+                $this->notice = $r["notice"];
+            }
+            $s =
+              "SELECT id " .
+              "FROM guild_member " .
+              "WHERE guild = $this->id " .
+              "ORDER BY " .
+              "  grade = 1 DESC, " .
+              "  grade = 3 DESC, " .
+              "  grade = 2 DESC, " .
+              "  arena_score DESC; ";
+            $q = $this->db->query($s);
+            while ($r = $q->fetchArray(SQLITE3_ASSOC)){
+                array_push($this->members, new Guild_Member($db, $r["id"]));
+            }
+        }
+
+
+    }
+?>

+ 115 - 0
application/entity/Guild_Member.php

@@ -0,0 +1,115 @@
+<?php
+
+    require_once($path["entity"] . "Entity.php");
+
+
+    /**
+     * Guild.
+     *
+     * Represents an object from the table 'guild'.
+     */
+    class Guild_Member extends Entity{
+
+        /**
+         * Member identifier.
+         */
+        public $id;
+
+        /**
+         * Guild id.
+         */
+        public $guild;
+
+        /**
+         * Member name.
+         */
+        public $name;
+
+        /**
+         * Member level.
+         */
+        public $level;
+
+        /**
+         * Member grade.
+         */
+        public $grade;
+
+        /**
+         * Memeber rating.
+         */
+        public $rating;
+
+        /**
+         * Memebr arena score.
+         */
+        public $arena_score;
+
+        /**
+         * Timestam the user joined the guild.
+         */
+        public $joined;
+
+        /**
+         * Timestamp the user last log on.
+         */
+        public $last_login;
+
+        /**
+         * Indicates if the member is included in guild wars.
+         */
+        public $in_war;
+
+        /**
+         * Indicates if the member has set guild wars defenses.
+         */
+        public $has_defense;
+
+
+        /**
+         * Constructor.
+         *
+         * Searches the database and retrieves the information about the
+         * guild, populating it and it's items.
+         *
+         * @param SQLite3 $db Connection to the database.
+         * @param int $id Guild identifier.
+         */
+        public function __construct($db, $id){
+            global $path;
+            parent::__construct($db);
+            $s =
+              "SELECT " .
+              "  id, " .
+              "  guild, " .
+              "  name, " .
+              "  level, " .
+              "  grade, " .
+              "  rating, " .
+              "  arena_score, " .
+              "  joined, " .
+              "  last_login, " .
+              "  in_war, " .
+              "  has_defense " .
+              "FROM guild_member " .
+              "WHERE id = $id; ";
+            $q = $this->db->query($s);
+            $r = $q->fetchArray(SQLITE3_ASSOC);
+            if ($r){
+                $this->id = $r["id"];
+                $this->guild = $r["guild"];
+                $this->name = $r["name"];
+                $this->level = $r["level"];
+                $this->grade = $r["grade"];
+                $this->rating = $r["rating"];
+                $this->arena_score = $r["arena_score"];
+                $this->joined = $r["joined"];
+                $this->last_login = $r["last_login"];
+                $this->in_war = $r["in_war"];
+                $this->has_defense = $r["has_defense"];
+            }
+        }
+
+
+    }
+?>

+ 63 - 0
application/entity/K_Guild_Skill.php

@@ -0,0 +1,63 @@
+<?php
+
+    require_once($path["entity"] . "Entity.php");
+
+    /**
+     * Guild skill.
+     *
+     * Represents an object from the table 'k_guild_skill'.
+     */
+    class K_Guild_Skill extends Entity{
+
+        /**
+         * Skill identifier.
+         */
+        public $id;
+
+        /**
+         * Skill group (id).
+         */
+        public $group;
+
+        /**
+         * Level at which the skill becames available.
+         */
+        public $level;
+
+        /**
+         * Skill description.
+         */
+        public $effect;
+
+        /**
+         * Constructor.
+         *
+         * Searches the database and retrieves the information about the
+         * skill, populating it and it's items.
+         *
+         * @param SQLite3 $db Connection to the database.
+         * @param int $id Skill identifier.
+         */
+        public function __construct($db, $id){
+            global $path;
+            parent::__construct($db);
+            $s =
+              "SELECT " .
+              "  id, " .
+              "  skill_group, " .
+              "  level, " .
+              "  effect " .
+              "FROM k_guild_skill " .
+              "WHERE id = $id; ";
+            $q = $this->db->query($s);
+            $r = $q->fetchArray(SQLITE3_ASSOC);
+            if ($r){
+                $this->id = $r["id"];
+                $this->group = $r["skill_group"];
+                $this->level = $r["level"];
+                $this->effect = $r["effect"];
+            }
+        }
+
+    }
+?>

+ 89 - 0
application/entity/K_Guild_Skill_Group.php

@@ -0,0 +1,89 @@
+<?php
+
+    require_once($path["entity"] . "Entity.php");
+    require_once($path["entity"] . "K_Guild_Skill.php");
+
+    /**
+     * Guild skill group.
+     *
+     * Represents an object from the table 'k_guild_skill_group'.
+     */
+    class K_Guild_Skill_Group extends Entity{
+
+        /**
+         * Group identifier.
+         */
+        public $id;
+
+        /**
+         * Group name.
+         */
+        public $name;
+
+        /**
+         * Group description.
+         */
+        public $description;
+        
+        /**
+         * List of {@see K_Guild_Skill}s in the group.
+         */
+        public $skills = [];
+
+        /**
+         * Constructor.
+         *
+         * Searches the database and retrieves the information about the
+         * skill group, populating it and it's items.
+         *
+         * @param SQLite3 $db Connection to the database.
+         * @param int $id Skill group identifier.
+         */
+        public function __construct($db, $id){
+            global $path;
+            parent::__construct($db);
+            $s =
+              "SELECT " .
+              "  id, " .
+              "  name, " .
+              "  description " .
+              "FROM k_guild_skill_group " .
+              "WHERE id = $id; ";
+            $q = $this->db->query($s);
+            $r = $q->fetchArray(SQLITE3_ASSOC);
+            if ($r){
+                $this->id = $r["id"];
+                $this->name = $r["name"];
+                $this->description = $r["description"];
+            }
+            $s =
+              "SELECT id " .
+              "FROM k_guild_skill " .
+              "WHERE skill_group = $this->id; ";
+            $q = $this->db->query($s);
+            while ($r = $q->fetchArray(SQLITE3_ASSOC)){
+                array_push($this->skills, new K_Guild_Skill($db, $r["id"]));
+            }
+        }
+
+        /**
+         * Gets the pathto the monster image. The image must be in the
+         * img/content/monster/ directory, and its name must be the monster id,
+         * padded with '0' to 1 digits, and the extension must be '.png'.
+         *
+         * @return path to the image, or a path to a fixed unknown image if it
+         *         doesn't exist.
+         */
+        public function get_image(){
+            global $base_dir;
+            global $path;
+            if (file_exists($base_dir . "img/content/skill_guild/" . str_pad($this->id, 1, '0', STR_PAD_LEFT) . ".png")){
+                return $path["img"]["content"] . "skill_guild/" . str_pad($this->id, 1, '0', STR_PAD_LEFT) . ".png";
+            }
+            else{
+                return $path["img"]["layout"] . "unknown.png";
+            }
+        }
+
+    }
+?>

+ 19 - 0
application/entity/K_Unit.php

@@ -198,6 +198,13 @@
          */
         public $sources = [];
 
+        /**
+         * Unit title.
+         * If awakened, it will be the awakened from name.
+         * If unawakened, it will be <element> <name>.
+         */
+        public $title;
+
         /**
          * Constructor.
          *
@@ -324,6 +331,18 @@
                 $this->load_skills();
                 $this->load_sources();
             }
+            if ($this->awakens_from == "" && $this->awakens_to == ""){
+                // No to, no from, silver monster.
+                $this->title = $this->element . " " . $this->name;
+            }
+            elseif ($this->awakens_from =! "" && $this->awakens_to == ""){
+                // Already awakened
+                $this->title = $this->name;
+            }
+            elseif ($this->awakens_to =! ""){
+                // Awakeable.
+                $this->title = $this->element . " " . $this->name;
+            }
         }
 
         /**

+ 3 - 4
application/entity/Rune.php

@@ -40,11 +40,11 @@
          * Rune stars.
          */
         public $stars;
-        
+
         /**
-         * Indicates if the rune is legendary.
+         * Indicates if the rune is ancient.
          */
-        public $legendary;
+        public $ancient;
 
         /**
          * Level of the rune.
@@ -338,7 +338,6 @@
          * @return string Quality (Uppercase)
          */
         private function quality_name($q){
-        error_log("QQQ ". $q);
             global $QUALITY;
             switch ($q){
                 case $QUALITY["NORMAL"]:

+ 18 - 4
application/entity/Unit.php

@@ -116,7 +116,7 @@
          * Datetime the unit was obtained.
          */
         public $create_time;
-        
+
         /**
          * Indicates if the unit is a Homunculus
          */
@@ -126,7 +126,7 @@
          * Indicates the Homunculus name
          */
         public $homunculus_name;
-        
+
         /**
          * Indicates if the monster is locked.
          */
@@ -181,7 +181,7 @@
          * Equiped {@see Rune}s
          */
         public $rune = [];
-        
+
         /**
          * Array with the levels of the skills.
          */
@@ -197,6 +197,14 @@
          */
         public $experience_level_up = 0;
 
+        /**
+         * Unit title.
+         * If Homunculus,it will be it's name.
+         * If awakened, it will be the awakened from name.
+         * If unawakened, it will be <element> <name>.
+         */
+        public $title;
+
 
         /**
          * Constructor.
@@ -276,7 +284,7 @@
             #$this->notes = $r["notes"];
             if ($complete){
                 $this->load_runes();
-                $s = 
+                $s =
                   "SELECT level " .
                   "FROM " .
                   "  unit_skill, " .
@@ -300,6 +308,12 @@
                 $this->experience_level = $r["exp"];
                 $this->experience_level_up = $r["exp"] - $this->exp_gained;
             }
+            if ($this->homunculus){
+                $this->title = $this->homunculus_name;
+            }
+            else{
+                $this->title = $this->unit->title;
+            }
         }
 
         /**

+ 255 - 0
application/helper/html.php

@@ -0,0 +1,255 @@
+<?php
+
+    /**
+     * Generates a monster panel.
+     * 
+     * @param unit Unit/K_Unit Entity to get the info from.
+     * @return string HTML content for a monster panel. Empty on error.
+     */
+    function html_unit_panel($unit) {
+        global $path;
+        if ($unit instanceof Unit){
+            $k = $unit->unit;
+            $stars = $unit->stars;
+            $level = true;
+        }
+        elseif ($unit instanceof K_Unit){
+            $k = $unit;
+            $stars = $unit->base_stars;
+            $level = $false;
+        }
+        else{
+            return "";
+        }
+        $html = "";
+        if ($k->awakens_from == "" && $k->awakens_to == ""){
+            // No to, no from, silver monster.
+            $star_class ="star_silver";
+        }
+        elseif ($k->awakens_from =! "" && $unit->unit->awakens_to == ""){
+            // Already awakened
+            if ($k->base_stars - $k->natural_stars == 1){
+                // Normal awaken.
+                $star_class ="star_purple";
+            }
+            else{
+                // Second awaken.
+                $star_class ="star_red";
+            }
+        }
+        elseif ($k->awakens_to =! ""){
+            // Awakeable.
+            $star_class ="star_gold";
+        }
+        $html .= "<span class='stars'>\n";
+        for ($i = 0; $i < $stars; $i ++){
+            $html .= "<img class='star $star_class' src='" . $path["img"]["layout"] . "icon/star.png'/>\n";
+        }
+        $html .= "</span>\n";
+        $html .= "<img title='" . $unit->title . "' class='monster border_" . $k->element_name . "' src='" . $k->get_image() . "'/>\n";
+        if ($level){
+            $html .= "<span class='level'>\n";
+            $html .= $unit->level . "\n";
+            $html .= "</span>\n";
+        }
+        return $html;
+    }
+
+    /**
+     * Generates a rune panel.
+     * 
+     * @param Rune rune Entity to get the info from.
+     * @param Unit unit Optional. The unit the rune is assigned to.
+     * @return string HTML content for a rune panel. Empty on error.
+     */
+    function html_rune_panel($rune, $unit = null) {
+        global $path;
+        if (!($rune instanceof Rune)){
+            return "";
+        }
+        $html = "";
+        $html .= "<div class='rune_panel rune_slot_" . $rune->slot . " rune_level_" . $rune->level . " rune_quality_" . strtolower($rune->quality_name) . " rune_original_quality_" . strtolower($rune->original_quality_name) . " rune_ancient_" . $rune->ancient . "'>\n";
+        $html .= "<img class='rune_base' src='" . $path["img"]["layout"] . "rune/base.png'/>\n";
+        $html .= "<img class='rune_icon' src='" . $rune->type->get_image() . "'/>\n";
+        $html .= "<span class='rune_stars'>\n";
+        for ($i = 0; $i < $rune->stars; $i ++){
+            $html .= "<img class='star' src='" . $path["img"]["layout"] . "icon/star.png'/>\n";
+        }
+        $html .= "</span>\n";
+        $html .= "<span class='rune_level'>\n";
+        $html .= $rune->level . "\n";
+        $html .= "</span>\n";
+        $html .= "</div>\n";
+        if ($unit instanceof Unit){
+            $html .= "<div class='assigned'>\n";
+            $html .= "<a target='blank' href='/monsters/<?=$unit->id?>'>\n";
+            $html .= "<img title='<?=$unit->title?>' class='monster_image border_<?=$unit->unit->element_name?>' src='<?=$unit->unit->get_image()?>'/>\n";
+            $html .= "</a>\n";
+            $html .= "</div>\n";
+        }
+        return $html;
+    }
+
+    /**
+     * Generates a rune table.
+     * 
+     * @param Rune rune Entity to get the info from.
+     * @param Unit unit Optional. The unit the rune is assigned to.
+     * @return string HTML content for a rune table. Empty on error.
+     */
+    function html_rune_table($rune, $unit = null) {
+        global $path;
+        if (!($rune instanceof Rune)){
+            return "";
+        }
+        $html = "";
+        $html .= "<table class='rune'>\n";
+        $html .= "<tr>\n";
+        $html .= "<td class='icon'>\n";
+        $html .= html_rune_panel($rune, $unit) . "\n";
+        $html .= "</td>\n";
+        $html .= "<td class='stats'>\n";
+        $html .= "<table>\n";
+        // Main stat
+        $html .= "<tr class='main_stat'>\n";
+        $html .= "<td class='stat'>\n";
+        if (in_array($rune->main_stat_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
+            $stat_name = str_replace("%", "", $rune->main_stat_name);
+            $stat_value = "+ " . $rune->main_stat_value . "%";
+        }
+        else{
+            $stat_name = $rune->main_stat_name;
+            $stat_value = "+ " . $rune->main_stat_value;
+        }
+        $html .= $stat_name . "\n";
+        $html .= "</td>\n";
+        $html .= "<td class='value'>\n";
+        $html .= $stat_value . "\n";
+        $html .= "<td>\n";
+        $html .= "</tr>\n";
+        // Innate stat
+        $html .= "<tr class='innate_stat'>\n";
+        $html .= "<td class='stat'>\n";
+        if (strlen($rune->innate_stat) == 0){
+            $stat_name = "&nbsp;";
+            $stat_value = "";
+        }
+        elseif (in_array($rune->innate_stat_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
+            $stat_name = str_replace("%", "", $rune->innate_stat_name);
+            $stat_value = "+ " . $rune->innate_stat_value . "%";
+        }
+        else{
+            $stat_name = $rune->innate_stat_name;
+            $stat_value = "+ " . $rune->innate_stat_value;
+        }
+        $html .= $stat_name . "\n";
+        $html .= "</td>\n";
+        $html .= "<td class='value'>\n";
+        $html .= $stat_value . "\n";
+        $html .= "<td>\n";
+        $html .= "</tr>\n";
+        $substats = array($rune->substat_1, $rune->substat_2, $rune->substat_3, $rune->substat_4);
+        $substats_name = array($rune->substat_1_name, $rune->substat_2_name, $rune->substat_3_name, $rune->substat_4_name);
+        $substats_value = array($rune->substat_1_value, $rune->substat_2_value, $rune->substat_3_value, $rune->substat_4_value);
+        $substats_grind = array($rune->substat_1_grind, $rune->substat_2_grind, $rune->substat_3_grind, $rune->substat_4_grind);
+        $substats_enchant = array($rune->substat_1_enchant, $rune->substat_2_enchant, $rune->substat_3_enchant, $rune->substat_4_enchant);
+        for ($i = 0; $i < 4; $i ++){
+            if (strlen($substats_name[$i]) == 0){
+                $stat_name = "&nbsp;";
+                $stat_value = "";
+            }
+            elseif (in_array($substats_name[$i], array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
+                $stat_name = str_replace("%", "", $substats_name[$i]);
+                $stat_value = "+ " . $substats_value[$i] . "%";
+            }
+            else{
+                $stat_name = $substats_name[$i];
+                $stat_value = "+ " . $substats_value[$i];
+            }
+            $grind = "";
+            if ($substats_grind[$i] > 0){
+                $grind = "+" . $substats_grind[$i];
+                if (in_array($substats_name[$i], array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
+                    $grind = $grind . "%";
+                }
+            }
+            $html .= "<tr class=substat>\n";
+            $html .= "<td class='stat'>\n";
+            $html .= $stat_name . "\n";
+            $html .= "</td>\n";
+            $html .= "<td class='value'>\n";
+            $html .= $stat_value . "\n";
+            $html .= "<span class='grind grind_$grind'>\n";
+            $html .= $grind . "\n";
+            $html .= "</span>\n";
+            if ($substats_enchant[$i] == 1){
+                $html .= "<img title='Enchanted' src='" . $path["img"]["layout"] . "rune/enchanted.png'/>\n";
+            }
+            $html .= "</td>\n";
+            $html .= "</tr>\n";
+        }
+        $html .= "</table>\n";
+        $html .= "</td>\n";
+        // Details
+        $html .= "<td class='details'>\n";
+        $html .= "<table class='table_details'>\n";
+        $html .= "<tr>\n";
+        $html .= "<td class='title'>\n";
+        $html .= "Quality:\n";
+        $html .= "</td>\n";
+        $html .= "<td class='value'>\n";
+        $html .= "<span class='quality quality_" . strtolower($rune->quality_name) . "'>\n";
+        $html .= $rune->quality_name . "\n";
+        $html .= "</span>\n";
+        $html .= "</td>\n";
+        $html .= "</tr>\n";
+        $html .= "<tr>\n";
+        $html .= "<td class='title'>\n";
+        $html .= "Origina q.:\n";
+        $html .= "</td>\n";
+        $html .= "<td class='value'>\n";
+        $html .= "<span class='quality quality_" . strtolower($rune->original_quality_name) . "'>\n";
+        $html .= $rune->original_quality_name . "\n";
+        $html .= "</span>\n";
+        $html .= "</td>\n";
+        $html .= "</tr>\n";
+        $html .= "<tr>\n";
+        $html .= "<td class='title'>\n";
+        $html .= "Value:\n";
+        $html .= "</td>\n";
+        $html .= "<td class='value'>\n";
+        $html .= number_format($rune->value, 0, ".", ",") . "\n";
+        $html .= "</td>\n";
+        $html .= "</tr>\n";
+        $html .= "<tr>\n";
+        $html .= "<td class='title'>\n";
+        $html .= "Efficiency:\n";
+        $html .= "</td>\n";
+        $html .= "<td class='value'>\n";
+        $html .= number_format($rune->efficiency, 2, ".", ",") . "\n";
+        $html .= "</td>\n";
+        $html .= "</tr>\n";
+        $html .= "<tr>\n";
+        $html .= "<td class='title'>\n";
+        $html .= "Max. eff.:\n";
+        $html .= "</td>\n";
+        $html .= "<td class='value'>\n";
+        $html .= number_format($rune->max_efficiency, 2, ".", ",") . "\n";
+        $html .= "</td>\n";
+        $html .= "</tr>\n";
+        $html .= "<tr>\n";
+        $html .= "<td class='title'>\n";
+        $html .= "Reached. eff.:\n";
+        $html .= "</td>\n";
+        $html .= "<td class='value'>\n";
+        $html .= number_format($rune->efficiency * 100 / $rune->max_efficiency, 2, ".", ",") . "\n";
+        $html .= "</td>\n";
+        $html .= "</tr>\n";
+        $html .= "</table>\n";
+        $html .= "</td>\n";
+        $html .= "</tr>\n";
+        $html .= "</table>\n";
+        return $html;
+    }
+
+?>

+ 6 - 133
application/helper/text.php

@@ -1,93 +1,11 @@
 <?php
 
 
-    /**
-     * Selects the language the page will be displayed on.
-     * 
-     * First, it tries to read the language cookie in the client. If none is
-     * set, get the browser language preference list. If none is provided or
-     * they are not supported, it will use the default language.
-     * 
-     * @param MySQL_connection $db Connection to the database.
-     * @return string Lowercase, two-letter language code.
-     */
-    function select_language($db){
-
-        // Get available languages from db
-        $available_languages = array();
-        $q_lang = mysqli_query($db, "SELECT code FROM lang WHERE active = 1;");
-        while ($r_lang = mysqli_fetch_array($q_lang)){
-            array_push($available_languages, $r_lang["code"]);
-        }
-
-        // Is there a language cookie installed on the client?.
-        header("Cache-control: private");
-        if (isSet($_COOKIE["lang"])){
-            $lang = $_COOKIE["lang"];
-            if (in_array($lang, $available_languages)){
-                header("Location: " . get_protocol() . $_SERVER["HTTP_HOST"] . "/" . $lang . $_SERVER["REQUEST_URI"]);
-                return $lang;
-            }
-        }
-
-        // If no cookie, select from client browser preferences.
-        $lang = prefered_language($available_languages, $_SERVER["HTTP_ACCEPT_LANGUAGE"]);
-        if (in_array($lang, $available_languages)){
-            header("Location: " . get_protocol() . $_SERVER["HTTP_HOST"] . "/" . $lang . $_SERVER["REQUEST_URI"]);
-            return $lang;
-        }
-
-        // If no method was succesfull, default language
-        $lang = $available_languages[0];
-        header("Location: " . get_protocol() . $_SERVER["HTTP_HOST"] . "/" . $lang . $_SERVER["REQUEST_URI"]);
-        return $lang;
-    }
-
-
-    /**
-     * Parses the language prefrences of the client broser, comparing them to
-     * the languages offered by the site and selects the prefered one among
-     * the ones supported.
-     * 
-     * @param string[] available_languages List of lowercase, two-letter
-     *                                      language codes allowed by the site.
-     * @param string http_accept_language Raw header with info about client
-     *                                    language preferences.
-     * @return string Lowercase, two-letter code of the prefered available
-     *                language.
-     */
-    function prefered_language(array $available_languages, $http_accept_language) {
-
-        $available_languages = array_flip($available_languages);
-
-        $langs;
-        preg_match_all("~([\w-]+)(?:[^,\d]+([\d.]+))?~", strtolower($http_accept_language), $matches, PREG_SET_ORDER);
-        foreach($matches as $match) {
-
-            list($a, $b) = explode("-", $match[1]) + array("", "");
-            $value = isset($match[2]) ? (float) $match[2] : 1.0;
-
-            if(isset($available_languages[$match[1]])) {
-                $langs[$match[1]] = $value;
-                continue;
-            }
-
-            if(isset($available_languages[$a])) {
-                $langs[$a] = $value - 0.1;
-            }
-
-        }
-        arsort($langs);
-        return $langs[0];
-    }
-
-
     /**
      * Tturns a date string into a human readable string on the specified
      * language. Only works for spanish, basque and english.
      * 
      * @param string $str_date Date string ('yyyy-mm-dd' or 'yyyy-mm-dd HH:MM:SS')
-     * @param string $lang Language code (es, en, eu).
      * @param string $time Append the time at the end.
      * @return string Formatted date string.
      */
@@ -101,61 +19,17 @@
         $wday --;
         $hour = date("H", $date);
         $minute = date("i", $date);
-        switch ($lang){
-            case "en":
-                $week = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
-                $months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
-                if ($time){
-                    $str = "$week[$wday], $months[$month] $day, $year at $hour:$minute";
-                }
-                else{
-                    $str = "$week[$wday], $months[$month] $day, $year";
-                }
-                break;
-            case "eu":
-                $week = ["astelehena", "asteartea", "asteazkena", "osteguna", "ostirala", "larumbata", "igandea"];
-                $months = ["urtarrilaren", "otsailaren", "martxoaren", "apirilaren", "maiatzaren", "ekainaren", "uztailaren", "abuztuaren", "irailaren", "urriaren", "azaroaren", "abenduaren"];
-                if ($time){
-                    $str = $year . "ko $months[$month] $day" . "an, $week[$wday], $hour:$minute";
-                }
-                else{
-                    $str = $year . "ko $months[$month] $day" . "an, $week[$wday]";
-                }
-                break;
-            default:
-                $week = ["Lunes", "Martes", "Mi&eacute;rcoles", "Jueves", "Viernes", "S&aacute;bado", "Domingo"];
-                $months = ["enero", " febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"];
-                if ($time){
-                    $str = "$week[$wday] $day de $months[$month] de $year a las $hour:$minute";
-                }
-                else{
-                    $str = "$week[$wday] $day de $months[$month] de $year";
-                }
-        }
-        return $str;
-    }
-
-
-    /**
-     * Retrieves a text fragment from the database.
-     * 
-     * @param Page|Entity $model An initialized data model.
-     * @param string $id Text identifier.
-     * @returns string The text.
-     */
-    function text($model, $id){
-        global $path;
-        $q = mysqli_query($model->db, "SELECT text, file FROM text WHERE id = '$id' AND lang = '" . $model->lang . "';");
-        $r = mysqli_fetch_array($q);
-        if (strlen($r["file"]) > 0){
-            return file_get_contents($path["string"] . $r["file"]);
+        $week = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
+        $months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
+        if ($time){
+            $str = "$week[$wday], $months[$month] $day, $year at $hour:$minute";
         }
         else{
-            return $r["text"];
+            $str = "$week[$wday], $months[$month] $day, $year";
         }
+        return $str;
     }
 
-
     /**
      * This function closes all the opened HTML tags in a given string.
      * 
@@ -183,7 +57,6 @@
         return $html;
     }
 
-
     /**
      * Text shortener. Given a string, it trims in the proximity of the
      * desired string, up to the next white character. If indicated, it will

+ 62 - 0
application/page/Guild_Page.php

@@ -0,0 +1,62 @@
+ <?php
+
+    require_once($path["page"] . "Page.php");
+    require_once($path["entity"] . "Guild.php");
+    require_once($path["entity"] . "K_Guild_Skill_Group.php");
+
+    /**
+     * Guild page.
+     */
+    class Guild_Page extends Page{
+
+        /**
+         * @{see Guild}.
+         */
+        public $guild = [];
+
+        /**
+         * List of {@see K_Guild_Skill_Group}s.
+         */
+        public $skill_groups = [];
+
+        /**
+         * Constructor.
+         *
+         * Retrieves the data and initializes the variables.
+         *
+         * @param SQLite3 $db Connection to the database.
+         */
+        public function __construct($db){
+            global $path;
+            global $root;
+            parent::__construct($db);
+            $this->view = $path["view"] . "guild.php";
+            $s =
+              "SELECT DISTINCT guild AS id " .
+              "FROM " .
+              "  guild_member " .
+              "  guild; ";
+            // TODO: Where guild.member.player = ...
+            $q = $this->db->query($s);
+            $r = $q->fetchArray(SQLITE3_ASSOC);
+            if ($r){
+                $this->guild = new Guild($db, $r["id"]);
+                $this->title = $this->guild->name . " - SWDB";
+                $this->description = $this->guild->name . " Guild details";
+                $s =
+                  "SELECT id " .
+                  "FROM k_guild_skill_group " .
+                  "ORDER BY id; ";
+                $q = $this->db->query($s);
+                while ($r = $q->fetchArray(SQLITE3_ASSOC)){
+                    array_push($this->skill_groups, new K_Guild_Skill_Group($db, $r["id"]));
+                }
+            }
+            else{
+                $this->title = "Guild - SWDB";
+                $this->description = "No guild";
+            }
+            $this->canonical = $root . "guild/";
+        }
+    }
+?>

+ 102 - 1
application/page/Home_Page.php

@@ -1,6 +1,7 @@
 <?php
 
     require_once($path["page"] . "Page.php");
+    require_once($path["entity"] . "Unit.php");
 
 
     /**
@@ -8,8 +9,54 @@
      */
     class Home_Page extends Page{
 
-        private $max_projects = 3;
+        /**
+         * Player ID.
+         */
+        public $uid;
+
+        /**
+         * Player name.
+         */
+        public $name;
+
+        /**
+         * Player country (XX).
+         */
+        public $country;
 
+        /**
+         * Total experience.
+         */
+         public $experience;
+
+        /**
+         * Representative {@see Unit}.
+         */
+        public $rep;
+
+        /**
+         * Currency
+         */
+        public $currency = [
+            "mana" => 0,
+            "crystal" => 0,
+            "energy" => 0,
+            "energy_max" => 0,
+            "arena_energy" => 0,
+            "arena_energy_max" => 0,
+            "darkportal_energy" => 0,
+            "darkportal_energy_max" => 0,
+            "dimension_energy" => 0,
+            "dimension_energy_max" => 0,
+            "honor_point" => 0,
+            "guild_point" => 0,
+            "honor_medal" => 0,
+            "honor_mark" => 0,
+            "event_coin" => 0,
+            "social_point" => 0,
+            "ancient_stone" => 0,
+            "costume_point" => 0,
+        ];
 
         /**
          * Constructor.
@@ -24,6 +71,60 @@
             global $root;
             parent::__construct($db);
             $this->view = $path["view"] . "home.php";
+            // TODO:Filter by player?
+            $s =
+              "SELECT " .
+              "  uid, " .
+              "  name, " .
+              "  country, " .
+              "  experience, " .
+              "  rep, " .
+              "  mana, " .
+              "  crystal, " .
+              "  energy, " .
+              "  energy_max, " .
+              "  arena_energy, " .
+              "  arena_energy_max, " .
+              "  darkportal_energy, " .
+              "  darkportal_energy_max, " .
+              "  dimension_energy, " .
+              "  dimension_energy_max, " .
+              "  honor_point, " .
+              "  guild_point, " .
+              "  honor_medal, " .
+              "  honor_mark, " .
+              "  event_coin, " .
+              "  social_point, " .
+              "  costume_point " .
+              "FROM player ";
+            $q = $this->db->query($s);
+            $r = $q->fetchArray(SQLITE3_ASSOC);
+            if ($r){
+                $this->uid = $r["uid"];
+                $this->name = $r["name"];
+                $this->country = $r["country"];
+                $this->experience = $r["experience"];
+                if (strlen($r["rep"]) > 0){
+                    $this->rep = new Unit($this->db, $r["rep"]);
+                }
+                $this->currency["mana"] = $r["mana"];
+                $this->currency["crystal"] = $r["crystal"];
+                $this->currency["energy"] = $r["energy"];
+                $this->currency["energy_max"] = $r["energy_max"];
+                $this->currency["arena_energy"] = $r["arena_energy"];
+                $this->currency["arena_energy_max"] = $r["arena_energy_max"];
+                $this->currency["darkportal_energy"] = $r["darkportal_energy"];
+                $this->currency["darkportal_energy_max"] = $r["darkportal_energy_max"];
+                $this->currency["dimension_energy"] = $r["dimension_energy"];
+                $this->currency["dimension_energy_max"] = $r["dimension_energy_max"];
+                $this->currency["honor_point"] = $r["honor_point"];
+                $this->currency["guild_point"] = $r["guild_point"];
+                $this->currency["honor_medal"] = $r["honor_medal"];
+                $this->currency["honor_mark"] = $r["honor_mark"];
+                $this->currency["event_coin"] = $r["event_coin"];
+                $this->currency["social_point"] = $r["social_point"];
+                $this->currency["costume_point"] = $r["costume_point"];
+            }
             $this->title = "SWDB";
             $this->description = "Summoners War DataBase";
             $this->canonical = $root;

+ 20 - 7
application/page/Report_Skillup_Page.php

@@ -119,9 +119,22 @@
               "  k_unit.id = k_unit_skill.unit AND " .
               "  k_skill.id = k_unit_skill.skill AND " .
               "  unit.stars >= " . $this->filters["min_stars"] . " AND " .
-              "  unit.stars <= " . $this->filters["max_stars"] . " AND " .
-              "  k_unit.natural_stars >= " . $this->filters["min_natural_stars"] . " AND " .
-              "  k_unit.natural_stars <= " . $this->filters["max_natural_stars"] . " ";
+              "  unit.stars <= " . $this->filters["max_stars"] . " ";
+            if ($this->filters["2a"]){
+                error_log("2A - ACTIVE");
+                $s = $s .
+                  "  AND (( " .
+                  "    k_unit.natural_stars >= " . $this->filters["min_natural_stars"] . " AND " .
+                  "    k_unit.natural_stars <= " . $this->filters["max_natural_stars"] . " " .
+                  "  ) OR ( " .
+                  "    k_unit.base_stars - k_unit.natural_stars > 1 " .
+                  "  )) ";
+            }
+            else{
+                $s = $s .
+                  "  AND k_unit.natural_stars >= " . $this->filters["min_natural_stars"] . " AND " .
+                  "  k_unit.natural_stars <= " . $this->filters["max_natural_stars"] . " ";
+            }
             if (!$this->filters["in_storage"]){
                 // TODO
                 //$s = $s . " AND unit.in_storage = 0 ";
@@ -129,7 +142,7 @@
             if (!$this->filters["without_runes"]){
                 $s = $s . " AND unit.id IN (SELECT DISTINCT assigned_to FROM rune) ";
             }
-            if ($this->filters["family"]){
+            if (!$this->filters["family"]){
                 $s = $s . " AND unit.unit NOT IN (SELECT id FROM k_unit m WHERE family IN (SELECT family FROM k_unit k WHERE k.family = m.family AND k.natural_stars < m.natural_stars AND k.natural_stars < " . $this->filters["min_natural_stars"] . ")) ";
                 // Special case: Eirgar (Dark Vampire lord). Nat5 can be powered with 4 star Vampires.
                 if ($this->filters["min_natural_stars"] >= 5){
@@ -140,9 +153,9 @@
                     $s = $s . " AND k_unit.id <> 23015 AND k_unit.id <> 23005 ";
                 }
             }
-            if (!$this->filters["2a"]){
-                $s = $s . " AND (k_unit.awakens_from IS NULL OR k_unit.awakens_to IS NOT NULL OR k_unit.base_stars - k_unit.natural_stars = 1) ";
-            }
+            //if (!$this->filters["2a"]){
+            //    $s = $s . " AND (k_unit.awakens_from IS NULL OR k_unit.awakens_to IS NOT NULL OR k_unit.base_stars - k_unit.natural_stars = 1) ";
+            //}
             if (!$this->filters["homunculus"]){
                 $s = $s . " AND k_unit.homunculus <> 1 ";
             }

+ 287 - 0
application/view/guild.php

@@ -0,0 +1,287 @@
+<?php
+    global $GUILD_MEMBER_GRADE;
+    global $ARENA_RANKING_POINTS;
+    global $ARENA_RANKING_RANK;
+?>
+<!DOCTYPE html>
+<html lang='en'>
+    <head>
+        <meta content='text/html; charset=utf-8' http-equiv='content-type'/>
+        <meta name='viewport' content='width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1'/>
+        <title><?=$page->title?></title>
+        <link rel='shortcut icon' href='<?=$page->favicon?>'/>
+        <!-- CSS files -->
+        <link rel='stylesheet' type='text/css' href='<?=$path["css"]?>ui.css'/>
+        <link rel='stylesheet' type='text/css' href='<?=$path["css"]?>guild.css'/>
+        <!-- Script files -->
+        <script src="<?=$path["js"]?>ui.js"></script>
+        <!-- Meta tags -->
+        <link rel='canonical' href='<?=$page->canonical?>'/>
+        <link rel='author' href='<?=$page->author?>'/>
+        <link rel='publisher' href='<?=$page->author?>'/>
+        <meta name='description' content='<?=$page->description?>'/>
+        <meta property='og:title' content='<?=$page->title?>'/>
+        <meta property='og:url' content='<?=$page->canonical?>'/>
+        <meta property='og:description' content='<?=$page->description?>'/>
+        <meta property='og:image' content='<?=$page->icon?>'/>
+        <meta property='og:site_name' content='<?=$page->name?>'/>
+        <meta property='og:type' content='website'/>
+        <meta property='og:locale' content='en'/>
+        <meta name='twitter:card' content='summary'/>
+        <meta name='twitter:title' content='<?=$page->title?>'/>
+        <meta name='twitter:description' content='<?=$page->description?>'/>
+        <meta name='twitter:image' content='<?=$page->icon?>'/>
+        <meta name='twitter:url' content='<?=$page->canonical?>'/>
+        <meta name='robots' content='index follow'/>
+    </head>
+    <body>
+<?php
+        include __DIR__ . "/inc/header.php";
+        if (!isset($page->guild)){
+?>
+            <section id='no_guild'>
+                <h2>
+                    Guild
+                </h2>
+                You are not currently in a guild.
+            </section>
+<?php
+        }
+        else{
+?>
+            <section id='guild_info' class='content'>
+                <h2>
+                    <?=$page->guild->name?>
+                </h2>
+                <div id='guild_details'>
+                    <span id='guild_level'>
+                        Lv. <?=$page->guild->level?>
+                    </span>
+                    <span id='guild_experience'>
+                        (Exp: <?=$page->guild->experience?>)
+                    </span>
+                    <p id='guild_comment'>
+                        <?=$page->guild->comment?>
+                    </p>
+                    <p id='guild_notice'>
+                        <?=$page->guild->notice?>
+                    </p>
+                    <div id='guild_skills'>
+<?php
+                        foreach ($page->skill_groups as $group){
+?>
+                            <div class='skill_group'>
+                                <span class='skill_group_title'>
+                                    <?=$group->name?>
+                                </span>
+                                <img class='skill_group_image' alt='<?=$group->name?>' src='<?=$group->get_image()?>'/>
+                                <ul>
+                                    <li class='description'>
+                                        <?=$group->description?>
+                                    </li>
+<?php
+                                    foreach ($group->skills as $skill){
+                                        if ($skill->level > $page->guild->level){
+                                            $unavailable = "unavailable";
+                                        }
+                                        else{
+                                            $unavailable = "";
+                                        }
+?>
+                                        <li class='<?=$unavailable?>'>
+                                            Lv. <?=$skill->level?>: <?=$skill->effect?>
+                                        </li>
+<?php
+                                    }
+?>
+                                </ul>
+                            </div>
+<?php
+                        }
+?>
+                    </div>
+                </div>
+                <table id='guild_members'>
+                    <tr>
+                        <th>
+                            &nbsp;
+                        </th>
+                        <th>
+                            Name
+                        </th>
+                        <th>
+                            Lv.
+                        </th>
+                        <th colspan='2'>
+                            Arena
+                        </th>
+                        <th>
+                            War
+                        </th>
+                        <th>
+                            Def
+                        </th>
+                        <th>
+                            Login
+                        </th>
+                    </tr>
+<?php
+                    $odd = "";
+                    foreach ($page->guild->members as $member){
+?>
+                        <tr>
+                            <td class='grade <?=$odd?>'>
+<?php
+                                if ($member->grade == $GUILD_MEMBER_GRADE["LEADER"]){
+?>
+                                    <img alt='yes' src='<?=$path["img"]["layout"] . "icon/leader.png"?>'/>
+<?php
+                                }
+                                elseif ($member->grade == $GUILD_MEMBER_GRADE["VICELEADER"]){
+?>
+                                    <img alt='yes' src='<?=$path["img"]["layout"] . "icon/viceleader.png"?>'/>
+<?php
+                                }
+?>
+                            </td>
+                            <td class='name <?=$odd?>'>
+                                <?=$member->name?>
+                            </td>
+                            <td class='level <?=$odd?>'>
+                                <?=$member->level?>
+                            </td>
+                            <td class='score <?=$odd?>'>
+                                <?=$member->arena_score?>
+                            </td>
+                            <td class='score_icon <?=$odd?>'>
+<?php
+                                if ($member->arena_score >= $ARENA_RANKING_POINTS["BEGINER"] && ($ARENA_RANKING_RANK["BEGINER"] == null || $member->rating <= $ARENA_RANKING_RANK["BEGINER"])){
+                                    $src = $path["img"]["layout"] . "icon/rank_beg.png";
+                                    $tit = "Beginer";
+                                }
+                                if ($member->arena_score >= $ARENA_RANKING_POINTS["CHALLENGER_1"] && ($ARENA_RANKING_RANK["CHALLENGER_1"] == null || $member->rating <= $ARENA_RANKING_RANK["CHALLENGER_1"])){
+                                    $src = $path["img"]["layout"] . "icon/rank_cha1.png";
+                                    $tit = "Challenger 1";
+                                }
+                                if ($member->arena_score >= $ARENA_RANKING_POINTS["CHALLENGER_2"] && ($ARENA_RANKING_RANK["CHALLENGER_2"] == null || $member->rating <= $ARENA_RANKING_RANK["CHALLENGER_2"])){
+                                    $src = $path["img"]["layout"] . "icon/rank_cha2.png";
+                                    $tit = "Challenger 2";
+                                }
+                                if ($member->arena_score >= $ARENA_RANKING_POINTS["CHALLENGER_3"] && ($ARENA_RANKING_RANK["CHALLENGER_3"] == null || $member->rating <= $ARENA_RANKING_RANK["CHALLENGER_3"])){
+                                    $src = $path["img"]["layout"] . "icon/rank_cha3.png";
+                                    $tit = "Challenger 3";
+                                }
+                                if ($member->arena_score >= $ARENA_RANKING_POINTS["FIGHTER_1"] && ($ARENA_RANKING_RANK["FIGHTER_1"] == null || $member->rating <= $ARENA_RANKING_RANK["FIGHTER_1"])){
+                                    $src = $path["img"]["layout"] . "icon/rank_fig1.png";
+                                    $tit = "Fighter 1";
+                                }
+                                if ($member->arena_score >= $ARENA_RANKING_POINTS["FIGHTER_2"] && ($ARENA_RANKING_RANK["FIGHTER_2"] == null || $member->rating <= $ARENA_RANKING_RANK["FIGHTER_2"])){
+                                    $src = $path["img"]["layout"] . "icon/rank_fig2.png";
+                                    $tit = "Fighter 2";
+                                }
+                                if ($member->arena_score >= $ARENA_RANKING_POINTS["FIGHTER_3"] && ($ARENA_RANKING_RANK["FIGHTER_3"] == null || $member->rating <= $ARENA_RANKING_RANK["FIGHTER_3"])){
+                                    $src = $path["img"]["layout"] . "icon/rank_fig3.png";
+                                    $tit = "Fighter 3";
+                                }
+                                if ($member->arena_score >= $ARENA_RANKING_POINTS["CONQUEROR_1"] && ($ARENA_RANKING_RANK["CONQUEROR_1"] == null || $member->rating <= $ARENA_RANKING_RANK["CONQUEROR_1"])){
+                                    $src = $path["img"]["layout"] . "icon/rank_con1.png";
+                                    $tit = "Conqueror 1";
+                                }
+                                if ($member->arena_score >= $ARENA_RANKING_POINTS["CONQUEROR_2"] && ($ARENA_RANKING_RANK["CONQUEROR_2"] == null || $member->rating <= $ARENA_RANKING_RANK["CONQUEROR_2"])){
+                                    $src = $path["img"]["layout"] . "icon/rank_con2.png";
+                                    $tit = "Conqueror 2";
+                                }
+                                if ($member->arena_score >= $ARENA_RANKING_POINTS["CONQUEROR_3"] && ($ARENA_RANKING_RANK["CONQUEROR_3"] == null || $member->rating <= $ARENA_RANKING_RANK["CONQUEROR_3"])){
+                                    $src = $path["img"]["layout"] . "icon/rank_con3.png";
+                                    $tit = "Conqueror 3";
+                                }
+                                if ($member->arena_score >= $ARENA_RANKING_POINTS["GUARDIAN_1"] && ($ARENA_RANKING_RANK["GUARDIAN_1"] == null || $member->rating <= $ARENA_RANKING_RANK["GUARDIAN_1"])){
+                                    $src = $path["img"]["layout"] . "icon/rank_gua1.png";
+                                    $tit = "Guardian 1";
+                                }
+                                if ($member->arena_score >= $ARENA_RANKING_POINTS["GUARDIAN_2"] && ($ARENA_RANKING_RANK["GUARDIAN_2"] == null || $member->rating <= $ARENA_RANKING_RANK["GUARDIAN_2"])){
+                                    $src = $path["img"]["layout"] . "icon/rank_gua2.png";
+                                    $tit = "Guardian 2";
+                                }
+                                if ($member->arena_score >= $ARENA_RANKING_POINTS["GUARDIAN_3"] && ($ARENA_RANKING_RANK["GUARDIAN_3"] == null || $member->rating <= $ARENA_RANKING_RANK["GUARDIAN_3"])){
+                                    $src = $path["img"]["layout"] . "icon/rank_gua3.png";
+                                    $tit = "Guardian 3";
+                                }
+                                if ($member->arena_score >= $ARENA_RANKING_POINTS["LEGEND"] && ($ARENA_RANKING_RANK["LEGEND"] == null || $member->rating <= $ARENA_RANKING_RANK["LEGEND"])){
+                                    $src = $path["img"]["layout"] . "icon/rank_leg.png";
+                                    $tit = "Legend";
+                                }
+?>
+                                <img alt='<?=$tit?>' src='<?=$src?>'/>
+                            </td>
+                            <td class='war <?=$odd?>'>
+<?php
+                                if ($member->in_war){
+?>
+                                    <img alt='yes' src='<?=$path["img"]["layout"] . "icon/ok.png"?>'/>
+<?php
+                                }
+?>
+                            </td>
+                            <td class='defense <?=$odd?>'>
+<?php
+                                if ($member->has_defense){
+?>
+                                    <img alt='yes' src='<?=$path["img"]["layout"] . "icon/ok.png"?>'/>
+<?php
+                                }
+?>
+                            </td>
+<?php
+                            $now = time();
+                            $date = (new DateTime("@$member->last_login"))->format('Y-m-d H:i:s');
+                            $days = $now - strtotime($date);
+                            $days = floor($days / (60 * 60 * 24));
+                            if ($days == 0){
+                                $hours = floor($days / (60 * 60));
+                                if ($hours == 0){
+                                    $last_login = "Online";
+                                }
+                                else if ($hours == 1){
+                                    $last_login = "1 hour";
+                                }
+                                else{
+                                    $last_login = floor($days / (60 * 60)) . " hours";
+                                }
+                                $warning = "";
+                            }
+                            else{
+                                $last_login = "$days days";
+                                if ($days < 2){
+                                    $last_login = "$days day";
+                                    $warning = "";
+                                }
+                                elseif ($days < 5){
+                                    $warning = "warning";
+                                }
+                                else{
+                                    $warning = "danger";
+                                }
+                            }
+?>
+                            <td class='last_login <?=$odd?> <?=$warning?>'>
+                                <?=$last_login?>
+                            </td>
+                        </tr>
+<?php
+                        if ($odd == ""){
+                            $odd = "odd";
+                        }
+                        else{
+                            $odd = "";
+                        }
+                    }
+?>
+                </table>
+            </section>
+<?php
+        }
+        include __DIR__ . "/inc/footer.php";
+?>
+    </body>
+</html>

+ 111 - 0
application/view/home.php

@@ -39,6 +39,117 @@
                     Summoners War DataBase
                 </span>
             </h2>
+            <article id='profile'>
+                <h3>
+                    <?=$page->name?>
+                </h3>
+                <div id='info'>
+<?php
+                    //if (isset($page->rep)){
+                        if ($page->rep->unit->awakens_from == "" && $page->rep->unit->awakens_to == ""){
+                            // No to, no from, silver monster.
+                            $star_class ="star_silver";
+                            $mon_title = $page->rep->unit->element . " " . $page->rep->unit->name;
+                        }
+                        elseif ($page->rep->unit->awakens_from =! "" && $page->rep->unit->awakens_to == ""){
+                            // Already awakened
+                            if ($page->rep->unit->base_stars - $page->rep->unit->natural_stars == 1){
+                                // Normal awaken.
+                                $star_class ="star_purple";
+                            }
+                            else{
+                                // Second awaken.
+                                $star_class ="star_red";
+                            }
+                            $mon_title = $page->rep->unit->name;
+                        }
+                        elseif ($page->rep->unit->awakens_to =! ""){
+                            // Awakeable.
+                            $star_class ="star_gold";
+                            $mon_title = $page->rep->unit->element . " " . $page->rep->unit->name;
+                        }
+?>
+
+                        <div class='monster_panel'>
+                            <span class='stars'>
+<?php
+                                for ($i = 0; $i < $page->rep->stars; $i ++){
+?>
+                                    <img class='star <?=$star_class?>' src='<?=$path["img"]["layout"] . "icon/star.png"?>'/>
+<?php
+                                }
+?>
+                            </span>
+                            <img title='<?=$mon_title?>' class='monster border_<?=$page->rep->unit->element_name?>' src='<?=$page->rep->unit->get_image()?>'/>
+                            <span class='level'>
+                                <?=$page->rep->level?>
+                            </span>
+                        </div> <!-- .monster_panel -->
+<?php
+                   // } // if (isset($page->rep))
+?>
+                </div>
+                <div id='currency'>
+                    <ul>
+                        <li>
+                            <img src='<?=$path["img"]["layout"]?>currency/energy.png'/>
+                            <?=$page->currency["energy"]?> / <?=$page->currency["energy_max"]?>
+                        </li>
+                        <li>
+                            <img src='<?=$path["img"]["layout"]?>currency/arenaenergy.png'/>
+                            <?=$page->currency["arena_energy"]?> / <?=$page->currency["arena_energy_max"]?>
+                        </li>
+                        <li>
+                            <img src='<?=$path["img"]["layout"]?>currency/dimensionenergy.png'/>
+                            <?=$page->currency["dimension_energy"]?> / <?=$page->currency["dimension_energy_max"]?>
+                        </li>
+                        <li>
+                            <img src='<?=$path["img"]["layout"]?>currency/darkportalenergy.png'/>
+                            <?=$page->currency["darkportal_energy"]?> / <?=$page->currency["darkportal_energy_max"]?>
+                        </li>
+                        <li>
+                            <img src='<?=$path["img"]["layout"]?>currency/mana.png'/>
+                            <?=$page->currency["mana"]?>
+                        </li>
+                        <li>
+                            <img src='<?=$path["img"]["layout"]?>currency/crystal.png'/>
+                            <?=$page->currency["crystal"]?>
+                        </li>
+                        <li>
+                            <img src='<?=$path["img"]["layout"]?>currency/socialpoint.png'/>
+                            <?=$page->currency["social_point"]?>
+                        </li>
+                        <li>
+                            <img src='<?=$path["img"]["layout"]?>currency/honor.png'/>
+                            <?=$page->currency["honor_point"]?>
+                        </li>
+                        <li>
+                            <img src='<?=$path["img"]["layout"]?>currency/guildpoint.png'/>
+                            <?=$page->currency["guild_point"]?>
+                        </li>
+                        <li>
+                            <img src='<?=$path["img"]["layout"]?>currency/badge.png'/>
+                            <?=$page->currency["honor_medal"]?>
+                        </li>
+                        <li>
+                            <img src='<?=$path["img"]["layout"]?>currency/mark.png'/>
+                            <?=$page->currency["honor_mark"]?>
+                        </li>
+                        <li>
+                            <img src='<?=$path["img"]["layout"]?>currency/ancientcoin.png'/>
+                            <?=$page->currency["event_coin"]?>
+                        </li>
+                        <li>
+                            <img src='<?=$path["img"]["layout"]?>currency/ancientstone.png'/>
+                            <?=$page->currency["ancient_stone"]?>
+                        </li>
+                        <li>
+                            <img src='<?=$path["img"]["layout"]?>currency/costumestone.png'/>
+                            <?=$page->currency["costume_point"]?>
+                        </li>
+                    </ul>
+                </div>
+            </article>
             <article>
                 <h3>
                     <a href='/catalog'>

+ 3 - 0
application/view/inc/header.php

@@ -24,6 +24,9 @@
         <a href='/fusion'>
             Fusion
         </a>
+        <a href='/guild'>
+            Guild
+        </a>
         <a href='/report'>
             Reports
         </a>

+ 6 - 274
application/view/monster.php

@@ -34,51 +34,15 @@
         include __DIR__ . "/inc/header.php";
 ?>
         <section id='monster' class='content'>
-<?php
-            if ($page->unit->unit->awakens_from == "" && $page->unit->unit->awakens_to == ""){
-                // No to, no from, silver monster.
-                $star_class ="star_silver";
-                $mon_title = $page->unit->unit->element . " " . $page->unit->unit->name;
-            }
-            elseif ($page->unit->unit->awakens_from =! "" && $page->unit->unit->awakens_to == ""){
-                // Already awakened
-                if ($page->unit->unit->base_stars - $page->unit->unit->natural_stars == 1){
-                    // Normal awaken.
-                    $star_class ="star_purple";
-                }
-                else{
-                    // Second awaken.
-                    $star_class ="star_red";
-                }
-                $mon_title = $page->unit->unit->name;
-            }
-            elseif ($page->unit->unit->awakens_to =! ""){
-                // Awakeable.
-                $star_class ="star_gold";
-                $mon_title = $page->unit->unit->element . " " . $page->unit->unit->name;
-            }
-?>
             <h2>
                 <span>
-                    <?=$mon_title?>
+                    <?=$page->unit->title?>
                 </span>
             </h2>
             <article id='profile'>
                 <div id='monster_info'>
                     <div class='monster_panel'>
-                        <span class='stars'>
-<?php
-                            for ($i = 0; $i < $page->unit->stars; $i ++){
-?>
-                                <img class='star <?=$star_class?>' src='<?=$path["img"]["layout"] . "icon/star.png"?>'/>
-<?php
-                            }
-?>
-                        </span>
-                        <img title='<?=$mon_title?>' class='monster border_<?=$page->unit->unit->element_name?>' src='<?=$page->unit->unit->get_image()?>'/>
-                        <span class='level'>
-                            <?=$page->unit->level?>
-                        </span>
+                        <?=html_unit_panel($page->unit)?>
                     </div>
 <?php
                     if ($page->unit->experience_level != 0){
@@ -90,8 +54,9 @@
                         $exp_txt = "MAX";
                     }
                     $now = time();
-                    $datediff = $now - $page->unit->create_time;
-                    $datediff = floor($datediff / (60 * 60 * 24 * 1000));
+                    //$datediff = $now - $page->unit->create_time->getTimestamp();
+                    $datediff = $now - strtotime($page->unit->create_time->format('Y-m-d H:i:s'));
+                    $datediff = floor($datediff / (60 * 60 * 24));
 ?>
                     <div id='monster_details'>
                         <div id='exp'>
@@ -412,240 +377,7 @@
                 $total_runes ++;
 ?>
                 <article>
-                    <table class='rune'>
-                        <tr>
-                            <td class='icon'>
-                                <div class='rune_panel rune_slot_<?=$rune->slot?> rune_level_<?=$rune->level?> rune_quality_<?=strtolower($rune->quality_name)?> rune_original_quality_<?=strtolower($rune->original_quality_name)?> rune_ancient_<?=$rune->ancient?>'>
-                                    <img class='rune_base' src=<?=$path["img"]["layout"]?>rune/base.png/>
-                                    <img class='rune_icon' src='<?=$rune->type->get_image()?>'/>
-                                    <span class='rune_stars'>
-<?php
-                                        for ($i = 0; $i < $rune->stars; $i ++){
-?>
-                                            <img class='star' src='<?=$path["img"]["layout"] . "icon/star.png"?>'/>
-<?php
-                                        }
-?>
-                                    </span>
-                                    <span class='rune_level'>
-                                        <?=$rune->level?>
-                                    </span>
-                                </div>
-                            </td>
-                            <td class='stats'>
-                                <table>
-                                    <tr class='main_stat'>
-                                        <td class='stat'>
-<?php
-                                            if (in_array($rune->main_stat_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                $stat_name = str_replace("%", "", $rune->main_stat_name);
-                                                $stat_value = "+ " . $rune->main_stat_value . "%";
-                                            }
-                                            else{
-                                                $stat_name = $rune->main_stat_name;
-                                                $stat_value = "+ " . $rune->main_stat_value;
-                                            }
-?>
-                                            <?=$stat_name?>
-                                        </td>
-                                        <td class='value'>
-                                            <?=$stat_value?>
-                                        <td>
-                                    </tr>
-                                    <tr class='innate_stat'>
-                                        <td class='stat'>
-<?php
-                                            if (strlen($rune->innate_stat) == 0){
-                                                $stat_name = "&nbsp;";
-                                                $stat_value = "";
-                                            }
-                                            elseif (in_array($rune->innate_stat_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                $stat_name = str_replace("%", "", $rune->innate_stat_name);
-                                                $stat_value = "+ " . $rune->innate_stat_value . "%";
-                                            }
-                                            else{
-                                                $stat_name = $rune->innate_stat_name;
-                                                $stat_value = "+ " . $rune->innate_stat_value;
-                                            }
-?>
-                                            <?=$stat_name?>
-                                        </td>
-                                        <td class='value'>
-                                            <?=$stat_value?>
-                                        <td>
-                                    </tr>
-                                    <tr class=substat>
-                                        <td class='stat'>
-<?php
-                                            if (strlen($rune->substat_1) == 0){
-                                                $stat_name = "&nbsp;";
-                                                $stat_value = "";
-                                            }
-                                            elseif (in_array($rune->substat_1_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                $stat_name = str_replace("%", "", $rune->substat_1_name);
-                                                $stat_value = "+ " . $rune->substat_1_value . "%";
-                                            }
-                                            else{
-                                                $stat_name = $rune->substat_1;
-                                                $stat_value = "+ " . $rune->substat_1_value;
-                                            }
-                                            if ($rune->substat_1_craft == 1){
-                                                $craft = "craft";
-                                            }
-                                            else{
-                                                $craft = "";
-                                            }
-?>
-                                            <?=$stat_name?>
-                                        </td>
-                                        <td class='value <?=$craft?>'>
-                                            <?=$stat_value?>
-                                        <td>
-                                    </tr>
-                                    <tr class=substat>
-                                        <td class='stat'>
-<?php
-                                            if (strlen($rune->substat_2) == 0){
-                                                $stat_name = "&nbsp;";
-                                                $stat_value = "";
-                                            }
-                                            elseif (in_array($rune->substat_2_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                $stat_name = str_replace("%", "", $rune->substat_2_name);
-                                                $stat_value = "+ " . $rune->substat_2_value . "%";
-                                            }
-                                            else{
-                                                $stat_name = $rune->substat_2_name;
-                                                $stat_value = "+ " . $rune->substat_2_value;
-                                            }
-                                            if ($rune->substat_2_craft == 1){
-                                                $craft = "craft";
-                                            }
-                                            else{
-                                                $craft = "";
-                                            }
-?>
-                                            <?=$stat_name?>
-                                        </td>
-                                        <td class='value <?=$craft?>'>
-                                            <?=$stat_value?>
-                                        <td>
-                                    </tr>
-                                    <tr class=substat>
-                                        <td class='stat'>
-<?php
-                                            if (strlen($rune->substat_3) == 0){
-                                                $stat_name = "&nbsp;";
-                                                $stat_value = "";
-                                            }
-                                            elseif (in_array($rune->substat_3_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                $stat_name = str_replace("%", "", $rune->substat_3_name);
-                                                $stat_value = "+ " . $rune->substat_3_value . "%";
-                                            }
-                                            else{
-                                                $stat_name = $rune->substat_3_name;
-                                                $stat_value = "+ " . $rune->substat_3_value;
-                                            }
-                                            if ($rune->substat_3_craft == 1){
-                                                $craft = "craft";
-                                            }
-                                            else{
-                                                $craft = "";
-                                            }
-?>
-                                            <?=$stat_name?>
-                                        </td>
-                                        <td class='value <?=$craft?>'>
-                                            <?=$stat_value?>
-                                        <td>
-                                    </tr>
-                                    <tr class=substat>
-                                        <td class='stat'>
-<?php
-                                            if (strlen($rune->substat_4) == 0){
-                                                $stat_name = "&nbsp;";
-                                                $stat_value = "";
-                                            }
-                                            elseif (in_array($rune->substat_4_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                $stat_name = str_replace("%", "", $rune->substat_4_name);
-                                                $stat_value = "+ " . $rune->substat_4_value . "%";
-                                            }
-                                            else{
-                                                $stat_name = $rune->substat_4_name;
-                                                $stat_value = "+ " . $rune->substat_4_value;
-                                            }
-                                            if ($rune->substat_4_craft == 1){
-                                                $craft = "craft";
-                                            }
-                                            else{
-                                                $craft = "";
-                                            }
-?>
-                                            <?=$stat_name?>
-                                        </td>
-                                        <td class='value <?=$craft?>'>
-                                            <?=$stat_value?>
-                                        <td>
-                                    </tr>
-                                </table>
-                            </td>
-                            <td class='details'>
-                                <table class='table_details'>
-                                    <tr>
-                                        <td class='title'>
-                                            Quality:
-                                        </td>
-                                        <td class='value'>
-                                            <span class='quality quality_<?=strtolower($rune->quality_name)?>'>
-                                                <?=$rune->quality_name?>
-                                            </span>
-                                        </td>
-                                    </tr>
-                                    <tr>
-                                        <td class='title'>
-                                            Original quality:
-                                        </td>
-                                        <td class='value'>
-                                            <span class='quality quality_<?=strtolower($rune->original_quality_name)?>'>
-                                                <?=$rune->original_quality_name?>
-                                            </span>
-                                        </td>
-                                    </tr>
-                                    <tr>
-                                        <td class='title'>
-                                            Value:
-                                        </td>
-                                        <td class='value'>
-                                            <?=$rune->value?>
-                                        </td>
-                                    </tr>
-                                    <tr>
-                                        <td class='title'>
-                                            Efficiency:
-                                        </td>
-                                        <td class='value'>
-                                            <?=number_format($rune->efficiency, 2)?>%
-                                        </td>
-                                    </tr>
-                                    <tr>
-                                        <td class='title'>
-                                            Max. efficiency:
-                                        </td>
-                                        <td class='value'>
-                                            <?=number_format($rune->max_efficiency, 2)?>%
-                                        </td>
-                                    </tr>
-                                    <tr>
-                                        <td class='title'>
-                                            Reached efficiency:
-                                        </td>
-                                        <td class='value'>
-                                            <?=number_format($rune->efficiency * 100 / $rune->max_efficiency)?>%
-                                        </td>
-                                    </tr>
-                                </table>
-                            </td>
-                        </tr>
-                    </table>
+                    <?=html_rune_table($rune)?>
                 </article>
 <?php
             }

+ 15 - 61
application/view/monsters.php

@@ -1,3 +1,6 @@
+<?php
+    global $ELEMENT;
+?>
 <!DOCTYPE html>
 <html lang='en'>
     <head>
@@ -49,30 +52,30 @@
                                 $light_selected = "";
                                 $dark_selected = "";
                                 switch (strtoupper($page->filters["element"])){
-                                    case "FIRE":
+                                    case $ELEMENT["FIRE"]:
                                         $fire_selected = "selected='selected'";
                                         break;
-                                    case "WATER":
+                                    case $ELEMENT["WATER"]:
                                         $water_selected = "selected='selected'";
                                         break;
-                                    case "WIND":
+                                    case $ELEMENT["WIND"]:
                                         $wind_selected = "selected='selected'";
                                         break;
-                                    case "LIGHT":
+                                    case $ELEMENT["LIGHT"]:
                                         $light_selected = "selected='selected'";
                                         break;
-                                    case "DARK":
+                                    case $ELEMENT["DARK"]:
                                         $dark_selected = "selected='selected'";
                                         break;
                                 }
 ?>
                                 <select name='element' id='filter_type'>
                                     <option value=''>All</option>
-                                    <option value='Fire' <?=$fire_selected?>>Fire</option>
-                                    <option value='Water' <?=$water_selected?>>Water</option>
-                                    <option value='Wind' <?=$wind_selected?>>Wind</option>
-                                    <option value='Light' <?=$light_selected?>>Light</option>
-                                    <option value='Dark' <?=$dark_selected?>>Dark</option>
+                                    <option value='<?=$ELEMENT["FIRE"]?>' <?=$fire_selected?>>Fire</option>
+                                    <option value='<?=$ELEMENT["WATER"]?>' <?=$water_selected?>>Water</option>
+                                    <option value='<?=$ELEMENT["WIND"]?>' <?=$wind_selected?>>Wind</option>
+                                    <option value='<?=$ELEMENT["LIGHT"]?>' <?=$light_selected?>>Light</option>
+                                    <option value='<?=$ELEMENT["DARK"]?>' <?=$dark_selected?>>Dark</option>
                                 </select>
                             </td>
                             <td class='filter' id='filter_stars'>
@@ -125,50 +128,16 @@
                 <article>
 <?php
                     foreach ($page->monsters as $mon){
-                        if ($mon->unit->awakens_from == "" && $mon->unit->awakens_to == ""){
-                            // No to, no from, silver monster.
-                            $star_class ="star_silver";
-                            $mon_title = $mon->unit->element . " " . $mon->unit->name;
-                        }
-                        elseif ($mon->unit->awakens_from =! "" && $mon->unit->awakens_to == ""){
-                            // Already awakened
-                            if ($mon->unit->base_stars - $mon->unit->natural_stars == 1){
-                                // Normal awaken.
-                                $star_class ="star_purple";
-                            }
-                            else{
-                                // Second awaken.
-                                $star_class ="star_red";
-                            }
-                            $mon_title = $mon->unit->name;
-                        }
-                        elseif ($mon->unit->awakens_to =! ""){
-                            // Awakeable.
-                            $star_class ="star_gold";
-                            $mon_title = $mon->unit->element . " " . $mon->unit->name;
-                        }
 ?>
                         <div class='monster'>
                             <a href='/monsters/<?=$mon->id?>'>
                                 <div class='monster_panel'>
-                                    <span class='stars'>
-<?php
-                                        for ($i = 0; $i < $mon->stars; $i ++){
-?>
-                                            <img class='star <?=$star_class?>' src='<?=$path["img"]["layout"] . "icon/star.png"?>'/>
-<?php
-                                        }
-?>
-                                    </span>
-                                    <img title='<?=$mon_title?>' class='monster border_<?=$mon->unit->element_name?>' src='<?=$mon->unit->get_image()?>'/>
-                                    <span class='level'>
-                                        <?=$mon->level?>
-                                    </span>
+                                    <?=html_unit_panel($mon)?>
                                 </div>
                             </a>
                             <div class='monster_tooltip'>
                                 <h4>
-                                    <?=$mon_title?>
+                                    <?=$mon->title?>
                                 </h4>
 <?php
                                 $building_attack = floor(($mon->attack * $page->building_stats["atk"] / 100) + ($mon->attack * $page->building_stats["elm"][$mon->unit->element] / 100));
@@ -340,21 +309,6 @@
                                     $skill_num = 0;
                                     foreach ($mon->unit->skill as $skill){
                                         $cur_lvl = $mon->skill_levels[$skill_num];
-                                        /*switch ($skill_num){
-                                            
-                                            case 1:
-                                                $cur_lvl = $mon->skill_1_level;
-                                                break;
-                                            case 2:
-                                                $cur_lvl = $mon->skill_2_level;
-                                                break;
-                                            case 3:
-                                                $cur_lvl = $mon->skill_3_level;
-                                                break;
-                                            case 4:
-                                                $cur_lvl = $mon->skill_4_level;
-                                                break;
-                                        }*/
                                         $max_lvl = $skill->max_level;
                                         if ($max_lvl == $cur_lvl){
                                             $maxed = "maxed";

+ 64 - 843
application/view/report_runeupgrade.php

@@ -93,125 +93,44 @@
                             <span>Slot:</span>
                             <select multiple name='rune_slot[]' id='filter_slot'>
 <?php
-                                if (in_array(1, $page->filters["rune_slot"])){
-                                    $selected = "selected='selected'";
-                                }
-                                else{
-                                    $selected = "";
-                                }
-?>
-                                <option value='1' <?=$selected?>>1</option>
-<?php
-                                if (in_array(2, $page->filters["rune_slot"])){
-                                    $selected = "selected='selected'";
-                                }
-                                else{
-                                    $selected = "";
-                                }
-?>
-                                <option value='2' <?=$selected?>>2</option>
-<?php
-                                if (in_array(3, $page->filters["rune_slot"])){
-                                    $selected = "selected='selected'";
-                                }
-                                else{
-                                    $selected = "";
-                                }
-?>
-                                <option value='3' <?=$selected?>>3</option>
-<?php
-                                if (in_array(4, $page->filters["rune_slot"])){
-                                    $selected = "selected='selected'";
-                                }
-                                else{
-                                    $selected = "";
-                                }
-?>
-                                <option value='4' <?=$selected?>>4</option>
-<?php
-                                if (in_array(5, $page->filters["rune_slot"])){
-                                    $selected = "selected='selected'";
-                                }
-                                else{
-                                    $selected = "";
-                                }
+                                for ($i = 0; $i < 6; $i ++){
+                                    if (in_array($i, $page->filters["rune_slot"])){
+                                        $selected = "selected='selected'";
+                                    }
+                                    else{
+                                        $selected = "";
+                                    }
 ?>
-                                <option value='5' <?=$selected?>>5</option>
+                                    <option value='$i' <?=$selected?>>%i</option>
 <?php
-                                if (in_array(6, $page->filters["rune_slot"])){
-                                    $selected = "selected='selected'";
                                 }
-                                else{
-                                    $selected = "";
-                                }
-?>
-                                <option value='6' <?=$selected?>>6</option>
                             </select>
                         </td>
                         <td class='filter' colspan='3'>
                             <span>Quality:</span>
 <?php
-                            $selected_0 = "";
-                            $selected_1 = "";
-                            $selected_2 = "";
-                            $selected_3 = "";
-                            $selected_4 = "";
-                            switch (strtoupper($page->filters["rune_min_quality"])){
-                                case 0:
-                                    $selected_0 = "selected";
-                                    break;
-                                case 1:
-                                    $selected_1 = "selected";
-                                    break;
-                                case 2:
-                                    $selected_2 = "selected";
-                                    break;
-                                case 3:
-                                    $selected_3 = "selected";
-                                    break;
-                                case 4:
-                                    $selected_4 = "selected";
-                                    break;
-                            }
+
+                            $selected = Array("", "", "", "", "");
+                            $selected[$page->filters["rune_min_quality"]] = "selected";
 ?>
                             <select name='rune_min_quality' id='filter_quality_min'>
-                                <option value='0' <?=$selected_0?>>Normal</option>
-                                <option value='1' <?=$selected_1?>>Magic</option>
-                                <option value='2' <?=$selected_2?>>Rare</option>
-                                <option value='3' <?=$selected_3?>>Hero</option>
-                                <option value='4' <?=$selected_4?>>Legend</option>
+                                <option value='0' <?=$selected[0]?>>Normal</option>
+                                <option value='1' <?=$selected[1]?>>Magic</option>
+                                <option value='2' <?=$selected[2]?>>Rare</option>
+                                <option value='3' <?=$selected[3]?>>Hero</option>
+                                <option value='4' <?=$selected[4]?>>Legend</option>
                             </select>
                             -
 <?php
-                            $selected_0 = "";
-                            $selected_1 = "";
-                            $selected_2 = "";
-                            $selected_3 = "";
-                            $selected_4 = "";
-                            switch (strtoupper($page->filters["rune_max_quality"])){
-                                case 0:
-                                    $selected_0 = "selected";
-                                    break;
-                                case 1:
-                                    $selected_1 = "selected";
-                                    break;
-                                case 2:
-                                    $selected_2 = "selected";
-                                    break;
-                                case 3:
-                                    $selected_3 = "selected";
-                                    break;
-                                case 4:
-                                    $selected_4 = "selected";
-                                    break;
-                            }
+                            $selected = Array("", "", "", "", "");
+                            $selected[$page->filters["rune_max_quality"]] = "selected";
 ?>
                             <select name='rune_max_quality' id='filter_quality_max'>
-                                <option value='0' <?=$selected_0?>>Normal</option>
-                                <option value='1' <?=$selected_1?>>Magic</option>
-                                <option value='2' <?=$selected_2?>>Rare</option>
-                                <option value='3' <?=$selected_3?>>Hero</option>
-                                <option value='4' <?=$selected_4?>>Legend</option>
+                                <option value='0' <?=$selected[0]?>>Normal</option>
+                                <option value='1' <?=$selected[1]?>>Magic</option>
+                                <option value='2' <?=$selected[2]?>>Rare</option>
+                                <option value='3' <?=$selected[3]?>>Hero</option>
+                                <option value='4' <?=$selected[4]?>>Legend</option>
                             </select>
                         </td>
                     </tr>
@@ -219,67 +138,27 @@
                         <td class='filter' colspan='3'>
                             <span>Original quality:</span>
 <?php
-                            $selected_0 = "";
-                            $selected_1 = "";
-                            $selected_2 = "";
-                            $selected_3 = "";
-                            $selected_4 = "";
-                            switch (strtoupper($page->filters["rune_min_original_quality"])){
-                                case 0:
-                                    $selected_0 = "selected";
-                                    break;
-                                case 1:
-                                    $selected_1 = "selected";
-                                    break;
-                                case 2:
-                                    $selected_2 = "selected";
-                                    break;
-                                case 3:
-                                    $selected_3 = "selected";
-                                    break;
-                                case 4:
-                                    $selected_4 = "selected";
-                                    break;
-                            }
+                            $selected = Array("", "", "", "", "");
+                            $selected[$page->filters["rune_min_original_quality"]] = "selected";
 ?>
                             <select name='rune_min_original_quality' id='filter_original_quality_min'>
-                                <option value='0' <?=$selected_0?>>Normal</option>
-                                <option value='1' <?=$selected_1?>>Magic</option>
-                                <option value='2' <?=$selected_2?>>Rare</option>
-                                <option value='3' <?=$selected_3?>>Hero</option>
-                                <option value='4' <?=$selected_4?>>Legend</option>
+                                <option value='0' <?=$selected[0]?>>Normal</option>
+                                <option value='1' <?=$selected[1]?>>Magic</option>
+                                <option value='2' <?=$selected[2]?>>Rare</option>
+                                <option value='3' <?=$selected[3]?>>Hero</option>
+                                <option value='4' <?=$selected[4]?>>Legend</option>
                             </select>
                             -
 <?php
-                            $selected_0 = "";
-                            $selected_1 = "";
-                            $selected_2 = "";
-                            $selected_3 = "";
-                            $selected_4 = "";
-                            switch (strtoupper($page->filters["rune_max_quality"])){
-                                case 0:
-                                    $selected_0 = "selected";
-                                    break;
-                                case 1:
-                                    $selected_1 = "selected";
-                                    break;
-                                case 2:
-                                    $selected_2 = "selected";
-                                    break;
-                                case 3:
-                                    $selected_3 = "selected";
-                                    break;
-                                case 4:
-                                    $selected_4 = "selected";
-                                    break;
-                            }
+                            $selected = Array("", "", "", "", "");
+                            $selected[$page->filters["rune_max_original_quality"]] = "selected";
 ?>
                             <select name='rune_max_original_quality' id='filter_original_quality_max'>
-                                <option value='0' <?=$selected_0?>>Normal</option>
-                                <option value='1' <?=$selected_1?>>Magic</option>
-                                <option value='2' <?=$selected_2?>>Rare</option>
-                                <option value='3' <?=$selected_3?>>Hero</option>
-                                <option value='4' <?=$selected_4?>>Legend</option>
+                                <option value='0' <?=$selected[0]?>>Normal</option>
+                                <option value='1' <?=$selected[1]?>>Magic</option>
+                                <option value='2' <?=$selected[2]?>>Rare</option>
+                                <option value='3' <?=$selected[3]?>>Hero</option>
+                                <option value='4' <?=$selected[4]?>>Legend</option>
                             </select>
                         </td>
                     </tr>
@@ -312,35 +191,15 @@
                         <td class='filter filter_separator' colspan='2'>
                             <span>Min. O. quality:</span>
 <?php
-                            $selected_0 = "";
-                            $selected_1 = "";
-                            $selected_2 = "";
-                            $selected_3 = "";
-                            $selected_4 = "";
-                            switch (strtoupper($page->filters["alternative_min_original_quality"])){
-                                case 0:
-                                    $selected_0 = "selected";
-                                    break;
-                                case 1:
-                                    $selected_1 = "selected";
-                                    break;
-                                case 2:
-                                    $selected_2 = "selected";
-                                    break;
-                                case 3:
-                                    $selected_3 = "selected";
-                                    break;
-                                case 4:
-                                    $selected_4 = "selected";
-                                    break;
-                            }
+                            $selected = Array("", "", "", "", "");
+                            $selected[$page->filters["alternative_min_original_quality"]] = "selected";
 ?>
                             <select name='alternative_min_original_quality' id='filter_original_quality_min'>
-                                <option value='0' <?=$selected_0?>>Normal</option>
-                                <option value='1' <?=$selected_1?>>Magic</option>
-                                <option value='2' <?=$selected_2?>>Rare</option>
-                                <option value='3' <?=$selected_3?>>Hero</option>
-                                <option value='4' <?=$selected_4?>>Legend</option>
+                                <option value='0' <?=$selected[0]?>>Normal</option>
+                                <option value='1' <?=$selected[1]?>>Magic</option>
+                                <option value='2' <?=$selected[2]?>>Rare</option>
+                                <option value='3' <?=$selected[3]?>>Hero</option>
+                                <option value='4' <?=$selected[4]?>>Legend</option>
                             </select>
                         </td>
                         <td class='filter filter_separator'>
@@ -352,40 +211,17 @@
                         <td class='filter' colspan='4'>
                             <span>Condition:</span>
 <?php
-                            $selected_0 = "";
-                            $selected_1 = "";
-                            $selected_2 = "";
-                            $selected_3 = "";
-                            $selected_4 = "";
-                            $selected_5 = "";
-                            switch (strtoupper($page->filters["alternative_condition"])){
-                                case 0:
-                                    $selected_0 = "selected";
-                                    break;
-                                case 1:
-                                    $selected_1 = "selected";
-                                    break;
-                                case 2:
-                                    $selected_2 = "selected";
-                                    break;
-                                case 3:
-                                    $selected_3 = "selected";
-                                    break;
-                                case 4:
-                                    $selected_4 = "selected";
-                                    break;
-                                case 5:
-                                    $selected_5 = "selected";
-                                    break;
-                            }
+                            $selected = Array("", "", "", "", "");
+                            $selected[$page->filters["alternative_condition"]] = "selected";
+
 ?>
                             <select name='alternative_condition'>
-                                <option value='0' <?=$selected_0?>>Higher grade, any quality
-                                <option value='1' <?=$selected_1?>>Higher grade or higher quality
-                                <option value='2' <?=$selected_2?>>Equal or higher grade and equal or higher quality</option>
-                                <option value='3' <?=$selected_3?>>Equal or higher grade and higher quality</option>
-                                <option value='4' <?=$selected_4?>>Equal grade and equal or higher quality</option>
-                                <option value='5' <?=$selected_5?>>Higher grade and higher quality</option>
+                                <option value='0' <?=$selected[0]?>>Higher grade, any quality
+                                <option value='1' <?=$selected[1]?>>Higher grade or higher quality
+                                <option value='2' <?=$selected[2]?>>Equal or higher grade and equal or higher quality</option>
+                                <option value='3' <?=$selected[3]?>>Equal or higher grade and higher quality</option>
+                                <option value='4' <?=$selected[4]?>>Equal grade and equal or higher quality</option>
+                                <option value='5' <?=$selected[5]?>>Higher grade and higher quality</option>
                             </select>
                         </td>
                     </tr>
@@ -393,29 +229,13 @@
                         <td class='filter' colspan='4'>
                             <span>Source:</span>
 <?php
-                            $selected_0 = "";
-                            $selected_1 = "";
-                            $selected_2 = "";
-                            $selected_3 = "";
-                            switch (strtoupper($page->filters["alternative_source"])){
-                                case 0:
-                                    $selected_0 = "selected";
-                                    break;
-                                case 1:
-                                    $selected_1 = "selected";
-                                    break;
-                                case 2:
-                                    $selected_2 = "selected";
-                                    break;
-                                case 3:
-                                    $selected_3 = "selected";
-                                    break;
-                            }
+                            $selected = Array("", "", "", "");
+                            $selected[$page->filters["alternative_source"]] = "selected";
 ?>
                             <select name='alternative_source'>
-                                <option value='0' <?=$selected_0?>>Inventory only</option>
-                                <option value='1' <?=$selected_1?>>Inventory or assigned to a lower grade monster</option>
-                                <option value='2' <?=$selected_2?>>Any</option>
+                                <option value='0' <?=$selected[0]?>>Inventory only</option>
+                                <option value='1' <?=$selected[1]?>>Inventory or assigned to a lower grade monster</option>
+                                <option value='2' <?=$selected[2]?>>Any</option>
                             </select>
                         </td>
                     </tr>
@@ -427,52 +247,18 @@
         </section> <!-- #filters -->
 <?php
             foreach ($page->upgrades as $upgrade){
-                if ($upgrade["unit"]->unit->awakens_from == "" && $upgrade["unit"]->unit->awakens_to == ""){
-                    // No to, no from, silver monster.
-                    $star_class ="star_silver";
-                    $mon_title = $upgrade["unit"]->unit->element_name . " " . $upgrade["unit"]->unit->name;
-                }
-                elseif ($upgrade["unit"]->unit->awakens_from =! "" && $upgrade["unit"]->unit->awakens_to == ""){
-                    // Already awakened
-                    if ($upgrade["unit"]->unit->base_stars - $upgrade["unit"]->unit->natural_stars == 1){
-                        // Normal awaken.
-                        $star_class ="star_purple";
-                    }
-                    else{
-                        // Second awaken.
-                        $star_class ="star_red";
-                    }
-                    $mon_title = $upgrade["unit"]->unit->name;
-                }
-                elseif ($upgrade["unit"]->unit->awakens_to =! ""){
-                    // Awakeable.
-                    $star_class ="star_gold";
-                    $mon_title = $upgrade["unit"]->unit->element . " " . $upgrade["unit"]->unit->name;
-                }
 ?>
             <section class='content'>
                 <h2>
                     <span>
-                        <?=$mon_title?>
+                        <?=$upgrade["unit"]->title?>
                     </span>
                 </h2>
                 <article>
                     <div class='monster'>
                         <div class='profile'>
                             <div class='monster_panel'>
-                                <span class='stars'>
-<?php
-                                        for ($i = 0; $i < $upgrade["unit"]->stars; $i ++){
-?>
-                                        <img class='star <?=$star_class?>' src='<?=$path["img"]["layout"] . "icon/star.png"?>'/>
-<?php
-                                        }
-?>
-                                </span>
-                                <img title='<?=$mon_title?>' class='monster border_<?=$upgrade["unit"]->unit->element_name?>' src='<?=$upgrade["unit"]->unit->get_image()?>'/>
-                                <span class='level'>
-                                    Lv. <?=$upgrade["unit"]->level?>
-                                </span>
+                                <?=html_unit_panel($upgrade["unit"])?>
                             </div>
                         </div> <!-- .profile -->
                     </div>
@@ -480,581 +266,16 @@
 <?php
                         foreach ($upgrade["upgrade"] as $rupgrade){
 ?>
-                        <table class='rune'>
-                            <tr>
-                                <td class='icon'>
-                                    <div class='rune_panel rune_slot_<?=$rupgrade["rune"]->slot?> rune_level_<?=$rupgrade["rune"]->level?> rune_quality_<?=strtolower($rupgrade["rune"]->quality_name)?> rune_original_quality_<?=strtolower($rupgrade["rune"]->original_quality_name)?> rune_ancient_<?=$rupgrade["rune"]->ancient?>'>
-                                        <img class='rune_base' src='<?=$path["img"]["layout"]?>rune/base.png'/>
-                                        <img class='rune_icon' src='<?=$rupgrade["rune"]->type->get_image()?>'/>
-                                        <span class='rune_stars'>
-<?php
-                                                for ($i = 0; $i < $rupgrade["rune"]->stars; $i ++){
-?>
-                                                <img class='star' src='<?=$path["img"]["layout"] . "icon/star.png"?>'/>
-<?php
-                                                }
-?>
-                                        </span>
-                                        <span class='rune_level'>
-                                            <?=$rupgrade["rune"]->level?>
-                                        </span>
-                                    </div> <!-- .rune_panel -->
-                                </td>
-                                <td class='stats'>
-                                    <table>
-                                        <tr class='main_stat'>
-                                            <td class='stat'>
-<?php
-                                                if (in_array($rupgrade["rune"]->main_stat_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                    $stat_name = str_replace("%", "", $rupgrade["rune"]->main_stat_name);
-                                                    $stat_value = "+ " . $rupgrade["rune"]->main_stat_value . "%";
-                                                }
-                                                else{
-                                                    $stat_name = $rupgrade["rune"]->main_stat_name;
-                                                    $stat_value = "+ " . $rupgrade["rune"]->main_stat_value;
-                                                }
-?>
-                                                <?=$stat_name?>
-                                            </td>
-                                            <td class='value'>
-                                                <?=$stat_value?>
-                                            </td>
-                                        </tr>
-                                        <tr class='innate_stat'>
-                                            <td class='stat'>
-<?php
-                                                if (strlen($rupgrade["rune"]->innate_stat_name) == 0){
-                                                    $stat_name = "&nbsp;";
-                                                    $stat_value = "";
-                                                }
-                                                elseif (in_array($rupgrade["rune"]->innate_stat_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                    $stat_name = str_replace("%", "", $rupgrade["rune"]->innate_stat_name);
-                                                    $stat_value = "+ " . $rupgrade["rune"]->innate_stat_value . "%";
-                                                }
-                                                else{
-                                                    $stat_name = $rupgrade["rune"]->innate_stat_name;
-                                                    $stat_value = "+ " . $rupgrade["rune"]->innate_stat_value;
-                                                }
-?>
-                                                <?=$stat_name?>
-                                            </td>
-                                            <td class='value'>
-                                                <?=$stat_value?>
-                                            </td>
-                                        </tr>
-                                        <tr class=substat>
-                                            <td class='stat'>
-<?php
-                                                    if (strlen($rupgrade["rune"]->substat_1_name) == 0){
-                                                        $stat_name = "&nbsp;";
-                                                        $stat_value = "";
-                                                    }
-                                                    elseif (in_array($rupgrade["rune"]->substat_1_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                        $stat_name = str_replace("%", "", $rupgrade["rune"]->substat_1_name);
-                                                        $stat_value = "+ " . $rupgrade["rune"]->substat_1_value . "%";
-                                                    }
-                                                    else{
-                                                        $stat_name = $rupgrade["rune"]->substat_1_name;
-                                                        $stat_value = "+ " . $rupgrade["rune"]->substat_1_value;
-                                                    }
-                                                    $grind = "";
-                                                    if ($rupgrade["rune"]->substat_1_grind > 0){
-                                                        $grind = "+" . $rupgrade["rune"]->substat_1_grind;
-                                                        if (in_array($rupgrade["rune"]->substat_1_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                            $grind = $grind . "%";
-                                                        }
-                                                    }
-?>
-                                                <?=$stat_name?>
-                                            </td>
-                                            <td class='value'>
-                                                <?=$stat_value?>
-                                                <span class='grind grind_<?=$grind?>'>
-                                                    <?=$grind?>
-                                                </span>
-<?php
-                                                if ($rupgrade["rune"]->substat_1_enchant == 1){
-?>
-                                                    <img title='Enchanted' src='<?=$path["img"]["layout"]?>rune/enchanted.png'/>
-<?php
-                                                }
-?>
-                                            </td>
-                                        </tr>
-                                        <tr class=substat>
-                                            <td class='stat'>
-<?php
-                                                if (strlen($rupgrade["rune"]->substat_2_name) == 0){
-                                                    $stat_name = "&nbsp;";
-                                                    $stat_value = "";
-                                                }
-                                                elseif (in_array($rupgrade["rune"]->substat_2_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                    $stat_name = str_replace("%", "", $rupgrade["rune"]->substat_2_name);
-                                                    $stat_value = "+ " . $rupgrade["rune"]->substat_2_value . "%";
-                                                }
-                                                else{
-                                                    $stat_name = $rupgrade["rune"]->substat_2_name;
-                                                    $stat_value = "+ " . $rupgrade["rune"]->substat_2_value;
-                                                }
-                                                $grind = "";
-                                                if ($rupgrade["rune"]->substat_2_grind > 0){
-                                                    $grind = "+" . $rupgrade["rune"]->substat_2_grind;
-                                                    if (in_array($rupgrade["rune"]->substat_2_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                        $grind = $grind . "%";
-                                                    }
-                                                }
-?>
-                                                <?=$stat_name?>
-                                            </td>
-                                            <td class='value'>
-                                                <?=$stat_value?>
-                                                <span class='grind grind_<?=$grind?>'>
-                                                    <?=$grind?>
-                                                </span>
-<?php
-                                                if ($rupgrade["rune"]->substat_2_enchant == 1){
-?>
-                                                    <img title='Enchanted' src='<?=$path["img"]["layout"]?>rune/enchanted.png'/>
-<?php
-                                                }
-?>
-                                            </td>
-                                        </tr>
-                                        <tr class=substat>
-                                            <td class='stat'>
-<?php
-                                                if (strlen($rupgrade["rune"]->substat_3_name) == 0){
-                                                    $stat_name = "&nbsp;";
-                                                    $stat_value = "";
-                                                }
-                                                elseif (in_array($rupgrade["rune"]->substat_3_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                    $stat_name = str_replace("%", "", $rupgrade["rune"]->substat_3_name);
-                                                    $stat_value = "+ " . $rupgrade["rune"]->substat_3_value . "%";
-                                                }
-                                                else{
-                                                    $stat_name = $rupgrade["rune"]->substat_3_name;
-                                                    $stat_value = "+ " . $rupgrade["rune"]->substat_3_value;
-                                                }
-                                                $grind = "";
-                                                if ($rupgrade["rune"]->substat_3_grind > 0){
-                                                    $grind = "+" . $rupgrade["rune"]->substat_3_grind;
-                                                    if (in_array($rupgrade["rune"]->substat_3_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                        $grind = $grind . "%";
-                                                    }
-                                                }
-?>
-                                                <?=$stat_name?>
-                                            </td>
-                                            <td class='value'>
-                                                <?=$stat_value?>
-                                                <span class='grind grind_<?=$grind?>'>
-                                                    <?=$grind?>
-                                                </span>
-<?php
-                                                if ($rupgrade["rune"]->substat_3_enchant == 1){
-?>
-                                                    <img title='Enchanted' src='<?=$path["img"]["layout"]?>rune/enchanted.png'/>
-<?php
-                                                }
-?>
-                                            </td>
-                                        </tr>
-                                        <tr class=substat>
-                                            <td class='stat'>
-<?php
-                                                if (strlen($rupgrade["rune"]->substat_4_name) == 0){
-                                                    $stat_name = "&nbsp;";
-                                                    $stat_value = "";
-                                                }
-                                                elseif (in_array($rupgrade["rune"]->substat_4_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                    $stat_name = str_replace("%", "", $rupgrade["rune"]->substat_4_name);
-                                                    $stat_value = "+ " . $rupgrade["rune"]->substat_4_value . "%";
-                                                }
-                                                else{
-                                                    $stat_name = $rupgrade["rune"]->substat_4_name;
-                                                    $stat_value = "+ " . $rupgrade["rune"]->substat_4_value;
-                                                }
-                                                $grind = "";
-                                                if ($rupgrade["rune"]->substat_4_grind > 0){
-                                                    $grind = "+" . $rupgrade["rune"]->substat_4_grind;
-                                                    if (in_array($rupgrade["rune"]->substat_4_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                        $grind = $grind . "%";
-                                                    }
-                                                }
-                                                ?>
-                                                <?=$stat_name?>
-                                            </td>
-                                            <td class='value'>
-                                                <?=$stat_value?>
-                                                <span class='grind grind_<?=$grind?>'>
-                                                    <?=$grind?>
-                                                </span>
-<?php
-                                                if ($rupgrade["rune"]->substat_4_enchant == 1){
-?>
-                                                    <img title='Enchanted' src='<?=$path["img"]["layout"]?>rune/enchanted.png'/>
-<?php
-                                                }
-?>
-                                            </td>
-                                        </tr>
-                                    </table>
-                                </td>
-                                <td class='details'>
-                                    <table class='table_details'>
-                                        <tr>
-                                            <td class='title'>
-                                                Quality:
-                                            </td>
-                                            <td class='value'>
-                                                <span class='quality quality_<?=strtolower($rupgrade["rune"]->quality_name)?>'>
-                                                    <?=$rupgrade["rune"]->quality_name?>
-                                                </span>
-                                            </td>
-                                        </tr>
-                                        <tr>
-                                            <td class='title'>
-                                                Original quality:
-                                            </td>
-                                            <td class='value'>
-                                                <span class='quality quality_<?=strtolower($rupgrade["rune"]->original_quality_name)?>'>
-                                                    <?=$rupgrade["rune"]->original_quality_name?>
-                                                </span>
-                                            </td>
-                                        </tr>
-                                        <tr>
-                                            <td class='title'>
-                                                Value:
-                                            </td>
-                                            <td class='value'>
-                                                <?=$rupgrade["rune"]->value?>
-                                            </td>
-                                        </tr>
-                                        <tr>
-                                            <td class='title'>
-                                                Efficiency:
-                                            </td>
-                                            <td class='value'>
-                                                <?=number_format($rupgrade["rune"]->efficiency, 2)?>%
-                                            </td>
-                                        </tr>
-                                        <tr>
-                                            <td class='title'>
-                                                Max. efficiency:
-                                            </td>
-                                            <td class='value'>
-                                                <?=number_format($rupgrade["rune"]->max_efficiency, 2)?>%
-                                            </td>
-                                        </tr>
-                                        <tr>
-                                            <td class='title'>
-                                                Reached efficiency:
-                                            </td>
-                                            <td class='value'>
-                                                <?=number_format($rupgrade["rune"]->efficiency * 100 / $rupgrade["rune"]->max_efficiency)?>%
-                                            </td>
-                                        </tr>
-                                    </table>
-                                </td>
-                            </tr>
-                        </table> <!-- .rune -->
-                        <div class='alternatives'>
+                            <?=html_rune_table($rupgrade["rune"])?>
+                            <div class='alternatives'>
 <?php
                                 foreach ($rupgrade["alternative"] as $alternative){
 ?>
-                                <table class='rune alternative'>
-                                    <tr>
-                                        <td class='icon'>
-                                            <div class='rune_panel rune_slot_<?=$alternative->slot?> rune_level_<?=$alternative->level?> rune_quality_<?=strtolower($alternative->quality_name)?> rune_original_quality_<?=strtolower($alternative->original_quality_name)?> rune_ancient_<?=$alternative->ancient?>'>
-                                                <img class='rune_base' src='<?=$path["img"]["layout"]?>rune/base.png'/>
-                                                <img class='rune_icon' src='<?=$alternative->type->get_image()?>'/>
-                                                <span class='rune_stars'>
-<?php
-                                                        for ($i = 0; $i < $alternative->stars; $i ++){
-?>
-                                                        <img class='star' src='<?=$path["img"]["layout"] . "icon/star.png"?>'/>
-<?php
-                                                        }
-?>
-                                                </span>
-                                                <span class='rune_level'>
-                                                    <?=$alternative->level?>
-                                                </span>
-                                            </div> <!-- .rune_panel -->
-<?php
-                                            if ($page->filters["alternative_source"] > 0 && null != $alternative->assigned_to){
-?>
-                                                <div class='assigned'>
-                                                    <a target='blank' href='/monsters/<?=$alternative->assigned_to->id?>'>
-                                                        <img title='<?=$alternative->assigned_to->unit->name?>' class='monster_image border_<?=$alternative->assigned_to->unit->element?>' src='<?=$alternative->assigned_to->unit->get_image()?>'/>
-                                                    </a>
-                                                </div>
-<?php
-                                            }
-?>
-                                        </td>
-                                        <td class='stats'>
-                                            <table>
-                                                <tr class='main_stat'>
-                                                    <td class='stat'>
-<?php
-                                                            if (in_array($alternative->main_stat_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                                $stat_name = str_replace("%", "", $alternative->main_stat_name);
-                                                                $stat_value = "+ " . $alternative->main_stat_value . "%";
-                                                            }
-                                                            else{
-                                                                $stat_name = $alternative->main_stat_name;
-                                                                $stat_value = "+ " . $alternative->main_stat_value;
-                                                            }
-?>
-                                                        <?=$stat_name?>
-                                                    </td>
-                                                    <td class='value'>
-                                                        <?=$stat_value?>
-                                                    </td>
-                                                </tr>
-                                                <tr class='innate_stat'>
-                                                    <td class='stat'>
-<?php
-                                                            if (strlen($alternative->innate_stat_name) == 0){
-                                                                $stat_name = "&nbsp;";
-                                                                $stat_value = "";
-                                                            }
-                                                            elseif (in_array($alternative->innate_stat_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                                $stat_name = str_replace("%", "", $alternative->innate_stat_name);
-                                                                $stat_value = "+ " . $alternative->innate_stat_value . "%";
-                                                            }
-                                                            else{
-                                                                $stat_name = $alternative->innate_stat_name;
-                                                                $stat_value = "+ " . $alternative->innate_stat_value;
-                                                            }
-?>
-                                                        <?=$stat_name?>
-                                                    </td>
-                                                    <td class='value'>
-                                                        <?=$stat_value?>
-                                                    </td>
-                                                </tr>
-                                                <tr class=substat>
-                                                    <td class='stat'>
-<?php
-                                                            if (strlen($alternative->substat_1_name) == 0){
-                                                                $stat_name = "&nbsp;";
-                                                                $stat_value = "";
-                                                            }
-                                                            elseif (in_array($alternative->substat_1_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                                $stat_name = str_replace("%", "", $alternative->substat_1_name);
-                                                                $stat_value = "+ " . $alternative->substat_1_value . "%";
-                                                            }
-                                                            else{
-                                                                $stat_name = $alternative->substat_1_name;
-                                                                $stat_value = "+ " . $alternative->substat_1_value;
-                                                            }
-                                                            $grind = "";
-                                                            if ($alternative->substat_1_grind > 0){
-                                                                $grind = "+" . $alternative->substat_1_grind;
-                                                                if (in_array($alternative->substat_1_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                                    $grind = $grind . "%";
-                                                                }
-                                                            }
-?>
-                                                        <?=$stat_name?>
-                                                    </td>
-                                                    <td class='value'>
-                                                        <?=$stat_value?>
-                                                        <span class='grind grind_<?=$grind?>'>
-                                                            <?=$grind?>
-                                                        </span>
-<?php
-                                                        if ($alternative->substat_1_enchant == 1){
-?>
-                                                            <img title='Enchanted' src='<?=$path["img"]["layout"]?>rune/enchanted.png'/>
-<?php
-                                                        }
-?>
-                                                    </td>
-                                                </tr>
-                                                <tr class=substat>
-                                                    <td class='stat'>
-<?php
-                                                            if (strlen($alternative->substat_2_name) == 0){
-                                                                $stat_name = "&nbsp;";
-                                                                $stat_value = "";
-                                                            }
-                                                            elseif (in_array($alternative->substat_2_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                                $stat_name = str_replace("%", "", $alternative->substat_2_name);
-                                                                $stat_value = "+ " . $alternative->substat_2_value . "%";
-                                                            }
-                                                            else{
-                                                                $stat_name = $alternative->substat_2_name;
-                                                                $stat_value = "+ " . $alternative->substat_2_value;
-                                                            }
-                                                            $grind = "";
-                                                            if ($alternative->substat_2_grind > 0){
-                                                                $grind = "+" . $alternative->substat_2_grind;
-                                                                if (in_array($alternative->substat_2_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                                    $grind = $grind . "%";
-                                                                }
-                                                            }
-                                                            ?>
-                                                        <?=$stat_name?>
-                                                    </td>
-                                                    <td class='value'>
-                                                        <?=$stat_value?>
-                                                        <span class='grind grind_<?=$grind?>'>
-                                                            <?=$grind?>
-                                                        </span>
-<?php
-                                                        if ($alternative->substat_2_enchant == 1){
-?>
-                                                            <img title='Enchanted' src='<?=$path["img"]["layout"]?>rune/enchanted.png'/>
-<?php
-                                                        }
-?>
-                                                    </td>
-                                                </tr>
-                                                <tr class=substat>
-                                                    <td class='stat'>
-<?php
-                                                            if (strlen($alternative->substat_3_name) == 0){
-                                                                $stat_name = "&nbsp;";
-                                                                $stat_value = "";
-                                                            }
-                                                            elseif (in_array($alternative->substat_3_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                                $stat_name = str_replace("%", "", $alternative->substat_3_name);
-                                                                $stat_value = "+ " . $alternative->substat_3_value . "%";
-                                                            }
-                                                            else{
-                                                                $stat_name = $alternative->substat_3_name;
-                                                                $stat_value = "+ " . $alternative->substat_3_value;
-                                                            }
-                                                            $grind = "";
-                                                            if ($alternative->substat_3_grind > 0){
-                                                                $grind = "+" . $alternative->substat_3_grind;
-                                                                if (in_array($alternative->substat_3_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                                    $grind = $grind . "%";
-                                                                }
-                                                            }
-                                                            ?>
-                                                        <?=$stat_name?>
-                                                    </td>
-                                                    <td class='value'>
-                                                        <?=$stat_value?>
-                                                        <span class='grind grind_<?=$grind?>'>
-                                                            <?=$grind?>
-                                                        </span>
-<?php
-                                                        if ($alternative->substat_3_enchant == 1){
-?>
-                                                            <img title='Enchanted' src='<?=$path["img"]["layout"]?>rune/enchanted.png'/>
-<?php
-                                                        }
-?>
-                                                    </td>
-                                                </tr>
-                                                <tr class=substat>
-                                                    <td class='stat'>
-<?php
-                                                            if (strlen($alternative->substat_4_name) == 0){
-                                                                $stat_name = "&nbsp;";
-                                                                $stat_value = "";
-                                                            }
-                                                            elseif (in_array($alternative->substat_4_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                                $stat_name = str_replace("%", "", $alternative->substat_4_name);
-                                                                $stat_value = "+ " . $alternative->substat_4_value . "%";
-                                                            }
-                                                            else{
-                                                                $stat_name = $alternative->substat_4_name;
-                                                                $stat_value = "+ " . $alternative->substat_4_value;
-                                                            }
-                                                            $grind = "";
-                                                            if ($alternative->substat_4_grind > 0){
-                                                                $grind = "+" . $alternative->substat_4_grind;
-                                                                if (in_array($alternative->substat_4_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                                    $grind = $grind . "%";
-                                                                }
-                                                            }
-                                                            ?>
-                                                        <?=$stat_name?>
-                                                    </td>
-                                                    <td class='value'>
-                                                        <?=$stat_value?>
-                                                        <span class='grind grind_<?=$grind?>'>
-                                                            <?=$grind?>
-                                                        </span>
-<?php
-                                                        if ($alternative->substat_4_enchant == 1){
-?>
-                                                            <img title='Enchanted' src='<?=$path["img"]["layout"]?>rune/enchanted.png'/>
-<?php
-                                                        }
-?>
-                                                    </td>
-                                                </tr>
-                                            </table>
-                                        </td>
-                                        <td class='details'>
-                                            <table class='table_details'>
-                                                <tr>
-                                                    <td class='title'>
-                                                        Quality:
-                                                    </td>
-                                                    <td class='value'>
-                                                        <span class='quality quality_<?=strtolower($alternative->quality_name)?>'>
-                                                            <?=$alternative->quality_name?>
-                                                        </span>
-                                                    </td>
-                                                </tr>
-                                                <tr>
-                                                    <td class='title'>
-                                                        Original quality:
-                                                    </td>
-                                                    <td class='value'>
-                                                        <span class='quality quality_<?=strtolower($alternative->original_quality_name)?>'>
-                                                            <?=$alternative->original_quality_name?>
-                                                        </span>
-                                                    </td>
-                                                </tr>
-                                                <tr>
-                                                    <td class='title'>
-                                                        Value:
-                                                    </td>
-                                                    <td class='value'>
-                                                        <?=$alternative->value?>
-                                                    </td>
-                                                </tr>
-                                                <tr>
-                                                    <td class='title'>
-                                                        Efficiency:
-                                                    </td>
-                                                    <td class='value'>
-                                                        <?=number_format($alternative->efficiency, 2)?>%
-                                                    </td>
-                                                </tr>
-                                                <tr>
-                                                    <td class='title'>
-                                                        Max. efficiency:
-                                                    </td>
-                                                    <td class='value'>
-                                                        <?=number_format($alternative->max_efficiency, 2)?>%
-                                                    </td>
-                                                </tr>
-                                                <tr>
-                                                    <td class='title'>
-                                                        Reached efficiency:
-                                                    </td>
-                                                    <td class='value'>
-                                                        <?=number_format($alternative->efficiency * 100 / $alternative->max_efficiency)?>%
-                                                    </td>
-                                                </tr>
-                                            </table>
-                                        </td>
-                                    </tr>
-                                </table> <!-- .alternative -->
+                                    <?=html_rune_table($alternative, $alternative->assigned_to)?>
 <?php
                                 }
 ?>
-                        </div>
+                            </div>
 <?php
                         }
 ?>

+ 9 - 9
application/view/report_skillup.php

@@ -230,15 +230,15 @@
                                     $maxed = "";
                                 }
 ?>
-                            <div class='skill'>
-                                <img title='<?=$skill->description?>' src='<?=$skill->get_image()?>'/>
-                                <span class='skill_level <?=$maxed?>'>
-                                    <?=$cur_lvl?>/<?=$max_lvl?>
-                                </span>
-                                <span class='skill_name'>
-                                    <?=$skill->name?>
-                                </span>
-                            </div>
+                                <div class='skill'>
+                                    <img title='<?=$skill->description?>' src='<?=$skill->get_image()?>'/>
+                                    <span class='skill_level <?=$maxed?>'>
+                                        <?=$cur_lvl?>/<?=$max_lvl?>
+                                    </span>
+                                    <span class='skill_name'>
+                                        <?=$skill->name?>
+                                    </span>
+                                </div>
 <?php
                                 $skill_num ++;
                             }

+ 44 - 0
data.sql

@@ -32,6 +32,10 @@ CREATE TABLE IF NOT EXISTS k_craft(id INT, name TEXT);
 
 CREATE TABLE IF NOT EXISTS k_experience(stars INT, level INT, exp INT);
 
+CREATE TABLE IF NOT EXISTS k_guild_skill_group(id INT, name TEXT, description TEXT);
+
+CREATE TABLE IF NOT EXISTS k_guild_skill(id INT, skill_group INT, level INT, effect TEXT);
+
 
 INSERT INTO k_difficulty VALUES (0, 'Easy');
 INSERT INTO k_difficulty VALUES (1, 'Normal');
@@ -621,3 +625,43 @@ INSERT INTO k_experience VALUES (6, 37, 92332);
 INSERT INTO k_experience VALUES (6, 38, 101712);
 INSERT INTO k_experience VALUES (6, 39, 112046);
 INSERT INTO k_experience VALUES (6, 40, 0);
+
+INSERT INTO k_guild_skill_group VALUES (1, 'Crest of Punishment', 'Increases the stats of ally Monsters in Cairos Dungeon');
+INSERT INTO k_guild_skill_group VALUES (2, 'Aura of Purification', 'Increases the stats of ally Monsters in Rift Beast Battles');
+INSERT INTO k_guild_skill_group VALUES (3, 'Pavement of Ancient', 'Increases the stats of ally Monsters in Labyrinths');
+INSERT INTO k_guild_skill_group VALUES (4, 'Pledge of Faith', 'Increases the stats of ally Monsters in Rift Raid Battles');
+INSERT INTO k_guild_skill_group VALUES (5, 'Trade association Alliance', 'Unlocks an aditional slot in the Guild Magic Shop');
+INSERT INTO k_guild_skill_group VALUES (6, 'Mana Purifier', 'Increases the amount of Mana Stones you acquire in all battles');
+INSERT INTO k_guild_skill_group VALUES (7, 'EXP Amplifier', 'Increases the amount of EXP  that all Monsters acquire in battles');
+
+INSERT INTO k_guild_skill VALUES (1, 1, 1, 'HP +2%');
+INSERT INTO k_guild_skill VALUES (2, 1, 6, 'DEF +2%');
+INSERT INTO k_guild_skill VALUES (3, 1, 11, 'ATK +2%');
+INSERT INTO k_guild_skill VALUES (4, 1, 16, 'HP +2%');
+INSERT INTO k_guild_skill VALUES (5, 1, 21, 'DEF +2%');
+INSERT INTO k_guild_skill VALUES (6, 1, 26, 'ATK +2%');
+INSERT INTO k_guild_skill VALUES (7, 2, 2, 'HP +2%');
+INSERT INTO k_guild_skill VALUES (8, 2, 7, 'DEF +2%');
+INSERT INTO k_guild_skill VALUES (9, 2, 12, 'ATK +2%');
+INSERT INTO k_guild_skill VALUES (10, 2, 17, 'HP +2%');
+INSERT INTO k_guild_skill VALUES (11, 2, 22, 'DEF +2%');
+INSERT INTO k_guild_skill VALUES (12, 2, 27, 'ATK +2%');
+INSERT INTO k_guild_skill VALUES (13, 3, 3, 'HP +2%');
+INSERT INTO k_guild_skill VALUES (14, 3, 8, 'DEF +2%');
+INSERT INTO k_guild_skill VALUES (15, 3, 13, 'ATK +2%');
+INSERT INTO k_guild_skill VALUES (16, 3, 18, 'HP +2%');
+INSERT INTO k_guild_skill VALUES (17, 3, 23, 'DEF +2%');
+INSERT INTO k_guild_skill VALUES (18, 3, 28, 'ATK +2%');
+INSERT INTO k_guild_skill VALUES (19, 4, 4, 'HP +2%');
+INSERT INTO k_guild_skill VALUES (20, 4, 9, 'DEF +2%');
+INSERT INTO k_guild_skill VALUES (21, 4, 14, 'ATK +2%');
+INSERT INTO k_guild_skill VALUES (22, 4, 19, 'HP +2%');
+INSERT INTO k_guild_skill VALUES (23, 4, 24, 'DEF +2%');
+INSERT INTO k_guild_skill VALUES (24, 4, 29, 'ATK +2%');
+INSERT INTO k_guild_skill VALUES (25, 5, 5, 'Add 1 more Guild Magic Shop slot');
+INSERT INTO k_guild_skill VALUES (26, 5, 10, 'Add 1 more Guild Magic Shop slot');
+INSERT INTO k_guild_skill VALUES (27, 5, 15, 'Add 1 more Guild Magic Shop slot');
+INSERT INTO k_guild_skill VALUES (28, 5, 20, 'Add 1 more Guild Magic Shop slot');
+INSERT INTO k_guild_skill VALUES (29, 6, 15, 'Gain 5% additional Mana Stones');
+INSERT INTO k_guild_skill VALUES (30, 7, 30, 'Gain 5% additional EXP');
+

+ 34 - 3
install_base.py

@@ -214,11 +214,15 @@ def createDatabase(name):
                 guild_point INT,
                 darkportal_energy INT,
                 darkportal_energy_max INT,
+                dimension_energy INT,
+                dimension_energy_max INT,
                 costume_point INT,
                 costume_point_max INT,
                 honor_medal INT,
                 honor_mark INT,
-                event_coin INT
+                event_coin INT,
+                storage_slots INT,
+                island INT
             );
         ''')
         cursor.execute('''
@@ -269,8 +273,7 @@ def createDatabase(name):
                 create_time DATETIME,
                 homunculus INT,
                 homunculus_name TEXT,
-                lock INT,
-                notes TEXT
+                lock INT
             );
         ''')
         cursor.execute('''
@@ -346,6 +349,34 @@ def createDatabase(name):
                 unit TEXT
             );
         ''')
+        cursor.execute('''
+            CREATE TABLE IF NOT EXISTS guild(
+                id TEXT,
+                name TEXT,
+                level INT,
+                experience INT,
+                recruiting INT,
+                members INT,
+                leader INT,
+                comment TEXT,
+                notice TEXT
+            );
+        ''')
+        cursor.execute('''
+            CREATE TABLE IF NOT EXISTS guild_member(
+                id TEXT,
+                guild TEXT,
+                grade INT,
+                name TEXT,
+                level INT,
+                rating INT,
+                arena_score INT,
+                joined TIMESTAMP,
+                last_login TIMESTAMP,
+                in_war INT,
+                has_defense INT
+            );
+        ''')
         db.commit()
         cursor.close()
         return db

+ 60 - 6
install_user.py

@@ -33,12 +33,15 @@ def openDatabase(name):
         cursor.execute('''DELETE FROM scenario''')
         cursor.execute('''DELETE FROM defense''')
         cursor.execute('''DELETE FROM unit''')
+        cursor.execute('''DELETE FROM unit_skill''')
         cursor.execute('''DELETE FROM rune''')
         cursor.execute('''DELETE FROM player''')
         cursor.execute('''DELETE FROM building''')
         cursor.execute('''DELETE FROM decoration''')
         cursor.execute('''DELETE FROM inventory''')
         cursor.execute('''DELETE FROM summon_special''')
+        cursor.execute('''DELETE FROM guild''')
+        cursor.execute('''DELETE FROM guild_member''')
         db.commit()
         cursor.close()
         return db
@@ -99,12 +102,19 @@ def parsePlayer(db, data):
     guild_point = data["wizard_info"]["guild_point"]
     darkportal_energy = data["wizard_info"]["darkportal_energy"]
     darkportal_energy_max = data["wizard_info"]["darkportal_energy_max"]
+    dimension_energy = data["dimension_hole_info"]["energy"]
+    dimension_energy_max = data["dimension_hole_info"]["energy_max"]
     costume_point = data["wizard_info"]["costume_point"]
     costume_point_max = data["wizard_info"]["costume_point_max"]
     honor_medal = data["wizard_info"]["honor_medal"]
     honor_mark = data["wizard_info"]["honor_mark"]
     event_coin = data["wizard_info"]["event_coin"]
-    insert(db, "player", (uid, name, mana, crystal, country, lang, level, experience, energy, energy_max, energy_per_min, arena_energy, arena_energy_max, rep, social_point, honor_point, guild_point, darkportal_energy, darkportal_energy_max, costume_point, costume_point_max, honor_medal, honor_medal, event_coin))
+    storage_slots = data["unit_depository_slots"]["number"]
+    island_upgrade = 0
+    for island in data["island_info"]:
+        if island["id"] <= 7 and island["open"] == 1:
+            island_upgrade = island["id"]
+    insert(db, "player", (uid, name, mana, crystal, country, lang, level, experience, energy, energy_max, energy_per_min, arena_energy, arena_energy_max, rep, social_point, honor_point, guild_point, darkportal_energy, darkportal_energy_max, dimension_energy, dimension_energy_max, costume_point, costume_point_max, honor_medal, honor_medal, event_coin, storage_slots, island_upgrade))
     db.commit()
 
 """
@@ -181,6 +191,7 @@ Parses unit data (tables unit, unit_skill).
 def parseUnits(db, data):
     print("Parsing monsters...")
     uid = data["wizard_info"]["wizard_id"]
+    lock_list = data["unit_lock_list"]
     for mon in data["unit_list"]:
         id = mon["unit_id"]
         building = mon["building_id"]
@@ -204,7 +215,10 @@ def parseUnits(db, data):
         create_time = mon["create_time"]
         homunculus = mon["homunculus"]
         homunculus_name = mon["homunculus_name"]
-        insert(db, "unit", (uid, id, building, monster, level, stars, hp, attack, defense, speed, crit_rate, crit_damage, resistance, accuracy, experience, exp_gained, exp_gain_rate, costume, attribute, source, create_time, homunculus, homunculus_name, 0, None))
+        lock = 0
+        if id in lock_list:
+            lock = 1
+        insert(db, "unit", (uid, id, building, monster, level, stars, hp, attack, defense, speed, crit_rate, crit_damage, resistance, accuracy, experience, exp_gained, exp_gain_rate, costume, attribute, source, create_time, homunculus, homunculus_name, lock))
         for skill in mon["skills"]:
             skill_id = skill[0]
             skill_level = skill[1]
@@ -423,11 +437,50 @@ def parseRunes(db, data):
             insert(db, "rune", (uid, id, assigned_to, runeset, slot, stars, ancient, level, quality, original_quality, value, efficiency, max_efficiency, main_stat, main_stat_value, innate_stat, innate_stat_value, substat_1, substat_1_value, substat_1_enchant, substat_1_grind, substat_2, substat_2_value, substat_2_enchant, substat_2_grind, substat_3, substat_3_value, substat_3_enchant, substat_3_grind, substat_4, substat_4_value, substat_4_enchant, substat_4_grind))
     db.commit()
 
+"""
+Parses guild data (tables guild, guild_member).
 
-
-
-
-
+:param db: Sqlite database connection.
+:param data: Data in SWEX json file.
+"""
+def parseGuild(db, data):
+    print("Parsing guild...")
+    if len(data["guild"]["guild_info"]) < 1:
+        return
+    guild = data["guild"]["guild_info"]
+    id = guild["guild_id"]
+    name = guild["name"]
+    level = guild["level"]
+    experience = guild["experience"]
+    recruiting = guild["recruit_status"]
+    members = guild["member_now"]
+    leader = guild["master_wizard_id"]
+    comment = guild["comment"]
+    notice = guild["notice"]
+    insert(db, "guild", (id, name, level, experience, recruiting, members, leader, comment, notice))
+    # Single quates ahead, dirty fix
+    for k, member in data["guild"]["guild_members"].items():
+        m = json.loads(str(member).replace("'", '"'))        
+        id = m["wizard_id"]
+        guild = member["guild_id"]
+        grade = member["grade"]
+        name = member["wizard_name"]
+        level = member["wizard_level"]
+        rating = member["rating_id"]
+        arena_score = member["arena_score"]
+        joined = member["join_timestamp"]
+        last_login = member["last_login_timestamp"]
+        in_war = 0 # Checked later
+        has_defense = 0 # Checked later
+        insert(db, "guild_member", (id, guild, grade, name, level, rating, arena_score, joined, last_login, in_war, has_defense))
+    cursor = db.cursor()
+    for war in data["guildwar_member_list"]:
+        cursor.execute("UPDATE guild_member SET in_war = 1 WHERE guild = ? AND id = ?;", (war["guild_id"], war["wizard_id"]))
+    for defense in data["guild_member_defense_list"]:
+        if len(defense["unit_list"]) > 0:
+            cursor.execute("UPDATE guild_member SET has_defense = 1 WHERE id = '" + str(defense["wizard_id"]) + "';")
+    db.commit()
+    cursor.close()
 
 """
 Begin script
@@ -444,5 +497,6 @@ parseUnits(db, data)
 parseSummonSpecial(db, data)
 parseInventory(db, data)
 parseRunes(db, data)
+parseGuild(db, data)
 # TODO rune_craft_item_list
 

+ 115 - 0
public/css/guild.css

@@ -0,0 +1,115 @@
+div#guild_details{
+    color: #ffffff;
+    display: inline-block;
+    width: 50%;
+    vertical-align: top;
+}
+div#guild_details span#guild_level{
+    font-size: 300%;
+}
+div#guild_details span#guild_experience{
+    font-style: italic;
+    padding-left: 2em;
+}
+div#guild_details p#guild_comment{
+    color: #00ff00;
+    font-style: italic;
+    margin: 0.5em 1em;
+}
+div#guild_details p#guild_notice{
+    color: #ff00ab;
+    font-style: italic;
+    font-weight: bold;
+    margin: 0.5em 1em;
+}
+div#guild_details div#guild_skills{
+    display: inline-block;
+}
+
+div#guild_details div#guild_skills div.skill_group{
+    border: 0.2em solid #f2c920;
+    border-radius: 0.5em;
+    background-color: #00000044;
+    margin: 0.2em 0.2em 0.5em 1em;
+    text-align: left;
+}
+
+div#guild_details div#guild_skills div.skill_group span.skill_group_title{
+    display: block;
+    font-size: 110%;
+    font-weight: bold;
+    text-align: center;
+}
+
+div#guild_details div#guild_skills div.skill_group span.skill_group_description{
+    display: block;
+    font-size: 90%;
+    font-style: italic;
+    text-align: center;
+}
+
+div#guild_details div#guild_skills div.skill_group img.skill_group_image{
+    display: inline-block;
+    vertical-align: middle;
+    width: 5em;
+    height: 5em;
+    border: 0.1em solid #f2c920;
+    border-radius: 0.5em;
+    margin: 0.2em 0.2em 0.5em 1em;
+}
+
+div#guild_details div#guild_skills div.skill_group ul{
+    display: inline-block;
+    font-weight: bold;
+    font-size: 70%;
+    vertical-align: middle;
+    margin: 0;
+}
+div#guild_details div#guild_skills div.skill_group ul li{
+    margin: -0.3em;
+}
+div#guild_details div#guild_skills div.skill_group ul li.description{
+    list-style-type: none;
+    margin: -0.3em 0.3em 0.1em -3em;
+}
+
+div#guild_details div#guild_skills div.skill_group ul li.unavailable{
+    color: #888888;
+}
+
+
+
+table#guild_members{
+    display: inline-block;
+    width: 40%;
+    vertical-align: top;
+    border-collapse: collapse;
+    color: #ffffff;
+}
+table#guild_members th{
+    background-color: #00000088;
+    font-weight: bold;
+    font-size: 90%;
+}
+
+table#guild_members td{
+    background-color: #00000022;
+    height: 1.5em;
+}
+table#guild_members td.odd{
+    background-color: #00000044;
+}
+
+table#guild_members td img{
+    height: 1.5em;
+}
+
+table#guild_members td.last_login{
+    color: #00ff00;
+}
+table#guild_members td.last_login.warning{
+    color: #ffff00;
+}
+table#guild_members td.last_login.danger{
+    color: #ff0000;
+}

+ 6 - 0
public/css/home.css

@@ -19,6 +19,12 @@ article{
     }
 }
 
+article#profile div#currency ul li img{
+    height: 1.2em;
+    width: 1.2em;
+    vertical-align: middle;
+}
+
 article h3{
     margin: -1em -0.75em 0.5em -0.75em;
     border-bottom: 0.1em solid #f2c920;

BIN
public/img/layout/currency/darkportalenergy.png


BIN
public/img/layout/icon/leader.png


BIN
public/img/layout/icon/lock.png


BIN
public/img/layout/icon/nok.png


BIN
public/img/layout/icon/ok.png


BIN
public/img/layout/icon/rank_beg.png


BIN
public/img/layout/icon/rank_cha1.png


BIN
public/img/layout/icon/rank_cha2.png


BIN
public/img/layout/icon/rank_cha3.png


BIN
public/img/layout/icon/rank_con1.png


BIN
public/img/layout/icon/rank_con2.png


BIN
public/img/layout/icon/rank_con3.png


BIN
public/img/layout/icon/rank_fig1.png


BIN
public/img/layout/icon/rank_fig2.png


BIN
public/img/layout/icon/rank_fig3.png


BIN
public/img/layout/icon/rank_gua1.png


BIN
public/img/layout/icon/rank_gua2.png


BIN
public/img/layout/icon/rank_gua3.png


BIN
public/img/layout/icon/rank_leg.png


BIN
public/img/layout/icon/viceleader.png