From bced25a8609ca05537fcbd132e5b01e0e4d40e4d Mon Sep 17 00:00:00 2001 From: hecht Date: Sun, 3 Aug 2014 09:57:48 +0000 Subject: [PATCH] =?UTF-8?q?Also=20habe=20nun=20die=20M=C3=B6glichkeit=20hi?= =?UTF-8?q?nzugef=C3=BCgt,=20dass=20Nieten=20ausgesch=C3=BCttet=20werden.?= =?UTF-8?q?=20Dabei=20handelt=20es=20sich=20um=20das=20Item=20was=20am=20h?= =?UTF-8?q?=C3=A4ufigsten=20in=20der=20Schatzsuche=20dropped.=20Also=20die?= =?UTF-8?q?=20Bohne.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Habe auch ein paar defines erstellt mit denen die GMs nun arbeiten können. Unter anderem können sie einstellen wieviele Geheimauktionen es gibt und wieviel Items sie umfassen. --- cronjob/viertelstunde.php | 100 ++++++++++++++++++++++++-------------- 1 file changed, 64 insertions(+), 36 deletions(-) diff --git a/cronjob/viertelstunde.php b/cronjob/viertelstunde.php index 07eb2e6..87ea86c 100644 --- a/cronjob/viertelstunde.php +++ b/cronjob/viertelstunde.php @@ -9,6 +9,8 @@ ignore_user_abort(true); include "db.php"; +include_once("path.inc.php"); +include_once(ROOT_PATH. "/include/defines.inc.php"); // Da es wichtig ist, dass die Querys korrekt abgehandelt werden wurde folgender Code eingefuehrt @@ -99,8 +101,22 @@ function bearbeiteAlleAbgelaufenenAuktionen(){ function insertAuktionen(){ if(Date("D") == 'Sun'){ - $anzahl_auktionen = mt_rand(1,2); // anzahl der auktionen die gleichzeitig starten (ein oder zwei) - $startgebot = 1000000; + 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_rand(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 = mysql_num_rows(database_query('SELECT * FROM auktion WHERE anbieter = 1 and TIMESTAMPDIFF(Second,startdate,now()) < 0')); @@ -115,31 +131,38 @@ function insertAuktionen(){ while($result = mysql_fetch_assoc($qry)){ $frucht[$fruchtcount++] = $result[id]; } - for($i = 0; $i<$anzahl_auktionen;$i++){ - $id1[$i] = mt_rand(0,$fruchtcount-1); - $id2[$i] = mt_rand(0,$fruchtcount-1); - } - // Termine festlegen - // Start Sonntag->0,Montag->1,Dienstag->2, Mittwoch->3, Donnerstag->4 - $off1 = mt_rand(0,4); - $off2 = mt_rand(0,4); - $start1 = 'TIMESTAMPADD(Day,'.$off1.',\''.$date[date].' 20:00:00\')'; - $deadline1 = 'TIMESTAMPADD(Day,'.($off1+3).',\''.$date[date].' 20:00:00\')'; - $start2 = 'TIMESTAMPADD(Day,'.$off2.',\''.$date[date].' 20:00:00\')'; - $deadline2 = 'TIMESTAMPADD(Day,'.($off2+3).',\''.$date[date].' 20:00:00\')'; + // 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 = mysql_fetch_assoc($qry); + $nieten_id = $nieten_id['id']; - - // Auktinoen der ersten Auktionswelle einfuegen - for($i=0;$i<$anzahl_auktionen;$i++){ - $test1 = 'INSERT INTO auktion (itemid, itemname, tablename, anbieter, anzahl, deadline, startgebot, startdate) VALUES('.$frucht[$id1[$i]].',\'Geheim!\',\'wochen_ware\',1,1,'.$deadline1.','.$startgebot.','.$start1.')'; - $test2 = 'INSERT INTO auktion (itemid, itemname, tablename, anbieter, anzahl, deadline, startgebot, startdate) VALUES('.$frucht[$id2[$i]].',\'Geheim!\',\'wochen_ware\',1,1,'.$deadline2.','.$startgebot.','.$start2.')'; - database_query($test1); - database_query($test2); -// echo $test1.'
'.$test2.'
'; + for($i = 0; $i<$anzahl_auktionen; $i++) { + // Termin festlegen + // Start Sonntag->0,Montag->1,Dienstag->2, Mittwoch->3, Donnerstag->4 + $off = mt_rand(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_rand(1,100) <= $chance_niete) { + $item_table = 'sp_item'; + $item_id = $nieten_id; + } else { + $item_table = 'wochen_markt'; + $item_id = $frucht[mt_rand(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 > 6){ - database_query('DELETE FROM auktion WHERE anbieter = 1 LIMIT '.($number-6)); + } 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)); + } else { + echo 'Else '.$number; + database_query('DELETE FROM auktion WHERE anbieter = 1'); } } } @@ -162,20 +185,25 @@ function getAveragePrice($itemid, $tablename, $anzahl){ 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!! -$array = array(); -exec('pgrep '.$argv[0], $array); - -$arrayCpy = array(); -foreach($array as $tmp) { - if($tmp != getmypid()) { - $arrayCpy[] = $tmp; - } -} - -if(count($arrayCpy)<=1) { +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!\')';