[BETA] HP/MP/EXP Mod

A place for MOD Authors to post and receive feedback on MODs still in development. No MODs within this forum should be used within a live environment! No new topics are allowed in this forum.
Forum rules
READ: phpBB.com Board-Wide Rules and Regulations

IMPORTANT: MOD Development Forum rules

On February 1, 2009 this forum will be set to read only as part of retiring of phpBB2.
Locked
Chewy74
Registered User
Posts: 13
Joined: Tue May 27, 2003 3:50 pm

Post by Chewy74 »

ycI6,

I downloaded your HP_MP_EXP mod, but i already downloaded the older version of it here: http://www.asylumsw.com/phpBB/level_mod_install.txt

whats the difference between the 2? Is your's an upgrade from the older version?

My question is should i uninstall the older version and replce it with your version and if so can i use the graphics from the older version vs. yours?
like, is it more accurate in it's rank placement and stuff?
ycl6
Translator
Posts: 5696
Joined: Sat Feb 15, 2003 10:35 am
Location: Taiwan
Contact:

Post by ycl6 »

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 
This version fix the "MP always full" problem as Antony fine-tune the settings. The program doing the calculation is not to be put inside the php file but as a file itself (level_mod.php)

This is a complete mod by itself, so you have to remove the old one and replace with this mod. The code is specifically written to use Daz's (from ForumImages) images, I have not testing with the older images, but I would think it's not competible.

~Mac
Antony
Registered User
Posts: 529
Joined: Wed Feb 12, 2003 9:06 am

Post by Antony »

If the load time get's too high you could always write the code again to the posts table and pull the data to a phpbb_user_hpmpexp table and run a query.

But I can't be bothered, can you?

P.S. I don't even use the hack.
I've Been Banned!
1337
Registered User
Posts: 18
Joined: Wed Mar 12, 2003 7:09 am

Post by 1337 »

<deleted>
deny
Registered User
Posts: 565
Joined: Wed May 14, 2003 9:14 am
Location: Find-Ip-Address.org
Contact:

MOD

Post by deny »

This MOD works perfect and should be placed under.
MOD Release Announcements & Support

No error, no bugs....Big thanks for great MOD!!!
Antony
Registered User
Posts: 529
Joined: Wed Feb 12, 2003 9:06 am

Re: MOD

Post by Antony »

deny wrote: This MOD works perfect and should be placed under.
MOD Release Announcements & Support

No error, no bugs....Big thanks for great MOD!!!


Well I don't know if it can be.

As the author has discontinued it and many people have dcided to continue the modification, I included.

If it can be submitted I am okay, with that as long as it is also submitted at phpBBHacks.com.
I've Been Banned!
User avatar
End of a Shadow
Registered User
Posts: 1557
Joined: Sun Apr 27, 2003 6:39 pm
Location: Washington
Name: J G
Contact:

Post by End of a Shadow »

Image
I am using this HP/MP mod. And I tried reading peoples posts and couldn't find these answers:

1) What are the HP/MP levels based upon on?

2) Why are the members MP bars always maxed for the exception of one user?

3) Is there anyway to prevent the bug "trying to raise a non positive value"? Or do I just have to live with it?

I apologize if this is mentioned and I just couldn't find it.
Antony
Registered User
Posts: 529
Joined: Wed Feb 12, 2003 9:06 am

Post by Antony »

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 */ 

?>
Let's try supressing the error.

Try that. :)
I've Been Banned!
deny
Registered User
Posts: 565
Joined: Wed May 14, 2003 9:14 am
Location: Find-Ip-Address.org
Contact:

First bug

Post by deny »

I found first bug.
Actually uesr profile display not the same Level/Skill Ratio and CLass (Graphic too) as the on the viewtopic.php.
SO on the viewtopic.php is

Level/Skill Ratio: 15/98
Class: Knight


and on the profile:

Level/Skill Ratio: 0/100
Class: Squire


It is not just for me but for the all other user profile show the same????
MajinVegeta
Registered User
Posts: 129
Joined: Tue May 06, 2003 12:13 am
Contact:

Post by MajinVegeta »

how do u change the level names?
Antony
Registered User
Posts: 529
Joined: Wed Feb 12, 2003 9:06 am

Post by Antony »

I have spoken with, ycl6 through a PM.

I have told him that, I see this mod as worthy of submitting to phpBBHacks.com, I don't care if it is submitted here. But it must be submitted at phpBBHacks.com.

I am counting my part, of this code to be finall if the last update supressed the no-positive errors correctly. I cannot test, without a test server, I'm coding in VIM and staring at code. Never running it live.

So therefore, my knowledge of the rest of the code used to this modification is limited, and will therefore be offering little to no support for this modification. I thank you all for appreciateing my recode.

Regards,
Antony aka Rapid Dr3am.
I've Been Banned!
MajinVegeta
Registered User
Posts: 129
Joined: Tue May 06, 2003 12:13 am
Contact:

Post by MajinVegeta »

you know i could give u a test server. Of course it would only be for mods and demos and such. I wont pm u cause u told me not to on phpBBhacks.com
Antony
Registered User
Posts: 529
Joined: Wed Feb 12, 2003 9:06 am

Post by Antony »

MajinVegeta wrote: you know i could give u a test server. Of course it would only be for mods and demos and such. I wont pm u cause u told me not to on phpBBhacks.com


Sure send me details.

Here, or over there.

I'm working on a real good hack. :lol:
I've Been Banned!
ycl6
Translator
Posts: 5696
Joined: Sat Feb 15, 2003 10:35 am
Location: Taiwan
Contact:

Post by ycl6 »

MajinVegeta wrote: how do u change the level names?

See those $level_classname, just change the names after $level_classname

As for the trying to raise a non positive value problem, I think it only happen on selected servers, as far as I know, most people don't get that error message, and the people who do, are usually using a free web host.

~Mac
deny
Registered User
Posts: 565
Joined: Wed May 14, 2003 9:14 am
Location: Find-Ip-Address.org
Contact:

Fix

Post by deny »

Any fix for the problem that i described above?

THanks
Locked

Return to “[2.0.x] MODs in Development”