"faible", "intermediaire", "puissant"); $type = $types[$type]; $query = "/objets/"; $percent = rand(1, 100); $xml = simplexml_load_file('xml/obm.xml'); $cats = $xml->xpath("/objets/*/".$type."[@min<='".$percent."' and @max>='".$percent."']/parent::*"); //$cats = $xml->xpath("/objets/anneaux"); $percent = rand(1, 100); $cat = ""; switch ($cats[0]->getName()) { case "armes": $item = getWeapon($type, $xml); break; case "armures": $item = getArmor($type, $xml); break; case "parchemins": $item = getScroll($type, $xml); break; case "objets_merveilleux": $query .= $cats[0]->getName()."/*/" . $type . "/parent::*"; $item = ($xml->xpath($query)); $item = array($item[rand(0, count($item)-1)]); //$item[0]->nom = "".$item[0]->nom.""; $item = array(@sprintf(' %s%s', utf8_decode($cat), utf8_decode($item[0]->nom)), @sprintf('%s', $item[0]->valeur)); break; default: $query .= $cats[0]->getName()."/*/" . $type . "/parent::*"; $item = ($xml->xpath($query)); $item = array($item[rand(0, count($item)-1)]); $cat = $item[0]->getName()." "; $pos = strpos($item[0]->nom, "%opt"); if ($pos !== false) { $opts = $item[0]->options->option; //echo $opts[rand(1, count($opts))-1]."
"; $item[0]->nom = str_replace("%opt", $opts[rand(1, count($opts))-1], $item[0]->nom); } $item = array(@sprintf(' %s%s', utf8_decode($cat), utf8_decode($item[0]->nom)), @sprintf('%s', $item[0]->valeur));/**/ } return $item; } function getScroll($type, $xml) { $type_sort = (rand(1, 100) > 70 ? "divin" : "profane"); $nbr = ($type == "faible" ? rand(1, 3) : ($type == "puissant" ? rand(1, 6) : rand(1, 4))); $valeur = 0; $nom = " Parchemin ".$type_sort." ("; for ($i=0; $i<$nbr; $i++) { $percent = rand(1, 100); $lvl = 0; switch ($type) { case "faible": switch ($percent) { case ($percent < 6): $lvl = 0; break; case ($percent < 51): $lvl = 1; break; case ($percent < 96): $lvl = 2; break; default: $lvl = 3; }break; case "intermediaire": switch ($percent) { case ($percent < 6): $lvl = 2; break; case ($percent < 66): $lvl = 3; break; case ($percent < 96): $lvl = 4; break; default: $lvl = 5; }break; default: switch ($percent) { case ($percent < 6): $lvl = 4; break; case ($percent < 51): $lvl = 5; break; case ($percent < 71): $lvl = 6; break; case ($percent < 86): $lvl = 7; break; case ($percent < 96): $lvl = 8; break; default: $lvl = 9; } } $item = $xml->xpath("/objets/Sorts/".$type_sort."/lvl".$lvl."/*"); if (count($item) > 0) { $id = rand(1, count($item))-1; $nom .= ($i==0 ? "" : ", ").$item[$id]->nom." (".$lvl.")"; $valeur += $item[$id]->valeur; } else { $nom .= ($i==0 ? "" : ", ")."Un sort (".$lvl.")"; } } return array(utf8_decode($nom).")", $valeur); } function getWeapon($type, $xml) { $base_type = rand(1, 100); $percent = rand(1, 100); $base_type = $xml->xpath("/objets/armes/base/*[@min<='".$base_type."' and @max>='".$base_type."']/*[@min<='".$percent."' and @max>='".$percent."']"); $base = $base_type[0]; $base_type = ($base[0]->dist ? "ranged" : "melee"); $properties = array(); do { $percent = rand(1, 100); switch ($type) { case "faible": switch ($percent) { case ($percent < 71): $property = array("nom"=>"+1", "mod"=>1); break; case ($percent < 86): $property = array("nom"=>"+2", "mod"=>2); break; case ($percent < 91): $property = array("nom"=>"*", "mod"=>-1); break; default: $property = array("nom"=>"*", "mod"=>0); }break; case "intermediaire": switch ($percent) { case ($percent < 11): $property = array("nom"=>"+1", "mod"=>1); break; case ($percent < 30): $property = array("nom"=>"+2", "mod"=>2); break; case ($percent < 59): $property = array("nom"=>"+3", "mod"=>3); break; case ($percent < 63): $property = array("nom"=>"+4", "mod"=>4); break; case ($percent < 69): $property = array("nom"=>"*", "mod"=>-1); break; default: $property = array("nom"=>"*", "mod"=>0); }break; default: switch ($percent) { case ($percent < 21): $property = array("nom"=>"+3", "mod"=>3); break; case ($percent < 39): $property = array("nom"=>"+4", "mod"=>4); break; case ($percent < 50): $property = array("nom"=>"+5", "mod"=>5); break; case ($percent < 64): $property = array("nom"=>"*", "mod"=>-1); break; default: $property = array("nom"=>"*", "mod"=>0); } } if ($property["mod"]==0) { $properties = getWeaponProperties($type, $base, $base_type, $xml, $properties); } } while ($property["mod"]==0); if ($property["mod"]<0) { //Arme spécifique $percent = rand(1, 100); $spec = $base->xpath("/objets/armes/spec/arme/".$type."[@min<='".$percent."' and @max>='".$percent."']/parent::*"); $nom = $spec[0]->nom; $valeur = $spec[0]->valeur; } else { /*print_r($base); print_r($property);*/ /*print_r($properties); echo "
";/**/ if ($base->nom == "Munitions") { $percent = rand(1, 100); $base->nom = ($percent < 21 ? "Billes" : ($percent < 51 ? "Carreaux" : "Flèches")." (50)"); } $nom = $base->nom." ".$property["nom"]; foreach ($properties as $value) { /*print_r($value); echo "
";/**/ $nom .= " ".$value[0]; //echo $nom." : ".$value[1]."
"; $property["mod"]+=$value[1]; } //echo "
"; $valeur = $base->valeur + ($property["mod"] * $property["mod"] * 2000); } return array(" ".utf8_decode($nom), $valeur); } function getArmor($type, $xml) { $percent = rand(1, 100); $base_type = $xml->xpath("/objets/armures/base/*/*[@min<='".$percent."' and @max>='".$percent."']"); //print_r($base_type); echo "
"; $base = $base_type[rand(0, 1)]; $base_type = $base->xpath("parent::*"); $base_type = $base_type[0]->getName(); //echo $base_type."
"; $properties = array(); do { $percent = rand(1, 100); switch ($type) { case "faible": switch ($percent) { case ($percent < 71): $property = array("nom"=>"+1", "mod"=>1); break; case ($percent < 86): $property = array("nom"=>"+2", "mod"=>2); break; case ($percent < 91): $property = array("nom"=>"*", "mod"=>-1); break; default: $property = array("nom"=>"*", "mod"=>0); }break; case "intermediaire": switch ($percent) { case ($percent < 11): $property = array("nom"=>"+1", "mod"=>1); break; case ($percent < 30): $property = array("nom"=>"+2", "mod"=>2); break; case ($percent < 59): $property = array("nom"=>"+3", "mod"=>3); break; case ($percent < 63): $property = array("nom"=>"+4", "mod"=>4); break; case ($percent < 69): $property = array("nom"=>"*", "mod"=>-1); break; default: $property = array("nom"=>"*", "mod"=>0); }break; default: switch ($percent) { case ($percent < 21): $property = array("nom"=>"+3", "mod"=>3); break; case ($percent < 39): $property = array("nom"=>"+4", "mod"=>4); break; case ($percent < 50): $property = array("nom"=>"+5", "mod"=>5); break; case ($percent < 64): $property = array("nom"=>"*", "mod"=>-1); break; default: $property = array("nom"=>"*", "mod"=>0); } } if ($property["mod"]==0) { $properties = getArmorProperties($type, $base, $base_type, $xml, $properties); } } while ($property["mod"]==0); if ($property["mod"]<0) { //Armure spécifique $percent = rand(1, 100); $spec = $base->xpath("/objets/armures/spec/".$base_type."/*/".$type."[@min<='".$percent."' and @max>='".$percent."']/parent::*"); $nom = $spec[0]->nom; $valeur = $spec[0]->valeur; } else { /*print_r($base); print_r($property);*/ /*print_r($properties); echo "
";/**/ $nom = $base->nom." ".$property["nom"]; foreach ($properties as $value) { $nom .= " ".$value[0]; $base->valeur+=$value[1]; $property["mod"]+=$value[2]; } $valeur = $base->valeur + ($property["mod"] * $property["mod"] * 1000); } return array(" ".utf8_decode($nom), $valeur); } function getWeaponProperties($type, $base, $base_type, $xml, $properties = array()) { $percent = rand(1, 100); //echo $type." ".$base_type." ".$percent."
"; $prop = $xml->xpath("/objets/armes/prop/".$base_type."/property/".$type."[@min<='".$percent."' and @max>='".$percent."']/parent::*"); //print_r($prop[0]); echo "
"; if ($prop[0]->mod == 0) { $properties = getWeaponProperties($type, $base, $base_type, $xml, $properties); $properties = getWeaponProperties($type, $base, $base_type, $xml, $properties); } else { $pos = strpos($prop[0]->nom, "%kill"); if ($pos !== false) { $percent = rand(1, 100); $kills = $xml->xpath("/objets/armes/kill/enemy[@min<='".$percent."' and @max>='".$percent."']"); //print_r($kills); echo "
"; $prop[0]->nom = str_replace("%kill", $kills[0], $prop[0]->nom); } $nom = $prop[0]->nom; $replay = false; foreach ($properties as $vector) { if ($vector[0]==$nom) { $replay=true; } } if ($replay) { $properties[] = getWeaponProperties($type, $base, $base_type, $xml, $properties); } else { $properties[] = array($prop[0]->nom, $prop[0]->mod); } } //print_r ($prop); echo "
"; //print_r ($base); echo "
"; return $properties; } function getArmorProperties($type, $base, $base_type, $xml, $properties = array()) { $percent = rand(1, 100); //echo $type." ".$base_type." ".$percent."
"; $prop = $xml->xpath("/objets/armures/prop/".$base_type."/property/".$type."[@min<='".$percent."' and @max>='".$percent."']/parent::*"); //print_r($prop[0]); echo "
"; if ($prop[0]->mod == 0 && $prop[0]->valeur == 0) { $properties = getArmorProperties($type, $base, $base_type, $xml, $properties); $properties = getArmorProperties($type, $base, $base_type, $xml, $properties); } else { $nom = $prop[0]->nom; $replay = false; foreach ($properties as $vector) { if ($vector[0]==$nom) { $replay=true; } } if ($replay) { $properties[] = getArmorProperties($type, $base, $base_type, $xml, $properties); } else { $properties[] = array($nom, $prop[0]->valeur, $prop[0]->mod); } } //print_r ($prop); echo "
"; //print_r ($base); echo "
"; return $properties; } function checkProperties() { $output = ""; $xml = simplexml_load_file('xml/obm.xml'); $obm = array("melee", "ranged"); $types = array("faible", "intermediaire", "puissant"); foreach ($obm as $o) { foreach ($types as $t) { for ($i=1; $i<=100; $i++) { $c = $xml->xpath("/objets/armes/prop/".$o."/property/".$t."[@min<='".$i."' and @max>='".$i."']/parent::*"); if (count($c)!=1) { $output .= $o." ".$t." N°".$i." contient ".count($c)." entrée(s)
"; } echo($o." ".$t." N°".$i." : ".$c[0]->nom."
"); } } } return $output; } function checkMagical() { $output = ""; $xml = simplexml_load_file('xml/obm.xml'); $obm = array("anneaux", "baguettes", "potions"); $obm2 = array("bâtons", "sceptres"); $types = array("faible", "intermediaire", "puissant"); $types2 = array("intermediaire", "puissant"); foreach ($obm as $o) { foreach ($types as $t) { for ($i=1; $i<=100; $i++) { $c = $xml->xpath("/objets/".$o."/*/".$t."[@min<='".$i."' and @max>='".$i."']/parent::*"); if (count($c)!=1) { $output .= $o." ".$t." N°".$i." contient ".count($c)." entrée(s)
"; } echo($o." ".$t." N°".$i." : ".$c[0]->nom."
"); } } } foreach ($obm2 as $o) { foreach ($types2 as $t) { for ($i=1; $i<=100; $i++) { $c = $xml->xpath("/objets/".$o."/*/".$t."[@min<='".$i."' and @max>='".$i."']/parent::*"); if (count($c)!=1) { $output .= $o." ".$t." N°".$i." contient ".count($c)." entrée(s)
"; } echo($o." ".$t." N°".$i." : ".$c[0]->nom."
"); } } } return $output; }