The RPG Maker Resource Kit

RMRK RPG Maker Creation => Requests => Script Request => Topic started by: Verzen on July 12, 2011, 06:30:03 AM

Title: % equipment script
Post by: Verzen on July 12, 2011, 06:30:03 AM
So... I am looking for a 'unique' script that makes it so that weapons, instead of hard adding attack, would add a percentage to your attack power based on your attack power. (or spirit based on your spirit if you're using a magic staff) or have armor that does the same thing with defense.. and agility would also be an option for either armor or weapons... Would this script be hard to code?

(edit: And when I look to equip the weapon, it will still show in the equip menu how much attack it gains by equipping the weapon - Same with armor)
Title: Re: % equipment script
Post by: pacdiggity on July 12, 2011, 06:32:41 AM
It would be pretty simple to do with note tags. Is that how you want it done, specified by the notebox, or do you want the upgrade determined automatically?
Title: Re: % equipment script
Post by: Verzen on July 12, 2011, 06:34:02 AM
Note tags if you could. Thanks for the help Pac!
Title: Re: % equipment script
Post by: pacdiggity on July 12, 2011, 08:24:52 AM
I'll do it tomorrow once I finish the SP stat.
Title: Re: % equipment script
Post by: Verzen on July 14, 2011, 07:44:41 AM
Any update on this script by chance?
Title: Re: % equipment script
Post by: pacdiggity on July 14, 2011, 08:50:33 AM
Yeah, it really won't take that long at all. Should be done by the end of the day.
I've pretty much already written the script anyway.
Title: Re: % equipment script
Post by: pacdiggity on July 14, 2011, 09:06:50 AM
Sooner than I expected.
Code: [Select]
#==============================================================================
# RPG::BaseItem
#==============================================================================

class RPG::BaseItem
  #--------------------------------------------------------------------------
  # * Passive Traits
  #--------------------------------------------------------------------------
  def passive_traits
    return if self.is_a?(RPG::Skill) or self.is_a?(RPG::Item)
    return @passive_traits if @passive_traits != nil
    @passive_traits = { :maxhp => 0, :maxmp => 0, :atk => 0, :def => 0,
      :spi => 0, :agi => 0, :dex => 0, :res => 0, :hit => 0, :eva => 0,
      :cri => 0, :odds => 0, :maxhpp => 100, :maxmpp => 100, :atkp => 100,
      :defp => 100, :spip => 100, :agip => 100, :dexp => 100, :resp => 100,
      :hitp => 100, :evap => 100, :crip => 100, :oddsp => 100, :states => []}
    self.note.split(/[\r\n]+/).each { |line|
      case line
        when /<(?:PASSIVE|pas)[ ](.*):[ ]([\+\-]\d+)>/i
          case $1.upcase
            when "MAXHP", "HP"; @passive_traits[:maxhp] = $2.to_i
            when "MAXMP", "MP"; @passive_traits[:maxmp] = $2.to_i
            when "ATK"        ; @passive_traits[:atk] = $2.to_i
            when "DEF"        ; @passive_traits[:def] = $2.to_i
            when "SPI"        ; @passive_traits[:spi] = $2.to_i
            when "AGI"        ; @passive_traits[:agi] = $2.to_i
            when "DEX"        ; @passive_traits[:dex] = $2.to_i
            when "RES"        ; @passive_traits[:res] = $2.to_i
            when "HIT"        ; @passive_traits[:hit] = $2.to_i
            when "EVA"        ; @passive_traits[:eva] = $2.to_i
            when "CRI"        ; @passive_traits[:cri] = $2.to_i
            when "ODDS"       ; @passive_traits[:odds] = $2.to_i
          end
        when /<(?:PASSIVE|pas)[ ](.*):[ ](\d+)([%?])>/i
          case $1.upcase
            when "MAXHP", "HP"; @passive_traits[:maxhpp] = $2.to_i
            when "MAXMP", "MP"; @passive_traits[:maxmpp] = $2.to_i
            when "ATK"        ; @passive_traits[:atkp] = $2.to_i
            when "DEF"        ; @passive_traits[:defp] = $2.to_i
            when "SPI"        ; @passive_traits[:spip] = $2.to_i
            when "AGI"        ; @passive_traits[:agip] = $2.to_i
            when "HIT"        ; @passive_traits[:hitp] = $2.to_i
            when "EVA"        ; @passive_traits[:evap] = $2.to_i
            when "CRI"        ; @passive_traits[:crip] = $2.to_i
            when "ODDS"       ; @passive_traits[:oddsp] = $2.to_i
          end
        when /<(?:PASSIVE_STATE|passive state):[ ](\d+(?:\s*,\s*\d+)*)>/i
          $1.scan(/\d+/).each { |num|
          @passive_traits[:states].push($data_states[num.to_i]) if num.to_i > 0}
        end
      }
    return @passive_traits
  end
 
end
 
#==============================================================================
# ** Game_Battler
#==============================================================================
 
class Game_Battler
  #--------------------------------------------------------------------------
  # * Get Current States as an Object Array
  #--------------------------------------------------------------------------
  alias passive_equips_states states unless $@
  def states
    array = passive_equips_states
    if actor?
      for skill in skills do array |= skill.passive_traits[:states] end
    end
    return array.compact
  end
end

#==============================================================================
# Game Actor
#==============================================================================
 
class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # * Get Basic Maximum HP
  #--------------------------------------------------------------------------
  alias passive_equips_base_maxhp base_maxhp unless $@
  def base_maxhp
    n = passive_equips_base_maxhp
    for skill in skills do n = n * skill.passive_traits[:maxhpp] / 100.0 end
    for skill in skills do n += skill.passive_traits[:maxhp] end
    return Integer(n)
  end
  #--------------------------------------------------------------------------
  # * Get Basic Maximum MP
  #--------------------------------------------------------------------------
  alias passive_equips_base_maxmp base_maxmp unless $@
  def base_maxmp
    n = passive_equips_base_maxmp
    for skill in skills do n = n * skill.passive_traits[:maxmpp] / 100.0 end
    for skill in skills do n += skill.passive_traits[:maxmp] end
    return Integer(n)
  end
  #--------------------------------------------------------------------------
  # * Get Basic Attack
  #--------------------------------------------------------------------------
  alias passive_equips_base_atk base_atk unless $@
  def base_atk
    n = passive_equips_base_atk
    for skill in skills do n = n * skill.passive_traits[:atkp] / 100.0 end
    for skill in skills do n += skill.passive_traits[:atk] end
    return Integer(n)
  end
  #--------------------------------------------------------------------------
  # * Get Basic Defense
  #--------------------------------------------------------------------------
  alias passive_equips_base_def base_def unless $@
  def base_def
    n = passive_equips_base_def
    for skill in skills do n = n * skill.passive_traits[:defp] / 100.0 end
    for skill in skills do n += skill.passive_traits[:def] end
    return Integer(n)
  end
  #--------------------------------------------------------------------------
  # * Get Basic Spirit
  #--------------------------------------------------------------------------
  alias passive_equips_base_spi base_spi unless $@
  def base_spi
    n = passive_equips_base_spi
    for skill in skills do n = n * skill.passive_traits[:spip] / 100.0 end
    for skill in skills do n += skill.passive_traits[:spi] end
    return Integer(n)
  end
  #--------------------------------------------------------------------------
  # * Get Basic Agility
  #--------------------------------------------------------------------------
  alias passive_equips_base_agi base_agi unless $@
  def base_agi
    n = passive_equips_base_agi
    for skill in skills do n = n * skill.passive_traits[:agip] / 100.0 end
    for skill in skills do n += skill.passive_traits[:agi] end
    return Integer(n)
  end
  #--------------------------------------------------------------------------
  # * Get Hit Rate
  #--------------------------------------------------------------------------
  alias passive_equips_hit hit unless $@
  def hit
    n = passive_equips_hit
    for skill in skills do n = n * skill.passive_traits[:hitp] / 100.0 end
    for skill in skills do n += skill.passive_traits[:hit] end
    return [Integer(n), 0].max
  end
  #--------------------------------------------------------------------------
  # * Get Evasion Rate
  #--------------------------------------------------------------------------
  alias passive_equips_eva eva unless $@
  def eva
    n = passive_equips_eva
    for skill in skills do n = n * skill.passive_traits[:evap] / 100.0 end
    for skill in skills do n += skill.passive_traits[:eva] end
    return [Integer(n), 0].max
  end
  #--------------------------------------------------------------------------
  # * Get Critical Rate
  #--------------------------------------------------------------------------
  alias passive_equips_cri cri unless $@
  def cri
    n = passive_equips_cri
    for skill in skills do n = n * skill.passive_traits[:crip] / 100.0 end
    for skill in skills do n += skill.passive_traits[:cri] end
    return [Integer(n), 0].max
  end
  #--------------------------------------------------------------------------
  # * Get Ease of Hitting
  #--------------------------------------------------------------------------
  alias passive_equips_odds odds unless $@
  def odds
    n = passive_equips_odds
    for skill in skills do n = n * skill.passive_traits[:oddsp] / 100.0 end
    for skill in skills do n += skill.passive_traits[:odds] end
    return [Integer(n), 1].max
  end
end
Place this anywhere in the script editor as long as none of the methods are overwritten. If there are incompatibility errors with anything else you're using, just tell me.
To make the dang thing raise a stat, use a tag in a weapon or armor notebox:
<passive stat: +x> To raise a stat by a certain constant.
<passive stat: -x> To lower a stat by a certain constant.
<passive stat: %x> To raise a stat by a certain percentage.
Place stat as hp, mp, atk, def, agi, spi, hit, eva or odds. An example tag:
<passive atk: %40>
Placed in a weapon's notebox will have it so that when the weapon is equipped the attack of the equip-pee will have their attack raised by 40 percent.
Good?
Title: Re: % equipment script
Post by: Verzen on July 14, 2011, 11:02:29 AM
No method error on this line     for skill in skills do n = n * skill.passive_traits[:maxhpp] / 100.0 end

Undefined method for nilClass. It's on line 91.
Title: Re: % equipment script
Post by: pacdiggity on July 15, 2011, 03:29:40 AM
Line 91 is a comment?
Title: Re: % equipment script
Post by: Verzen on July 15, 2011, 04:04:02 AM
Woops 86. I added a few comments at the beginning with instructions. Srry bout that.

I'm using some passive skill scripts so not sure if they are creating incompatibility issues.
Title: Re: % equipment script
Post by: Verzen on July 19, 2011, 03:13:23 AM
bump
Title: Re: % equipment script
Post by: AeghtyAteKees on July 23, 2011, 02:15:06 AM
Yeah, I tried it out too, and there's definitely an error at 86. :-\
Title: Re: % equipment script
Post by: Verzen on August 20, 2011, 09:15:17 PM
bump
Title: Re: % equipment script
Post by: modern algebra on August 20, 2011, 10:34:10 PM
It looks like it is just a typo with an extra p in :maxmp. Change:

Code: [Select]
    for skill in skills do n = n * skill.passive_traits[:maxmpp] / 100.0 end

to:

Code: [Select]
    for skill in skills do n = n * skill.passive_traits[:maxmp] / 100.0 end
Title: Re: % equipment script
Post by: Verzen on August 20, 2011, 10:52:46 PM
Still having the same error take place.
Title: Re: % equipment script
Post by: Mushu on August 20, 2011, 10:54:37 PM
in other parts of the script it mentions the hpp's and mpp's again so it might be part of the script
Title: Re: % equipment script
Post by: modern algebra on August 20, 2011, 11:35:31 PM
Ok, yeah, you're right; I got confused. Reverse whatever I told you to do before. Instead, go to line 9:

Code: [Select]
    return if self.is_a?(RPG::Skill) or self.is_a?(RPG::Item)

Delete it. Then, at line 5 you should see:

Code: [Select]
class RPG::BaseItem

replace it with:

Code: [Select]
class RPG::UsableItem
Title: Re: % equipment script
Post by: pacdiggity on August 21, 2011, 10:37:06 AM
That's weird; why didn't I see that before?
Clumsy me.
Title: Re: % equipment script
Post by: Verzen on August 23, 2011, 04:58:07 AM
I just tried it and it's not raising the attack any with this <passive atk: %40>..
Title: Re: % equipment script
Post by: Mushu on August 23, 2011, 05:08:58 AM
have you tried <passive atk: 40%> or <passive atk: 40>  ?
Title: Re: % equipment script
Post by: Verzen on August 23, 2011, 05:22:35 AM
Yes. They don't work. =(