Code: Select all
## Description: This MOD uses the original MOD author Jon Borzilleri's 3.5 BETA as the backbone and thanks to Antony who fine-tune the calculation settings and with Skill Ratio & Class add-ons. This release uses Daz (ForumImage)'s image. This would be the final release of this MOD by me
deny wrote: This MOD works perfect and should be placed under.
MOD Release Announcements & Support
No error, no bugs....Big thanks for great MOD!!!
Code: Select all
<?php
/***************************************************************************
* level_mod.php
* -------------------
* begin : Sunday, May 18, 2003
* copyright : Antony
* http://phpbb.com/phpBB/profile.php?mode=viewprofile&u=47740
*
* $Id: level_mod.php, v 1.0 2003/05/18 20:12:39 Antony Exp $
*
*
***************************************************************************/
/***************************************************************************
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
***************************************************************************/
if ( !defined('IN_PHPBB') )
{
die("Hacking attempt");
}
/* Begin HP/MP/EXP Mod
*
* Note: all new variables used created in this mod
* are prefixed with level_ to be sure of not overwriting
* other variables.
*
*/
/* Calculate Level
* A user's level is determined by their total number of posts.
* A nice mathmatical formula is used to translate their post count
* into an intager level.
*
* Note: A user with zero (0) posts is considered level 0, however
* making one (1) post, raises them to level 1.
*
*/
// Are we in profile or viewtopic?
$trash = $_SERVER['SCRIPT_NAME'];
$lpos = strrpos($trash,"/") + 1;
$rpos = strpos($trash, ".php");
$trash = substr($trash,$lpos,($rpos-$lpos));
if ($trash == 'profile') {
$profileversion = true;
} else {
$profileversion = false;
}
if ($profileversion) {
if($profiledata['user_posts'] < 1) {
$level_level = 0;
} else {
$level_level = floor( pow( log10( $profiledata['user_posts'] ), 3 ) ) + 1;
}
} else {
if($postrow[$i]['user_posts'] < 1) {
$level_level = 0;
} else {
$level_level = floor( pow( log10( $postrow[$i]['user_posts'] ), 3 ) ) + 1;
}
}
/* Determine Hit Points (HP)
*
* Hp is based on user activity.
* Max HP is based on the user's level, and will generally
* be the same for all users of the same level.
*
* A user's current HP is based on the user's posts per day.
* A higher post per day (ppd), the more HP they will have. A
* user with an average PPD (set below) will have 50% of their
* max HP. As a user goes over the average PPD, they will have
* more HP, but the gains will decrease as the user's PPD increases.
* This makes achieving 100% hp difficult, but not impossible.
*
* For users with under the average PPD, they will have HP equal
* to 1/2 the percentage their ppd is of the average.
* ie- a user with 2.5 ppd, and an average ppd of 5 will have
* 25% of their max HP. This is because 2.5 is 50% of 5, and 1/2
* of that, is 25%.
*
* Users who manage to post so far above the average that they have
* more HP than their max will recieve a bonus to their max HP.
*
* Note that users at level 0 will always have 0 / 0 hp.
*
*/
/*
* This value determines the 'average' posts per day.
* The admin may redefine this variable as he wishes.
* Higher values will generally decrease users' HP, and
* lower values will generally increase users' HP.
*
* Note: Do NOT set this value to zero (0).
* This -may- be set to a fractional value (eg, 5.1, 3.1415)
*
*/
$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 = 30;
if (! $profileversion) {
/*
* We need to actually calculate the user's posts per day
* because unlike in the profile, it's not done for us.
*
*/
$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) );
$testvar = $profileversion ? $posts_per_day : $level_user_ppd;
if($testvar >= $level_avg_ppd)
{
$level_hp_percent = floor( (.5 + (($testvar - $level_avg_ppd) / ($level_bonus_redux * 2)) ) * 100);
}
else
{
$level_hp_percent = floor( $testvar / ($level_avg_ppd / 50) );
}
if($level_hp_percent > 100)
{
//Give the user a bonus to max HP for greater 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 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.
if ($profileversion) {
$level_user_days = max(1, round( ( time() - $profiledata['user_regdate'] ) / 86400 ));
} else {
$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 = 2.5;
/* 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 = 20;
if($level_level < 1)
{
$level_mp = '0 / 0';
$level_mp_percent = 0;
}
else
{
$level_max_mp = floor( (pow( $level_level, (1/4) ) ) * (pow( 10, pow( $level_level+2, (1/3) ) ) ) / (pi()) );
if ($profileversion) {
$level_mp_cost = $profiledata['user_posts'] * $level_post_mp_cost;
} else {
$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_posts_for_this = max(1, floor( pow( 10, pow( ($level_level - 1), (1/3) ) ) ) );
if ($profileversion) {
$level_exp = ($profiledata['user_posts'] - $level_posts_for_this) . " / " . ($level_posts_for_next - $level_posts_for_this);
$level_exp_percent = floor( ( ($profiledata['user_posts'] - $level_posts_for_this) / max( 1, ($level_posts_for_next - $level_posts_for_this ) ) ) * 100);
} else {
$level_exp = ($postrow[$i]['user_posts'] - $level_posts_for_this) . " / " . ($level_posts_for_next - $level_posts_for_this);
$level_exp_percent = floor( ( ($postrow[$i]['user_posts'] - $level_posts_for_this) / max( 1, ($level_posts_for_next - $level_posts_for_this ) ) ) * 100);
}
}
// Determine ratio of Hit Points to Magic Points
$level_skillratio = '0 / 0';
if ($level_max_mp > 0) {
$level_skillratio = floor(($level_hp / $level_max_mp) * 100);
} else {
$level_skillratio = 100;
}
if ($level_skillratio < 20) {
// high magic, low combat
if ($level_level < 4) {
$level_classname = "Apprentice";
} else if ($level_level >=4 && $level_level < 7) {
$level_classname = "Magician";
} else if ($level_level >=7 && $level_level < 11) {
$level_classname = "Master Mage";
} else if ($level_level >=11 && $level_level < 15) {
$level_classname = "Grand Mage";
} else {
$level_classname = "Archmage";
}
} elseif ($level_skillratio >= 20 && $level_skillratio < 40) {
// balanced mix
if ($level_level < 4) {
$level_classname = "Initiate";
} else if ($level_level >=4 && $level_level < 7) {
$level_classname = "Mystic";
} else if ($level_level >=7 && $level_level < 11) {
$level_classname = "Warlock";
} else if ($level_level >=11 && $level_level < 15) {
$level_classname = "Deacon";
} else {
$level_classname = "Grand Deacon";
}
} elseif ($level_skillratio >=40 && $level_skillratio < 60) {
// high combat (big poster), low magic
if ($level_level < 4) {
$level_classname = "Mercenary";
} else if ($level_level >=4 && $level_level < 7) {
$level_classname = "Gladiator";
} else if ($level_level >=7 && $level_level < 11) {
$level_classname = "Centurion";
} else if ($level_level >=11 && $level_level < 15) {
$level_classname = "Myrmidion";
} else {
$level_classname = "Warlord";
}
} else {
// big time combat, no magic
if ($level_level < 4) {
$level_classname = "Squire";
} else if ($level_level >=4 && $level_level < 7) {
$level_classname = "Soldier";
} else if ($level_level >=7 && $level_level < 11) {
$level_classname = "Warrior";
} else if ($level_level >=11 && $level_level < 15) {
$level_classname = "Knight";
} else {
$level_classname = "Champion";
}
}
/* END HP/MP/EXP MOD */
?>
MajinVegeta wrote: how do u change the level names?