[RMXP] Help with this level and stat breaking script

Started by djskagnetti, October 03, 2011, 12:29:54 am

Previous topic - Next topic

djskagnetti

October 03, 2011, 12:29:54 am Last Edit: October 03, 2011, 06:57:25 pm by djskagnetti
Can anyone help me modify this script?  I know how to set the limits, but would like to set the rates that stats increase to those limits.

I currently have in my game max level 99, 9999 HPs and SPs, and STR, INT, DEX, AGI at 100.  I have it set up as follows:
at level 1 you have 20 HPs, no SPs (you gain 5 at level 6 and then it goes up from there), and 5 in each stat STR, INT, AGI, DEX.
at 25 you have 619 HPs, 600 SPs, and 11 in each stat.
at 50 you have 2515 HPs, 2500 SPs, and 29 in each stat.
at 75 you have 5710 HPs, 5702 SPs, and 60 in each stat.
and at 99 you have 9999 HPs, 9999 SPs, and 100 in each stat.

All rates are set with the slider to the far right, for the slowest gain in all stats.  The EXP needed bar is set for 13 Basis (13 XP to reach level 2) and Inflation 50 (you need 2175991 XP to reach level 99.)  Unfortunately, with the kind of game I'm making I believe this will not be high enough and the characters will reach level 99 far before the end of the game.

What I would like is to have it set for level 999, max HPs and SPs at 99,999, and max stats STR, INT, DEX and AGI at 999 - with the EXP needed to reach that level raising at the same pace (Inflation 50), so it would be:
at level 1 you have 20 HPs, no SPs (you gain 5 at level 6 and then it goes up from there (i would still like to do this if possible)), and 5 in each stat STR, INT, AGI, DEX.
at 25 you have 619 HPs, 600 SPs, and 11 in each stat.
at 50 you have 2515 HPs, 2500 SPs, and 29 in each stat.
at 75 you have 5710 HPs, 5702 SPs, and 60 in each stat.
at level 99 you have 9999 HPs, 9999 SPs, and 100 in each stat.
at level 250 (guesstimating) you have 25000 HPs, 25000 SPs, and 250 in each stat.
at level 500 - 50000 HPs and SPs, 500 in stats.
at level 999 - 99999 HPs and SPs, 999 in stats.

This way the player does not necessarily have to keep leveling past 99, but if they hit it way before the end of the game, they're not just cut off.  Or if they have a lot of time on their hands they can see if they can get to 999.  From testing the script below out, I used max lvl 999, max hps and sps 99,999, and max stats 999.  I then made a ghost have max XP in a new game and 1 hp and made 8 of them in an battle process event, so killing 8 gave me 799992 XP.  And it did indeed break lvl 99, I shot to 118 after the first battle, but the HPs and MPs increased to 96000, along with all of the stats hitting 999 as well.  I want it to be around 11800 HPs and MPs and stats at 118 (so generally 100 HPs and MPs and 1 point added to stats for every level past 99.)

Can anyone look at the code below and see if they can change the rate of the increases to be accordance to what I need?  I would really appreciate it!!  Thanks much in advance!

Spoiler: ShowHide

   #==============================================================================
   #  Unlimit Levels v1                                            by: cybersam
   #                                                               date: 14.09.06
   #------------------------------------------------------------------------------
   #  here is a full working scripts for you to this... (i think there is
   #  already one like this somewhere in the in the community...
   #  i did one back then when i started in RPG Maker XP
   #  some other guys did a few other script like this
   #==============================================================================
   #----------------------------------------------------------------------------
   # here you can set the max hp,sp,,str,dex,agi and int
   #----------------------------------------------------------------------------
     $FINAL_LVL  = 100
     $MAX_HP     = 99999
     $MAX_SP     = 99999
     $MAX_STR    = 9999
     $MAX_DEX    = 9999
     $MAX_AGI    = 9999
     $MAX_INT    = 9999
   
   class Game_Actor
   
     #--------------------------------------------------------------------------
     # setting the levels...
     #--------------------------------------------------------------------------
     def final_level
     
       # here you can set the max level for your characters based on their ID's...
       # i set it so that 3 characters have different levels and the rest
       # have max lvl of 9999
       #
       # this settings is only to show you how to change the max setting for your
       # characters... same thing is for the parameters -> hp,sp,str,dex.agi,int
     
       case self.id
       when 1
         level = 100
       when 2
         level = 100
       when 8
         level = 100
       else
         level = $FINAL_LVL
       end
       return level
     end
   
   
     #--------------------------------------------------------------------------
     # setting max hp...
     #--------------------------------------------------------------------------
     def max_hp
   
       case self.id
       when 1
         hp = 99999
       when 2
         hp = 99999
       when 8
         hp = 99999
       else
         hp = $MAX_HP
       end
       return hp
     end
     #--------------------------------------------------------------------------
     # setting max sp...
     #--------------------------------------------------------------------------
     def max_sp
   
       case self.id
       when 1
         sp = 99999
       when 2
         sp = 99999
       when 8
         sp = 99999
       else
         sp = $MAX_SP
       end
       return sp
     end
     #--------------------------------------------------------------------------
     # setting max str...
     #--------------------------------------------------------------------------
     def max_str
       case self.id
       when 1
         str = 9999
       when 2
         str = 9999
       when 8
         str = 9999
       else
         str = $MAX_STR
       end
       return str
     end
     #--------------------------------------------------------------------------
     # setting max dex...
     #--------------------------------------------------------------------------
     def max_dex
       case self.id
       when 1
         dex = 9999
       when 2
         dex = 9999
       when 8
         dex = 9999
       else
         dex = $MAX_DEX
       end
       return dex
     end
     #--------------------------------------------------------------------------
     # setting max agi...
     #--------------------------------------------------------------------------
     def max_agi
       case self.id
       when 1
         agi = 9999
       when 2
         agi = 9999
       when 8
         agi = 9999
       else
         agi = $MAX_AGI
       end
       return agi
     end  
     #--------------------------------------------------------------------------
     # setting max int...
     #--------------------------------------------------------------------------
     def max_int
       case self.id
       when 1
         int = 9999
       when 2
         int = 9999
       when 8
         int = 9999
       else
         int = $MAX_INT
       end
       return int
     end
   
     #--------------------------------------------------------------------------
     # Creating the new EXP list
     # dont change anything from here on... (only if you know what you're doing)
     #--------------------------------------------------------------------------
     def make_exp_list
       actor = $data_actors[@actor_id]
       @exp_list = Array.new(final_level + 2)
       @exp_list[1] = 0
       pow_i = 2.4 + actor.exp_inflation / 1000.0
       for i in 2..final_level + 1
         if i > final_level
           @exp_list[i] = 0
         else
           n = actor.exp_basis * ((i + 3) ** pow_i) / (5 ** pow_i)
           @exp_list[i] = @exp_list[i-1] + Integer(n)
         end
       end
     end
   
     #--------------------------------------------------------------------------
     # setting parameters like hp, sp, str, dex, agi and int
     #--------------------------------------------------------------------------
     def maxhp
       n = [[base_maxhp + @maxhp_plus, 1].max, $MAX_HP].min
       for i in @states
         n *= $data_states[i].maxhp_rate / 100.0
       end
       n = [[Integer(n), 1].max, $MAX_HP].min
       return n
     end
   
     def base_maxhp
       maxhp = $data_actors[@actor_id].parameters[0, 1]
       maxhp += $data_actors[@actor_id].parameters[0, 2] * @level
       return maxhp
     end
   
     def base_maxsp
       maxsp = $data_actors[@actor_id].parameters[1, 1]
       maxsp += $data_actors[@actor_id].parameters[1, 2] * @level
       return maxsp
     end
   
     def base_str
       n = $data_actors[@actor_id].parameters[2, 1]
       n += $data_actors[@actor_id].parameters[2, 2] * @level
       weapon = $data_weapons[@weapon_id]
       armor1 = $data_armors[@armor1_id]
       armor2 = $data_armors[@armor2_id]
       armor3 = $data_armors[@armor3_id]
       armor4 = $data_armors[@armor4_id]
       n += weapon != nil ? weapon.str_plus : 0
       n += armor1 != nil ? armor1.str_plus : 0
       n += armor2 != nil ? armor2.str_plus : 0
       n += armor3 != nil ? armor3.str_plus : 0
       n += armor4 != nil ? armor4.str_plus : 0
       return [[n, 1].max, $MAX_STR].min
     end
   
     def base_dex
       n = $data_actors[@actor_id].parameters[3, 1]
       n += $data_actors[@actor_id].parameters[3, 2] * @level
       weapon = $data_weapons[@weapon_id]
       armor1 = $data_armors[@armor1_id]
       armor2 = $data_armors[@armor2_id]
       armor3 = $data_armors[@armor3_id]
       armor4 = $data_armors[@armor4_id]
       n += weapon != nil ? weapon.dex_plus : 0
       n += armor1 != nil ? armor1.dex_plus : 0
       n += armor2 != nil ? armor2.dex_plus : 0
       n += armor3 != nil ? armor3.dex_plus : 0
       n += armor4 != nil ? armor4.dex_plus : 0
       return [[n, 1].max, $MAX_DEX].min
     end
   
     def base_agi
       n = $data_actors[@actor_id].parameters[4, 1]
       n += $data_actors[@actor_id].parameters[4, 2] * @level
       weapon = $data_weapons[@weapon_id]
       armor1 = $data_armors[@armor1_id]
       armor2 = $data_armors[@armor2_id]
       armor3 = $data_armors[@armor3_id]
       armor4 = $data_armors[@armor4_id]
       n += weapon != nil ? weapon.agi_plus : 0
       n += armor1 != nil ? armor1.agi_plus : 0
       n += armor2 != nil ? armor2.agi_plus : 0
       n += armor3 != nil ? armor3.agi_plus : 0
       n += armor4 != nil ? armor4.agi_plus : 0
       return [[n, 1].max, $MAX_AGI].min
     end
   
     def base_int
       n = $data_actors[@actor_id].parameters[5, 1]
       n += $data_actors[@actor_id].parameters[5, 2] * @level
       weapon = $data_weapons[@weapon_id]
       armor1 = $data_armors[@armor1_id]
       armor2 = $data_armors[@armor2_id]
       armor3 = $data_armors[@armor3_id]
       armor4 = $data_armors[@armor4_id]
       n += weapon != nil ? weapon.int_plus : 0
       n += armor1 != nil ? armor1.int_plus : 0
       n += armor2 != nil ? armor2.int_plus : 0
       n += armor3 != nil ? armor3.int_plus : 0
       n += armor4 != nil ? armor4.int_plus : 0
       return [[n, 1].max, $MAX_INT].min
     end
   
     def exp=(exp)
       @exp = [exp, 0].max
       while @exp >= @exp_list[@level+1] and @exp_list[@level+1] > 0
         @level += 1
         for j in $data_classes[@class_id].learnings
           if j.level == @level
             learn_skill(j.skill_id)
           end
         end
       end
       while @exp < @exp_list[@level]
         @level -= 1
       end
       @hp = [@hp, self.maxhp].min
       @sp = [@sp, self.maxsp].min
     end
   
     def level=(level)
       level = [[level, final_level].min, 1].max
       self.exp = @exp_list[level]
     end
   end
   
   
   
   #==============================================================================
   # ** Game_Battler
   #==============================================================================
   
   class Game_Battler
   
     def maxhp
       n = [[base_maxhp + @maxhp_plus, 1].max, $MAX_HP].min
       for i in @states
         n *= $data_states[i].maxhp_rate / 100.0
       end
       n = [[Integer(n), 1].max, $MAX_HP].min
       return n
     end
   
     def maxsp
       n = [[base_maxsp + @maxsp_plus, 0].max, $MAX_SP].min
       for i in @states
         n *= $data_states[i].maxsp_rate / 100.0
       end
       n = [[Integer(n), 0].max, $MAX_SP].min
       return n
     end
   
     def str
       n = [[base_str + @str_plus, 1].max, $MAX_STR].min
       for i in @states
         n *= $data_states[i].str_rate / 100.0
       end
       n = [[Integer(n), 1].max, $MAX_STR].min
       return n
     end
   
     def dex
       n = [[base_dex + @dex_plus, 1].max, $MAX_DEX].min
       for i in @states
         n *= $data_states[i].dex_rate / 100.0
       end
       n = [[Integer(n), 1].max, $MAX_DEX].min
       return n
     end
   
     def agi
       n = [[base_agi + @agi_plus, 1].max, $MAX_AGI].min
       for i in @states
         n *= $data_states[i].agi_rate / 100.0
       end
       n = [[Integer(n), 1].max, $MAX_AGI].min
       return n
     end
   
     def int
       n = [[base_int + @int_plus, 1].max, $MAX_INT].min
       for i in @states
         n *= $data_states[i].int_rate / 100.0
       end
       n = [[Integer(n), 1].max, $MAX_INT].min
       return n
     end
   
     def maxhp=(maxhp)
       @maxhp_plus += maxhp - self.maxhp
       @maxhp_plus = [[@maxhp_plus, -$MAX_HP].max, $MAX_HP].min
       @hp = [@hp, self.maxhp].min
     end
   
     def maxsp=(maxsp)
       @maxsp_plus += maxsp - self.maxsp
       @maxsp_plus = [[@maxsp_plus, -$MAX_SP].max, $MAX_SP].min
       @sp = [@sp, self.maxsp].min
     end
   
     def str=(str)
       @str_plus += str - self.str
       @str_plus = [[@str_plus, -$MAX_STR].max, $MAX_STR].min
     end
   
     def dex=(dex)
       @dex_plus += dex - self.dex
       @dex_plus = [[@dex_plus, -$MAX_DEX].max, $MAX_DEX].min
     end
   
     def agi=(agi)
       @agi_plus += agi - self.agi
       @agi_plus = [[@agi_plus, -$MAX_AGI].max, $MAX_AGI].min
     end
   
     def int=(int)
       @int_plus += int - self.int
       @int_plus = [[@int_plus, -$MAX_INT].max, $MAX_INT].min
     end
   end


I tried the ghost with max XP scenario in a brand new game.  In my game I will be using Tons of Addons, an enemy health bar script, Easy Level Addon, Skill Shop addon, and a small script that adds "when X return Y" which means when monster ID is X then return Variable ID which adds 1 to that specific variable - it's for monster hunting jobs - go out and kill X amount of a specific monsters kind of thing - each kill of a specific kind of monster adds 1 to that monster's specific variable.

EDIT:  A simpler way to put it would be:  use whatever settings I have in RMXP up until lvl 99, and for each level after 99, simply add 100 HPs, 100 SPs, 1 to STR, AGI, DEX, INT, and continue using inflation 50 for the XP curve.  Thanks!

Blizzard

http://www.chaos-project.com/index.php?option=com_scriptdatabase&view=scriptdatabase&Itemid=29

*points to Unlimited Levels*
There should be a database limit stat breaker around somewhere as well, but I can't find it for some reason. >_>
Check out our game brands:

Daygames
Game Night Games
Chugnar Games

Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

djskagnetti

October 04, 2011, 08:24:41 pm #2 Last Edit: October 04, 2011, 08:33:02 pm by djskagnetti
I know - I was gonna use yours!  but then i could not find the stat breaker for just characters stats Anywhere.  off this page - http://www.chaos-project.com/index.php?option=com_scriptdatabase&view=scriptdatabase&Itemid=29 - i cntrl-f'd 'breaker' and found Database Limit Breaker, Enemy Stat Breaker, Equipment Stat Breaker, Skill Stat Breaker, and Database Limit Breaker for VX.  I also googled a bunch as well, couldn't find the KGC_LimitBreak script, and nothing else for characters HPs, SPs, AGI, DEX, STR, INT - otherwise I would of totally used yours! =)

is there any way to put into a script
if level > 99 then HPs=HPs+100, SPs=SPs+100, AGI=AGI+1, DEX=DEX+1, STR=STR+1, INT=INT+1, and (experience needed for next level)=(experience curve)*(lvl)

that's how I would of done it in BASIC (although i didn't put much thought into the experience needed for next level bit, it may be a bit more complicated than that)

Blizzard

Yeah, I couldn't find any of them myself to be honest.

Technically the EXP curve is already done in such a way.
As for the stats, yeah, you can make that work. I mean, you can calculate the stats also based on the level, but unless you edit some specific scripts, there will be still the 999 limit. The Unlimited Levels script can calculate the stats, but it doesn't break the 999 limit.
Check out our game brands:

Daygames
Game Night Games
Chugnar Games

Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

djskagnetti

Quote from: Blizzard on October 05, 2011, 02:39:09 am
Yeah, I couldn't find any of them myself to be honest.

Technically the EXP curve is already done in such a way.
As for the stats, yeah, you can make that work. I mean, you can calculate the stats also based on the level, but unless you edit some specific scripts, there will be still the 999 limit. The Unlimited Levels script can calculate the stats, but it doesn't break the 999 limit.


If xp is already calculated based on the already existing curves, awesome!  then just +100 HPs and SPs, and +1 agi, dex, str, int a level.  i don't mind a 999 limit on dex, agi, int, str, as long as they don't hit it until lvl 999.  with the script above i was hitting 999 at lvl 118.  if anyone could please help me that would be so awesome and i will of course give full credit in credits!

Blizzard

As I said, you can configure in the Unlimited Levels script how the stats should be calculated in the same way like RMXP's editor lets you configure. You put in a start value, a final value and the inflation factor and off you go. Basically you would need "[1, 999, 0]" for every stat to increase by one per level. But the HP and SP would still go over 9999 so you need a script for the limit there. Or you just edit it yourself.
Check out our game brands:

Daygames
Game Night Games
Chugnar Games

Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

djskagnetti

October 05, 2011, 05:48:28 pm #6 Last Edit: October 05, 2011, 05:57:52 pm by djskagnetti
Ohhhh!  I apologize I didn't think that you could edit stats like that!

When I put it at 50 for inflation in the game editor and level 999 as the max lvl in your script it seems the XP limit is 9,999,999 and it caps at lvl 148.  Also the HPs and SPs do not go over 9,999 and I have it
when 1 then [20, 15000, -10]
but it stops at 9,999 =(

i was thinking i could do level 150 instead of 999, and set inflation a bit less  - 9,999,999 XP is a ridiculous amount of XP to get (in my game anyways) - but i'd like it to hit 9,999 at level 99 and 100 in stats and then go to 15,000 at level 150 and 150 in stats.  maybe this is just futile?

Blizzard

No, you just need to edit the maximums yourself or get a script that does it for you. Editing them yourself takes 5 minutes.
Check out our game brands:

Daygames
Game Night Games
Chugnar Games

Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

djskagnetti

Ok, i'll google how to do that when i get home.  Thanks!

djskagnetti

October 09, 2011, 06:10:37 pm #9 Last Edit: October 09, 2011, 06:34:19 pm by djskagnetti
Quote from: djskagnetti on October 06, 2011, 06:42:00 am
Ok, i'll google how to do that when i get home.  Thanks!


Ok so i found out you go into Game_Actor and change
Quote
 #--------------------------------------------------------------------------
 # * Get Maximum HP
 #--------------------------------------------------------------------------
 def maxhp
   n = [[base_maxhp + @maxhp_plus, 1].max, 99999].min
   for i in @states
     n *= $data_states.maxhp_rate / 100.0
   end
   n = [[Integer(n), 1].max, 99999].min
   return n
 end


where i changed it to 99999 - do you change both these numbers?

also i wanted to max out the SP, but it wasn't there, so i just copied and pasted it right below it and changed all the 'hp' to 'sp', like so:

Quote
 #--------------------------------------------------------------------------
 # * Get Maximum sP
 #--------------------------------------------------------------------------
 def maxsp
   n = [[base_maxsp + @maxsp_plus, 1].max, 99999].min
   for i in @states
     n *= $data_states.maxsp_rate / 100.0
   end
   n = [[Integer(n), 1].max, 99999].min
   return n
 end


right below Get Maximum HP

so it looks like:
Quote
 #--------------------------------------------------------------------------
 # * Get Maximum HP
 #--------------------------------------------------------------------------
 def maxhp
   n = [[base_maxhp + @maxhp_plus, 1].max, 99999].min
   for i in @states
     n *= $data_states.maxhp_rate / 100.0
   end
   n = [[Integer(n), 1].max, 99999].min
   return n
 end
 #--------------------------------------------------------------------------
 # * Get Maximum sP
 #--------------------------------------------------------------------------
 def maxsp
   n = [[base_maxsp + @maxsp_plus, 1].max, 99999].min
   for i in @states
     n *= $data_states.maxsp_rate / 100.0
   end
   n = [[Integer(n), 1].max, 99999].min
   return n
 end


using lines 173-194 in Game_Actor

is this the correct way to do it/will it mess up my game/did i done broked it?

i tried with your max level script and it seemed to work fine.  just checking to make sure =P

Also:
I was thinking an alternative would be to make it level 99, to go to 9999 HPs, but have the limit at 29,999, so, through various items and passive skills, you can go over the basic max, up to 29,9999 if you find them/use them all.