[BETA] EURO 2008 Webtipp

In diesem Forum können Mod-Autoren ihre Mods vorstellen, die sich noch im Entwicklungsstatus befinden. Der Einbau in Foren im produktiven Betrieb wird nicht empfohlen.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.0, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Benutzeravatar
buegelfalte
Mitglied
Beiträge: 759
Registriert: 16.02.2005 14:32
Wohnort: Köln
Kontaktdaten:

Beitrag von buegelfalte »

dasinnerevombrötchen hat geschrieben:wie kann es denn sein, dass zwei user, die beide erste spiele korrekt getippt haben, unterschiedliche punkte haben?
Tritt bei mir auch auf, scheint ein Fehler in der Punktevergabe für "Sonderpunkt bei alleiniger korrekter Tipp" zu sein ... müßte am besten mal derjenige drüberkucken, der das ursprünglich gebaut hat (Patch ?).
double78 hat geschrieben:nun ist er weg :grin: ,thx buegelfalte
Da nich für ;)


Und hier nochmal ein Versuch zur Korrektur dieser nervigen Tendenzpfeile - ich habe die vorhandenen Funktionen jetzt ein paar Stunden lang komplett auf links gezogen und kann folgende Lösung anbieten, die jetzt endlich die korrekten Tendenzen anzuzeigen scheint. (Und noch schneller läuft, da nicht für jeden User wieder ALLE Tipps bis vor dem letzten Spiel geholt werden, wie das vorher der Fall war.)

em_stats.php

finden

Code: Alles auswählen

for ( $i = 0; $i < count($em_users_data); $i++ )
{
   $int_userposalt = $int_userpos; 
   $int_userpos = ($int_userpkt != $em_users_data[$i]['user_points']) ? $int_userpos + 1 : $int_userpos; 

   // user position yesterday 
   $int_userpos_yesterday = get_rank_of_yesterday($em_users_data[$i]['tipp_user']); 

   // compare the absolute positions 
   if($int_userpos_yesterday < $int_userpos ) 
   { 
      $userpos_change = '<img src="./images/em/down.gif" alt="verschlechtert" title="verschlechtert" border="0" />'; 
   } 
   else if ($int_userpos_yesterday == $int_userpos ) 
   { 
      $userpos_change = '<img src="./images/em/stay.gif" alt="unverändert" title="unverändert" border="0" />'; 
   } 
   else if ($int_userpos_yesterday > $int_userpos ) 
   { 
      $userpos_change = '<img src="./images/em/up.gif" alt="verbessert" title="verbessert" border="0" />'; 
   }
ersetzen mit

Code: Alles auswählen

$arr_oldranks = array();
$arr_oldranks = get_em_user_points_up_to_yesterday();

for ( $i = 0; $i < count($em_users_data); $i++ )
{
	$int_userposalt = $int_userpos;
	$int_userpos = ($int_userpkt != $em_users_data[$i]['user_points']) ? $i + 1 : $int_userpos;
	$int_userposabsolute = ($int_userpkt != $em_users_data[$i]['user_points']) ? $int_userposabsolute + 1 : $int_userposabsolute;

	// user position yesterday
	$int_userpos_yesterday = $arr_oldranks[$em_users_data[$i]['tipp_user']];

	// compare the absolute positions
	if($int_userpos_yesterday < $int_userposabsolute )
	{
		$userpos_change = '<img src="./images/em/down.gif" alt="Down" border="0" />';
	}
	else if ($int_userpos_yesterday == $int_userposabsolute )
	{
		$userpos_change = '<img src="./images/em/stay.gif" alt="Stay" border="0" />';
	}
	else if ($int_userpos_yesterday > $int_userposabsolute )
	{
		$userpos_change = '<img src="./images/em/up.gif" alt="Up" border="0" />';
	}
includes/functions_em.php

finden

Code: Alles auswählen

function get_em_user_points_up_to_yesterday() {

	global $db;

	// Load Config
	$em_config    = array();  // Config values
	$em_config    = get_em_config();

	$timestamp_last_game_before_this_day = get_timestamp_for_ranking_history();

	//
	// Get users data
	//

	$int_userpkt = -1;
	$int_userpos = 0;

	$sql = "SELECT A.tipp_user , sum( A.tipp_points ) AS user_points, count( A.tipp_points ) AS user_total_tipps, count(
       B.tipp_points ) AS user_points_tendency, count( C.tipp_points ) AS user_points_difference, count( D.tipp_points ) AS user_points_result
       FROM  " . EM_TIPPS_TABLE . " A
       LEFT JOIN " . EM_TIPPS_TABLE . " B ON A.tipp_id = B.tipp_id
       AND A.tipp_points = " . $em_config['points_tendency'] . "
       LEFT JOIN " . EM_TIPPS_TABLE . " C ON A.tipp_id = C.tipp_id
       AND A.tipp_points = " . $em_config['points_tordiff'] . "
       LEFT JOIN " . EM_TIPPS_TABLE . " D ON A.tipp_id = D.tipp_id
       AND A.tipp_points >= " . $em_config['points_match'] . "
       inner join (Select game_id, Game_time FROM " . EM_GAMES_TABLE . " Union Select game_id, Game_time FROM " . EM_FINALS_TABLE . ") as E on E.game_id = A.tipp_game and   E.game_time  < ". intval($timestamp_last_game_before_this_day) ."
       GROUP BY A.tipp_user
       ORDER BY user_points DESC, user_points_result DESC, user_points_difference DESC, user_points_tendency DESC, tipp_user ASC";

	if( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, 'Could not get historical user tipps data', '', __LINE__, __FILE__, $sql);
	}

	$em_user_points_up_to_yesterday = array();
	while ( $row = $db->sql_fetchrow($result) )
	{
		if ($int_userpkt != $row['user_points']) {$int_userpos =  $int_userpos + 1;}
		//   $em_users[][$row['tipp_user']] = $row;
		$em_user_points_up_to_yesterday[] =   $row['tipp_user'];
		if ($int_userpkt != $row['user_points']) {$int_userpos =  $int_userpos + 1;}

		$int_userpkt =$row['user_points'];
	}
	$db->sql_freeresult($result);

	return $em_user_points_up_to_yesterday;
}
ersetzen mit

Code: Alles auswählen

function get_em_user_points_up_to_yesterday() {

	global $db;

	// Load Config
	$em_config    = array();  // Config values
	$em_config    = get_em_config();

	$timestamp_last_game_before_this_day = get_timestamp_for_ranking_history();

	//
	// Get users data
	//
	$sql = "SELECT A.tipp_user , sum( A.tipp_points ) AS user_points, count( A.tipp_points ) AS user_total_tipps, count(
       B.tipp_points ) AS user_points_tendency, count( C.tipp_points ) AS user_points_difference, count( D.tipp_points ) AS user_points_result
       FROM  " . EM_TIPPS_TABLE . " A
       LEFT JOIN " . EM_TIPPS_TABLE . " B ON A.tipp_id = B.tipp_id
       AND A.tipp_points = " . $em_config['points_tendency'] . "
       LEFT JOIN " . EM_TIPPS_TABLE . " C ON A.tipp_id = C.tipp_id
       AND A.tipp_points = " . $em_config['points_tordiff'] . "
       LEFT JOIN " . EM_TIPPS_TABLE . " D ON A.tipp_id = D.tipp_id
       AND A.tipp_points >= " . $em_config['points_match'] . "
       inner join (Select game_id, Game_time FROM " . EM_GAMES_TABLE . " Union Select game_id, Game_time FROM " . EM_FINALS_TABLE . ") as E on E.game_id = A.tipp_game and   E.game_time  < ". intval($timestamp_last_game_before_this_day) ."
       GROUP BY A.tipp_user
       ORDER BY user_points DESC, user_points_result DESC, user_points_difference DESC, user_points_tendency DESC, tipp_user ASC";
	if( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, 'Could not get historical user tipps data', '', __LINE__, __FILE__, $sql);
	}

	$em_user_points_up_to_yesterday = array();
	$int_userposabsolute = 0;
	$int_pktalt = -1;
	while ( $row = $db->sql_fetchrow($result) )
	{
		$int_userposabsolute = ($row['user_points'] != $int_pktalt) ? $int_userposabsolute + 1 : $int_userposabsolute;
		$em_user_points_up_to_yesterday[$row['tipp_user']] = $int_userposabsolute;
		$int_pktalt = $row['user_points'];
	}
	$db->sql_freeresult($result);

	return $em_user_points_up_to_yesterday;
}
(Die Funktionen get_em_user_points_up_to_yesterday_SingleUser und get_rank_of_yesterday in der functions_em sind übrigens überflüssig.)

B.
http://www.beehave.de - home of humbug - und zocken !
[kein Support per PN]
dasinnerevombrötchen
Mitglied
Beiträge: 84
Registriert: 01.08.2003 11:14
Wohnort: Reichertshofen

Beitrag von dasinnerevombrötchen »

oki, dann müsste es für's erste helfen, die punktevergabe abzuschalten :D
Benutzeravatar
double78
Mitglied
Beiträge: 157
Registriert: 22.10.2006 23:18
Wohnort: Köln
Kontaktdaten:

Beitrag von double78 »

@buegelfalte

hab deine Änderungen in der em_stats.php & includes/functions_em.php vorgenommen und nun hat der erste Platz nen Punkt und alle anderen dahinter nen roten Pfeil nach unten. Also bei mir geht es nicht :cry:
Gruß Laubi
Benutzeravatar
buegelfalte
Mitglied
Beiträge: 759
Registriert: 16.02.2005 14:32
Wohnort: Köln
Kontaktdaten:

Beitrag von buegelfalte »

double78 hat geschrieben:nun hat der erste Platz nen Punkt und alle anderen dahinter nen roten Pfeil nach unten.
Bist du denn sicher, daß das nicht korrekt ist ?
Ich habe einige Einträge direkt in der DB überprüft, und die Tendenzen stimmen jetzt bei mir.
http://www.beehave.de - home of humbug - und zocken !
[kein Support per PN]
Benutzeravatar
double78
Mitglied
Beiträge: 157
Registriert: 22.10.2006 23:18
Wohnort: Köln
Kontaktdaten:

Beitrag von double78 »

buegelfalte hat geschrieben: Bist du denn sicher, daß das nicht korrekt ist ?
Ich habe einige Einträge direkt in der DB überprüft, und die Tendenzen stimmen jetzt bei mir.
mmhh sicher bin ich mir nicht aber nach 2 Ergebnissen mit richtiger Tendenz denk ich mal sollte ein grüner Pfeil kommen.
Gruß Laubi
Benutzeravatar
buegelfalte
Mitglied
Beiträge: 759
Registriert: 16.02.2005 14:32
Wohnort: Köln
Kontaktdaten:

Beitrag von buegelfalte »

double78 hat geschrieben:nach 2 Ergebnissen mit richtiger Tendenz denk ich mal sollte ein grüner Pfeil kommen.
Wieso das ?
Gestartet bist du auf Position 0 (wie jeder), hat nur einer MEHR Punkte als du mit 1x richtiger Tendenz, ist der auf einer Position VOR dir, du bist also abgerutscht und bekommst einen roten Pfeil.
Hast du beim nächsten Spiel wieder nur richtige Tendenz, vor dir sind aber noch zwei Ränge, bist du wieder abgerutscht und hast im Vergleich zur Position vor dem letzten Spiel auch wieder einen roten Pfeil !
http://www.beehave.de - home of humbug - und zocken !
[kein Support per PN]
Benutzeravatar
Svenson
Mitglied
Beiträge: 147
Registriert: 01.03.2004 19:56

Beitrag von Svenson »

Hmmm, ich glaub bei mir funktioniert das auch nicht richtig...die ersten 4 haben nen Punkt, sonst nur rote Pfeile...

Wieso kann man eigentlich nicht den gleichen Code wie beim WM-Tippspiel verwenden? Da hats doch super funktioniert?!
"Das schönste auf der Welt ist nichts zu tun, um dann vom Nichtstun auszuruhn"
Benutzeravatar
double78
Mitglied
Beiträge: 157
Registriert: 22.10.2006 23:18
Wohnort: Köln
Kontaktdaten:

Beitrag von double78 »

ja hast recht,ist wohl doch noch zu früh für mich :oops:
ich las die änderungen mal drin und schau heute Abend wie sich was ändert.
Gruß Laubi
Benutzeravatar
buegelfalte
Mitglied
Beiträge: 759
Registriert: 16.02.2005 14:32
Wohnort: Köln
Kontaktdaten:

Beitrag von buegelfalte »

Svenson hat geschrieben:Hmmm, ich glaub bei mir funktioniert das auch nicht richtig...
Sicher ???
"ich glaub" hilft nicht wirklich weiter ...

Am besten: Rangliste aufrufen, stehen lassen, heute abend ein Ergebnis eintragen und in einem neuen Fenster danach die aktualisierte Rangliste aufrufen.
Dann kann man vergleichen, obs wirklich nicht richtig klappt.
Svenson hat geschrieben:Wieso kann man eigentlich nicht den gleichen Code wie beim WM-Tippspiel verwenden? Da hats doch super funktioniert?!
Keine Ahnung, ich hab das nicht umgebaut, dafür wirds schon einen Grund gegeben haben ...
http://www.beehave.de - home of humbug - und zocken !
[kein Support per PN]
Benutzeravatar
double78
Mitglied
Beiträge: 157
Registriert: 22.10.2006 23:18
Wohnort: Köln
Kontaktdaten:

Beitrag von double78 »

ich hätte da noch ne Idee für ein Portal Addon was ich aber leider nicht erstellen kann :roll:

ein Block mit den Aktuellen Spielen des laufenen Tags + die ersten 3 Plätze in der Rangliste

vielleicht kann das ja einer verwirklichen
Gruß Laubi
Antworten

Zurück zu „phpBB 2.0: Mods in Entwicklung“