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