added handling of inverse auctions

main
hecht 7 years ago
parent 3029796ae7
commit 9a61d1eabc

@ -217,10 +217,6 @@ if($gain == 'Anmeldung'){
// echo $sql.'<br>'; // echo $sql.'<br>';
$qry = db_query($sql); $qry = db_query($sql);
while(($row = mysqli_fetch_assoc($qry)) && count($cid) < $anzahl){ 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'].'<br>'; // echo $row['id'].'<br>';
$cid[] = $row['id']; $cid[] = $row['id'];
} }

@ -16,36 +16,43 @@ include('path.inc.php');
include_once (ROOT_PATH.'/include/sqlwrapper.inc.php'); include_once (ROOT_PATH.'/include/sqlwrapper.inc.php');
include_once (ROOT_PATH.'/include/event.inc.php'); include_once (ROOT_PATH.'/include/event.inc.php');
include_once (ROOT_PATH.'/include/halloffame.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(); $tournaments = array();
$tournament_event_ids = 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)) { while ($row = mysqli_fetch_assoc($qry)) {
$tournament_event_ids[] = $row['event_id']; $tournament_event_ids[] = $row['event_id'];
$tournaments[$row['event_id']] = $row; $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'; if (count($tournaments) > 0) {
$qry = db_query($sql); $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();
$tournaments_done = array();
while ($row = mysqli_fetch_assoc($qry)) {
if ($row['done']) { while ($row = mysqli_fetch_assoc($qry)) {
$event_id = $row['event_id']; if ($row['done']) {
$tournament = $tournaments[$event_id]; $event_id = $row['event_id'];
// determine the winner of the tournament ... $tournament = $tournaments[$event_id];
$final_fight = getEventFight($event_id, $row['final_fight_id']); $tournament_type = getTournamentType($tournament['type']);
$winner_char = getEventChar($event_id, $final_fight['winner']); // determine the winner of the tournament ...
$row = mysqli_fetch_assoc(db_query('Select max(id) as round from online')); $final_fight = getEventFight($event_id, $row['final_fight_id']);
$winner_char = getEventChar($event_id, $final_fight['winner']);
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']); $row = mysqli_fetch_assoc(db_query('Select max(id) as round from online'));
$tournaments_done[] = $tournament['id'];
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) { if (count($tournaments_done) > 0) {
db_query('UPDATE turniere SET ausgewertet = TRUE WHERE id IN ('.join(',', $tournaments_done).')'); db_query('UPDATE tournament SET ausgewertet = TRUE WHERE id IN ('.join(',', $tournaments_done).')');
}
} }

@ -1,213 +1,271 @@
<?php <?php
/* /*
* *
* @copyright (c) 2010 animegame.eu * @copyright (c) 2010 animegame.eu
* @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public Licence * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public Licence
* *
*/ */
// Laden der db-Verbindung // Laden der db-Verbindung
ignore_user_abort(true); ignore_user_abort(true);
include "db.php"; include "db.php";
include_once("path.inc.php"); include_once("path.inc.php");
include_once (ROOT_PATH.'/include/sqlwrapper.inc.php'); include_once (ROOT_PATH.'/include/sqlwrapper.inc.php');
include_once(ROOT_PATH. "/include/defines.inc.php"); include_once(ROOT_PATH. "/include/defines.inc.php");
include_once(ROOT_PATH. "/include/random.inc.php"); include_once(ROOT_PATH. "/include/random.inc.php");
include_once(ROOT_PATH. "/include/items.inc.php");
// Da es wichtig ist, dass die Querys korrekt abgehandelt werden wurde folgender Code eingefuehrt include_once(ROOT_PATH. "/include/messagefunctions.inc.php");
function database_query($sql){ // Da es wichtig ist, dass die Querys korrekt abgehandelt werden wurde folgender Code eingefuehrt
$tmp = db_query($sql);
if(!$tmp){ function database_query($sql){
echo 'SQL-Anweisung '.$sql.' konnte nicht ausgefuehrt werden!!<br>'; $tmp = db_query($sql);
} if(!$tmp){
return $tmp; echo 'SQL-Anweisung '.$sql.' konnte nicht ausgefuehrt werden!!<br>';
} }
return $tmp;
}
// Handelt eine einzelne Auktion ab
// @Return nichts function bearbeiteAbgelaufeneInverseAuktion($auktion) {
function bearbeiteAbgelaufeneAuktion($auktionsid){ $item = array('table_name' => $auktion['tablename'], 'id' => $auktion['itemid']);
// echo '<br>bearbeite '.$auktionsid.'</br>';
$min_max = mysqli_fetch_row(db_query('SELECT min(range_from), max(range_to) from inverse_auktion_gebote WHERE auktionsid = '.$auktion['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); echo '<p>Min: '.$min_max[0].', Max: '.$min_max[1].'</p>';
if(mysqli_num_rows($qry) == 0){ return NULL; }
$result = mysqli_fetch_assoc($qry); $winner = NULL;
$itemreceiver = ''; $cost = NULL;
if ($min_max[0] != NULL) {
// Nun muss geprüft werden, ob überhaupt jemand geboten hat! for ($i = $min_max[0]; $i <= $min_max[1]; ++$i) {
if($result['bieter'] == NULL){ // Wenn nicht, dann geht das item an den anbieter $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'));
$itemreceiver = $result['anbieter']; if ( $row[1] == 1 ) {
} // we have a winner!!!
else{ echo '<p>Spieler '.$row[0].' hat die inverse auktion mit dem betrag '.$i.' gewonnen!</p>';
// Ansonsten geht das Item an den Bietenden $winner = $row[0];
$itemreceiver = $result['bieter']; $cost = $i;
// Aber erst muss das Geld überwiesen werden break;
$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']); $message_suffix = '"'.$auktion['itemname'].'" ('.$auktion['anzahl'].'x): Auktion von '.$auktion['anbietername'].' mit Deadline '.$auktion['deadline'].'.';
$lose_message = NULL;
if($result[cheatingverdacht] == 0){ // Wenn cheatingverdacht nicht besteht, dann pruefe ob Verdacht besteht!! if ($cost === NULL) {
$avgprice = getAveragePrice($result[itemid], $result[tablename], $result[anzahl]); $lose_message = 'Leider gab ein kein kleinstes einmaliges Gebot. Das item wurde deshalb nicht versteigert!';
if($avgprice != 0 && $avgprice * 1.2 < $result['aktuellesgebot'] && $result['anbieter'] != 1){ } else {
$result[cheatingverdacht] = 1; $lose_message = 'Leider hat jemand anderes das kleinste einmalige Gebot abgegeben. Das item wurde f&uuml;r '.displayMoney($cost).' versteigert';
} }
}
db_query('DELETE FROM auktion WHERE auktionsid = '.$auktion['auktionsid']);
//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'].')'; $qry = db_query('SELECT bieter FROM inverse_auktion_gebote WHERE auktionsid = '.$auktion['auktionsid']);
database_query($test); while ($row = mysqli_fetch_row($qry)) {
//echo '<br><br>'.$test.'<br><br>'; if ($winner != $row[0]) {
} sendMessage('Auktionsmarkt', $row[0], 'Inverse Versteigerung verloren!', $lose_message.' '.$message_suffix);
$anzahl = $result['anzahl']; }
$item_row_name = 'item'; }
if($result['tablename'] == 'ware'){$item_row_name = 'item_id';}
if ($winner !== NULL) {
createItemForUser($item, $winner, $auktion['anzahl']);
$msg = 'Herzlichen Gl&uuml;ckwunsch, du hast die inverse Versteigerung (f&uuml;r '.displayMoney($cost).') gewonnen!';
sendMessage('Auktionsmarkt', $winner, 'Inverse Versteigerung gewonnen!', $msg.' '.$message_suffix);
sendMessage('Auktionsmarkt', $auktion['anbieter'], 'Item versteigert!', 'Item in inverser Auktion f&uuml;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 '<br>bearbeite '.$auktionsid.'</br>';
$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 '<br><br>'.$test.'<br><br>';
}
$anzahl = $result['anzahl'];
$item_row_name = 'item';
if($result['tablename'] == 'ware'){$item_row_name = 'item_id';}
#database_query('DELETE FROM auktion WHERE auktionsid = '.$auktionsid); #database_query('DELETE FROM auktion WHERE auktionsid = '.$auktionsid);
while($anzahl-- > 0){ while($anzahl-- > 0){
if($anzahl > 1000 && $anzahl % 1000 == 0) { if($anzahl > 1000 && $anzahl % 1000 == 0) {
echo date("H:i:s").' Anzahl maxi Auktion '.$anzahl."\n"; 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); database_query('DELETE FROM auktion WHERE auktionsid = '.$auktionsid);
if($result['bieter'] == NULL){ 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'].'\')'); 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{ } else{
// Nun noch die Gluecklichen benachrichtigen // Nun noch die Gluecklichen benachrichtigen
database_query('INSERT INTO nachricht(von, besitzer, betreff, text) VALUES (\'Auktionsmarkt\', '.$result['anbieter'].', \'Item erfolgreich verkauft\', \' Herzlichen Gl&uuml;ckwunsch, Sie sind das Item '.$result['itemname'].' f&uuml;r ganze '.$result['aktuellesgebot'].' an '.$result['bietername'].' losgeworden. Anzahl war '.$result['anzahl'].'. Nach abzug der Geb&uuml;hr von '.$gebuehr.' (ca. 1%) bleiben noch '.$erhalten.' &uuml;ber. Deadline war '.$result['deadline'].'\')'); database_query('INSERT INTO nachricht(von, besitzer, betreff, text) VALUES (\'Auktionsmarkt\', '.$result['anbieter'].', \'Item erfolgreich verkauft\', \' Herzlichen Gl&uuml;ckwunsch, Sie sind das Item '.$result['itemname'].' f&uuml;r ganze '.$result['aktuellesgebot'].' an '.$result['bietername'].' losgeworden. Anzahl war '.$result['anzahl'].'. Nach abzug der Geb&uuml;hr von '.$gebuehr.' (ca. 1%) bleiben noch '.$erhalten.' &uuml;ber. Deadline war '.$result['deadline'].'\')');
database_query('INSERT INTO nachricht(von, besitzer, betreff, text) VALUES (\'Auktionsmarkt\', '.$result['bieter'].', \'Item erfolgreich ersteigert\', \' Herzlichen Gl&uuml;ckwunsch, Sie haben das Item '.$result['itemname'].' f&uuml;r ganze '.$result['aktuellesgebot'].' von '.$result['anbietername'].' ersteigert. Anzahl war '.$result['anzahl'].', Deadline war '.$result['deadline'].'\')'); database_query('INSERT INTO nachricht(von, besitzer, betreff, text) VALUES (\'Auktionsmarkt\', '.$result['bieter'].', \'Item erfolgreich ersteigert\', \' Herzlichen Gl&uuml;ckwunsch, Sie haben das Item '.$result['itemname'].' f&uuml;r ganze '.$result['aktuellesgebot'].' von '.$result['anbietername'].' ersteigert. Anzahl war '.$result['anzahl'].', Deadline war '.$result['deadline'].'\')');
} }
} }
//Sucht nach abgelaufenen Auktionen und handelt diese ab //Sucht nach abgelaufenen Auktionen und handelt diese ab
// @Return nichts // @Return nichts
function bearbeiteAlleAbgelaufenenAuktionen(){ function bearbeiteAlleAbgelaufenenAuktionen(){
$qry = database_query('SELECT auktionsid from auktion where TIMESTAMPDIFF(Minute,now(),deadline) < 0'); $qry = database_query('SELECT auktionsid from auktion where TIMESTAMPDIFF(Minute,now(),deadline) < 0');
// Gehe alle Auktionen durch und bearbeite diese // Gehe alle Auktionen durch und bearbeite diese
$index = 0; $index = 0;
while($result = mysqli_fetch_assoc($qry)){ while($result = mysqli_fetch_assoc($qry)){
bearbeiteAbgelaufeneAuktion($result['auktionsid']); bearbeiteAbgelaufeneAuktion($result['auktionsid']);
$index++; $index++;
} }
return $index; return $index;
} }
function insertAuktionen(){ function insertAuktionen(){
if(Date("D") == 'Sun'){ if(Date("D") == 'Sun'){
defineIfNotDefined('GEHEIM_START_GEBOT', 1000000); defineIfNotDefined('GEHEIM_START_GEBOT', 1000000);
// Definiert wieviele Auktion insgesamt minimal geplant werden // Definiert wieviele Auktion insgesamt minimal geplant werden
defineIfNotDefined('GEHEIM_ANZAHL_AUKTIONEN_MIN', 1); defineIfNotDefined('GEHEIM_ANZAHL_AUKTIONEN_MIN', 1);
// Definiert wieviele Auktion insgesamt maximal geplant werden // Definiert wieviele Auktion insgesamt maximal geplant werden
defineIfNotDefined('GEHEIM_ANZAHL_AUKTIONEN_MAX', 2); defineIfNotDefined('GEHEIM_ANZAHL_AUKTIONEN_MAX', 2);
// Definiert wieviele Items gleichzeitig pro Auktion auslaufen // Definiert wieviele Items gleichzeitig pro Auktion auslaufen
defineIfNotDefined('GEHEIM_ANZAHL_AUKTIONS_ITEMS', 4); defineIfNotDefined('GEHEIM_ANZAHL_AUKTIONS_ITEMS', 4);
// Definiert wie hoch die Chance ist eine Niete zu bekommen. 0.5 = 50% // Definiert wie hoch die Chance ist eine Niete zu bekommen. 0.5 = 50%
defineIfNotDefined('GEHEIM_CHANCE_NIETE', 0.5); 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_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; $anzahl_auktions_items = GEHEIM_ANZAHL_AUKTIONS_ITEMS;
$chance_niete = GEHEIM_CHANCE_NIETE * 100; $chance_niete = GEHEIM_CHANCE_NIETE * 100;
$startgebot = GEHEIM_START_GEBOT; $startgebot = GEHEIM_START_GEBOT;
// Jeden Sonntag wird dieser Skript ausgefuehrt! // Jeden Sonntag wird dieser Skript ausgefuehrt!
// erstmal checken obs schon Auktionen für kommende Woche gibt // 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')); $number = mysqli_num_rows(database_query('SELECT * FROM auktion WHERE anbieter = 1 and TIMESTAMPDIFF(Second,startdate,now()) < 0'));
// echo $number.'= Number of effected rows'; // echo $number.'= Number of effected rows';
if($number == 0){ if($number == 0){
// So, also es sind noch keine Auktionen vorhanden!! // So, also es sind noch keine Auktionen vorhanden!!
// Nun 6 Auktionen erstellen 3x2 Auktionen (update 2x2) // Nun 6 Auktionen erstellen 3x2 Auktionen (update 2x2)
$date = mysqli_fetch_assoc(database_query('Select current_date AS date')); $date = mysqli_fetch_assoc(database_query('Select current_date AS date'));
$qry = database_query('SELECT id FROM `wochen_markt` WHERE aktiv = \'ja\''); $qry = database_query('SELECT id FROM `wochen_markt` WHERE aktiv = \'ja\'');
$fruchtcount = 0; $fruchtcount = 0;
$frucht = array(); $frucht = array();
while($result = mysqli_fetch_assoc($qry)){ while($result = mysqli_fetch_assoc($qry)){
$frucht[$fruchtcount++] = $result[id]; $frucht[$fruchtcount++] = $result[id];
} }
// Ermittle die "Niete" (das wertloseste Item auf der Schatzsuche) // 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`)'); $qry = database_query('Select id from `sp_item` where wert = (Select min(wert) from `sp_item`)');
$nieten_id = mysqli_fetch_assoc($qry); $nieten_id = mysqli_fetch_assoc($qry);
$nieten_id = $nieten_id['id']; $nieten_id = $nieten_id['id'];
for($i = 0; $i<$anzahl_auktionen; $i++) { for($i = 0; $i<$anzahl_auktionen; $i++) {
// Termin festlegen // Termin festlegen
// Start Sonntag->0,Montag->1,Dienstag->2, Mittwoch->3, Donnerstag->4 // Start Sonntag->0,Montag->1,Dienstag->2, Mittwoch->3, Donnerstag->4
$off = mt_random_wrapper(0,4); $off = mt_random_wrapper(0,4);
$start = 'TIMESTAMPADD(Day,'.$off.',\''.$date[date].' 20:00:00\')'; $start = 'TIMESTAMPADD(Day,'.$off.',\''.$date[date].' 20:00:00\')';
$deadline = 'TIMESTAMPADD(Day,'.($off+3).',\''.$date[date].' 20:00:00\')'; $deadline = 'TIMESTAMPADD(Day,'.($off+3).',\''.$date[date].' 20:00:00\')';
for($t = 0; $t<$anzahl_auktions_items; $t++) { for($t = 0; $t<$anzahl_auktions_items; $t++) {
if(mt_random_wrapper(1,100) <= $chance_niete) { if(mt_random_wrapper(1,100) <= $chance_niete) {
$item_table = 'sp_ware'; $item_table = 'sp_ware';
$item_id = $nieten_id; $item_id = $nieten_id;
} else { } else {
$item_table = 'wochen_ware'; $item_table = 'wochen_ware';
$item_id = $frucht[mt_random_wrapper(0,$fruchtcount-1)]; $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.')'; $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."<br>\n"; // echo $test."<br>\n";
database_query($test); database_query($test);
} }
} }
} else if($number > GEHEIM_ANZAHL_AUKTIONEN_MAX * GEHEIM_ANZAHL_AUKTIONS_ITEMS){ } else if($number > GEHEIM_ANZAHL_AUKTIONEN_MAX * GEHEIM_ANZAHL_AUKTIONS_ITEMS){
// echo 'Es gab zuviele Geheimauktionen ('.$number.') entferne die überschüssigen!'; // 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)); database_query('DELETE FROM auktion WHERE anbieter = 1 LIMIT '.($number-GEHEIM_ANZAHL_AUKTIONEN_MAX * GEHEIM_ANZAHL_AUKTIONS_ITEMS));
} }
} }
} }
function detectMultiAccounts(){ 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)'; $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); $qry = db_query($sql);
while($tmp = mysqli_fetch_assoc($qry)){ while($tmp = mysqli_fetch_assoc($qry)){
$otime = min($tmp['o2'], $tmp['o1']); $otime = min($tmp['o2'], $tmp['o1']);
$sql = 'INSERT INTO multiuser(user1, user2, occured, type) values(\'' . $tmp['uid1'] . '\', \''.$tmp['uid2'].'\',\''.$otime.'\', \'IP_'.$tmp['ip1'].'\')'; $sql = 'INSERT INTO multiuser(user1, user2, occured, type) values(\'' . $tmp['uid1'] . '\', \''.$tmp['uid2'].'\',\''.$otime.'\', \'IP_'.$tmp['ip1'].'\')';
db_query($sql); db_query($sql);
} }
} }
// sollte irgendwann mit der auktion_funktions verlinkt werden // sollte irgendwann mit der auktion_funktions verlinkt werden
function getAveragePrice($itemid, $tablename, $anzahl){ 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'; $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); $qry = database_query($sql);
$row = mysqli_fetch_assoc($qry); $row = mysqli_fetch_assoc($qry);
return round($row['average']*$anzahl); return round($row['average']*$anzahl);
} }
$array = array(); $array = array();
if(!isset($argv)) { if(!isset($argv)) {
// invocation by server // invocation by server
$arrayCpy = array(); $arrayCpy = array();
} else { } else {
// invocation by cronjob // invocation by cronjob
exec('pgrep '.$argv[0], $array); exec('pgrep '.$argv[0], $array);
$arrayCpy = array(); $arrayCpy = array();
foreach($array as $tmp) { foreach($array as $tmp) {
if($tmp != getmypid()) { if($tmp != getmypid()) {
$arrayCpy[] = $tmp; $arrayCpy[] = $tmp;
} }
} }
} }
// check if this cronjob is already busy!! // check if this cronjob is already busy!!
if(count($arrayCpy)<=1) { if(count($arrayCpy)<=1) {
// Starten der Auktionsverteilung // Starten der Auktionsverteilung
$i = bearbeiteAlleAbgelaufenenAuktionen(); $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!\')'; //$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); //database_query($sql);
insertAuktionen(); insertAuktionen();
detectMultiAccounts(); detectMultiAccounts();
} }

Loading…
Cancel
Save