Main Menu
  • Welcome to The RPG Maker Resource Kit.

[Resolved]Trouble changing a formula (Edit: and modules)

Started by S.K. Ren, September 28, 2009, 07:17:19 AM

0 Members and 1 Guest are viewing this topic.

S.K. Ren

I'm currently in the process of rebuilding the combat system. I've sucessfully re-written EXP,HP, SP, Hit, Critical and the basic stats. I started to tinker with the atk substat when I this error. I can Start the game, open the menu but when I open the Status or Equip menu it crashes.


Error Code: Wrong Number of Arguments (1 for 0)

Original Code:
[spoiler]  
 #--------------------------------------------------------------------------
 # * Get Attack Power
 #--------------------------------------------------------------------------
 #def atk
 #  n = base_atk
 #  for i in @states
 #    n *= $data_states.atk_rate / 100.0
 #  end
 #  return Integer(n)
 #end
[/spoiler]

Override code: #>> marks the bad line
[spoiler]
class Game_Battler
 #--------------------------------------------------------------------------
 # * Get Attack Power
 #--------------------------------------------------------------------------
 def atk
#>>    n = base_atk + Float(base_str +((base_str / 10) ** 2) + (base_dex / 5)).rounddown
   return Integer(n)
 end
end
[/spoiler]

rounddown code: in case you want to look at it.
[spoiler]
class Numeric
 #Round Down
 def rounddown(nearest)
   self % nearest == 0 ? self : self - (self % nearest)
 end
 
end
[/spoiler]

I just can't see where im putting the offending argument, can anyone help?

Edit: issue with .rounddown is fixed but the 0 for 1 remains.


///////
///////

Since the problem above hasn't been resolved I started working on another area of scripts and ran into some trouble with using modules. I'm trying to use a series of methods in the module. I can go all the way to the status screen but when I press left or right to call the methods (as it should) i get :

NoMethodError. Undefined Method 'stat_allocate' for SKRen:module

Here's the offending code:
[spoiler]


class Scene_Status

....

 #--------------------------------------------------------------------------
 # * Frame Update
 #--------------------------------------------------------------------------
 def update
   @window_a2.update #menu
   # If B button was pressed
   if Input.trigger?(Input::B)
     # Play cancel SE
     $game_system.se_play($data_system.cancel_se)
     # Switch to menu screen
     $scene = Scene_Menu.new(3)
     return
   end
   # If R button was pressed
   if Input.trigger?(Input::R)
     # Play cursor SE
     $game_system.se_play($data_system.cursor_se)
     # To next actor
     @actor_index += 1
     @actor_index %= $game_party.actors.size
     # Switch to different status screen
     $scene = Scene_Status.new(@actor_index)
     return
   end
   # If L button was pressed
   if Input.trigger?(Input::L)
     # Play cursor SE
     $game_system.se_play($data_system.cursor_se)
     # To previous actor
     @actor_index += $game_party.actors.size - 1
     @actor_index %= $game_party.actors.size
     # Switch to different status screen
     $scene = Scene_Status.new(@actor_index)
     return
   end
   if Input.trigger?(Input::LEFT)
     case @window_a2.index
     when 0  # add Str
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       SKRenSAS::stat_remove(@actor, 'STR')
       return

     when 1  # add Int
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       SKRenSAS::stat_remove(@actor, 'INT')
       return

     when 2  # add Dex
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       SKRenSAS::stat_remove(@actor, 'DEX')
       return
       
     when 3  # add Agi
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       SKRenSAS::stat_remove(@actor, 'AGI')
       return
     end
     return
   end
   if Input.trigger?(Input::RIGHT)
     case @window_a2.index
     when 0  # add Str
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       SKRenSAS::stat_allocate(@actor, 'STR')
       return

     when 1  # add Int
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       SKRenSAS::stat_allocate(@actor, 'INT')
       return

     when 2  # add Dex
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       SKRenSAS::stat_allocate(@actor, 'DEX')
       return
       
     when 3  # add Agi
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       SKRenSAS::stat_allocate(@actor, 'AGI')
       return
     end
     return
   end
   if Input.trigger?(Input::C)
     case @window_a2.index
     when 4  # Confirm
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       return
     end
   end
 end
end


And the module:

 #--------------------------------------------------------------------------
 # * Stat Allocation
 #--------------------------------------------------------------------------
module SKRenSAS
 
 #------------------------
 # * Show Stat Changes
 #------------------------
 STR_MAX_ALLOCATION = 255
 INT_MAX_ALLOCATION = 255
 DEX_MAX_ALLOCATION = 255
 AGI_MAX_ALLOCATION = 255
 STR_MIN_ALLOCATION = 1
 INT_MIN_ALLOCATION = 1
 DEX_MIN_ALLOCATION = 1
 AGI_MIN_ALLOCATION = 1
 
##############################
# #========================# #
# # * Temp Stat up         # #
# #========================# #
##############################
 def stat_allocate(actor, stat)
   if stat == 'STR'
     stat_allocate_process_str(actor)
     return
   end
   if stat == 'INT'
     stat_allocate_process_int(actor)
     return
   end
   if stat == 'DEX'
     stat_allocate_process_dex(actor)
     return
   end    
   if stat == 'AGI'
     stat_allocate_process_agi(actor)
     return
   end
 end
 
 
 #--------------------------------
 # * Determine if Strength Changes
 #--------------------------------
 def stat_allocate_process_str(actor)
   stat_cost = 1 + ((actor.base_str -1) / 10).rounddown
   if actor.all_pts < stat_cost
     $game_system.se_play($data_system.buzzer_se)
     return
   elsif actor.base_str >= STR_MAX_ALLOCATION
     $game_system.se_play($data_system.buzzer_se)
     return
   else
     $game_system.se_play($data_system.confirm_se)
     actor.all_pts -= stat_cost
     actor.str_tempall += 1
     return
   end
 end
 
 
 #------------------------------------
 # * Determine if Intelligence Changes
 #------------------------------------
 def stat_allocate_process_int(actor)
   stat_cost = 1+((actor.base_int -1) / 10).rounddown
   if actor.all_pts < stat_cost
     $game_system.se_play($data_system.buzzer_se)
     return
   elsif actor.base_int >= INT_MAX_ALLOCATION
     $game_system.se_play($data_system.buzzer_se)
     return
   else
     actor.all_pts -= stat_cost
     actor.int_tempall += 1
     return
   end
 end
 
 #---------------------------------
 # * Determine if Dexterity Changes
 #---------------------------------
 def stat_allocate_process_dex(actor)
   stat_cost = 1+((actor.base_dex -1) / 10).rounddown
   if actor.all_pts < stat_cost
     $game_system.se_play($data_system.buzzer_se)
     return
   elsif actor.base_dex == DEX_MAX_ALLOCATION
     $game_system.se_play($data_system.buzzer_se)
     return
   else
     actor.all_pts -= stat_cost
     actor.dex_tempall += 1
     return
   end
 end
 
 #--------------------------------
 # * Determine if Agility Changes
 #--------------------------------
 def stat_allocate_process_agi(actor)
   stat_cost = 1+((actor.base_agi -1) / 10).rounddown
   if actor.all_pts < stat_cost
     $game_system.se_play($data_system.buzzer_se)
     return
   elsif actor.base_agi == AGI_MAX_ALLOCATION
     $game_system.se_play($data_system.buzzer_se)
     return
   else
     actor.all_pts -= stat_cost
     actor.agi_tempall += 1
     return
   end
 end
 
##############################
# #========================# #
# # * Temp Stat down       # #
# #========================# #
##############################


 def stat_remove(actor, stat)
   if stat == 'STR'
     stat_remove_process_str(actor)
     return
   end
   if stat == 'INT'
     stat_remove_process_int(actor)
     return
   end
   if stat == 'DEX'
     stat_remove_process_dex(actor)
     return
   end    
   if stat == 'AGI'
     stat_remove_process_agi(actor)
     return
   end
 end
 
 
 #--------------------------------
 # * Determine if Strength Changes
 #--------------------------------
 def stat_remove_process_str(actor)
   stat_cost_old = 1 + ((actor.base_str - 2) / 10).rounddown
   if actor.base_str <= STR_MIN_ALLOCATION
     $game_system.se_play($data_system.buzzer_se)
     return
   elsif actor.str_tempall <= 0
     $game_system.se_play($data_system.buzzer_se)
     return
   else
     $game_system.se_play($data_system.confirm_se)
     actor.all_pts += stat_cost_old
     actor.str_tempall -= 1
     return
   end
 end
 
 
 #------------------------------------
 # * Determine if Intelligence Changes
 #------------------------------------
 def stat_remove_process_int(actor)
   stat_cost_old = 1 + ((actor.base_int - 2) / 10).rounddown
   if actor.base_int <= INT_MIN_ALLOCATION
     $game_system.se_play($data_system.buzzer_se)
     return
   elsif actor.int_tempall <= 0
     $game_system.se_play($data_system.buzzer_se)
     return
   else
     $game_system.se_play($data_system.confirm_se)
     actor.all_pts += stat_cost_old
     actor.int_tempall -= 1
     return
   end
 end
 
 
 #---------------------------------
 # * Determine if Dexterity Changes
 #---------------------------------
 def stat_remove_process_dex(actor)
   stat_cost_old = 1 + ((actor.base_dex - 2) / 10).rounddown
   if actor.base_dex <= DEX_MIN_ALLOCATION
     $game_system.se_play($data_system.buzzer_se)
     return
   elsif actor.dex_tempall <= 0
     $game_system.se_play($data_system.buzzer_se)
     return
   else
     $game_system.se_play($data_system.confirm_se)
     actor.all_pts += stat_cost_old
     actor.dex_tempall -= 1
     return
   end
 end
 
 #--------------------------------
 # * Determine if Agility Changes
 #--------------------------------
 def stat_remove_process_agi(actor)
   stat_cost_old = 1 + ((actor.base_agi - 2) / 10).rounddown
   if actor.base_agi <= AGI_MIN_ALLOCATION
     $game_system.se_play($data_system.buzzer_se)
     return
   elsif actor.agi_tempall <= 0
     $game_system.se_play($data_system.buzzer_se)
     return
   else
     $game_system.se_play($data_system.confirm_se)
     actor.all_pts += stat_cost_old
     actor.agi_tempall -= 1
     return
   end
 end
 
 
   
 #------------------------
 # * Reset Stat Changes
 #------------------------
 def reset
   actor.str_tempall = 0
   actor.int_tempall = 0
   actor.dex_tempall = 0
   actor.agi_tempall = 0
 end
 
 
 #------------------------
 # * Finalize Stat Changes
 #------------------------
   
 def stat_allocate_final(actor)
   actor.str_all += actor.str_tempall
   actor.int_all += actor.int_tempall
   actor.dex_all += actor.dex_tempall
   actor.agi_all += actor.agi_tempall
   actor.str_tempall = 0
   actor.int_tempall = 0
   actor.dex_tempall = 0
   actor.agi_tempall = 0
 end
end
[/spoiler]

and if I put

include SKRenSAS

I get this error:

NameError Occurred. Uninitialized Constant Scene_Status::SKRenSAS

Can anyone help, I'm tired of reading the same useless tutorials online and getting no where.


EDIT: Thanks NAMKCOR for your help in the IRC
My life is like every script I write: It runs great except for the f*cked up bits.

shaz

#1
rounddown needs a parameter, and you're not passing it one.

Why are you converting the calculation to a float and then back to an integer again?  Unless there's some gotcha here that I'm not seeing at a quick glance, you could achieve the same thing by:
(base_str +((base_str / 10) ** 2) + (base_dex / 5)).to_i
or
(base_str +((base_str / 10) ** 2) + (base_dex / 5)).floor

Always remember you're unique.
Just like everybody else.

S.K. Ren

it's a 1 for 0 not a 0 for 1. The error is occurring before it even get 's to the .rounddown

also i set nearest to default at 1 so that's no longer an issue  :D
My life is like every script I write: It runs great except for the f*cked up bits.