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.
		
		
		
		
		
			
		
			
				
	
	
		
			165 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			PHP
		
	
			
		
		
	
	
			165 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			PHP
		
	
| <?php
 | |
| /*
 | |
|  *
 | |
|  * @copyright (c) 2010 animegame.eu
 | |
|  * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public Licence
 | |
|  *
 | |
|  */
 | |
| // Laden der db-Verbindung
 | |
| ignore_user_abort(true);
 | |
| 
 | |
| include "db.php";
 | |
| 
 | |
| // Da es wichtig ist, dass die Querys korrekt abgehandelt werden wurde folgender Code eingefuehrt
 | |
| 
 | |
| function database_query($sql){
 | |
| 	$tmp = mysql_query($sql);
 | |
| 	if(!$tmp){
 | |
| 		echo 'SQL-Anweisung '.$sql.' konnte nicht ausgefuehrt werden!!<br>';
 | |
| 	}
 | |
| 	return $tmp;
 | |
| }
 | |
| 
 | |
| 
 | |
| // 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.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(mysql_num_rows($qry) == 0){ return NULL; }
 | |
| 	$result = mysql_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 '<br><br>'.$test.'<br><br>';
 | |
| 	}
 | |
| 	$anzahl = $result['anzahl'];
 | |
| 	$item_row_name = 'item';
 | |
| 	if($result['tablename'] == 'ware'){$item_row_name = 'item_id';}
 | |
| 	while($anzahl-- > 0){
 | |
| 		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 = mysql_fetch_assoc($qry)){
 | |
| 		bearbeiteAbgelaufeneAuktion($result['auktionsid']);
 | |
| 		$index++;
 | |
| 	}
 | |
| 	return $index;
 | |
| }
 | |
| 
 | |
| function insertAuktionen(){
 | |
| 	if(Date("D") == 'Sun'){
 | |
| 		$anzahl_auktionen = mt_rand(1,2); // anzahl der auktionen die gleichzeitig starten (ein oder zwei)
 | |
| 		$startgebot = 1000000;
 | |
| 		// 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'));
 | |
| //		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 = mysql_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 = 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\')';
 | |
| 			
 | |
| 			
 | |
| 			// 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.'<br>'.$test2.'<br>';
 | |
| 			}
 | |
| 		} else if($number > 6){
 | |
| 			database_query('DELETE FROM auktion WHERE anbieter = 1 LIMIT '.($number-6));
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| 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 = mysql_query($sql);
 | |
| 	while($tmp = mysql_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'].'\')';
 | |
| 		mysql_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 = mysql_fetch_assoc($qry);
 | |
| 	return round($row['average']*$anzahl);
 | |
| }
 | |
| 
 | |
| // 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();
 | |
| 
 | |
| ?>
 |