|
|
|
<?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)
|
|
|
|
|
|
|
|
// 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");
|
|
|
|
|
|
|
|
// Es sollen keine NPC mitmachen :) und nicht die Spezial Wanted NPCs
|
|
|
|
$auswahl_kriteria = ' type!=\''.$race_type.'\'';
|
|
|
|
$auswahl_kriteria .= ' AND besitzer!=2 ';
|
|
|
|
if($fusion != 1){
|
|
|
|
$auswahl_kriteria .= ' AND fusions_rasse = \'0\' ';
|
|
|
|
}
|
|
|
|
|
|
|
|
$races = getSpecialRaceIds();
|
|
|
|
$special_race_ids = array();
|
|
|
|
foreach($races as $race) {
|
|
|
|
$special_race_ids[] = '\''.$race['id'].'\'';
|
|
|
|
}
|
|
|
|
|
|
|
|
if($special != 1){
|
|
|
|
$auswahl_kriteria .= ' AND rasse NOT IN('.implode(',',$special_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;
|
|
|
|
}
|