diff --git a/cronjob/generic_turnier.php b/cronjob/generic_turnier.php
index 74118a9..0380085 100644
--- a/cronjob/generic_turnier.php
+++ b/cronjob/generic_turnier.php
@@ -217,10 +217,6 @@ if($gain == 'Anmeldung'){
// echo $sql.'
';
$qry = db_query($sql);
while(($row = mysqli_fetch_assoc($qry)) && count($cid) < $anzahl){
-
- // exclude winners of old tournaments in case requested
- // exclude fusions that have participated multiple times in tournaments in case requested
-
// echo $row['id'].'
';
$cid[] = $row['id'];
}
diff --git a/cronjob/generic_turnier_auswertung.php b/cronjob/generic_turnier_auswertung.php
index 8444a68..220e23b 100644
--- a/cronjob/generic_turnier_auswertung.php
+++ b/cronjob/generic_turnier_auswertung.php
@@ -16,36 +16,43 @@ include('path.inc.php');
include_once (ROOT_PATH.'/include/sqlwrapper.inc.php');
include_once (ROOT_PATH.'/include/event.inc.php');
include_once (ROOT_PATH.'/include/halloffame.inc.php');
+include_once (ROOT_PATH.'/include/tournament.inc.php');
+
+// First run schedule tournaments
+runScheduledTournaments();
$tournaments = array();
$tournament_event_ids = array();
-$qry = db_query('SELECT * FROM turniere WHERE ausgewertet = FALSE');
+$qry = db_query('SELECT * FROM tournament WHERE ausgewertet = FALSE');
while ($row = mysqli_fetch_assoc($qry)) {
$tournament_event_ids[] = $row['event_id'];
$tournaments[$row['event_id']] = $row;
}
-$sql = 'select event_id, MAX(visible) < now() as done, MAX(event_fight_id) as final_fight_id FROM event_fights WHERE event_id IN ('.join(',', $tournament_event_ids).') GROUP BY event_id';
-$qry = db_query($sql);
-
-$tournaments_done = array();
-
-while ($row = mysqli_fetch_assoc($qry)) {
- if ($row['done']) {
- $event_id = $row['event_id'];
- $tournament = $tournaments[$event_id];
- // determine the winner of the tournament ...
- $final_fight = getEventFight($event_id, $row['final_fight_id']);
- $winner_char = getEventChar($event_id, $final_fight['winner']);
- $row = mysqli_fetch_assoc(db_query('Select max(id) as round from online'));
-
- insertIntoHallOfFameFull($row['round'], $tournament['art'], $winner_char['char_id'], $winner_char['char_name'], $winner_char['user_id'], $winner_char['user_name'], '\''.$tournament['datum'].'\'', $tournament['id']);
- $tournaments_done[] = $tournament['id'];
+if (count($tournaments) > 0) {
+ $sql = 'select event_id, MAX(visible) < now() as done, MAX(event_fight_id) as final_fight_id FROM event_fights WHERE event_id IN ('.join(',', $tournament_event_ids).') GROUP BY event_id';
+ $qry = db_query($sql);
+
+ $tournaments_done = array();
+
+ while ($row = mysqli_fetch_assoc($qry)) {
+ if ($row['done']) {
+ $event_id = $row['event_id'];
+ $tournament = $tournaments[$event_id];
+ $tournament_type = getTournamentType($tournament['type']);
+ // determine the winner of the tournament ...
+ $final_fight = getEventFight($event_id, $row['final_fight_id']);
+ $winner_char = getEventChar($event_id, $final_fight['winner']);
+ $row = mysqli_fetch_assoc(db_query('Select max(id) as round from online'));
+
+ insertIntoHallOfFameFull($row['round'], $tournament_type['name'], $winner_char['char_id'], $winner_char['char_name'], $winner_char['user_id'], $winner_char['user_name'], '\''.$tournament['datum'].'\'', $tournament['id']);
+ $tournaments_done[] = $tournament['id'];
+ }
}
-}
-if (count($tournaments_done) > 0) {
- db_query('UPDATE turniere SET ausgewertet = TRUE WHERE id IN ('.join(',', $tournaments_done).')');
+ if (count($tournaments_done) > 0) {
+ db_query('UPDATE tournament SET ausgewertet = TRUE WHERE id IN ('.join(',', $tournaments_done).')');
+ }
}
diff --git a/cronjob/viertelstunde.php b/cronjob/viertelstunde.php
index 55eec50..daacc7c 100644
--- a/cronjob/viertelstunde.php
+++ b/cronjob/viertelstunde.php
@@ -1,213 +1,271 @@
-';
- }
- return $tmp;
-}
-
-
-// Handelt eine einzelne Auktion ab
-// @Return nichts
-function bearbeiteAbgelaufeneAuktion($auktionsid){
-// echo '
bearbeite '.$auktionsid.'';
-
- $qry = database_query('SELECT u.nickname AS anbietername, u2.nickname AS bietername, a.auktionsid,a.anbieter,a.bieter,a.itemid,a.itemname,a.tablename,a.anzahl,a.startgebot,a.aktuellesgebot,a.deadline,a.startdate,a.cheatingverdacht, TIMESTAMPDIFF(Minute,now(),deadline) AS zeitdifferenz FROM auktion AS a INNER JOIN user as u ON a.anbieter = u.id LEFT JOIN user as u2 ON a.bieter = u2.id WHERE auktionsid = '.$auktionsid);
- if(mysqli_num_rows($qry) == 0){ return NULL; }
- $result = mysqli_fetch_assoc($qry);
- $itemreceiver = '';
-
- // Nun muss geprüft werden, ob überhaupt jemand geboten hat!
- if($result['bieter'] == NULL){ // Wenn nicht, dann geht das item an den anbieter
- $itemreceiver = $result['anbieter'];
- }
- else{
- // Ansonsten geht das Item an den Bietenden
- $itemreceiver = $result['bieter'];
- // Aber erst muss das Geld überwiesen werden
- $erhalten = ceil($result['aktuellesgebot'] * 0.99);
- $gebuehr = $result['aktuellesgebot'] - $erhalten;
-
- database_query('UPDATE user SET geld = geld - '.$result['aktuellesgebot'].' WHERE id = '.$result['bieter']);
- database_query('UPDATE user SET geld = geld + '.$erhalten.' WHERE id = '.$result['anbieter']);
-
- if($result[cheatingverdacht] == 0){ // Wenn cheatingverdacht nicht besteht, dann pruefe ob Verdacht besteht!!
- $avgprice = getAveragePrice($result[itemid], $result[tablename], $result[anzahl]);
- if($avgprice != 0 && $avgprice * 1.2 < $result['aktuellesgebot'] && $result['anbieter'] != 1){
- $result[cheatingverdacht] = 1;
- }
- }
-
- //Transaktion verbuchen
- $test = 'INSERT INTO auktion_transaktionen (anbieter, bieter, itemid, tablename, anzahl, betrag, deadline,cheatingverdacht) VALUES('.$result['anbieter'].','.$result['bieter'].','.$result['itemid'].',\''.$result['tablename'].'\','.$result['anzahl'].','.$result['aktuellesgebot'].',\''.$result['deadline'].'\','.$result['cheatingverdacht'].')';
- database_query($test);
- //echo '
'.$test.'
';
- }
- $anzahl = $result['anzahl'];
- $item_row_name = 'item';
- if($result['tablename'] == 'ware'){$item_row_name = 'item_id';}
+';
+ }
+ return $tmp;
+}
+
+function bearbeiteAbgelaufeneInverseAuktion($auktion) {
+ $item = array('table_name' => $auktion['tablename'], 'id' => $auktion['itemid']);
+
+ $min_max = mysqli_fetch_row(db_query('SELECT min(range_from), max(range_to) from inverse_auktion_gebote WHERE auktionsid = '.$auktion['auktionsid']));
+ echo '
Min: '.$min_max[0].', Max: '.$min_max[1].'
';
+
+ $winner = NULL;
+ $cost = NULL;
+ if ($min_max[0] != NULL) {
+ for ($i = $min_max[0]; $i <= $min_max[1]; ++$i) {
+ $row = mysqli_fetch_row(db_query('SELECT distinct(bieter), count(*) from inverse_auktion_gebote WHERE auktionsid = '.$auktion['auktionsid'].' AND '.$i.' between range_from and range_to'));
+ if ( $row[1] == 1 ) {
+ // we have a winner!!!
+ echo 'Spieler '.$row[0].' hat die inverse auktion mit dem betrag '.$i.' gewonnen!
';
+ $winner = $row[0];
+ $cost = $i;
+ break;
+ }
+ }
+ }
+
+ $message_suffix = '"'.$auktion['itemname'].'" ('.$auktion['anzahl'].'x): Auktion von '.$auktion['anbietername'].' mit Deadline '.$auktion['deadline'].'.';
+ $lose_message = NULL;
+ if ($cost === NULL) {
+ $lose_message = 'Leider gab ein kein kleinstes einmaliges Gebot. Das item wurde deshalb nicht versteigert!';
+ } else {
+ $lose_message = 'Leider hat jemand anderes das kleinste einmalige Gebot abgegeben. Das item wurde für '.displayMoney($cost).' versteigert';
+ }
+
+ db_query('DELETE FROM auktion WHERE auktionsid = '.$auktion['auktionsid']);
+
+ $qry = db_query('SELECT bieter FROM inverse_auktion_gebote WHERE auktionsid = '.$auktion['auktionsid']);
+ while ($row = mysqli_fetch_row($qry)) {
+ if ($winner != $row[0]) {
+ sendMessage('Auktionsmarkt', $row[0], 'Inverse Versteigerung verloren!', $lose_message.' '.$message_suffix);
+ }
+ }
+
+ if ($winner !== NULL) {
+ createItemForUser($item, $winner, $auktion['anzahl']);
+ $msg = 'Herzlichen Glückwunsch, du hast die inverse Versteigerung (für '.displayMoney($cost).') gewonnen!';
+ sendMessage('Auktionsmarkt', $winner, 'Inverse Versteigerung gewonnen!', $msg.' '.$message_suffix);
+ sendMessage('Auktionsmarkt', $auktion['anbieter'], 'Item versteigert!', 'Item in inverser Auktion für '.displayMoney($cost).' versteigert! '.$message_suffix);
+ db_query('UPDATE user SET geld = geld - '.$cost.' WHERE id = '.$winner);
+ } else {
+ sendMessage('Auktionsmarkt', $auktion['anbieter'], 'Item nicht versteigert!', 'Item in inverser Auktion wurde nicht versteigert! '.$message_suffix);
+ createItemForUser($item, $auktion['anbieter'], $auktion['anzahl']);
+ }
+}
+
+// Handelt eine einzelne Auktion ab
+// @Return nichts
+function bearbeiteAbgelaufeneAuktion($auktionsid){
+// echo '
bearbeite '.$auktionsid.'';
+
+ $qry = database_query('SELECT u.nickname AS anbietername, u2.nickname AS bietername, a.*, TIMESTAMPDIFF(Minute,now(),deadline) AS zeitdifferenz FROM auktion AS a INNER JOIN user as u ON a.anbieter = u.id LEFT JOIN user as u2 ON a.bieter = u2.id WHERE auktionsid = '.$auktionsid);
+
+ if(mysqli_num_rows($qry) == 0){ return NULL; }
+ $result = mysqli_fetch_assoc($qry);
+
+ if ($result['type'] == 2) {
+ bearbeiteAbgelaufeneInverseAuktion($result);
+ return;
+ }
+
+ $itemreceiver = '';
+
+ // Nun muss geprüft werden, ob überhaupt jemand geboten hat!
+ if($result['bieter'] == NULL){ // Wenn nicht, dann geht das item an den anbieter
+ $itemreceiver = $result['anbieter'];
+ }
+ else{
+ // Ansonsten geht das Item an den Bietenden
+ $itemreceiver = $result['bieter'];
+ // Aber erst muss das Geld überwiesen werden
+ $erhalten = ceil($result['aktuellesgebot'] * 0.99);
+ $gebuehr = $result['aktuellesgebot'] - $erhalten;
+
+ database_query('UPDATE user SET geld = geld - '.$result['aktuellesgebot'].' WHERE id = '.$result['bieter']);
+ database_query('UPDATE user SET geld = geld + '.$erhalten.' WHERE id = '.$result['anbieter']);
+
+ if($result[cheatingverdacht] == 0){ // Wenn cheatingverdacht nicht besteht, dann pruefe ob Verdacht besteht!!
+ $avgprice = getAveragePrice($result[itemid], $result[tablename], $result[anzahl]);
+ if($avgprice != 0 && $avgprice * 1.2 < $result['aktuellesgebot'] && $result['anbieter'] != 1){
+ $result[cheatingverdacht] = 1;
+ }
+ }
+
+ //Transaktion verbuchen
+ $test = 'INSERT INTO auktion_transaktionen (anbieter, bieter, itemid, tablename, anzahl, betrag, deadline,cheatingverdacht) VALUES('.$result['anbieter'].','.$result['bieter'].','.$result['itemid'].',\''.$result['tablename'].'\','.$result['anzahl'].','.$result['aktuellesgebot'].',\''.$result['deadline'].'\','.$result['cheatingverdacht'].')';
+ database_query($test);
+ //echo '
'.$test.'
';
+ }
+ $anzahl = $result['anzahl'];
+ $item_row_name = 'item';
+ if($result['tablename'] == 'ware'){$item_row_name = 'item_id';}
#database_query('DELETE FROM auktion WHERE auktionsid = '.$auktionsid);
- while($anzahl-- > 0){
+ while($anzahl-- > 0){
if($anzahl > 1000 && $anzahl % 1000 == 0) {
echo date("H:i:s").' Anzahl maxi Auktion '.$anzahl."\n";
}
- database_query('INSERT INTO '.$result['tablename'].' ('.$item_row_name.', user) VALUES('.$result['itemid'].','.$itemreceiver.')');
- }
-
+ database_query('INSERT INTO '.$result['tablename'].' ('.$item_row_name.', user) VALUES('.$result['itemid'].','.$itemreceiver.')');
+ }
+
database_query('DELETE FROM auktion WHERE auktionsid = '.$auktionsid);
-
- if($result['bieter'] == NULL){
- database_query('INSERT INTO nachricht(von, besitzer, betreff, text) VALUES (\'Auktionsmarkt\', '.$result['anbieter'].', \'Item nicht verkauft\', \' Tut mir leid, doch Sie sind das Item '.$result['itemname'].' mit dem Startgebot '.$result['startgebot'].' nicht losgeworden. Deadline war '.$result['deadline'].'\')');
- } else{
- // Nun noch die Gluecklichen benachrichtigen
- database_query('INSERT INTO nachricht(von, besitzer, betreff, text) VALUES (\'Auktionsmarkt\', '.$result['anbieter'].', \'Item erfolgreich verkauft\', \' Herzlichen Glückwunsch, Sie sind das Item '.$result['itemname'].' für ganze '.$result['aktuellesgebot'].' an '.$result['bietername'].' losgeworden. Anzahl war '.$result['anzahl'].'. Nach abzug der Gebühr von '.$gebuehr.' (ca. 1%) bleiben noch '.$erhalten.' über. Deadline war '.$result['deadline'].'\')');
- database_query('INSERT INTO nachricht(von, besitzer, betreff, text) VALUES (\'Auktionsmarkt\', '.$result['bieter'].', \'Item erfolgreich ersteigert\', \' Herzlichen Glückwunsch, Sie haben das Item '.$result['itemname'].' für ganze '.$result['aktuellesgebot'].' von '.$result['anbietername'].' ersteigert. Anzahl war '.$result['anzahl'].', Deadline war '.$result['deadline'].'\')');
- }
-
-
-}
-
-//Sucht nach abgelaufenen Auktionen und handelt diese ab
-// @Return nichts
-function bearbeiteAlleAbgelaufenenAuktionen(){
- $qry = database_query('SELECT auktionsid from auktion where TIMESTAMPDIFF(Minute,now(),deadline) < 0');
- // Gehe alle Auktionen durch und bearbeite diese
- $index = 0;
- while($result = mysqli_fetch_assoc($qry)){
- bearbeiteAbgelaufeneAuktion($result['auktionsid']);
- $index++;
- }
- return $index;
-}
-
-function insertAuktionen(){
- if(Date("D") == 'Sun'){
- defineIfNotDefined('GEHEIM_START_GEBOT', 1000000);
-
- // Definiert wieviele Auktion insgesamt minimal geplant werden
- defineIfNotDefined('GEHEIM_ANZAHL_AUKTIONEN_MIN', 1);
- // Definiert wieviele Auktion insgesamt maximal geplant werden
- defineIfNotDefined('GEHEIM_ANZAHL_AUKTIONEN_MAX', 2);
- // Definiert wieviele Items gleichzeitig pro Auktion auslaufen
- defineIfNotDefined('GEHEIM_ANZAHL_AUKTIONS_ITEMS', 4);
- // Definiert wie hoch die Chance ist eine Niete zu bekommen. 0.5 = 50%
- defineIfNotDefined('GEHEIM_CHANCE_NIETE', 0.5);
-
- $anzahl_auktionen = mt_random_wrapper(GEHEIM_ANZAHL_AUKTIONEN_MIN,GEHEIM_ANZAHL_AUKTIONEN_MAX); // anzahl der auktionen die gleichzeitig starten (ein oder zwei)
- $anzahl_auktions_items = GEHEIM_ANZAHL_AUKTIONS_ITEMS;
- $chance_niete = GEHEIM_CHANCE_NIETE * 100;
- $startgebot = GEHEIM_START_GEBOT;
-
- // Jeden Sonntag wird dieser Skript ausgefuehrt!
- // erstmal checken obs schon Auktionen für kommende Woche gibt
- $number = mysqli_num_rows(database_query('SELECT * FROM auktion WHERE anbieter = 1 and TIMESTAMPDIFF(Second,startdate,now()) < 0'));
-// echo $number.'= Number of effected rows';
- if($number == 0){
- // So, also es sind noch keine Auktionen vorhanden!!
- // Nun 6 Auktionen erstellen 3x2 Auktionen (update 2x2)
- $date = mysqli_fetch_assoc(database_query('Select current_date AS date'));
- $qry = database_query('SELECT id FROM `wochen_markt` WHERE aktiv = \'ja\'');
- $fruchtcount = 0;
- $frucht = array();
- while($result = mysqli_fetch_assoc($qry)){
- $frucht[$fruchtcount++] = $result[id];
- }
-
- // Ermittle die "Niete" (das wertloseste Item auf der Schatzsuche)
- $qry = database_query('Select id from `sp_item` where wert = (Select min(wert) from `sp_item`)');
- $nieten_id = mysqli_fetch_assoc($qry);
- $nieten_id = $nieten_id['id'];
-
- for($i = 0; $i<$anzahl_auktionen; $i++) {
- // Termin festlegen
- // Start Sonntag->0,Montag->1,Dienstag->2, Mittwoch->3, Donnerstag->4
- $off = mt_random_wrapper(0,4);
- $start = 'TIMESTAMPADD(Day,'.$off.',\''.$date[date].' 20:00:00\')';
- $deadline = 'TIMESTAMPADD(Day,'.($off+3).',\''.$date[date].' 20:00:00\')';
-
- for($t = 0; $t<$anzahl_auktions_items; $t++) {
- if(mt_random_wrapper(1,100) <= $chance_niete) {
- $item_table = 'sp_ware';
- $item_id = $nieten_id;
- } else {
- $item_table = 'wochen_ware';
- $item_id = $frucht[mt_random_wrapper(0,$fruchtcount-1)];
- }
- $test = 'INSERT INTO auktion (itemid, itemname, tablename, anbieter, anzahl, deadline, startgebot, startdate) VALUES('.$item_id.',\'Geheim!\',\''.$item_table.'\',1,1,'.$deadline.','.$startgebot.','.$start.')';
- // echo $test."
\n";
- database_query($test);
- }
- }
- } else if($number > GEHEIM_ANZAHL_AUKTIONEN_MAX * GEHEIM_ANZAHL_AUKTIONS_ITEMS){
- // echo 'Es gab zuviele Geheimauktionen ('.$number.') entferne die überschüssigen!';
- database_query('DELETE FROM auktion WHERE anbieter = 1 LIMIT '.($number-GEHEIM_ANZAHL_AUKTIONEN_MAX * GEHEIM_ANZAHL_AUKTIONS_ITEMS));
- }
- }
-}
-
-function detectMultiAccounts(){
- $sql = 'Select u1.id as uid1, u2.id as uid2, u1.nickname as n1, u2.nickname as n2 , u1.ip as ip1, u2.ip as ip2, u1.online_zeit as o1, u2.online_zeit as o2 from user as u1 inner join user as u2 on u1.ip = u2.ip and u1.id < u2.id and u1.ip != \'\' and abs(TIMESTAMPDIFF(HOUR, u1.online_zeit, u2.online_zeit)) < 24 and (abs(TIMESTAMPDIFF(HOUR, now(), u1.online_zeit)) < 1 || abs(TIMESTAMPDIFF(HOUR, now(), u2.online_zeit)) < 1)';
- $qry = db_query($sql);
- while($tmp = mysqli_fetch_assoc($qry)){
- $otime = min($tmp['o2'], $tmp['o1']);
- $sql = 'INSERT INTO multiuser(user1, user2, occured, type) values(\'' . $tmp['uid1'] . '\', \''.$tmp['uid2'].'\',\''.$otime.'\', \'IP_'.$tmp['ip1'].'\')';
- db_query($sql);
- }
-}
-
-// sollte irgendwann mit der auktion_funktions verlinkt werden
-function getAveragePrice($itemid, $tablename, $anzahl){
- $sql = 'SELECT avg(betrag) / avg(anzahl) AS average FROM auktion_transaktionen WHERE anbieter != 1 and itemid = '.$itemid.' and tablename = \''.$tablename.'\' and cheatingverdacht = 0';
- $qry = database_query($sql);
- $row = mysqli_fetch_assoc($qry);
- return round($row['average']*$anzahl);
-}
-
-$array = array();
-
-if(!isset($argv)) {
- // invocation by server
- $arrayCpy = array();
-} else {
- // invocation by cronjob
- exec('pgrep '.$argv[0], $array);
-
- $arrayCpy = array();
- foreach($array as $tmp) {
- if($tmp != getmypid()) {
- $arrayCpy[] = $tmp;
- }
- }
-}
+
+ if($result['bieter'] == NULL){
+ database_query('INSERT INTO nachricht(von, besitzer, betreff, text) VALUES (\'Auktionsmarkt\', '.$result['anbieter'].', \'Item nicht verkauft\', \' Tut mir leid, doch Sie sind das Item '.$result['itemname'].' mit dem Startgebot '.$result['startgebot'].' nicht losgeworden. Deadline war '.$result['deadline'].'\')');
+ } else{
+ // Nun noch die Gluecklichen benachrichtigen
+ database_query('INSERT INTO nachricht(von, besitzer, betreff, text) VALUES (\'Auktionsmarkt\', '.$result['anbieter'].', \'Item erfolgreich verkauft\', \' Herzlichen Glückwunsch, Sie sind das Item '.$result['itemname'].' für ganze '.$result['aktuellesgebot'].' an '.$result['bietername'].' losgeworden. Anzahl war '.$result['anzahl'].'. Nach abzug der Gebühr von '.$gebuehr.' (ca. 1%) bleiben noch '.$erhalten.' über. Deadline war '.$result['deadline'].'\')');
+ database_query('INSERT INTO nachricht(von, besitzer, betreff, text) VALUES (\'Auktionsmarkt\', '.$result['bieter'].', \'Item erfolgreich ersteigert\', \' Herzlichen Glückwunsch, Sie haben das Item '.$result['itemname'].' für ganze '.$result['aktuellesgebot'].' von '.$result['anbietername'].' ersteigert. Anzahl war '.$result['anzahl'].', Deadline war '.$result['deadline'].'\')');
+ }
+
+
+}
+
+//Sucht nach abgelaufenen Auktionen und handelt diese ab
+// @Return nichts
+function bearbeiteAlleAbgelaufenenAuktionen(){
+ $qry = database_query('SELECT auktionsid from auktion where TIMESTAMPDIFF(Minute,now(),deadline) < 0');
+ // Gehe alle Auktionen durch und bearbeite diese
+ $index = 0;
+ while($result = mysqli_fetch_assoc($qry)){
+ bearbeiteAbgelaufeneAuktion($result['auktionsid']);
+ $index++;
+ }
+ return $index;
+}
+
+function insertAuktionen(){
+ if(Date("D") == 'Sun'){
+ defineIfNotDefined('GEHEIM_START_GEBOT', 1000000);
+
+ // Definiert wieviele Auktion insgesamt minimal geplant werden
+ defineIfNotDefined('GEHEIM_ANZAHL_AUKTIONEN_MIN', 1);
+ // Definiert wieviele Auktion insgesamt maximal geplant werden
+ defineIfNotDefined('GEHEIM_ANZAHL_AUKTIONEN_MAX', 2);
+ // Definiert wieviele Items gleichzeitig pro Auktion auslaufen
+ defineIfNotDefined('GEHEIM_ANZAHL_AUKTIONS_ITEMS', 4);
+ // Definiert wie hoch die Chance ist eine Niete zu bekommen. 0.5 = 50%
+ defineIfNotDefined('GEHEIM_CHANCE_NIETE', 0.5);
+
+ $anzahl_auktionen = mt_random_wrapper(GEHEIM_ANZAHL_AUKTIONEN_MIN,GEHEIM_ANZAHL_AUKTIONEN_MAX); // anzahl der auktionen die gleichzeitig starten (ein oder zwei)
+ $anzahl_auktions_items = GEHEIM_ANZAHL_AUKTIONS_ITEMS;
+ $chance_niete = GEHEIM_CHANCE_NIETE * 100;
+ $startgebot = GEHEIM_START_GEBOT;
+
+ // Jeden Sonntag wird dieser Skript ausgefuehrt!
+ // erstmal checken obs schon Auktionen für kommende Woche gibt
+ $number = mysqli_num_rows(database_query('SELECT * FROM auktion WHERE anbieter = 1 and TIMESTAMPDIFF(Second,startdate,now()) < 0'));
+// echo $number.'= Number of effected rows';
+ if($number == 0){
+ // So, also es sind noch keine Auktionen vorhanden!!
+ // Nun 6 Auktionen erstellen 3x2 Auktionen (update 2x2)
+ $date = mysqli_fetch_assoc(database_query('Select current_date AS date'));
+ $qry = database_query('SELECT id FROM `wochen_markt` WHERE aktiv = \'ja\'');
+ $fruchtcount = 0;
+ $frucht = array();
+ while($result = mysqli_fetch_assoc($qry)){
+ $frucht[$fruchtcount++] = $result[id];
+ }
+
+ // Ermittle die "Niete" (das wertloseste Item auf der Schatzsuche)
+ $qry = database_query('Select id from `sp_item` where wert = (Select min(wert) from `sp_item`)');
+ $nieten_id = mysqli_fetch_assoc($qry);
+ $nieten_id = $nieten_id['id'];
+
+ for($i = 0; $i<$anzahl_auktionen; $i++) {
+ // Termin festlegen
+ // Start Sonntag->0,Montag->1,Dienstag->2, Mittwoch->3, Donnerstag->4
+ $off = mt_random_wrapper(0,4);
+ $start = 'TIMESTAMPADD(Day,'.$off.',\''.$date[date].' 20:00:00\')';
+ $deadline = 'TIMESTAMPADD(Day,'.($off+3).',\''.$date[date].' 20:00:00\')';
+
+ for($t = 0; $t<$anzahl_auktions_items; $t++) {
+ if(mt_random_wrapper(1,100) <= $chance_niete) {
+ $item_table = 'sp_ware';
+ $item_id = $nieten_id;
+ } else {
+ $item_table = 'wochen_ware';
+ $item_id = $frucht[mt_random_wrapper(0,$fruchtcount-1)];
+ }
+ $test = 'INSERT INTO auktion (itemid, type, itemname, tablename, anbieter, anzahl, deadline, startgebot, startdate) VALUES('.$item_id.',2,\'Geheim!\',\''.$item_table.'\',1,1,'.$deadline.','.$startgebot.','.$start.')';
+ // echo $test."
\n";
+ database_query($test);
+ }
+ }
+ } else if($number > GEHEIM_ANZAHL_AUKTIONEN_MAX * GEHEIM_ANZAHL_AUKTIONS_ITEMS){
+ // echo 'Es gab zuviele Geheimauktionen ('.$number.') entferne die überschüssigen!';
+ database_query('DELETE FROM auktion WHERE anbieter = 1 LIMIT '.($number-GEHEIM_ANZAHL_AUKTIONEN_MAX * GEHEIM_ANZAHL_AUKTIONS_ITEMS));
+ }
+ }
+}
+
+function detectMultiAccounts(){
+ $sql = 'Select u1.id as uid1, u2.id as uid2, u1.nickname as n1, u2.nickname as n2 , u1.ip as ip1, u2.ip as ip2, u1.online_zeit as o1, u2.online_zeit as o2 from user as u1 inner join user as u2 on u1.ip = u2.ip and u1.id < u2.id and u1.ip != \'\' and abs(TIMESTAMPDIFF(HOUR, u1.online_zeit, u2.online_zeit)) < 24 and (abs(TIMESTAMPDIFF(HOUR, now(), u1.online_zeit)) < 1 || abs(TIMESTAMPDIFF(HOUR, now(), u2.online_zeit)) < 1)';
+ $qry = db_query($sql);
+ while($tmp = mysqli_fetch_assoc($qry)){
+ $otime = min($tmp['o2'], $tmp['o1']);
+ $sql = 'INSERT INTO multiuser(user1, user2, occured, type) values(\'' . $tmp['uid1'] . '\', \''.$tmp['uid2'].'\',\''.$otime.'\', \'IP_'.$tmp['ip1'].'\')';
+ db_query($sql);
+ }
+}
+
+// sollte irgendwann mit der auktion_funktions verlinkt werden
+function getAveragePrice($itemid, $tablename, $anzahl){
+ $sql = 'SELECT avg(betrag) / avg(anzahl) AS average FROM auktion_transaktionen WHERE anbieter != 1 and itemid = '.$itemid.' and tablename = \''.$tablename.'\' and cheatingverdacht = 0';
+ $qry = database_query($sql);
+ $row = mysqli_fetch_assoc($qry);
+ return round($row['average']*$anzahl);
+}
+
+$array = array();
+
+if(!isset($argv)) {
+ // invocation by server
+ $arrayCpy = array();
+} else {
+ // invocation by cronjob
+ exec('pgrep '.$argv[0], $array);
+
+ $arrayCpy = array();
+ foreach($array as $tmp) {
+ if($tmp != getmypid()) {
+ $arrayCpy[] = $tmp;
+ }
+ }
+}
// check if this cronjob is already busy!!
-if(count($arrayCpy)<=1) {
- // Starten der Auktionsverteilung
- $i = bearbeiteAlleAbgelaufenenAuktionen();
- //$sql = 'INSERT INTO nachricht(von, besitzer, betreff, text) VALUES (\'GM-INFO\', 3735, \'Cronjob lief!\', \' Der Vierteilstunde-Cronjob wurde ausgefuehrt! Es wurden '.$i.' Anfragen bearbeitet!\')';
- //database_query($sql);
- insertAuktionen();
- detectMultiAccounts();
+if(count($arrayCpy)<=1) {
+ // Starten der Auktionsverteilung
+ $i = bearbeiteAlleAbgelaufenenAuktionen();
+ //$sql = 'INSERT INTO nachricht(von, besitzer, betreff, text) VALUES (\'GM-INFO\', 3735, \'Cronjob lief!\', \' Der Vierteilstunde-Cronjob wurde ausgefuehrt! Es wurden '.$i.' Anfragen bearbeitet!\')';
+ //database_query($sql);
+ insertAuktionen();
+ detectMultiAccounts();
}