table."` SET `menge` = ".$roh[$i]['menge']." WHERE `rohstoff` = ".$roh[$i]['id']." AND `account` = ".$this->user;
db_query($sql) or die("Fehler beim Aktualisieren der Rohstoffdaten
\n".db_error(LINK));
}
}
/**
* Entfernt nicht mehr benötigte Rohstoffdaten
*
* @param array $roh
*/
function delete_data($roh) {
for($i=0;$itable."` WHERE `rohstoff` = ".$roh[$i]['id']." AND `account` = ".$this->user;
db_query($sql) or die("Fehler beim Entfernen von leeren Rohstoffdaten
\n".db_error(LINK));
}
}
/**
* Speichert neue Rohstoffdaten
*
* @param array $roh
*/
function insert_data($roh) {
for($i=0;$itable."`(`account`,`rohstoff`,`menge`) VALUES (".$this->user.",".$roh[$i]['id'].",".$roh[$i]['menge'].")";
db_query($sql) or die("Fehler beim Eintragen neuer Rohstoffdaten
\n".db_error(LINK));
}
}
/**
* Gibt die gesammelten Rohstoffe des aktuellen Spielers zurück
*
* @return array
*/
function load_data() {
global $session;
// Erste Abfrage vorbereiten
$sql1 = "SELECT * FROM `".$this->table."` WHERE `account` = ".$session['user']['acctid'];
$result1 = db_query($sql1) or die("Fehler beim Laden der Rohstoffdaten
\n".db_error(LINK));
$max1 = db_num_rows($result1);
// Vorbereitung des zweiten Querys
$mengen = array();
$sql2 = "SELECT * FROM `rohstoffe` WHERE ";
// Auswertung des ersten Querys und Zusammenstellung der Mengen und des zweiten Querys
for($i=0;$i<$max1;$i++) {
$row1 = db_fetch_assoc($result1);
$mengen[$row1['rohstoff']] = $row1['menge'];
$sql2 .= "r_id = ".$row1['rohstoff'].", ";
}
// Letztes Komma entfernen und Query ausführen
$lastcomma = strrpos($sql2,',');
$sql2 = substr($sql2,0,$lastcomma);
$result2 = db_query($sql2) or die("Fehler beim Laden der Rohstoffdaten
\n".db_error(LINK));
$max2 = db_num_rows($result2);
// Zweiten Query ausführen und Datensatz zusammen stellen
$roh = array();
for($i=0;$i<$max2;$i++) {
$row2 = db_fetch_assoc($result2);
$roh[$i] = array(
'id' => $row2['r_id'],
'name' => $row2['r_name'],
'quality' => $row2['r_quality'],
'menge' => $mengen[$row2['r_id']]
);
}
return $roh;
}
/**
* Speichert nach Überprüfung geänderte Rohstoffdaten
*/
function save_data() {
$alt = load_data();
$max = count($alt);
for($i=0;$idata);$i++) {
if($i>$max) {
$insert[] = $this->data[$i];
} elseif($this->data['menge'] <= 0) {
$delete[] = $this->data[$i];
} elseif($this->data['menge'] != $alt['menge']) {
$update[] = $this->data[$i];
} else {
// Eigentlich sollte hier nichts passieren, da die Werte noch überein stimmen
}
}
if($update != array()) $this->update_data($update);
if($delete != array()) $this->delete_data($delete);
if($insert != array()) $this->insert_data($insert);
}
}
/**
* Erweitert das System um eine komfortablere Zugriffsmethode
*/
class rohstoff extends rohstoff_loader {
/**
* Speichert die IDs der Rohstoffbereiche in Namen
*
* @var array
*/
var $zugriff;
/**
* Konstruktor der Rohstoffverwaltung
*
* @param Int $user acctid des Users
* @return rohstoff
*/
function rohstoff($user) {
$this->user = $user;
$this->data = $this->load_data();
$this->zugriff = $this->fetch_keys();
}
/**
* Erstellt das Zugriffs-Array
*
* @return array
*/
function fetch_keys() {
for($i=0;$idata);$i++) {
$x = $this->data[$i];
$keys[$x['name']][$x['quality']] = $x['id'];
}
return $keys;
}
/**
* Gibt den Key zu einem Datensatz zurück
*
* @param string $name - Name des Stoffs
* @param int $quality - Qualität des Stoffs
* @return int
*/
function accessKey($name,$quality) {
return $this->zugriff[$name][$quality];
}
/**
* Gibt die Daten zu dem gewünschten Datensatz oder bei einem Fehler FALSE zurück
*
* @param string $name - Name des Stoffes
* @param int $quality - Qualität
* @return array oder FALSE
*/
function get($name,$quality) {
$x = $this->accessKey($name,$quality);
$data = $this->data[$x];
if(empty($data)) $data = false;
return $data;
}
/**
* Schreibt eine einzelne Eigenschaft eines Datensatzes
*
* @param int $access - Key des Datensatzes
* @param string $section
* @param mixed $value - Neuer Wert
*/
function setSingle($access,$section,$value) {
$this->data[$access][$section] = $value;
}
/**
* Schreibt einen kompletten Datensatz
*
* @param int $access - Key des Datensatzes
* @param array $value - Neuer Datensatz
*/
function setAll($access,$value) {
$this->data[$access] = $value;
}
/**
* Unterscheidet einen Schreibauftrag und führt diesen aus
*
* @param string $name - Name des Stoffs
* @param int $quality - Qualität des Stoffs
* @param mixed $value - Neuer Wert/Datensatz
* @param mixed $section
*/
function set($name,$quality,$value,$section=false) {
$x = $this->accessKey($name,$quality);
if(!$section) $this->setAll($x,$value);
else $this->setSingle($x,$section,$value);
}
}
/**
* Klasse für Gebrauchsgüter
*
* Gebrauchsgüter müssen im gegensatz zu
* Rohstoffen erst hergestellt werden.
*/
class gut extends rohstoff {
/**
* Speichert die ID des dazugehörigen Rezeptes
*
* @var int
*/
var $rezeptid;
/**
* Speichert die unterschiedlichen Funktionen des Guts
*
* @var array
*/
var $funktionen;
}
?>