von 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;
}
?>
