Pārlūkot izejas kodu

Siege defenses parsed and displayed. Artifact efficiency working for inventory and drops. Records shown again in th home page. Fixed errors in the Punisher Crypt logging.

Iñigo Valentin 5 gadi atpakaļ
vecāks
revīzija
a81c2cf7aa

+ 28 - 1
application/API/v1/profile/PUT.php

@@ -605,6 +605,33 @@ function parse_profile($db, $player_id, $json){
             $position ++;
             $position ++;
         }
         }
     }
     }
+    
+    // Parse siege defenses.
+    $i = 0;
+    foreach ($json->{"guildsiege_defense_unit_list"} as $defense){
+        $statement = $db->prepare("
+          INSERT INTO defense (
+            player,
+            area_type,
+            slot,
+            unit,
+            position
+          ) VALUES (
+            :player,
+            :area_type,
+            :slot,
+            :unit,
+            :position
+          );
+        ");
+        $statement->bindValue(":player", $player_id, SQLITE3_INTEGER);
+        $statement->bindValue(":area_type", AREA_TYPE_ID::GUILD_SIEGE, SQLITE3_INTEGER);
+        $statement->bindValue(":slot", floor($i / 3), SQLITE3_INTEGER);
+        $statement->bindValue(":unit", $defense, SQLITE3_INTEGER);
+        $statement->bindValue(":position", ($i % 3) + 1, SQLITE3_INTEGER);
+        $statement->execute();
+        $i ++;
+    }
 
 
     // Parse buildings
     // Parse buildings
     foreach($json->{"building_list"} as $building){
     foreach($json->{"building_list"} as $building){
@@ -1191,7 +1218,7 @@ function parse_records($db, $player_id, $json){
             $statement = $db->prepare("
             $statement = $db->prepare("
               DELETE FROM record
               DELETE FROM record
               WHERE
               WHERE
-                player = :player_id AND
+                player = :player AND
                 area_type = :area_type AND
                 area_type = :area_type AND
                 area = :area;
                 area = :area;
             ");
             ");

+ 0 - 2
application/API/v1/run/POST.php

@@ -868,7 +868,6 @@ function log_cairos_run($db, $id, $player_id, $json){
         :rank
         :rank
       );
       );
     ");
     ");
-
     // Bind data and insert
     // Bind data and insert
     $statement->bindValue(":player", $player_id, SQLITE3_INTEGER);
     $statement->bindValue(":player", $player_id, SQLITE3_INTEGER);
     $statement->bindValue(":id", $id, SQLITE3_INTEGER);
     $statement->bindValue(":id", $id, SQLITE3_INTEGER);
@@ -1546,7 +1545,6 @@ try{
     else{
     else{
         $id = 1;
         $id = 1;
     }
     }
-
     // Run parsing function
     // Run parsing function
     $result = "500 Unknown Error";
     $result = "500 Unknown Error";
     switch($command){
     switch($command){

+ 2 - 3
application/Constant.php

@@ -266,7 +266,7 @@ final class EFFECT_AREA_ID{
     /**
     /**
      * Guild content (battle, siege, Labyrinth).
      * Guild content (battle, siege, Labyrinth).
      */
      */
-    const GUILD = 5;
+    const GUILD = 4;
 };
 };
 
 
 /**
 /**
@@ -565,7 +565,7 @@ final class CAIROS_DUNGEON_ID{
     /**
     /**
      * Steel Fortress
      * Steel Fortress
      */
      */
-    const STEEL_FORTRESS = 9602; // TODO: Find out
+    const STEEL_FORTRESS = 9602; 
 
 
     /**
     /**
      * Hall of Light.
      * Hall of Light.
@@ -990,7 +990,6 @@ final class INVENTORY_TYPE_ID{
     
     
     /**
     /**
      * Artifact.
      * Artifact.
-     * @todo Every artifact or an specific type? verify.
      */
      */
     const ARTIFACT = 73;
     const ARTIFACT = 73;
 
 

+ 1 - 1
application/action/optimize_get_options.php

@@ -15,7 +15,7 @@
  * Reads the POST parameters looking for the following KEYS:
  * Reads the POST parameters looking for the following KEYS:
  *  player: The player ID.
  *  player: The player ID.
  *  unit: The unit ID.
  *  unit: The unit ID.
- *  tuning: {@todo Document properly}.
+ *  tuning: 1: All +12; 2: Even +15, odd + 12; 3: All +15.
  *  options: JSON with rune sets.
  *  options: JSON with rune sets.
  *
  *
  * @return int|string a JSON with the runes on success, negative integers on error. 0 if no errors
  * @return int|string a JSON with the runes on success, negative integers on error. 0 if no errors

+ 1 - 7
application/action/optimize_get_rune_list.php

@@ -17,8 +17,7 @@
  *  mode: Game mode ({@see GAME_MODE_ID}).
  *  mode: Game mode ({@see GAME_MODE_ID}).
  *  unit: Unit ID.
  *  unit: Unit ID.
  *  source: Source of the runes to select (assigned, unassigned, ...).
  *  source: Source of the runes to select (assigned, unassigned, ...).
- *  limit: {@todo: Currently not in use. Implement or delete}.
- *  tuning: {@todo Document properly}.
+ *  tuning: 1: All +12; 2: Even +15, odd + 12; 3: All +15.
  *  set[]: Selected rune sets ({@see RUNE_SET_ID}).
  *  set[]: Selected rune sets ({@see RUNE_SET_ID}).
  *  
  *  
  * Then it selects all the runes matching the cryteria.
  * Then it selects all the runes matching the cryteria.
@@ -77,11 +76,6 @@ function action(){
         return -4;
         return -4;
     }
     }
 
 
-    $limit = intval(filter_input(INPUT_POST, 'limit'));
-    if ($limit == 0){
-        return -5;
-    }
-
     $tuning = filter_input(INPUT_POST, 'tuning');
     $tuning = filter_input(INPUT_POST, 'tuning');
     if ($tuning == null){
     if ($tuning == null){
         return -6;
         return -6;

+ 1 - 1
application/action/save_run_team.php

@@ -17,7 +17,7 @@
  *  run: Run ID.
  *  run: Run ID.
  *  name: New team name.
  *  name: New team name.
  *  description: New team description.
  *  description: New team description.
- *  score: New team score {@todo implement}.
+ *  score: New team score, defaults to 0.
  * Validates the data and creates the team in the database.
  * Validates the data and creates the team in the database.
  * 
  * 
  * @return int 201 on success, HTTP erro status codes on error.
  * @return int 201 on success, HTTP erro status codes on error.

+ 1 - 1
application/entity/Area.php

@@ -153,7 +153,7 @@ class Area extends Entity{
                     return APPLICATION::img("UNIT", 62403);
                     return APPLICATION::img("UNIT", 62403);
                     break;
                     break;
                 case DUNGEON_ID::PUNISHERS_CRYPT:
                 case DUNGEON_ID::PUNISHERS_CRYPT:
-                    return APPLICATION::img("UNIT", 62403);
+                    return APPLICATION::img("UNIT", 62604);
                     break;
                     break;
                 case DUNGEON_ID::HALL_OF_WATER:
                 case DUNGEON_ID::HALL_OF_WATER:
                     return APPLICATION::img("UNIT", 60101);
                     return APPLICATION::img("UNIT", 60101);

+ 7 - 4
application/entity/Artifact.php

@@ -307,6 +307,9 @@ class Artifact extends Entity{
      * @return float Efficiency
      * @return float Efficiency
      */
      */
     private function calculate_efficiency(){
     private function calculate_efficiency(){
+        if (! $this->flag_stats){
+            $this->load_stats();
+        }
         $eff = [0.0, 0.0, 0.0, 0.0];
         $eff = [0.0, 0.0, 0.0, 0.0];
 
 
         $query = "
         $query = "
@@ -404,16 +407,16 @@ class Artifact extends Entity{
     private function calculate_maximum_efficiency(){
     private function calculate_maximum_efficiency(){
         $max_efficiency = $this->efficiency;
         $max_efficiency = $this->efficiency;
         if ($this->level < 12){
         if ($this->level < 12){
-            $max_efficiency += (1/8);
+            $max_efficiency += (100/8);
         }
         }
         if ($this->level < 9){
         if ($this->level < 9){
-            $max_efficiency += (1/8);
+            $max_efficiency += (100/8);
         }
         }
         if ($this->level < 6){
         if ($this->level < 6){
-            $max_efficiency += (1/8);
+            $max_efficiency += (100/8);
         }
         }
         if ($this->level < 3){
         if ($this->level < 3){
-            $max_efficiency += (1/8);
+            $max_efficiency += (100/8);
         }
         }
         return $max_efficiency;
         return $max_efficiency;
     }
     }

+ 32 - 10
application/entity/Player.php

@@ -149,7 +149,6 @@ class Player extends Entity{
 
 
     /**
     /**
      * @var Unit[] Siege defenses.
      * @var Unit[] Siege defenses.
-     * @todo Implement
      */
      */
     private $siege_defense = [];
     private $siege_defense = [];
 
 
@@ -348,25 +347,48 @@ class Player extends Entity{
         $statement = get_context()->get_db()->prepare("
         $statement = get_context()->get_db()->prepare("
             SELECT
             SELECT
               unit,
               unit,
-              position
+              slot
             FROM defense
             FROM defense
             WHERE
             WHERE
               player = :player AND
               player = :player AND
               area_type = :area_type
               area_type = :area_type
-            ORDER BY position;
+            ORDER BY
+              slot,
+              position;
         ");
         ");
-        $statement->bindValue(':id', $this->id, SQLITE3_TEXT);
+        $statement->bindValue(':player', $this->id, SQLITE3_TEXT);
         $statement->bindValue(':area_type', AREA_TYPE_ID::GUILD_WAR, SQLITE3_INTEGER);
         $statement->bindValue(':area_type', AREA_TYPE_ID::GUILD_WAR, SQLITE3_INTEGER);
         $q = $statement->execute();
         $q = $statement->execute();
         while ($r = $q->fetchArray(SQLITE3_ASSOC)){
         while ($r = $q->fetchArray(SQLITE3_ASSOC)){
-            if ($r["position"] <= 3){
-                array_push($this->gw_defense[0], new Unit($r["unit"], false));
-            }
-            else{
-                array_push($this->gw_defense[1], new Unit($r["unit"], false));
-            }
+            array_push($this->gw_defense[$r["slot"]], new Unit($r["unit"], false));
         }
         }
         // TODO: Siege defenses
         // TODO: Siege defenses
+        $statement = get_context()->get_db()->prepare("
+            SELECT
+              unit,
+              position
+            FROM defense
+            WHERE
+              player = :player AND
+              area_type = :area_type
+            ORDER BY
+              slot,
+              position;
+        ");
+        $statement->bindValue(':player', $this->id, SQLITE3_TEXT);
+        $statement->bindValue(':area_type', AREA_TYPE_ID::GUILD_SIEGE, SQLITE3_INTEGER);
+        $q = $statement->execute();
+        $i = 0;
+        $siege = [null, null, null];
+        while ($r = $q->fetchArray(SQLITE3_ASSOC)){
+            $siege[$i] = new Unit($r["unit"]);
+            $i ++;
+            if ($i == 3){
+                array_push($this->siege_defense, $siege);
+                $i = 0;
+                $siege = [null, null, null];
+            }
+        }
         $this->flag_defense = true;
         $this->flag_defense = true;
     }
     }
 
 

+ 1 - 1
application/entity/Record.php

@@ -143,7 +143,7 @@ class Record extends Entity{
             front DESC,
             front DESC,
             leader DESC;
             leader DESC;
         ");
         ");
-        $statement->bindValue(':player', $$this->player, SQLITE3_TEXT);
+        $statement->bindValue(':player', $this->player, SQLITE3_TEXT);
         $statement->bindValue(':area_type', $this->area->get_type(), SQLITE3_TEXT);
         $statement->bindValue(':area_type', $this->area->get_type(), SQLITE3_TEXT);
         $statement->bindValue(':area', $this->get_area()->get_id(), SQLITE3_TEXT);
         $statement->bindValue(':area', $this->get_area()->get_id(), SQLITE3_TEXT);
         $q = $statement->execute();
         $q = $statement->execute();

+ 0 - 1
application/entity/Run.php

@@ -24,7 +24,6 @@ require_once(PATH::ENTITY . "Rune_Set.php");
  * Represent a saved run in a playable area.
  * Represent a saved run in a playable area.
  *
  *
  * @category Entity
  * @category Entity
- * @todo Consider artifact drops.
  */
  */
 class Run extends Entity{
 class Run extends Entity{
     
     

+ 68 - 30
application/view/home.php

@@ -130,11 +130,6 @@
 <?php
 <?php
                                 $first = true;
                                 $first = true;
                                 foreach (get_context()->get_player()->get_arena_defense() as $defense){
                                 foreach (get_context()->get_player()->get_arena_defense() as $defense){
-?>
-                                    <div class='monster_panel'>
-                                        <?=HTML::unit_panel($defense)?>
-                                    </div>
-<?php
                                     if (
                                     if (
                                       $first && 
                                       $first && 
                                       null != $defense->get_monster()->get_leader_skill() &&
                                       null != $defense->get_monster()->get_leader_skill() &&
@@ -150,6 +145,11 @@
 <?php
 <?php
                                     }
                                     }
                                     $first = false;
                                     $first = false;
+?>
+                                    <div class='monster_panel'>
+                                        <?=HTML::unit_panel($defense)?>
+                                    </div>
+<?php
                                 }
                                 }
 ?>
 ?>
                             </div>
                             </div>
@@ -161,11 +161,6 @@
                                 $first = true;
                                 $first = true;
                                 // TODO: Watch if null
                                 // TODO: Watch if null
                                 foreach (get_context()->get_player()->get_gw_defense()[0] as $defense){
                                 foreach (get_context()->get_player()->get_gw_defense()[0] as $defense){
-?>
-                                    <div class='monster_panel'>
-                                        <?=HTML::unit_panel($defense)?>
-                                    </div>
-<?php
                                     if (
                                     if (
                                       $first &&
                                       $first &&
                                       null != $defense->get_monster()->get_leader_skill() &&
                                       null != $defense->get_monster()->get_leader_skill() &&
@@ -181,19 +176,53 @@
 <?php
 <?php
                                     }
                                     }
                                     $first = false;
                                     $first = false;
+?>
+                                    <div class='monster_panel'>
+                                        <?=HTML::unit_panel($defense)?>
+                                    </div>
+<?php
                                 }
                                 }
+                                
 ?>
 ?>
                                 <hr/>
                                 <hr/>
 <?php
 <?php
                                 $first = true;
                                 $first = true;
                                 // TODO: Watch if null
                                 // TODO: Watch if null
                                 foreach (get_context()->get_player()->get_gw_defense()[1] as $defense){
                                 foreach (get_context()->get_player()->get_gw_defense()[1] as $defense){
+                                        // TODO: Guild content, not arena.
+                                        if (
+                                          $first &&
+                                          null != $defense->get_monster()->get_leader_skill() &&
+                                          (
+                                            $defense->get_monster()->get_leader_skill()->get_area() == EFFECT_AREA_ID::GENERAL ||
+                                            $defense->get_monster()->get_leader_skill()->get_area() == EFFECT_AREA_ID::GUILD
+                                          )
+                                        ){
+?>
+                                        <div class='skill'>
+                                            <img class='skill_img' title='<?=$defense->get_monster()->get_leader_skill()->get_description()?>' src='<?=$defense->get_monster()->get_leader_skill()->get_image()?>'/>
+                                        </div>
+<?php
+                                    }
+                                    $first = false;
 ?>
 ?>
                                     <div class='monster_panel'>
                                     <div class='monster_panel'>
                                         <?=HTML::unit_panel($defense)?>
                                         <?=HTML::unit_panel($defense)?>
                                     </div>
                                     </div>
 <?php
 <?php
-                                        // TODO: Guild content, not arena.
+                                }
+?>
+                            </div>
+                            <div id='placements_siege'>
+                                <h5>
+                                    Siege Battle defenses:
+                                </h5>
+<?php
+                                
+                                foreach (get_context()->get_player()->get_siege_defense() as $formation){
+                                    $first = true;
+                                    foreach($formation as $defense){
+
                                         if (
                                         if (
                                           $first &&
                                           $first &&
                                           null != $defense->get_monster()->get_leader_skill() &&
                                           null != $defense->get_monster()->get_leader_skill() &&
@@ -203,12 +232,21 @@
                                           )
                                           )
                                         ){
                                         ){
 ?>
 ?>
-                                        <div class='skill'>
-                                            <img class='skill_img' title='<?=$defense->get_monster()->get_leader_skill()->get_description()?>' src='<?=$defense->get_monster()->get_leader_skill()->get_image()?>'/>
+                                            <div class='skill'>
+                                                <img class='skill_img' title='<?=$defense->get_monster()->get_leader_skill()->get_description()?>' src='<?=$defense->get_monster()->get_leader_skill()->get_image()?>'/>
+                                            </div>
+<?php
+                                        }
+                                        $first = false;
+?>
+                                        <div class='monster_panel'>
+                                            <?=HTML::unit_panel($defense)?>
                                         </div>
                                         </div>
 <?php
 <?php
                                     }
                                     }
-                                    $first = false;
+?>
+                                    <hr/>
+    <?php
                                 }
                                 }
 ?>
 ?>
                             </div>
                             </div>
@@ -236,7 +274,7 @@
                             <br/>
                             <br/>
 <?php
 <?php
                             // Decorations
                             // Decorations
-$                           $half = sizeof(get_context()->get_player()->get_decorations()) / 2;
+                            $half = sizeof(get_context()->get_player()->get_decorations()) / 2;
                             $i = 0;
                             $i = 0;
                             foreach (get_context()->get_player()->get_decorations() as $decoration){
                             foreach (get_context()->get_player()->get_decorations() as $decoration){
                                 if ($i == $half){
                                 if ($i == $half){
@@ -456,42 +494,42 @@ $                           $half = sizeof(get_context()->get_player()->get_deco
 ?>
 ?>
                                         <tr>
                                         <tr>
                                             <td class='record_dungeon'>
                                             <td class='record_dungeon'>
-                                                <img title='<?=$record->area->name?>' class='area' src='<?=$record->area->get_image()?>'/>
+                                                <img title='<?=$record->get_area()->get_name()?>' class='area' src='<?=$record->get_area()->get_image()?>'/>
                                             </td>
                                             </td>
                                             <td class='record_info'>
                                             <td class='record_info'>
                                                 <span class='title'>
                                                 <span class='title'>
 <?php
 <?php
                                                     $title = "";
                                                     $title = "";
-                                                    switch ($record->area->type){
+                                                    switch ($record->get_area()->get_type()){
                                                         case AREA_TYPE_ID::CAIROS_DUNGEON:
                                                         case AREA_TYPE_ID::CAIROS_DUNGEON:
-                                                            $title = $record->area->name . " " . $record->stage . "F";
+                                                            $title = $record->get_area()->get_name() . " " . $record->get_stage() . "F";
                                                             break;
                                                             break;
                                                         case AREA_TYPE_ID::RIFT_DUNGEON:
                                                         case AREA_TYPE_ID::RIFT_DUNGEON:
-                                                            $title = $record->area->name;
+                                                            $title = $record->get_area()->get_name();
                                                             break;
                                                             break;
                                                         case AREA_TYPE_ID::RIFT_RAID:
                                                         case AREA_TYPE_ID::RIFT_RAID:
-                                                            $title = $record->area->name;
+                                                            $title = $record->get_area()->get_name();
 
 
                                                     }
                                                     }
 ?>
 ?>
                                                     <?=$title?>
                                                     <?=$title?>
                                                 </span>
                                                 </span>
 <?php
 <?php
-                                                if ($record->area->type == AREA_TYPE_ID::RIFT_DUNGEON){
+                                                if ($record->get_area()->get_type() == AREA_TYPE_ID::RIFT_DUNGEON){
 ?>
 ?>
                                                     <span class='score'>
                                                     <span class='score'>
-                                                        <?=$record->score?>
+                                                        <?=$record->get_score()?>
                                                     </span>
                                                     </span>
                                                     <span class='rank'>
                                                     <span class='rank'>
-                                                        <?=$record->rank?>
+                                                        <?=$record->get_rank()?>
                                                     </span>
                                                     </span>
 <?php
 <?php
                                                 }
                                                 }
                                                 else{
                                                 else{
-                                                    $s = floor($record->time / 1000);
+                                                    $s = floor($record->get_time() / 1000);
                                                     $m = floor($s / 60);
                                                     $m = floor($s / 60);
                                                     $s = floor($s % 60);
                                                     $s = floor($s % 60);
-                                                    $ms = ($record-> time - (1000 * 60 * $m) - (1000 * 60 * $s) / 100);
+                                                    $ms = ($record->get_time() - (1000 * 60 * $m) - (1000 * 60 * $s) / 100);
                                                     $s = str_pad($s, 2, '0', STR_PAD_LEFT);
                                                     $s = str_pad($s, 2, '0', STR_PAD_LEFT);
                                                     $ms = str_pad($ms, 2, '0', STR_PAD_LEFT);
                                                     $ms = str_pad($ms, 2, '0', STR_PAD_LEFT);
 ?>
 ?>
@@ -504,7 +542,7 @@ $                           $half = sizeof(get_context()->get_player()->get_deco
                                             </td>
                                             </td>
 <?php
 <?php
                                             $class_frontline = "";
                                             $class_frontline = "";
-                                            if ($record->area->type == AREA_TYPE_ID::RIFT_DUNGEON || $record->area->type == AREA_TYPE_ID::RIFT_RAID){
+                                            if ($record->get_area()->get_type() == AREA_TYPE_ID::RIFT_DUNGEON || $record->get_area()->get_type() == AREA_TYPE_ID::RIFT_RAID){
                                                 $class_frontline = "frontlines";
                                                 $class_frontline = "frontlines";
                                             }
                                             }
 ?>
 ?>
@@ -512,8 +550,8 @@ $                           $half = sizeof(get_context()->get_player()->get_deco
 <?php
 <?php
                                                 $prev_front = false;
                                                 $prev_front = false;
                                                 $front = "undefined";
                                                 $front = "undefined";
-                                                foreach ($record->party as $party){
-                                                    $front = in_array($party->id, $record->frontline);
+                                                foreach ($record->get_party() as $party){
+                                                    $front = in_array($party->get_id(), $record->get_frontline());
                                                     if ($front != "undefined" && $prev_front != $front){
                                                     if ($front != "undefined" && $prev_front != $front){
 ?>
 ?>
                                                         <hr class='frontline'/>
                                                         <hr class='frontline'/>
@@ -527,14 +565,14 @@ $                           $half = sizeof(get_context()->get_player()->get_deco
                                                     }
                                                     }
                                                     if ($disabled == ""){
                                                     if ($disabled == ""){
 ?>
 ?>
-                                                        <a target='_blank' href='/<?=get_context()->get_player()->get_id()?>/monster/<?=$party->id?>'>
+                                                        <a target='_blank' href='/<?=get_context()->get_player()->get_id()?>/units/<?=$party->get_id()?>'>
 <?php
 <?php
                                                     }
                                                     }
 ?>
 ?>
                                                     <div class='monster_panel <?=$disabled?>'>
                                                     <div class='monster_panel <?=$disabled?>'>
                                                         <?=HTML::unit_panel($party)?>
                                                         <?=HTML::unit_panel($party)?>
 <?php
 <?php
-                                                            if ($party->id == $record->leader){
+                                                            if ($party->get_id() == $record->get_leader()){
 ?>
 ?>
                                                                 <img alt='Leader' class='leader' src='<?=URL::IMG["ICON"]?>leader.png'/>
                                                                 <img alt='Leader' class='leader' src='<?=URL::IMG["ICON"]?>leader.png'/>
 <?php
 <?php

+ 1 - 1
install_data/02_CREATE_DATA.sql

@@ -239,7 +239,7 @@ CREATE TABLE data.run_party(
 );
 );
 CREATE TABLE data.run_drop_enchantment(
 CREATE TABLE data.run_drop_enchantment(
     run INT NOT NULL REFERENCES run(id),
     run INT NOT NULL REFERENCES run(id),
-    id INT NOT NULL PRIMARY KEY,
+    id INT NOT NULL,
     type INT NOT NULL, --REFERENCES key.enchantment(id), -- TODO: Duplicated??
     type INT NOT NULL, --REFERENCES key.enchantment(id), -- TODO: Duplicated??
     quality INT NOT NULL, --REFERENCES key.quality(id),
     quality INT NOT NULL, --REFERENCES key.quality(id),
     rune INT NOT NULL, --REFERENCES key.rune_set(id),
     rune INT NOT NULL, --REFERENCES key.rune_set(id),

+ 35 - 2
public/css/home.css

@@ -66,12 +66,28 @@ article#profile div#placements div#placements_rep div.monster_panel{
     font-size: 45%;
     font-size: 45%;
     margin: 0.2em;
     margin: 0.2em;
 }
 }
-
+article#profile div#placements div#placements_arena div.skill{
+    display: inline-block;
+    vertical-align: middle;
+    margin-top: -1.5em;
+}
+article#profile div#placements div#placements_arena div.skill img{
+    width:2em;
+    height: 2em;
+}
 article#profile div#placements div#placements_arena div.monster_panel{
 article#profile div#placements div#placements_arena div.monster_panel{
     font-size: 35%;
     font-size: 35%;
     margin: 0.15em;
     margin: 0.15em;
 }
 }
-
+article#profile div#placements div#placements_gw div.skill{
+    display: inline-block;
+    vertical-align: middle;
+    margin-top: -1.5em;
+}
+article#profile div#placements div#placements_gw div.skill img{
+    width:2em;
+    height: 2em;
+}
 article#profile div#placements div#placements_gw div.monster_panel{
 article#profile div#placements div#placements_gw div.monster_panel{
     font-size: 40%;
     font-size: 40%;
     margin: 0.2em;
     margin: 0.2em;
@@ -80,6 +96,23 @@ article#profile div#placements div#placements_gw hr{
     width: 12em;
     width: 12em;
     margin: 0.1em auto;
     margin: 0.1em auto;
 }
 }
+article#profile div#placements div#placements_siege div.skill{
+    display: inline-block;
+    vertical-align: middle;
+    margin-top: -1.5em;
+}
+article#profile div#placements div#placements_siege div.skill img{
+    width:2em;
+    height: 2em;
+}
+article#profile div#placements div#placements_siege div.monster_panel{
+    font-size: 40%;
+    margin: 0.2em;
+}
+article#profile div#placements div#placements_siege hr{
+    width: 12em;
+    margin: 0.1em auto;
+}
 
 
 article#profile div#building div.building_panel{
 article#profile div#building div.building_panel{
     display: inline-block;
     display: inline-block;