You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			252 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			PHP
		
	
			
		
		
	
	
			252 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			PHP
		
	
| <?php
 | |
| /*
 | |
|  *
 | |
|  * @copyright (c) 2010 animegame.eu
 | |
|  * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public Licence
 | |
|  *
 | |
|  */
 | |
| /************************************************************************
 | |
|  * Dieses Tunier soll die verschiedenen Turnierberechnungsseiten
 | |
|  * ersetzen. Durch Übergabe der Parameter beim starten des Cronjobs
 | |
|  * lässt sich das Turnier konfigurieren.
 | |
|  * @author Hecht
 | |
|  *
 | |
|  * TODO: Gruppenphase implementieren
 | |
|  * TODO: Parameter (bis auf Name) sollten aus Datenbank geladen werden
 | |
|  * 		 damit die GM direkt einfluss darauf nehmen können
 | |
|  * TODO: Die Funktion turnierfight nutzt die komplexe Datei
 | |
|  * 		 "turnier_kampf.php". Es wäre sinnvoll dies zu ersetzen.
 | |
|  * TODO: Die Datenbankstruktur ist mehr als grauenvoll. Umsetzung wie
 | |
|  * 		 bei der Schatzsuche gewünscht ^^
 | |
|  ************************************************************************/
 | |
| 
 | |
| 
 | |
| // Put args into get
 | |
| 
 | |
| // Neccessary for cronjob execution
 | |
| if ($argv) {
 | |
| 	foreach ($argv as $k=>$v){
 | |
| 		if ($k==0) continue;
 | |
| 		$it = explode("=",$argv[$k]);
 | |
| //		echo $it[0].'='.$it[1].'('.$argv[$k].')'."\n";
 | |
| 		if (isset($it[1])) $_GET[$it[0]] = $it[1];
 | |
| 	}
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| //set_time_limit(0);
 | |
| //include "db.php";
 | |
| //include "inclu/char.inc.php";
 | |
| include('db.php');
 | |
| include('path.inc.php');
 | |
| include_once(ROOT_PATH.'/include/char.inc.php');
 | |
| include_once(ROOT_PATH.'/include/rassen.inc.php');
 | |
| 
 | |
| 
 | |
| $name = $_GET['name'];		// Name des Turniers (benötigt)
 | |
| $anzahl = $_GET['anzahl'];	// Anzahl (benötigt)
 | |
| 
 | |
| if(is_null($name)){
 | |
| 	echo 'Kein Name für Turnier angegeben!<br>';
 | |
| 	exit;
 | |
| }
 | |
| 
 | |
| // Auswahlkriterien
 | |
| $fusion = $_GET['fusion'];		// 1 für erlaubt
 | |
| $special = $_GET['special'];	// Spezialchars 1 für erlaubt
 | |
| $minlevel = $_GET['minlevel'];	// selbsterklärend
 | |
| $maxlevel = $_GET['maxlevel'];	// selbsterklärend
 | |
| $gain = $_GET['gain'];			// ('Anmeldung', 'PL', 'Level')
 | |
| $randomize = $_GET['randomize']; // 1 für nach jeder Runde die reihenfolge setzen
 | |
| $itemless = $_GET['itemless']; // gibt an ob das turnier die items ingorieren soll (standard sind items aktiv)
 | |
| 
 | |
| $npc = $_GET['npc'];
 | |
| 
 | |
| // Turniereigenschaften
 | |
| $gruppenphase = $_GET['gruppenphase'];	// Flag für Gruppenphase (1 für aktiv)
 | |
| $grp_size = $_GET['grp_size'];			// Anzahl der Teilnehmer in einer Gruppe
 | |
| $grp_proceed = $_GET['grp_proceed'];	// Anzahl der Teilnehmer die Gruppenphase verlassen (1 nur Sieger, 2 Sieger und Zweiter ..)
 | |
| 
 | |
| /**
 | |
|  * Berechnet ein Kampf zwischen zwei chars
 | |
|  * @param int $char1_id die id des ersten chars
 | |
|  * @param int $char2_id die id des zweiten chars
 | |
|  * @param String $art der name des turniers (für die sql-Anfrage wichtig)
 | |
|  * @param int $round rundennummer (0,1,2...)
 | |
|  * @return int die id des siegenden chars
 | |
|  */
 | |
| function turnierfight($char1_id, $char2_id, $art_1, $round, $itemless){
 | |
| 	// Gotta replace this later -.-
 | |
| 	echo 'Fight between '.$char1_id.' and '.$char2_id .', items = ' . ($itemless == 1?'TRUE':'FALSE') . '<br>' . "\n" ;
 | |
| 
 | |
| 	$chara_1 = null;
 | |
| 	$chara_2 = null;
 | |
| 	if($itemless == 1) {
 | |
| 		$chara_1 = getChar($char1_id); // ohne Equip für Turniere!!
 | |
| 		$chara_2 = getChar($char2_id);	// ohne Equip für Turniere!!
 | |
| 	} else {
 | |
| 		$chara_1 = getCharWithBuffs($char1_id); // Equip für Turniere!!
 | |
| 		$chara_2 = getCharWithBuffs($char2_id);	// Equip für Turniere!!
 | |
| 	}
 | |
| 	include "turnier_kampf.php";
 | |
| 
 | |
| 	echo ', Sieger '.$sieger.'<br>'. "\n" ;
 | |
| //	 in $sieger steht die id des gewinners
 | |
| 	if($char1_id == $sieger){
 | |
| 		return $char1_id;
 | |
| 	}
 | |
| 	return $char2_id;
 | |
| }
 | |
| 
 | |
| 
 | |
| // Auswerten der Eingaben
 | |
| if($gruppenphase == 1){
 | |
| 	if(is_null($grp_size)){ // Wenn es nicht gesetzt ist
 | |
| 		$grp_size = 4; // Default: 4 in einer Gruppe
 | |
| 	}
 | |
| 	if(is_null($grp_proceed)){ // Wenn es nicht gesetzt ist
 | |
| 		$grp_proceed = 1; // Default: Nur Sieger kommt weiter
 | |
| 	}
 | |
| 	// Berechne ob die Angegebene Anzahl passt (Anzahl muss durch grp_size teilbar und Ergebnis eine 2er Potenz sein)
 | |
| 	$count_groups = round($anzahl / $grp_size);
 | |
| 	$loga = log($count_groups * $grp_proceed, 2) ;
 | |
| 	if($anzahl % $grp_size != 0 || $loga != round($loga)){
 | |
| 		echo 'Parameter der Gruppenphasen sind ungültig!<br>';
 | |
| 	}
 | |
| 
 | |
| 	echo 'Gruppenphasen werden leider noch nicht unterstützt<br>';
 | |
| 	exit;
 | |
| } else{
 | |
| 	$loga = log($anzahl, 2) ;
 | |
| 	if($loga != round($loga)){
 | |
| 		echo 'Die Anzahl der Teilnehmer ist ungültig (Muss eine 2er Potenz sein)!<br>';
 | |
| 		exit;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| mysql_query('DELETE FROM turnier_kampf WHERE art=\''.$name.'\'');
 | |
| 
 | |
| $race_type = getRaceTypeName("NPC");
 | |
| 
 | |
| $auswahl_kriteria = '1';
 | |
| 
 | |
| if($fusion != 1){
 | |
| 	$auswahl_kriteria .= ' AND fusion_rasse = \'0\' ';
 | |
| }
 | |
| 
 | |
| // Es sollen keine NPC mitmachen :) und nicht die Spezial Wanted NPCs
 | |
| 
 | |
| $exclude_race_ids = array();
 | |
| 
 | |
| if($special != 1){
 | |
| 	$races = getSpecialRaceIds();
 | |
| 	$npc_race = getRaceTypeName('NPC'); // do not remove npc (there is a separate setting for this)
 | |
| 	
 | |
| 	foreach($races as $race) {
 | |
| 		if($race['type'] != $npc_race['id']) {
 | |
| 			$exclude_race_ids[] = '\''.$race['id'].'\'';
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| if($npc != 1) {
 | |
| 	$npc_race = getRaceTypeName('NPC'); // do not remove npc (there is a separate setting for this)
 | |
| 	$races = getRacesByType($npc_race); // remove all NPC
 | |
| 	foreach($races as $race) {
 | |
| 		$exclude_race_ids[] = '\''.$race['id'].'\'';
 | |
| 	}
 | |
| }
 | |
| 
 | |
| if(count($exclude_race_ids)) {
 | |
| 	$auswahl_kriteria .= ' AND rasse NOT IN('.implode(',',$exclude_race_ids).') ';
 | |
| }
 | |
| 
 | |
| 
 | |
| if(is_numeric($minlevel)){
 | |
| 	$auswahl_kriteria .= ' AND level >= '.$minlevel.' ';
 | |
| }
 | |
| 
 | |
| if(is_numeric($maxlevel)){
 | |
| 	$auswahl_kriteria .= ' AND level <= '.$maxlevel.' ';
 | |
| }
 | |
| 
 | |
| // Erstma checken ob es überhaupt genug chars gibt ;)
 | |
| 
 | |
| $sql = 'SELECT count(*) as anzahl from chars where '.$auswahl_kriteria;
 | |
| echo $sql.'<br>';
 | |
| $qry = mysql_query($sql);
 | |
| $row = mysql_fetch_assoc($qry);
 | |
| 
 | |
| if($row['anzahl'] < $anzahl){
 | |
| 	echo $name.' konnte nicht gestartet werden, da es nur '.$row['anzahl'].' von '.$anzahl.' nötigen Chars gibt!<br>';
 | |
| 	exit;
 | |
| }
 | |
| 
 | |
| // Erstma nur die id auslesen (danach wird eh nochmal gemischt ;))
 | |
| $cid = array();
 | |
| if($gain == 'Anmeldung'){
 | |
| 	$sql = 'SELECT charakter as id FROM turnier1 t WHERE art = \''.$name.'\'';
 | |
| 	$qry = mysql_query($sql);
 | |
| 	while($row = mysql_fetch_assoc($qry)){
 | |
| 		$cid[] = $row['id'];
 | |
| 	}
 | |
| 	$sql = 'DELETE FROM turnier1 WHERE art = \''.$name.'\'';
 | |
| //	echo $sql .'<br>';
 | |
| 	mysql_query($sql); // Lösche die Anmeldungsliste
 | |
| 	if(count($cid) > 0){
 | |
| 		$sql = 'SELECT id FROM chars where '.$auswahl_kriteria.' and id NOT IN('.join(',',$cid).') ORDER BY RAND()';
 | |
| 	} else {
 | |
| 		// Turnier is voll!
 | |
| 		$sql = 'SELECT id FROM chars where '.$auswahl_kriteria.' ORDER BY RAND()';
 | |
| 	}
 | |
| } else if($gain == 'PL'){
 | |
| 	// Die Buffs werden nicht zur PL gezählt ;)
 | |
| 	$sql = 'SELECT id FROM chars where '.$auswahl_kriteria.' ORDER BY starke+verteidigung+speed+ausdauer+glueck desc';
 | |
| } else if($gain == 'Level'){
 | |
| 	$sql = 'SELECT id FROM chars where '.$auswahl_kriteria.' ORDER BY level desc';
 | |
| } else{
 | |
| 	echo 'Parameter gain war weder Anmeldung, PL noch Level<br>';
 | |
| 	exit;
 | |
| }
 | |
| 
 | |
| echo $sql.'<br>';
 | |
| $qry = mysql_query($sql);
 | |
| while(($row = mysql_fetch_assoc($qry)) && count($cid) < $anzahl){
 | |
| //	echo $row['id'].'<br>';
 | |
| 	$cid[] = $row['id'];
 | |
| }
 | |
| 
 | |
| //print_r($cid);
 | |
| 
 | |
| $sql = 'SELECT id FROM chars WHERE id IN('.join(', ',$cid).') ORDER BY RAND()'; // Mischen der Teilnehmer
 | |
| //echo $sql.'<br>';
 | |
| $qry = mysql_query($sql);
 | |
| $char_array = array();
 | |
| while($row = mysql_fetch_assoc($qry)){
 | |
| 	$char_array[] = $row['id'];
 | |
| }
 | |
| // So alle chars sind jetzt in den Arrays
 | |
| $round = 1;
 | |
| 
 | |
| 
 | |
| //print_r($chars);
 | |
| echo '<br>';
 | |
| 
 | |
| // Hier Gruppenphase berechnen und die Chars für die Endrunde in $chars speichern
 | |
| 
 | |
| // Beginn der Endrunde
 | |
| while(count($char_array) > 1){ // Solange bis nur ein Char übrig bleibt
 | |
| 	$n_chars = array();
 | |
| 	for($i=0;$i<count($char_array);$i+=2){
 | |
| //		echo 'Berechne fight zwischen '.$char_array[$i].'und '.$char_array[$i+1].'('.$i.'/'.count($char_array).')<br>';
 | |
| 		$n_chars[] = turnierfight($char_array[$i], $char_array[$i+1], $name, $round, $itemless);
 | |
| 	}
 | |
| //	echo 'nxt round<br>';
 | |
| 	$round++;
 | |
| 	if($randomize == 1) {
 | |
| 		shuffle($n_chars);
 | |
| 	}
 | |
| 	$char_array = $n_chars;
 | |
| }
 |