RMRK is retiring.
Registration is disabled. The site will remain online, but eventually become a read-only archive. More information.

RMRK.net has nothing to do with Blockchains, Cryptocurrency or NFTs. We have been around since the early 2000s, but there is a new group using the RMRK name that deals with those things. We have nothing to do with them.
NFTs are a scam, and if somebody is trying to persuade you to buy or invest in crypto/blockchain/NFT content, please turn them down and save your money. See this video for more information.
WLS Help

0 Members and 1 Guest are viewing this topic.

***
Rep:
Level 88
Menu & Battle System Guru
Hey I'm working with GoldenShadow's Weapon Leveling System. I figured out how to acquire skills based on level up, but now I'm trying to add SP gaining into the equation...but I've come up with errors. Perhaps I'm doing way too much than I need to...here's what I've got:

Spoiler for:
Code: [Select]
#==============================================================================
#  <> Game_Weapons & Game_Weapon
#  ==> You can delete all the comments except the copyright and creator info. Thanks.
#  ==> Do not rip, repost or any other way of reproducing without proper credit. Thanks.
#  ShadowClan Technologies © 2003-2005 - All rights reserved. Creation Asylum rules :-)
#------------------------------------------------------------------------------
# Put (below) in Scene_Battle 2 so weapon can gain exp
# ************************************************
#       wpn = enemy.exp / 2
#       for i in 0...$game_party.actors.size
#         unless $game_party.actors[i].weapon_id == nil or $game_party.actors[i].weapon_id == 0
#           $game_weapons[$game_party.actors[i].weapon_id].gain_exp(wpn)
#         end
#       end
# ************************************************
#
# * Something to keep in mind
# This is a stand alone script and doesn't require anything else to be imported.
# I didn't make any windows or scenes with this so you're on your own!
# Why didn't I make it? I don't have the time right now -- I'm creating my game first!
# It just happen to be that I needed a script like this one... heh... cool..
#
# * Okay... but what does it do? What's the point?
# It allows the weapons to have their own status.
# So that it also gains EXP and levels up.
# You can set each weapon (unfortunely only by their IDs)
# to have each their own stuff like maximum level and etc.
# This makes it more variable and thus more fun to deal with!
# Wait... what you say? You want it to apply on armors too?
# All you do is copy this whole thing and replace everything
# that says 'weapon' to 'armor' and replace $data_weapons
# to $data_armors and atk to pdef or something...
#
# * How do I use this?
# In the Scene_Title at command_new_game, just add
#
# $game_weapons = Game_Weapons.new
#
# underneath all the other $game stuff.
# From that point on you can use it.
# Don't forget to put it in Scene_Save and Scene_Load too!
#
# * You mean I have to set up for EVERY weapon status?!
# Actually, yes, but I'll teach you a very quick way of doing faster:
# Go to your events page in an event and search in Page 4 for
# the Call Script button and add this:
#
# $game_weapons = Game_Weapons.new
# for id in 1...$data_weapons.size
#   $game_weapons[id].setup(id)
# end
#
# This sets for all weapons their own status.
# You can later modify a weapon just by using setup again
# but with your own initial status (see below).
#
# * I want a weapon with my own initial status! How do I do that?
# Type in Call Script of somewhere in a scene:
#
# $game_weapons[WeaponID].setup(ID, level, exp, break, broke, next_exp, expvar, max_level,
# break_add, max_break, atk_up)
#
# Quick Reference:
# ID              : Well, the weapon ID duh
# level           : The initial level for the weapon (Use only integers [numbers])
# exp            : Initially needed EXP to level it up (Default: 300)
# break          : % of break to the weapon (Default: 0)
# broke         : If it's initially broken true/false (Default: false)
# next_exp     : Needed EXP to level it up initially (Default: 300)
# expvar        : This calculates the EXP needed (expvar * level = next exp) (Default: 300)
# max_level   : Maximum level for that particular weapon (Default: 100)
# break_add  : Amount of pnts. added to break of that weapon (Default: 1)
# max_break  : Maximum break % for that particular weapon (Default: 100)
# atk_up        : Added attack power to weapon each level gained (optional) (Default: 1)
#
# * How do I check status?
# When defined $game_weapons, just use:
# $game_weapons[weapon_ID].*
# where the * can be:
# level - Returns the current weapon level
# exp - Returns the current weapon exp
# next_exp - Returns the current needed exp for next level
# break_amount - Returns the % of break
# level_up - Returns true if it's leveled up or false if it isn't. (optional)
# class - The rank of the weapon (optional)
# id - Returns the ID nothing special, you won't even use it...
# weapon_broke? - Returns true if weapon broke or false if not
# stored_atk - The original attack power of the weapon
# repair - To restore the break amount (see below).
#
# * What is the Break? (Optional)
# Break means just the crumbling of the weapon as you gain levels with it.
# The higher the break the less attack power it'll have.
# You can set up where the break starts and how many % the max. break is.
# If the weapon attack reaches 0, it's useless and breaks apart.
# The syntax for it is: (original weapon ATK / 100) * Break% = weapon ATK
# To restore it's attack power to the original and to restore
# the break% to initial state, you'd use: $game_weapons[weapon_id].repair
#
# * TODO LIST:
# - Make every weapon, no matter if IDs or names match, have own status!
# - Make 'em to have their own skills you can use
# - Perhaps you have suggestions??
#
# That would end the little explaining for now. I -really- hope you like this script.
#--------------------------------------------------------------------------------------------------------------------------
# * Suggestions? ==> Post, PM or email me: invincible_p0wer_@hotmail.com (no spam plz)
# * Created by: GoldenShadow
# * Credits: Cloud_Strife_1989 (Power Up idea, thanks man)
# * Note: If you use this, please state that you used my script in case ppl think I copied you!
#=============================================================
module SC # Please leave this untouched, thanks.
  RXSC_WPNS = "Weapons Script: Ver. 1.1"
end

#--------------------------------------------------------------------------
# ? Game_Weapons
#     This is what you use when checking stuff
#-------------------------------------------------------------------------
class Game_Weapons
  #--------------------------------------------------------------------------
  # ? This is the array for the weapon data
  #--------------------------------------------------------------------------
  attr_accessor :data            # Stored weapon data
  #--------------------------------------------------------------------------
  # ? Initiating the store array and others just in case!
  #--------------------------------------------------------------------------
  def initialize
    $data_weapons = load_data("Data/Weapons.rxdata")
    @data = []
   
    $data_actors = load_data("Data/Actors.rxdata")
    @data = []
  end
  #--------------------------------------------------------------------------
  # ? Don't bug this, or else you won't use $game_weapons[]
  #--------------------------------------------------------------------------
  def [](weapon_id)
    if weapon_id > $data_weapons.size
      return
    else
      if @data[weapon_id] == nil
        @data[weapon_id] = Game_Weapon.new(weapon_id)
      end
      return @data[weapon_id]
    end
  end
 
  def [](actor_id)
    if actor_id > $data_actors.size
      return
    else
      if @data[actor_id] == nil
        @data[actor_id] = Game_Weapon.new(actor_id)
      end
      return @data[actor_id]
    end
  end
end

#--------------------------------------------------------------------------
# ? Game_Weapon
#     This is where the data is set up for the weapon
#-------------------------------------------------------------------------
class Game_Weapon
  #--------------------------------------------------------------------------
  # ? Something for the optionals
  #--------------------------------------------------------------------------
  USE_BREAK = true # Set to true if you want to use the breaks
  BREAK_SOUND_ENABLE = true # Hear a sound when broken?
  BREAK_SOUND = "Audio/SE/093-Attack05" # The broken sound
  USE_POWER_UP = true # True if you want your weapon to power up each level
  REPAIR_ON_LVLUP = true # If weapons repairs auto on level up
  #--------------------------------------------------------------------------
  # ? Essential attributes
  #--------------------------------------------------------------------------
  attr_accessor :weapon_id              # Weapon ID
  attr_accessor :weapon_level           # Weapon level
  attr_accessor :weapon_exp             # Weapon exp
  attr_accessor :weapon_break_amount    # Weapon break
  attr_accessor :weapon_broke           # true/false if weapon broke
  attr_accessor :weapon_class           # Weapon ranking
  attr_accessor :weapon_next_exp        # Weapon next EXP
  attr_accessor :weapon_level_up        # Weapon level up? (true/false)
  attr_accessor :weapon_element         # Weapon Element
  #--------------------------------------------------------------------------
  # ? Initialize, which sets up data of the weapon through the ID
  #--------------------------------------------------------------------------
  def initialize(weapon_id, level = 1, exp = 300, break_amount = 0,
    broke = false, next_exp = 300, expvar = 300, max_level = 100,
    break_add = 1, max_break = 100, atk_up = 1, weapon_element = $data_weapons[weapon_id].element_set, sp_up = 1)
    # Setup the weapon with the specified parameters and data
    setup(weapon_id, level, exp, break_amount, broke, next_exp, expvar, max_level,
    break_add, max_break, atk_up, weapon_element, sp_up)
  end
  #--------------------------------------------------------------------------
  # ? Setup for weapon as initial status
  #     Complete reference on the stuff like weapon_id, level, exp etc.
  #     Is located in the beginning of this script at topic:
  #     "I want a weapon with my own initial status! How do I do that?"
  #--------------------------------------------------------------------------
  def setup(weapon_id, level, exp, break_amount,  broke, next_exp, expvar, max_level,
    break_add, max_break, atk_up, weapon_element, sp_up)
    @weapon_id = weapon_id
    @weapon_level = level # Initial level for the weapon
    @weapon_exp = exp # Initial EXP for the weapon
    @weapon_break_amount = break_amount # Initial % break for the weapon
    @weapon_broke = broke # If the weapon is broken intially
    @weapon_next_exp = next_exp # Initial needed EXP for the weapon
    @weapon_exp_var = expvar # The EXP is calculated through this * level = needed exp
    @weapon_max_level = max_level # Maximum level that can be achieved
    @weapon_break_add = break_add # This is the number added to break each level!
    @weapon_max_break = max_break # Maximum amount of break
    @weapon_level_up = false # You cant level it up in the begin right?
    @weapon_attack = $data_weapons[weapon_id].atk # Store original attack (atk)
    @weapon_stamina = $data_actors[actor_id].maxsp # Store original stamina (sp)
    @weapon_initial_break = 0 # This is the initial %. Must be changed here!
    @weapon_atk_up = atk_up # Amount of attack power added to weapon at level up
    @weapon_element = weapon_element
    @weapon_sp_up = sp_up # Amount of stamina added to the actor at his/her weapon level up
    reform_class # Sets up the class, but you can also use @weapon_class = "Class"
  end
  #--------------------------------------------------------------------------
  # ? ID to return of weapon when asked
  #--------------------------------------------------------------------------
  def id
    return @weapon_id
  end
  #--------------------------------------------------------------------------
  # ? Level of weapon (Min. 1, Max. 100)
  #--------------------------------------------------------------------------
  def level
    amount = [[@weapon_max_level, 1].min, @weapon_level].max
    return amount
  end
  #--------------------------------------------------------------------------
  # ? Return total gained EXP
  #--------------------------------------------------------------------------
  def exp
    return @weapon_exp
  end
  #--------------------------------------------------------------------------
  # ? Return EXP needed for next level
  #--------------------------------------------------------------------------
  def next_exp
    return @weapon_next_exp
  end
  #--------------------------------------------------------------------------
  # ? Returns percetage of the break of weapon
  #    Break amount is just how broken the sword is like reality
  #--------------------------------------------------------------------------
  def break_amount
    amount = [[@weapon_max_break, 0].max, @weapon_initial_break].min
    return amount
  end
  #--------------------------------------------------------------------------
  # ? Returns true or false if weapon is broken
  #--------------------------------------------------------------------------
  def weapon_broke?
    return @weapon_broke
  end
  #--------------------------------------------------------------------------
  # ? Repairing the weapon so that Break% is initial and attack is restored
  #--------------------------------------------------------------------------
  def repair
    @weapon_break_amount = @weapon_initial_break # Return it to initial %
    $data_weapons[@weapon_id].atk = @weapon_attack # Return original atk
  end
  #--------------------------------------------------------------------------
  # ? Gaining EXP (Use this like in battle or something)
  #       n : a number that will be added to EXP but
  #            removed from next EXP
  #    This number may be a negetive (example: -22)
  #    That would only remove it from EXP and also from Next EXP.
  #--------------------------------------------------------------------------
  def gain_exp(n)
     if n.is_a?(Integer)
        @weapon_level_up = false
        @weapon_exp += n
        @weapon_next_exp -= n
        if USE_BREAK == true
          @weapon_break_amount += @weapon_break_add # Amount added to break
          weapon_break
        end
    else
      return
    end
    if @weapon_next_exp <= 0
      @weapon_level += 1 # Amount of level added
      @weapon_level_up = true # Set to true when level up

      if REPAIR_ON_LVLUP == true
        repair
      end
      if USE_POWER_UP == true
        # Weapon Attack +1
        @weapon_attack += @weapon_atk_up
        $data_weapons[@weapon_id].atk += @weapon_atk_up
        # Actor Stamina +1
        @weapon_stamina += @weapon_sp_up
        $data_actors[@actor_id].maxsp += @weapon_sp_up
      end
      @weapon_next_exp = @weapon_exp_var * @weapon_level
      reform_class
    end
  end
  #--------------------------------------------------------------------------
  # ? Reforms the class when a level is gained to determine
  #    the new ranking for the weapon, add or modify as pleased
  #--------------------------------------------------------------------------
  def reform_class
    if @weapon_level >= 0 and @weapon_level < 5
      @weapon_class = "Dull"
    elsif @weapon_level >= 5 and @weapon_level < 15
      @weapon_class = "Practice Weapon"
    elsif @weapon_level >= 15 and @weapon_level < 25
      @weapon_class = "Fence Weapon"
    elsif @weapon_level >= 25 and @weapon_level < 35
      @weapon_class = "Excellent Weapon"
    elsif @weapon_level >= 35 and @weapon_level < 45
      @weapon_class = "Veteran Weapon"
    elsif @weapon_level >= 45 and @weapon_level < 55
      @weapon_class = "Elite Weapon"
    elsif @weapon_level >= 55 and @weapon_level < 65
      @weapon_class = "High-Risk Weapon"
    elsif @weapon_level >= 65 and @weapon_level < 75
      @weapon_class = "Renegade"
    elsif @weapon_level >= 75 and @weapon_level < 85
      @weapon_class = "Masterful Weapon"
    elsif @weapon_level >= 85 and @weapon_level < 95
      @weapon_class = "Supreme Weapon"
    elsif @weapon_level > 95
      @weapon_class = "Ultima Weapon"
    else
      @weapon_class = "???"
    end
    return @weapon_class
  end
  #--------------------------------------------------------------------------
  # ? Make the weapon weaker
  #--------------------------------------------------------------------------
  def weapon_break
    @amount = $data_weapons[@weapon_id].atk / @weapon_max_break
    $data_weapons[@weapon_id].atk -= (@amount * @weapon_break_amount)
    if $data_weapons[@weapon_id].atk <= 0
      if BREAK_SOUND_ENABLE == true
        Audio.se_play(BREAK_SOUND, 100, 100)
      end
      return @weapon_broke = true
    end
  end
  #--------------------------------------------------------------------------
  # ? This returns the original attack + stamina base of the weapon
  #--------------------------------------------------------------------------
  def stored_attack
    return @weapon_attack
  end
  def stored_stamina
    return @weapon_stamina
  end
  #--------------------------------------------------------------------------
  # ? This would manually change the ATK UP each level if enabled
  #--------------------------------------------------------------------------
  def atk_up=(up)
    if up.is_a?(Numeric)
      @weapon_atk_up = up
    else
      return
    end
  end
 
  def sp_up=(up)
    if up.is.a?(Numeric)
      @weapon_sp_up = up
    else
      return
    end
  end
 
  def weapon_element
    return @weapon_element
  end
end
# FINAL UPDATE: October 11th 2005 @ 6:07 PM (SID06) [Don't modify this]
thanks!