Items Class Restriction

Szyu

Villager
Member
Joined
Aug 22, 2013
Messages
29
Reaction score
56
First Language
German
Primarily Uses
Szyu's Items Class Restriction

Introduction

Easily specify items, weapons and armors, which can only be used/equipped by certain classes

How to Use

An item's note have to contain one of these:

<classes: x> # This will allow specified classes to use this item<!classes: x> # This will forbit specified classes to use this item

Seperate multiple classes with ','!

Allowed Database Items, which can be restricted by this script:

- Items

- Weapons

- Armors

 

If There is none of those tags in the items note, every class is permitted to use or equip this item!

 

Links

Pastebin

Credits

Credits to Szyu if you plan to use this script.
 

Roninator2

Gamer
Veteran
Joined
May 22, 2016
Messages
2,345
Reaction score
487
First Language
English
Primarily Uses
RMVXA
tested and works fine.

<actors: x> and <classes: x> both work as described.

So from reading your other post about using the character class names, let me say that this script also uses the class numbers and actor numbers.

<actors: 1>, <classes: 1>
<actors: 2>, <classes: 3>
<actors: 4>, <classes: 5>
<actors: 7>, <classes: 8>
etc...
 

bluebomber25

Veteran
Veteran
Joined
May 24, 2020
Messages
31
Reaction score
2
First Language
English
Primarily Uses
RMVXA
Would love to use this script, but can't.

error message.jpg

I have tried using the !actors and !classes version to no avail.
The purpose is to make items only usable by a particular actor in battle. The items work fine without the script loaded, but can be used by anyone in the party.
Only other scripts I am using are Yanfly's Core Engine / extra parameters, Yanfly's Battle Engine, and Yanfly's Status Menu.
Any suggestions?
 

Roninator2

Gamer
Veteran
Joined
May 22, 2016
Messages
2,345
Reaction score
487
First Language
English
Primarily Uses
RMVXA
Try this version instead
Ruby:
#==============================================================================
# Szyu's Item's Class Restriction
# Version 1.2
# By Szyu
#
# About:
# Easily specify items, weapons and armors, which can only be used/equipped
# by certain classes
#
# Instructions:
# - Place below "▼ Materials" but above "▼ Main Process".
#
# How to Use:
# - An item's note have to contain one of these:
# <classes: x> # This will allow specified classes to use this item
# <!classes: x> # This will forbit specified classes to use this item
#
# Seperate multiple classes with ','!
# Allowed Database Items, which can be restricted by this script:
# - Items
# - Weapons
# - Armors
#
# If There is none of those tags in the items note, every class is permitted to
# use or equip this item
#
#
# Requires:
# - RPG Maker VX Ace
#
# Terms of Use:
# - Free for commercal and non-commercial use. Please list me
#   in the credits to support my work.
#
#
# Changelog:
# - Same syntax can now be used to restrict for actors:
#   <actors: x>
#   <!actors: x>
# - Added Use Restriction for battles too. Restricted classes and actors can no
#   longer use restricted items in battle
#
#
#
# Pastebin:
# http://adf.ly/rYIZm
#
#
#==============================================================
#   * Game_BattlerBase
#==============================================================
class Game_BattlerBase
  alias sz_iucr_equippable? equippable?
 
  def equippable?(item)
    return false unless item.is_a?(RPG::EquipItem)
    return false if self.is_a?(Game_Actor) &&
      (item.forbid_classes.include?(self.class_id) || item.forbid_actors.include?(self.id))
    return sz_iucr_equippable?(item)
  end
end
#==============================================================
#   * Game_Battler
#==============================================================
class Game_Battler < Game_BattlerBase
  alias sz_iucr_item_test item_test
 
  def item_test(user, item)
#~     return false if item.is_a?(RPG::Item) &&
#~      (item.forbid_classes.include?(self.class_id) || item.forbid_actors.include?(self.id))
#~     return sz_iucr_item_test(user, item)
  return sz_iucr_item_test(user, item) if self.is_a?(Game_Enemy)
  if SceneManager.scene_is?(Scene_Battle)
    return false if item.is_a?(RPG::Item) &&
     (item.forbid_classes.include?(user.class_id) || item.forbid_actors.include?(user.id))
   else
     return false if item.is_a?(RPG::Item) &&
     (item.forbid_classes.include?(self.class_id) || item.forbid_actors.include?(self.id))
   end
   return sz_iucr_item_test(user, item)
    end
end
 
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
#==============================================================
#   * Initialize BaseItems
#==============================================================
module DataManager
  class << self
    alias load_db_iucr_sz load_database
  end
 
  def self.load_database
    load_db_iucr_sz
    load_iucr_items
  end
 
  def self.load_iucr_items
    groups = [$data_items, $data_weapons, $data_armors]
    for group in groups
      for obj in group
        next if obj.nil?
        obj.load_iucr_notetags_sz
      end
    end
  end
end

#==============================================================================
# ** Window_BattleActor
#------------------------------------------------------------------------------
#  This window is for selecting an actor's action target on the battle screen.
#==============================================================================
class Window_BattleActor < Window_BattleStatus
  #--------------------------------------------------------------------------
  # * Get Activation State of Selection Item
  #--------------------------------------------------------------------------
  def current_item_enabled?
    return false if !BattleManager.actor.input.item.is_a?(RPG::UsableItem) ||
      BattleManager.actor.input.item.forbid_classes.include?(BattleManager.actor.input.subject.class_id) ||
      BattleManager.actor.input.item.forbid_actors.include?(BattleManager.actor.input.subject.id)
    return true
  end
end
 
#==============================================================================
# ** Window_BattleActor
#------------------------------------------------------------------------------
#  This window is for selecting an actor's action target on the battle screen.
#==============================================================================
class Window_BattleEnemy < Window_Selectable
  #--------------------------------------------------------------------------
  # * Get Activation State of Selection Item
  #--------------------------------------------------------------------------
  def current_item_enabled?
    return false if !BattleManager.actor.input.item.is_a?(RPG::UsableItem) ||
      BattleManager.actor.input.item.forbid_classes.include?(BattleManager.actor.input.subject.class_id) ||
      BattleManager.actor.input.item.forbid_actors.include?(BattleManager.actor.input.subject.id)
    return true
  end
end
#==============================================================
#   * Content of Recycling Items
#==============================================================
class RPG::BaseItem
  attr_accessor :forbid_classes
  attr_accessor :forbid_actors
 
  def load_iucr_notetags_sz
    @forbid_classes = []
    @forbid_actors = []
    self.note.split(/[\r\n]+/).each do |line|
      # Forbid Classes
      if line =~ /<classes:([\d+,?\s*]+)>/i
        $data_classes.each do |cl|
          @forbid_classes.push(cl.id) if cl
        end
        $1.scan(/\s*,?\d+,?\s*/i).each do |cl|
          @forbid_classes.delete(cl.to_i)
        end
      elsif line =~ /<!classes:([\d+,?\s*]+)>/i
        $1.scan(/\s*,?\d+,?\s*/i).each do |cl|
          @forbid_classes.push(cl.to_i)
        end
        # Forbid Actors
      elsif line =~ /<actors:([\d+,?\s*]+)>/i
        $data_actors.each do |ac|
          @forbid_actors.push(ac.id) if ac
        end
        $1.scan(/\s*,?\d+,?\s*/i).each do |ac|
          @forbid_actors.delete(ac.to_i)
        end
      elsif line =~ /<!actors:([\d+,?\s*]+)>/i
        $1.scan(/\s*,?\d+,?\s*/i).each do |ac|
          @forbid_actors.push(ac.to_i)
        end
      end
    end
  end  
  def forbid_classes
    load_iucr_notetags_sz unless @forbid_classes
    return @forbid_classes
  end
  def forbid_actors
    load_iucr_notetags_sz unless @forbid_actors
    return @forbid_actors
  end
end
 
Last edited:

bluebomber25

Veteran
Veteran
Joined
May 24, 2020
Messages
31
Reaction score
2
First Language
English
Primarily Uses
RMVXA
What did you change? =)
The Game no longer crashes, but the classes and actors marked with !actors / !classes can still use the items that they should not be able to.

Am I not using the tags properly? Attached are the Actor and Class tab showing the # to be forbid, and then items using the !actors and !classes tags. Hope this helps.
 

Attachments

Roninator2

Gamer
Veteran
Joined
May 22, 2016
Messages
2,345
Reaction score
487
First Language
English
Primarily Uses
RMVXA
classes and actors marked with !actors / !classes can still use the items
Ok the script was designed for using items on the actors. Not on the enemies.
I added in a battle_enemy component and works on my end.
Code updated above.
 

bluebomber25

Veteran
Veteran
Joined
May 24, 2020
Messages
31
Reaction score
2
First Language
English
Primarily Uses
RMVXA
Wow thank you so much!!
 
Last edited:

Users Who Are Viewing This Thread (Users: 0, Guests: 1)

Latest Threads

Latest Posts

Latest Profile Posts

Here's the one that flee from no foe, the brave Sir Kiwival! Also protagonist of my current project.

This is the cover art of new game, "Primordial Essence".
I'm amazed at the performance increase I saw in just going through and rescoping the variables in other people's plugins that I'm using. You know what that means? :LZSexcite:
//Tosses more absurd stuff onto the game of "Jenga" that is his RM project.
:rheh:
Browsing through Steam's Curator Connect, it seems the vast majority of curators haven't curated in months. I'm guessing people finally got tired of reviewing games for free. Can't blame them.
Satisfy my curiosity for a sec please, folks: how many people actively followed/follow my Slip into Ruby or Jump into Javascript series and have found them useful for learning what makes RM tick?

Forum statistics

Threads
99,672
Messages
967,881
Members
131,350
Latest member
dalan
Top