﻿<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="style/design-mod.xsl" type="text/xsl" ?>
<mod>
	<header>
		<name>Level Mod</name>
		<version>1.2</version>
		<author>
			<name>Talus</name>
			<website>http://www.talus-works.net</website>
			<email>talusch@gmail.com</email>
		</author>
		<history>
			<entry>
				<date>12/01/2008</date>
				<author>Talus</author>
				<text><![CDATA[Mise à jour de compatibilité avec la Finale (2.0.0)]]></text>
			</entry>
		</history>
		<description><![CDATA[Ajoute un niveau de l'utilisateur par rapport aux nombres de posts, et son expérience nécessaire pour passer au prochain niveau (en pourcentages)]]></description>
		<note><![CDATA[Les modifications des fichiers main/online.php et tpl/WhiteSummer/files/online.html sont optionnelles ; Elles ne sont qu'un plus pour afficher le niveau du forum... Notez que les images utilisées par le mod pour l'expérience sont celles des sondages. Libre à vous d'en faire d'autres !]]></note>
		<manualQueries><![CDATA[INSERT INTO `fsb2_mods` (`mod_name`, `mod_real_name`, `mod_status`, `mod_version`, `mod_description`, `mod_author`, `mod_email`, `mod_website`, `mod_type`) VALUES ('lvl', 'Level Mod', 1, '1.2', 'Ajoute un niveau de l''utilisateur par rapport aux nombres de posts, et son expérience nécessaire pour passer au prochain niveau (en pourcentages)', 'Talus', 'talusch@gmail.com', 'http://www.talus-works.net', 1);]]></manualQueries>
	</header>
	<instruction>
		<line name="copy">
			<file>
				<filename>lang/fr/mods/lg_lvl.php</filename>
				<duplicat>lang/</duplicat>
			</file>
		</line>
		<line name="open"><file>main/forum/forum_topic.php</file></line>
		<line name="find"><code><![CDATA[		// Données des champs personalisés
		$ary['fields'] = array();]]></code></line>
		<line name="before"><code><![CDATA[		/*
			Begin Mod Level Mod - 1.2
		*/
		if( Fsb::$mods->is_active('lvl') ){
			// -- Calcul du niveau d'experience.
			$level_mod = ($row['u_total_post'] < 1) ? 0 : floor(pow(log10($row['u_total_post']), 3)) + 1;
			
			// -- On instancie le prochain niveau, et l'experience actuelle.
			$next_lvl = 0;
			$cur_exp = 0;
			
			// -- Pourcentage actuel.
			$perc_exp = 100;
			
			// -- Si on a un niveau > 0, alors on redefinit les variables précédentes.
			if( $level_mod > 0 ){
				$next_lvl = floor(pow(10, pow($level_mod, (1/3))));
				$cur_exp = floor(pow(10, pow(($level_mod - 1), (1/3))));
				
				$perc_exp = floor(($row['u_total_post'] - $cur_exp) / max(1, ($next_lvl - $cur_exp)) * 100);
			}
			
			$lvl = array(
					'RPG_LEVEL' =>			$level_mod,
					'RPG_EXP_FILL' => 		$perc_exp,
					'RPG_EXP_REST' =>		(100 - $perc_exp),
					'RPG_EXP_CUR' =>		($row['u_total_post'] - $cur_exp - 1),
					'RPG_EXP_TOTAL' =>		($next_lvl - $cur_exp),
				);
			
			$ary['data'] = array_merge($ary['data'], $lvl);
		}
		
		/*
			End Mod Level Mod - 1.2
		*/]]></code></line>
		<line name="open"><file>main/forum/forum_userprofile.php</file></line>
		<line name="find"><code><![CDATA[		// On affiche les moyens de contacter le membre
		Profil_fields_forum::show_fields(PROFIL_FIELDS_CONTACT, 'contact', $this->data);
		Profil_fields_forum::show_fields(PROFIL_FIELDS_PERSONAL, 'personal', $this->data);]]></code></line>
		<line name="before"><code><![CDATA[		/*
			Begin Mod Level Mod
			v 1.2
		*/
		if( Fsb::$mods->is_active('lvl') ){
			Fsb::$tpl->set_vars(array(
					'RPG_LEVEL' =>			$this->data['rpg']['level'],
					
					// -- Expérience
					'RPG_EXP_FILL' => 		$this->data['rpg']['perc_exp'],
					'RPG_EXP_REST' =>		(100 - $this->data['rpg']['perc_exp']),
				
					// -- HPs
					
					// -- MPs
				));
		}
		/*
			End Mod Level Mod
			v 1.2
		*/]]></code></line>
		<line name="find"><code><![CDATA[		// Forum dans lequel le membre est le plus actif
		$forums_idx = Forum::get_authorized(array('ga_view', 'ga_view_topics', 'ga_read'));]]></code></line>
		<line name="before"><code><![CDATA[		/*
			Begin Mod Level Mod - 1.2
		*/
		if( Fsb::$mods->is_active('lvl') ){
			/*
			*	L'expérience et le niveau sont basés sur le nombre de post de l'utilisateur ; A l'aide d'une petite formule matheuse, on arrive à calcluler le niveau
			*	de l'utilisateur, en fonction du nombre de messages du membre. 
			*	L'expérience à faire, quant à elle, est égalemlent déterminée par le niveau du membre, en calculant la puissance de 10 par rapport à la racine
			*	cubique du membre (phew).
			*
			*	L'expérience actuelle, quant à elle, c'est à peu près la même chose, sauf qu'on retrance 1 au niveau du membre. Ensuite, le nombre de messages
			*	nécessaires pour passer au niveau supérieur est retranché au nombre de messages à faire qu'il y avait pour le niveau actuel... Et ainsi, on arrive
			*	à ce qu'on voulait obtenir.
			*
			*	TODO 1.5 :: HP & MP
			*
			*	Pour les HPs du membre, on évaluera par rapport à la dernière semaine passée l'activité du membre (nombre de messages / jour). Le maximum de HP est
			*	déterminé à l'aide du nombre de message par jour de l'utilisateur : plus celui-ci est élevé, plus celui-ci sera haut. Si l'utilisateur poste plus de messages
			*	que d'habitude lors de la journée passé. Pour ca, on divise le nombre de mots moyens postés par jour par le nombre moyen de messages postés à jour, que
			*	pour obtenir le nombre maximum de HP, et, enfin, on divise le tout par le temps d'une semaine pour obtenir les HP actuels. Je crois :p
			*
			*	Pour les MPs... Joker.
			*/
			// -- Calcul du niveau d'experience.
			$this->data['rpg']['level'] = ($this->data['u_total_post'] < 1) ? 0 : floor( pow( log10( $this->data['u_total_post'] ), 3 ) ) + 1;
			
			// -- On instancie le prochain niveau, et l'experience actuelle.
			$next_level = 0;
			$cur_exp = 0;
			
			// -- Pourcentage actuel.
			$this->data['rpg']['perc_exp'] = 100;
			
			// -- Si on a un niveau > 0, alors on redefinit les variables précédentes.
			if( $this->data['rpg']['level'] > 0 ){
				$next_level = floor(pow(10, pow($this->data['rpg']['level'], (1/3))));
				$cur_exp = floor(pow(10, pow(($this->data['rpg']['level'] - 1), (1/3))));
				
				$this->data['rpg']['perc_exp'] = floor(($this->data['u_total_post'] - $cur_exp) / max(1, ($next_level - $cur_exp)) * 100);
			}
		}
		/**
			*	End Mod Level Mod 1.2
		*/]]></code></line>
		
		<line name="open"><file>main/forum/forum_userlist.php</file></line>
		<line name="find"><code><![CDATA[

			// On affiche les valeurs des colones dynamiques
			$this->show_columns_value($row);
			$i++;
			$indent++;]]></code></line>
		<line name="before"><code><![CDATA[			/**
				*	Level Mod 1.2
			*/
			if( Fsb::$mods->is_active('lvl') ){
				$ary['LEVEL'] = ($row['u_total_post'] < 1) ? 0 : floor( pow( log10( $row['u_total_post'] ), 3 ) ) + 1;
				Fsb::$tpl->update_blocks('user', -1, $ary);
			}
			/**
				*	END Level Mod 1.2
			*/]]></code></line>
		
		<line name="open"><file>main/online.php</file></line>
		<line name="find"><code><![CDATA[}

/* EOF */]]></code></line>
		<line name="before"><code><![CDATA[	/*
		Begin Mod Level Mod - 1.2
	*/
	if( Fsb::$mods->is_active('lvl') ){
		/*
			*	Petite fantaisie de ma part (:p)
			*	L'expérience et le niveau sont basés sur le nombre de post total sur les forums ; A l'aide d'une petite formule matheuse, on arrive à calcluler le niveau
			*	du forum, en fonction du nombre de messages du membre. 
		*/
			
		Fsb::$tpl->set_vars(array( 
				'RPG_FORUM_LEVEL' => (( Fsb::$cfg->get('total_posts') < 1) ? 0 : floor( pow( log10( Fsb::$cfg->get('total_posts') ), 3 ) ) + 1)
			));
	}]]></code></line>
	
		<line name="open"><file>tpl/WhiteSummer/files/forum/forum_topic.html</file></line>
		<duplicat>tpl</duplicat>
		<line name="find"><code><![CDATA[						<li><b>{LG_TOPIC_POSTS_TOTAL}</b> : <a href="{post.U_POSTS}">{post.POSTS}</a></li>
						<li><b>{LG_TOPIC_USER_JOINED}</b> : {post.JOINED}</li>]]></code></line>
		<line name="after"><code><![CDATA[						<switch name="ac_mods_lvl">
						<!-- Begin Level Mod 1.2 -->
							<li>
								<b>{LG_RPG_LEVEL}</b> : {post.RPG_LEVEL}<br />
								<b>{LG_RPG_CUR_EXP}</b> : {post.RPG_EXP_FILL}%<br />
									<img src="{IMG_POLL_RESULT_LEFT}" alt="" style="height:15px;" /><img src="{IMG_POLL_RESULT}" style="height:15px;width:{post.RPG_EXP_FILL}px;" alt="" /><img src="{IMG_POLL_RESULT_RIGHT}" alt="" style="height:15px;" />
							</li>
						<!-- End Level Mod 1.2 -->
						</switch>]]></code></line>
	
		<line name="open"><file>tpl/WhiteSummer/files/forum/forum_userprofile.html</file></line>
		<duplicat>tpl</duplicat>
		<line name="find"><code><![CDATA[					<if content="$ACTIV_TOPIC">
						<tr>
							<th>{LG_USERPROFILE_ACTIV_TOPIC}</th>
							<td><b><a href="{U_ACTIV_TOPIC}">{ACTIV_TOPIC}</a></b> ({ACTIV_TOPIC_POST})</td>
						</tr>
					</if>]]></code></line>
		<line name="after"><code><![CDATA[					<switch name="ac_mods_lvl">
					<!-- Begin Level Mod 1.2 -->
						<tr>
							<th>
								{LG_RPG_LEVEL}
							</th>
							<td>
								{RPG_LEVEL}
							</td>
						</tr>
						<tr>
							<th>{LG_RPG_CUR_EXP}</th>
							<td><img src="{IMG_POLL_RESULT_LEFT}" alt="" style="height:15px;" /><img src="{IMG_POLL_RESULT}" style="height:15px;width:{RPG_EXP_FILL}px;" alt="" /><img src="{IMG_POLL_RESULT_RIGHT}" alt="" style="height:15px;" />&nbsp;({RPG_EXP_FILL}%)</td>
						</tr>
					<!-- End Level Mod 1.2 -->
					</switch>]]></code></line>	
					
		<duplicat>tpl</duplicat>
		<line name="open"><file>tpl/WhiteSummer/files/forum/forum_userlist_simple.html</file></line>
		<line name="find"><code><![CDATA[<td align="center">{user.NICKNAME}</td>]]></code></line>
		<line name="in line find"><code><![CDATA[{user.NICKNAME}]]></code></line>
		<line name="in line add"><code><![CDATA[ <switch name="ac_mods_lvl">({LG_RPG_LEVEL} {user.LEVEL})</switch>]]></code></line>
	
		<line name="open"><file>tpl/WhiteSummer/files/forum/forum_userlist_advanced.html</file></line>
		<duplicat>tpl</duplicat>
		<line name="find"><code><![CDATA[					<b>{LG_USERLIST_TOTAL_TOPIC}</b> <if content="$user.TOTAL_TOPICS > 0"><a href="{user.U_SEARCH_TOPICS}">{user.TOTAL_TOPICS}</a><else>{user.TOTAL_TOPICS}</if>]]></code></line>
		<line name="after"><code><![CDATA[
		<switch name="ac_mods_lvl"><br /><b>{LG_RPG_LEVEL}</b> : {user.LEVEL}</switch>]]></code></line>
	
		<line name="open"><file>tpl/WhiteSummer/files/online.html</file></line>
		<duplicat>tpl</duplicat>
		<line name="find"><code><![CDATA[<table class="t" cellspacing="0">
				<tr>
					<td class="icons"><img src="{IMG_STATS}" alt="{LG_STATS}" title="{LG_STATS}" /></td>
					<td>
						{FORUM_STATS}]]></code></line>
		<line name="after"><code><![CDATA[ <switch name="ac_mods_lvl">({LG_RPG_LEVEL} : {RPG_FORUM_LEVEL})</switch>]]></code></line>
			
		<line name="end">
		</line>
	</instruction>
</mod>