Code: Selecteer alles
#################################################################
## Description: Ce mod ajoute des niveaux visible dans le profil et dans ## les messages.
## Niveau : le niveau est basé sur l'activité du membre!
## HP: represente l'activité du membre.
## MP: represente comment le membre a repondu aux messages.
## Exp: represente le pourcentage de messages posté par un membre.
##
## Degré d'installation : facile
## Templs d'installation : 5 Minutes
## Fichiers à editer : 4
## ./includes/usercp_viewprofile.php
## ./viewtopic.php
## ./templates/subSilver/viewtopic_body.php
## ./templates/subSilver/profile_view_body.php
##
## Fichiers à inclure :
## levelmod/exp_bar_fil.gif
## levelmod/exp_bar_filexp_bar_fil_end.gif
## levelmod/exp_bar_filexp_bar_left.gif
## levelmod/exp_bar_filhp_bar_fil.gif
## levelmod/exp_bar_filhp_bar_fil_end.gif
## levelmod/exp_bar_filhp_bar_left.gif
## levelmod/exp_bar_fillevel_bar_emp.gif
## levelmod/exp_bar_fillevel_bar_right.gif
## levelmod/exp_bar_filmp_bar_fil.gif
## levelmod/exp_bar_filmp_bar_fil_end.gif
## levelmod/exp_bar_filmp_bar_left.gif
####################################
#
#-----[ OPEN ]------------------------------------------
#
./includes/usercp_viewprofile.php
#
#-----[ FIND ]------------------------------------------
#
$search = '<a href="' . $temp_url . '">' . $lang['Search_user_posts'] . '</a>';
#
#-----[ AFTER, ADD ]------------------------------------------
#
/* BEGIN LEVEL HACK
* Note: all new variables are prefixed with level_ to
* be sure of not overwriting other variables.
*/
/* Determine Level
*
* A users level is determined by their total number of posts.
* We use a nice mathmatical formula to translate a post count
* into a level.
* Note, a user with zero posts is level 0
*
*/
if($profiledata['user_posts'] < 1)
{
$level_level = 0;
}
else
{
$level_level = floor( pow( log10( $profiledata['user_posts'] ), 3 ) ) + 1;
}
/* Determine HP
*
* HP is based on user activity.
* Max HP is based on the users level, and will be the same for
* all users of the same level.
*
* Current HP is based on the users posts per day.
* The higher the users posts per day (ppd), the more hp
* they will have. A user with average ppd (as set below)
* will have 50% of their hp. As a user goes over the average
* ppd, they will have more hp, but the gains will lessen
* as the users ppd goes up. This makes it difficult, but not
* impossible to have 100% hp.
*
* For users with under the average ppd, they will have
* hp equal to 1/2 the percentage their ppd is of average.
* ie- a user with 2.5 ppd, and an average ppd of 5
* will have 25% hp.
*
* Users who miraculously manage to get higher than 100%
* of their max health. (by posting far more than average)
* will get a bonus to their max hp.
*
* Note that a user with a level of zero, has 0 / 0 hp.
*
*/
/*
* This value determines what the 'average' posts per day is
* Users above this value will have more hp, and users below
* will have less. A user with exactly this posts per day
* will have 50% of his max hp.
*
* This variable should NOT be zero.
* You may set this to a decimal amount (eg 5.1, 2.35)
*/
$level_avg_ppd = 5;
/*
* this value sets how hard it is to achieve 100%
* hp. The higher you set it, the harder it is to
* get full hp.
*
* to judge how high to set it, a user must have
* posts per day equal to the $level_avg_ppd plus
* the number set below.
*
* This should NOT be zero.
*/
$level_bonus_redux = 5;
if($level_level < 1)
{
$level_hp = "0 / 0";
$level_hp_percent = 0;
}
else
{
$level_max_hp = floor( (pow( $level_level, (1/4) ) ) * (pow( 10, pow( $level_level+2, (1/3) ) ) ) / (1.5) );
if($posts_per_day >= $level_avg_ppd)
{
$level_hp_percent = floor( (.5 + (($posts_per_day - $level_avg_ppd) / ($level_bonus_redux * 2)) ) * 100);
}
else
{
$level_hp_percent = floor( $posts_per_day / ($level_avg_ppd / 50) );
}
if($level_hp_percent > 100)
{
//Give the User bonus max HP if they have more than 100% hp
$level_max_hp += floor( ($level_hp_percent - 100) * pi() );
$level_hp_percent = 100;
}
else
{
$level_hp_percent = max(0, $level_hp_percent);
}
$level_cur_hp = floor($level_max_hp * ($level_hp_percent / 100) );
//Be sure that a user has no more than max
//and no less than zero hp.
$level_cur_hp = max(0, $level_cur_hp);
$level_cur_hp = min($level_max_hp, $level_cur_hp);
$level_hp = $level_cur_hp . " / " . $level_max_hp;
}
/* Determine MP
*
* MP is calculated by how long the user has been around
* and how often they post.
*
* Max MP is based on level, and increases with level
* Each post a user makes costs them mp,
* and a user regenerates mp proportional to how
* many days they have been registered
*
*/
//Number of days the user has been at the forums.
$level_user_days = max(1, round( ( time() - $profiledata['user_regdate'] ) / 86400 ));
//The mp cost for one post.
//Raising this value will generally decrease the current
// mp for most posters.
//This may be set to a decimal value (eg, 2, 2.1, 3.141596)
//This should NOT be set to 0
$level_post_mp_cost = 1;
//This determines how much mp a user regenerates per day
//Raising this value will generally increase the current
// mp for most posters.
//This may be set to a decimal value (eg, 3, 3.5, 2.71828)
//This should NOT be set to 0
$level_mp_regen_per_day = 4;
if($level_level < 1)
{
$level_mp = "0 / 0";
$level_mp_percent = 100;
}
else
{
$level_max_mp = floor( (pow( $level_level, (1/4) ) ) * (pow( 10, pow( $level_level+2, (1/3) ) ) ) / (pi()) );
$level_mp_cost = $profiledata['user_posts'] * $level_post_mp_cost;
$level_mp_regen = max(1, $level_user_days * $level_mp_regen_per_day);
$level_cur_mp = floor($level_max_mp - $level_mp_cost + $level_mp_regen);
$level_cur_mp = max(0, $level_cur_mp);
$level_cur_mp = min($level_max_mp, $level_cur_mp);
$level_mp = $level_cur_mp . " / " . $level_max_mp;
$level_mp_percent = floor($level_cur_mp / $level_max_mp * 100);
}
/* Determine EXP percentage
*
* Experience is determined by how far the user is away
* from the next level. This is expressed as a percentage.
*
* Note, a user of level 0 has 100% experience. Making one post
* will put them at level 1. Also, a user that is shown to have 100%
* experience, will go up a level on their next post.
*
*/
if($level_level == 0)
{
$level_exp = "0 / 0";
$level_exp_percent = 100;
}
else
{
$level_posts_for_next = floor( pow( 10, pow( $level_level, (1/3) ) ) );
$level_posts_for_this = floor( pow( 10, pow( ($level_level - 1), (1/3) ) ) );
$level_exp = $profiledata['user_posts'] . " / " . $level_posts_for_next;
$level_exp_percent = floor( ($profiledata['user_posts'] - $level_posts_for_this) /
max(1,($level_posts_for_next - $level_posts_for_this)) * 100);
}
/* END LEVEL HACK */
#
#-----[ FIND ]------------------------------------------
#
'U_SEARCH_USER' => append_sid("search.$phpEx?search_author=" . urlencode($profiledata['username'])),
#
#-----[ AFTER, ADD ]------------------------------------------
#
/* BEGIN LEVEL MOD */
"HP" => $level_hp,
"HP_WIDTH" => $level_hp_percent,
"HP_EMPTY" => ( 100 - $level_hp_percent ),
"MP" => $level_mp,
"MP_WIDTH" => $level_mp_percent,
"MP_EMPTY" => ( 100 - $level_mp_percent ),
"EXP" => $level_exp,
"EXP_WIDTH" => $level_exp_percent,
"EXP_EMPTY" => ( 100 - $level_exp_percent ),
"LEVEL" => $level_level,
/* END LEVEL MOD */
#
#-----[ OPEN ]------------------------------------------
#
./templates/subSilver/profile_view_body.tpl
#
#-----[ FIND ]------------------------------------------
#
<tr>
<td valign="top" align="right" nowrap="nowrap"><span class="gen">{L_INTERESTS}:</span></td>
<td> <b><span class="gen">{INTERESTS}</span></b></td>
</tr>
#
#-----[ AFTER, ADD ]------------------------------------------
#
<!-- [BEGIN LEVEL MOD] -->
<tr>
<td valign="top" align="right"><span class="gen">Level:</span></td>
<td><b><span class="gen">{LEVEL}</span></b></td>
</tr>
<tr>
<td> </td>
<td align="left">
<table cellspacing="0" cellpadding="0" border="0">
<tr>
<td align="left"><span class="postdetails">HP:</span></td>
<td align="right"><span class="postdetails"><b>{HP}</b></span></td>
<td> </td>
</tr>
<tr>
<td colspan="2">
<table cellspacing="0" cellpadding="0" border="0">
<tr>
<td><img src="templates/subSilver/images/level_mod/hp_bar_left.gif" width="2" height="12" /></td>
<td><img src="templates/subSilver/images/level_mod/hp_bar_fil.gif" width="{HP_WIDTH}" height="12" /></td>
<td><img src="templates/subSilver/images/level_mod/hp_bar_fil_end.gif" width="1" height="12" /></td>
<td><img src="templates/subSilver/images/level_mod/level_bar_emp.gif" width="{HP_EMPTY}" height="12" /></td>
<td><img src="templates/subSilver/images/level_mod/level_bar_right.gif" width="1" height="12" /></td>
</tr>
</table>
</td>
<td align="left"><span class="gen"> {HP_WIDTH}%</span></td>
</tr>
</table>
</td>
</tr>
<tr>
<td> </td>
<td align="left">
<table cellspacing="0" cellpadding="0" border="0">
<tr>
<td align="left"><span class="postdetails">MP:</span></td>
<td align="right"><span class="postdetails"><b>{MP}</b></span></td>
<td> </td>
</tr>
<tr>
<td colspan="2">
<table cellspacing="0" cellpadding="0" border="0">
<tr>
<td><img src="templates/subSilver/images/level_mod/mp_bar_left.gif" width="2" height="12" /></td>
<td><img src="templates/subSilver/images/level_mod/mp_bar_fil.gif" width="{MP_WIDTH}" height="12" /></td>
<td><img src="templates/subSilver/images/level_mod/mp_bar_fil_end.gif" width="1" height="12" /></td>
<td><img src="templates/subSilver/images/level_mod/level_bar_emp.gif" width="{MP_EMPTY}" height="12" /></td>
<td><img src="templates/subSilver/images/level_mod/level_bar_right.gif" width="1" height="12" /></td>
</tr>
</table>
</td>
<td align="left"><span class="gen"> {MP_WIDTH}%</span></td>
</tr>
</table>
</td>
</tr>
<tr>
<td> </td>
<td align="left">
<table cellspacing="0" cellpadding="0" border="0">
<tr>
<td align="left"><span class="postdetails">EXP:</span></td>
<td align="right"><span class="postdetails"><b>{EXP}</b></span></td>
<td> </td>
</tr>
<tr>
<td colspan="2">
<table cellspacing="0" cellpadding="0" border="0">
<tr>
<td><img src="templates/subSilver/images/level_mod/exp_bar_left.gif" width="2" height="12" /></td>
<td><img src="templates/subSilver/images/level_mod/exp_bar_fil.gif" width="{EXP_WIDTH}" height="12" /></td>
<td><img src="templates/subSilver/images/level_mod/exp_bar_fil_end.gif" width="1" height="12" /></td>
<td><img src="templates/subSilver/images/level_mod/level_bar_emp.gif" width="{EXP_EMPTY}" height="12" /></td>
<td><img src="templates/subSilver/images/level_mod/level_bar_right.gif" width="1" height="12" /></td>
</tr>
</table>
</td>
<td align="left"><span class="gen"> {EXP_WIDTH}%</span></td>
</tr>
</table>
</td>
</tr>
<!-- [END LEVEL MOD] -->
#
#-----[ OPEN ]------------------------------------------
#
./viewtopic.php
#
#-----[ FIND ]------------------------------------------
#
$row_class = ( !($i % 2) ) ? $theme['td_class1'] : $theme['td_class2'];
#
#-----[ AFTER, ADD ]------------------------------------------
#
/* BEGIN LEVEL HACK
* Note: all new variables are prefixed with level_ to
* be sure of not overwriting other variables.
*/
/* Determine Level
*
* A users level is determined by their total number of posts.
* We use a nice mathmatical formula to translate a post count
* into a level.
* Note, a user with zero posts is level 0
*
*/
if($postrow[$i]['user_posts'] < 1)
{
$level_level = 0;
}
else
{
$level_level = floor( pow( log10( $postrow[$i]['user_posts'] ), 3 ) ) + 1;
}
/* Determine HP
*
* HP is based on user activity.
* Max HP is based on the users level, and will be the same for
* all users of the same level.
*
* Current HP is based on the users posts per day.
* The higher the users posts per day (ppd), the more hp
* they will have. A user with average ppd (as set below)
* will have 50% of their hp. As a user goes over the average
* ppd, they will have more hp, but the gains will lessen
* as the users ppd goes up. This makes it difficult, but not
* impossible to have 100% hp.
*
* For users with under the average ppd, they will have
* hp equal to 1/2 the percentage their ppd is of average.
* ie- a user with 2.5 ppd, and an average ppd of 5
* will have 25% hp.
*
* Users who miraculously manage to get higher than 100%
* of their max health. (by posting far more than average)
* will get a bonus to their max hp.
*
* Note that a user with a level of zero, has 0 / 0 hp.
*
*/
/*
* This value determines what the 'average' posts per day is
* Users above this value will have more hp, and users below
* will have less. A user with exactly this posts per day
* will have 50% of his max hp.
*
* This variable should NOT be zero.
* You may set this to a decimal amount (eg 5.1, 2.35)
*/
$level_avg_ppd = 5;
/*
* this value sets how hard it is to achieve 100%
* hp. The higher you set it, the harder it is to
* get full hp.
*
* to judge how high to set it, a user must have
* posts per day equal to the $level_avg_ppd plus
* the number set below.
*
* This should NOT be zero.
*/
$level_bonus_redux = 5;
/*
* We need to calculate the user's
* posts per day because it's not done for us,
* unlike in profile.php
*/
$level_user_ppd = ($postrow[$i]['user_posts'] / max(1, round( ( time() - $postrow[$i]['user_regdate'] ) / 86400 )));
if($level_level < 1)
{
$level_hp = "0 / 0";
$level_hp_percent = 0;
}
else
{
$level_max_hp = floor( (pow( $level_level, (1/4) ) ) * (pow( 10, pow( $level_level+2, (1/3) ) ) ) / (1.5) );
if($posts_per_day >= $level_avg_ppd)
{
$level_hp_percent = floor( (.5 + (($level_user_ppd - $level_avg_ppd) / ($level_bonus_redux * 2)) ) * 100);
}
else
{
$level_hp_percent = floor( $level_user_ppd / ($level_avg_ppd / 50) );
}
if($level_hp_percent > 100)
{
//Give the User bonus max HP if they have more than 100% hp
$level_max_hp += floor( ($level_hp_percent - 100) * pi() );
$level_hp_percent = 100;
}
else
{
$level_hp_percent = max(0, $level_hp_percent);
}
$level_cur_hp = floor($level_max_hp * ($level_hp_percent / 100) );
//Be sure that a user has no more than max
//and no less than zero hp.
$level_cur_hp = max(0, $level_cur_hp);
$level_cur_hp = min($level_max_hp, $level_cur_hp);
$level_hp = $level_cur_hp . " / " . $level_max_hp;
}
/* Determine MP
*
* MP is calculated by how long the user has been around
* and how often they post.
*
* Max MP is based on level, and increases with level
* Each post a user makes costs them mp,
* and a user regenerates mp proportional to how
* many days they have been registered
*
*/
//Number of days the user has been at the forums.
$level_user_days = max(1, round( ( time() - $postrow[$i]['user_regdate'] ) / 86400 ));
//The mp cost for one post.
//Raising this value will generally decrease the current
// mp for most posters.
//This may be set to a decimal value (eg, 2, 2.1, 3.141596)
//This should NOT be set to 0
$level_post_mp_cost = 1;
//This determines how much mp a user regenerates per day
//Raising this value will generally increase the current
// mp for most posters.
//This may be set to a decimal value (eg, 3, 3.5, 2.71828)
//This should NOT be set to 0
$level_mp_regen_per_day = 4;
if($level_level < 1)
{
$level_mp = "0 / 0";
$level_mp_percent = 100;
}
else
{
$level_max_mp = floor( (pow( $level_level, (1/4) ) ) * (pow( 10, pow( $level_level+2, (1/3) ) ) ) / (pi()) );
$level_mp_cost = $postrow[$i]['user_posts'] * $level_post_mp_cost;
$level_mp_regen = max(1, $level_user_days * $level_mp_regen_per_day);
$level_cur_mp = floor($level_max_mp - $level_mp_cost + $level_mp_regen);
$level_cur_mp = max(0, $level_cur_mp);
$level_cur_mp = min($level_max_mp, $level_cur_mp);
$level_mp = $level_cur_mp . " / " . $level_max_mp;
$level_mp_percent = floor($level_cur_mp / $level_max_mp * 100);
}
/* Determine EXP percentage
*
* Experience is determined by how far the user is away
* from the next level. This is expressed as a percentage.
*
* Note, a user of level 0 has 100% experience. Making one post
* will put them at level 1. Also, a user that is shown to have 100%
* experience, will go up a level on their next post.
*
*/
if($level_level == 0)
{
$level_exp = "0 / 0";
$level_exp_percent = 100;
}
else
{
$level_posts_for_next = floor( pow( 10, pow( $level_level, (1/3) ) ) );
$level_exp = $postrow[$i]['user_posts'] . " / " . $level_posts_for_next;
$level_exp_percent = floor( ($postrow[$i]['user_posts'] - $level_posts_for_this) /
max(1,($level_posts_for_next - $level_posts_for_this)) * 100);
}
/* END LEVEL HACK */
#-----[ FIND ]------------------------------------------
#
'POSTER_AVATAR' => $poster_avatar,
#
#-----[ AFTER, ADD ]------------------------------------------
#
/* BEGIN LEVEL MOD */
"POSTER_HP" => $level_hp,
"POSTER_HP_WIDTH" => $level_hp_percent,
"POSTER_HP_EMPTY" => ( 100 - $level_hp_percent ),
"POSTER_MP" => $level_mp,
"POSTER_MP_WIDTH" => $level_mp_percent,
"POSTER_MP_EMPTY" => ( 100 - $level_mp_percent ),
"POSTER_EXP" => $level_exp,
"POSTER_EXP_WIDTH" => $level_exp_percent,
"POSTER_EXP_EMPTY" => ( 100 - $level_exp_percent ),
"POSTER_LEVEL" => $level_level,
/* END LEVEL MOD */
#
#-----[ OPEN ]------------------------------------------
#
./templates/subSilver/viewtopic_body.tpl
#
#-----[ FIND ]------------------------------------------
#
</span><br /><span class="postdetails">{postrow.POSTER_RANK}<br />{postrow.RANK_IMAGE}{postrow.POSTER_AVATAR}<br /><br />{postrow.POSTER_JOINED}<br />{postrow.POSTER_POSTS}<br />{postrow.POSTER_FROM}
#
#-----[ AFTER, ADD ]------------------------------------------
#
<!-- [BEGIN LEVEL MOD] -->
<span class="postdetails">
Level: <b>{postrow.POSTER_LEVEL}</b>
<table cellspacing="0" cellpadding="0" border="0">
<tr>
<td align="left"><span class="postdetails">HP:</span></td>
<td align="right"><span class="postdetails"><b>{postrow.POSTER_HP}</b></span></td>
<td> </td>
</tr>
<tr>
<td colspan="2">
<table cellspacing="0" cellpadding="0" border="0">
<tr>
<td><img src="templates/subSilver/images/level_mod/hp_bar_left.gif" width="2" height="12" /></td>
<td><img src="templates/subSilver/images/level_mod/hp_bar_fil.gif" width="{postrow.POSTER_HP_WIDTH}" height="12" /></td>
<td><img src="templates/subSilver/images/level_mod/hp_bar_fil_end.gif" width="1" height="12" /></td>
<td><img src="templates/subSilver/images/level_mod/level_bar_emp.gif" width="{postrow.POSTER_HP_EMPTY}" height="12" /></td>
<td><img src="templates/subSilver/images/level_mod/level_bar_right.gif" width="1" height="12" /></td>
</tr>
</table>
</td>
<td align="left"><span class="gen"> {postrow.POSTER_HP_WIDTH}%</span></td>
</tr>
</table>
<table cellspacing="0" cellpadding="0" border="0">
<tr>
<td align="left"><span class="postdetails">MP:</span></td>
<td align="right"><span class="postdetails"><b>{postrow.POSTER_MP}</b></span></td>
<td> </td>
</tr>
<tr>
<td colspan="2">
<table cellspacing="0" cellpadding="0" border="0">
<tr>
<td><img src="templates/subSilver/images/level_mod/mp_bar_left.gif" width="2" height="12" /></td>
<td><img src="templates/subSilver/images/level_mod/mp_bar_fil.gif" width="{postrow.POSTER_MP_WIDTH}" height="12" /></td>
<td><img src="templates/subSilver/images/level_mod/mp_bar_fil_end.gif" width="1" height="12" /></td>
<td><img src="templates/subSilver/images/level_mod/level_bar_emp.gif" width="{postrow.POSTER_MP_EMPTY}" height="12" /></td>
<td><img src="templates/subSilver/images/level_mod/level_bar_right.gif" width="1" height="12" /></td>
</tr>
</table>
</td>
<td align="left"><span class="gen"> {postrow.POSTER_MP_WIDTH}%</span></td>
</tr>
</table>
<table cellspacing="0" cellpadding="0" border="0">
<tr>
<td align="left"><span class="postdetails">EXP:</span></td>
<td align="right"><span class="postdetails"><b>{postrow.POSTER_EXP}</b></span></td>
<td> </td>
</tr>
<tr>
<td colspan="2">
<table cellspacing="0" cellpadding="0" border="0">
<tr>
<td><img src="templates/subSilver/images/level_mod/exp_bar_left.gif" width="2" height="12" /></td>
<td><img src="templates/subSilver/images/level_mod/exp_bar_fil.gif" width="{postrow.POSTER_EXP_WIDTH}" height="12" /></td>
<td><img src="templates/subSilver/images/level_mod/exp_bar_fil_end.gif" width="1" height="12" /></td>
<td><img src="templates/subSilver/images/level_mod/level_bar_emp.gif" width="{postrow.POSTER_EXP_EMPTY}" height="12" /></td>
<td><img src="templates/subSilver/images/level_mod/level_bar_right.gif" width="1" height="12" /></td>
</tr>
</table>
</td>
<td align="left"><span class="gen"> {postrow.POSTER_EXP_WIDTH}%</span></td>
</tr>
</table>
</span>
<!-- [END LEVEL MOD] -->
#
#-----[ SAVE AND CLOSE ]------------------------------------------
#
# EoM
Zoals je ziet is hij in het Frans (voor mij geen probleem, maar voor anderen wellicht wel). Plaatjes kan je halen uit de volgende download: