Eh-Werte aus Rules lesen

Tools für alle.

Moderator: Agatho

Eh-Werte aus Rules lesen

Beitragvon Zealot » 13.03.2008, 22:00

Script, das eine Tabelle units erstellt, alle Einheitenwerte aus den Rules liest und diese in der Datenbank speichert.

Code: Alles auswählen
<?php
//***************************************************************
// Liest die Einheitenwerte aus den aktuellen Rules
//
//***************************************************************

include('dbconnect.php');

/******************************************************
  Datenbank
  *********

   0: id
   1: Name
   2: Fernangriffsschaden
   3: Gebäudeschaden
   4: Getümmelschaden
   5: Fernkampfwiderstand
   6: Nahkampfwiderstand
   7: Größe
   8: Kriegspunkte
   9: Normal
  10: Schwer
  11: Kritisch
  12: Bevölkerung
  13: Nahrung
  14: Holz
  15: Steine
  16: Metall
  17: Schwefel
  18: Göttliche Gunst
  19: Eichenholz
  20: Obelisk
  21: Stahlbarren
  22: Schwefelpulver
  ===================
 
  23 Felder
**************************/

mysql_query("DROP TABLE `units`") or die("Tabelle konnte ncht gelöscht werden");
$sql = 'CREATE TABLE `units` ('
        . ' `id` INT NOT NULL AUTO_INCREMENT, '
        . ' `Name` VARCHAR(100) NOT NULL, '
        . ' `Fernangriffsschaden` INT(200) NOT NULL, '
        . ' `Gebäudeschaden` INT(200) NOT NULL, '
        . ' `Getümmelschaden` INT(200) NOT NULL, '
        . ' `Fernkampfwiderstand` INT(200) NOT NULL, '
        . ' `Nahkampfwiderstand` INT(200) NOT NULL, '
        . ' `Größe` INT(200) NOT NULL, '
        . ' `Kriegspunkte` INT(200) NOT NULL, '
        . ' `Normal` SMALLINT(100) NOT NULL, '
        . ' `Schwer` SMALLINT(100) NOT NULL, '
        . ' `Kritisch` SMALLINT(100) NOT NULL, '
        . ' `Bevölkerung` INT(200) NOT NULL, '
        . ' `Nahrung` INT(200) NOT NULL, '
        . ' `Holz` INT(200) NOT NULL, '
        . ' `Steine` INT(200) NOT NULL, '
        . ' `Metall` INT(200) NOT NULL, '
        . ' `Schwefel` INT(200) NOT NULL, '
        . ' `Göttliche Gunst` INT(200) NOT NULL, '
        . ' `Eichenholz` MEDIUMINT(200) NOT NULL, '
        . ' `Obelisk` MEDIUMINT(200) NOT NULL, '
        . ' `Stahlbarren` MEDIUMINT(200) NOT NULL, '
        . ' `Schwefelpulver` MEDIUMINT(200) NOT NULL,'
        . ' PRIMARY KEY (`id`)'
        . ' )'
        . ' TYPE = myisam';
mysql_query($sql) or die("Neue Tabelle konnte nicht eingerichtet werden");
//**********************************************************

//Link  zur aktuellen Rulesseite
$rules = "http://srv04.uga-agga.de/rules/index.php";

//Alle Resourcen der aktuellen Runde
$resis = ARRAY("Bevölkerung", "Nahrung", "Holz", "Steine", "Metall", "Schwefel",
      "Göttliche Gunst", "Eichenholz", "Obelisk", "Stahlbarren",
      "Schwefelpulver");

//Wie viele Einheiten gibt es diese Runde?
/*Fehler in den UA-Rules, es sind nicht alle IDs belegt
  nicht vorhandene werden mit der ID 0 angezeigt (faustkämpfer)
  $unitCount, somit größte vorkommende id oder größer*/
$unitCount = 50;

//String um den Sourcecode aus den einzelnen zeilen zusammenzubauen
$source = "";

//Initialiseren vom Einheitenarray
$units = ARRAY();

for($i = 0; $i < $unitCount; $i++)
{
   $source = "";
   $link = $rules."?modus=units&unitsID=".$i;
   
   //Zeilen des Sourcecodes dieser Seite
   $lines = file($link);
   
   //führt die einzelnen Zeilen des Sourcecodes in einem String zusammen
   for($j = 0; $j < sizeof($lines); $j++)
   {
      $source .= $lines[$j]."\n";
   }
   $units[$i] = extractData($source);
   
   if(($i != 0) && (strcmp($units[$i]["Name"][1], "Faustkämpfer") == 0))
   { }
   else
   {
   
      $dbResult = "INSERT INTO `units` (" .
      "`Name`," .
      "`Fernangriffsschaden`," .
      "`Gebäudeschaden`," .
      "`Getümmelschaden`," .
      "`Fernkampfwiderstand`," .
      "`Nahkampfwiderstand`," .
      "`Größe`," .
      "`Kriegspunkte`," .
      "`Normal`," .
      "`Schwer`," .
      "`Kritisch`," .
      "`Bevölkerung`," .
      "`Nahrung`," .
      "`Holz`," .
      "`Steine`," .
      "`Metall`," .
      "`Schwefel`," .
      "`Göttliche Gunst`," .
      "`Eichenholz`," .
      "`Obelisk`," .
      "`Stahlbarren`," .
      "`Schwefelpulver`) VALUES (";
   
      $dbResult .= /*"'".$i."',*/"'".$units[$i]["Name"][1]."'";
      for($k = 0; $k < sizeof($units[$i]["Werte"][0]); $k++)
      {
         $dbResult .= ", '".$units[$i]["Werte"][2][$k]."'";
      }
      for($k = 0; $k < sizeof($units[$i]["Treffer"][0]); $k++)
      {
         $dbResult .= ", '".$units[$i]["Treffer"][1][$k]."'";
      }
      $dbResult .= buildResString($units[$i]["Kosten"], $resis).");";

      mysql_query($dbResult) or die("ERROR!");
   }
}

echo "DONE!";

//echo print_r($units); DEBUG

function buildResString($a, $r)
{
   $result = "";
   $b = false;

   for($i = 0; $i < sizeof($r); $i++)
   {
      $b = false;

      for($j = 0; $j < sizeof($a[0]); $j++)
      {
         if($r[$i] == $a[1][$j])
         {         
            $result .= ", '".$a[2][$j]."'";
            $b = true;
         }
      }
      if($b == false)
      {
         $result .= ", '0'";
      }
   }
   return $result;
}

function extractData($s)
{
   //ARRAY in dem alle Informationen über eine Einheit verstaut werden
   $unit = ARRAY();   
   
   //Name der Einheit
   $reg = "/<strong>(.+?)<\/strong>/s";
   preg_match($reg, $s, $name);

   $unit["Name"] = $name;
   

   //String in dem die Ehkosten stehen
   $reg = "/Kosten(.+?)Eigenschaften/s";
   preg_match($reg, $s, $k);
   
   $reg = "/<td>.+?title=\"(.+?)\">\s+(\d+)/";
   preg_match_all($reg, $k[1], $kosten);
   
   $unit["Kosten"] = $kosten;
   
   
   //String in dem die EhKampfwerte stehen
   $reg = "/Eigenschaften(.+?)Treffer/s";
   preg_match($reg, $s, $w);
   
   $reg = "/<tr>\s+<td.*?>(.+?)<\/td>\s+<td.*?>(\d+)<\/td>\s+<\/tr>/s";
   preg_match_all($reg, $w[1], $werte);
   
   $unit["Werte"] = $werte;
   
   
   //String in dem die Trefferwahrscheinlichkeiten stehen
   $reg = "/Trefferwahrscheinlichkeiten(.+?)Bewegungs/s";
   preg_match($reg, $s, $t);
   
   $reg = "/<tr>\s+<td.+?<td.*?>(\d+).+?<\/td>\s+<\/tr>/s";
   preg_match_all($reg, $t[1], $treffer);
   
   $unit["Treffer"] = $treffer;
   
   /*
   DEBUG:
   for($i = 1; $i < sizeof($unit["Werte"]); $i++)
   {
      for($j = 0; $j < sizeof($unit["Werte"][0]); $j++)
      {
         echo $unit["Werte"][$i][$j]."<br>\n";
      }
   }*/
   
   return $unit;
}
      


?>
Bild
Zealot
Abtrünnige Foren-Fledermaus
Abtrünnige Foren-Fledermaus
 
Beiträge: 482
Registriert: 03.02.2004, 22:51

Re: Eh-Werte aus Rules lesen

Beitragvon Askeron » 31.10.2010, 15:29

Hier ne aktualisierte Version für die HR 11:
Code: Alles auswählen
    <?php
    //***************************************************************
    // Liest die Einheitenwerte aus den aktuellen Rules
    //
    //***************************************************************

    include('dbconnect.php');

    /******************************************************
      Datenbank
      *********

       0: id
       1: Name
       2: Fernangriffsschaden
       3: Gebäudeschaden
       4: Getümmelschaden
       5: Fernkampfwiderstand
       6: Nahkampfwiderstand
       7: Größe
       8: Kriegspunkte
       9: Normal
      10: Schwer
      11: Kritisch
      12: Bevölkerung
      13: Nahrung
      14: Holz
      15: Steine
      16: Metall
      17: Schwefel
      18: Göttliche Gunst
      19: Eichenholz
      20: Obelisk
      21: Schwefelpulver
      ===================
     
      22 Felder
    **************************/

    mysql_query("DROP TABLE `units`") or die("Tabelle konnte ncht gelöscht werden");
    $sql = 'CREATE TABLE `units` ('
            . ' `id` INT NOT NULL AUTO_INCREMENT, '
            . ' `Name` VARCHAR(100) NOT NULL, '
            . ' `Fernangriffsschaden` INT(200) NOT NULL, '
            . ' `Gebäudeschaden` INT(200) NOT NULL, '
            . ' `Getümmelschaden` INT(200) NOT NULL, '
            . ' `Fernkampfwiderstand` INT(200) NOT NULL, '
            . ' `Nahkampfwiderstand` INT(200) NOT NULL, '
            . ' `Größe` INT(200) NOT NULL, '
            . ' `Kriegspunkte` INT(200) NOT NULL, '
            . ' `Normal` SMALLINT(100) NOT NULL, '
            . ' `Schwer` SMALLINT(100) NOT NULL, '
            . ' `Kritisch` SMALLINT(100) NOT NULL, '
            . ' `Bevölkerung` INT(200) NOT NULL, '
            . ' `Nahrung` INT(200) NOT NULL, '
            . ' `Holz` INT(200) NOT NULL, '
            . ' `Steine` INT(200) NOT NULL, '
            . ' `Metall` INT(200) NOT NULL, '
            . ' `Schwefel` INT(200) NOT NULL, '
            . ' `Göttliche Gunst` INT(200) NOT NULL, '
            . ' `Eichenholz` MEDIUMINT(200) NOT NULL, '
            . ' `Obelisk` MEDIUMINT(200) NOT NULL, '
            . ' `Schwefelpulver` MEDIUMINT(200) NOT NULL,'
            . ' PRIMARY KEY (`id`)'
            . ' )'
            . ' TYPE = myisam';
    mysql_query($sql) or die("Neue Tabelle konnte nicht eingerichtet werden");
    //**********************************************************

    //Link  zur aktuellen Rulesseite
    $rules = "http://game.uga-agga.de/rules/";

    //Alle Resourcen der aktuellen Runde
    $resis = ARRAY("Bevölkerung", "Nahrung", "Holz", "Steine", "Metall", "Schwefel",
          "Göttliche Gunst", "Eichenholz", "Obelisk",
          "Schwefelpulver");

    //Wie viele Einheiten gibt es diese Runde?
    /*Fehler in den UA-Rules, es sind nicht alle IDs belegt
      nicht vorhandene werden mit der ID 0 angezeigt (faustkämpfer)
      $unitCount, somit größte vorkommende id oder größer*/
    $unitCount = 50;

    //String um den Sourcecode aus den einzelnen zeilen zusammenzubauen
    $source = "";

    //Initialiseren vom Einheitenarray
    $units = ARRAY();

    for($i = 0; $i < $unitCount; $i++)
    {
       $source = "";
       $link = $rules."?modus=units&unitsID=".$i;
       
       //Zeilen des Sourcecodes dieser Seite
       $lines = file($link);
       
       //führt die einzelnen Zeilen des Sourcecodes in einem String zusammen
       for($j = 0; $j < sizeof($lines); $j++)
       {
          $source .= $lines[$j]."\n";
       }
       $units[$i] = extractData($source);
       
       if(($i != 0) && (strcmp($units[$i]["Name"][1], "Faustkämpfer") == 0))
       { }
       else
       {
       
          $dbResult = "INSERT INTO `units` (" .
          "`Name`," .
          "`Fernangriffsschaden`," .
          "`Gebäudeschaden`," .
          "`Getümmelschaden`," .
          "`Fernkampfwiderstand`," .
          "`Nahkampfwiderstand`," .
          "`Größe`," .
          "`Kriegspunkte`," .
          "`Normal`," .
          "`Schwer`," .
          "`Kritisch`," .
          "`Bevölkerung`," .
          "`Nahrung`," .
          "`Holz`," .
          "`Steine`," .
          "`Metall`," .
          "`Schwefel`," .
          "`Göttliche Gunst`," .
          "`Eichenholz`," .
          "`Obelisk`," .
          "`Schwefelpulver`) VALUES (";
       
          $dbResult .= /*"'".$i."',*/"'".$units[$i]["Name"][1]."'";
          for($k = 0; $k < sizeof($units[$i]["Werte"][0]); $k++)
          {
             $dbResult .= ", '".$units[$i]["Werte"][2][$k]."'";
          }
          for($k = 0; $k < sizeof($units[$i]["Treffer"][0]); $k++)
          {
             $dbResult .= ", '".$units[$i]["Treffer"][1][$k]."'";
          }
          $dbResult .= buildResString($units[$i]["Kosten"], $resis).");";

          mysql_query($dbResult) or die("ERROR!");
       }
    }

    echo "DONE!";

    //echo print_r($units); DEBUG

    function buildResString($a, $r)
    {
       $result = "";
       $b = false;

       for($i = 0; $i < sizeof($r); $i++)
       {
          $b = false;

          for($j = 0; $j < sizeof($a[0]); $j++)
          {
             if($r[$i] == $a[1][$j])
             {         
                $result .= ", '".$a[2][$j]."'";
                $b = true;
             }
          }
          if($b == false)
          {
             $result .= ", '0'";
          }
       }
       return $result;
    }

    function extractData($s)
    {
       //ARRAY in dem alle Informationen über eine Einheit verstaut werden
       $unit = ARRAY();   
       
       //Name der Einheit
       $reg = "/<strong>(.+?)<\/strong>/s";
       preg_match($reg, $s, $name);

       $unit["Name"] = $name;
       

       //String in dem die Ehkosten stehen
       $reg = "/Kosten(.+?)Eigenschaften/s";
       preg_match($reg, $s, $k);
       
       $reg = "/<td>.+?title=\"(.+?)\" \/>\s+(\d+)/";
       preg_match_all($reg, $k[1], $kosten);
       
       $unit["Kosten"] = $kosten;
       
       
       //String in dem die EhKampfwerte stehen
       $reg = "/Eigenschaften(.+?)Treffer/s";
       preg_match($reg, $s, $w);
       
       $reg = "/<tr>\s+<td.*?>(.+?)<\/td>\s+<td.*?>(\d+)<\/td>\s+<\/tr>/s";
       preg_match_all($reg, $w[1], $werte);
       
       $unit["Werte"] = $werte;
       
       
       //String in dem die Trefferwahrscheinlichkeiten stehen
       $reg = "/Trefferwahrscheinlichkeiten(.+?)Bewegungs/s";
       preg_match($reg, $s, $t);
       
       $reg = "/<tr>\s+<td.+?<td.*?>(\d+).+?<\/td>\s+<\/tr>/s";
       preg_match_all($reg, $t[1], $treffer);
       
       $unit["Treffer"] = $treffer;
       
       /*
       DEBUG:
       for($i = 1; $i < sizeof($unit["Werte"]); $i++)
       {
          for($j = 0; $j < sizeof($unit["Werte"][0]); $j++)
          {
             echo $unit["Werte"][$i][$j]."<br>\n";
          }
       }*/
       
       return $unit;
    }
         


    ?>
Askeron
Spielball der Götter
Spielball der Götter
 
Beiträge: 31
Registriert: 21.05.2004, 02:41


Zurück zu UA-Tools

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste