Chaos Project

RPG Maker => RPG Maker Scripts => Script Requests => Topic started by: firevenge007 on October 31, 2013, 08:24:41 pm

Title: Disable using items on other characters?
Post by: firevenge007 on October 31, 2013, 08:24:41 pm
So in my game, there are 4 characters in a party. Though, I wish to have only the first one be able to use items, heal, etc.

Also, I want to have it so that the other 3 characters' HP and MP do not show.

I was able to do this somehow with someone's help on the menu, but when I use a potion it shows the HP/Mp of other characters, which can be confusing, as these characters never use HP/MP.

If someone could help me out with this issue, that would be wonderful.

Thank you for your time.
Title: Re: Disable using items on other characters?
Post by: WhiteRose on October 31, 2013, 09:53:07 pm
This sounds like it will require an edit to the battle system that you are using, but it shouldn't be a very hard edit. Are you just using the regular battle system?
Title: Re: Disable using items on other characters?
Post by: firevenge007 on October 31, 2013, 09:56:33 pm
I should mention that I am using Rpgmaker xp, and that yes, I am using the default battle system - but this is not a problem for battles, as I have manually removed all characters before entering a fight, and then adding them all on after the fight is over, so that they do not interfere with combat.

It is just a problem in the menu.
Title: Re: Disable using items on other characters?
Post by: firevenge007 on November 01, 2013, 04:47:49 pm
Is this not possible?
Title: Re: Disable using items on other characters?
Post by: WhiteRose on November 01, 2013, 06:09:45 pm
It's possible, but unfortunately there aren't very many scripters here on CP. :( I'm sure they'll be willing to help you, but it just might take a few days. The weekend is usually a time when people are more available, so keep your fingers crossed. :)

By the way, just so that you know for next time, if you'd like to post in the same topic twice in less than twenty four hours, use the "Modify" button instead of making a new post. It helps to keep things less cluttered. (Don't worry; I made the same mistake before, too. :P)
Title: Re: Disable using items on other characters?
Post by: KK20 on November 01, 2013, 07:10:33 pm
Is it something as simple as this?

VALID_ACTORS_FOR_STATS = [1, 2, 3] # want just one actor? do this: [1]

class Window_Base < Window
  alias draw_hp_for_one_actor draw_actor_hp
  def draw_actor_hp(actor, x, y, width = 144)
    return unless VALID_ACTORS_FOR_STATS.include?(actor.id)
    draw_hp_for_one_actor(actor, x, y, width)
  end

  alias draw_sp_for_one_actor draw_actor_sp
  def draw_actor_sp(actor, x, y, width = 144)
    return unless VALID_ACTORS_FOR_STATS.include?(actor.id)
    draw_sp_for_one_actor(actor, x, y, width)
  end
end
Title: Re: Disable using items on other characters?
Post by: firevenge007 on November 03, 2013, 01:10:30 am
That did help to an extent, thank you.

Though, I was wondering if it was possible to remove stats that display attack/defense bonuses, etc.

I know you might not approve of how I am using rpgmaker xp, but this is the way I used my characters.

Spoiler: ShowHide
(http://i.imgur.com/4T2RrT9.png)


Basically, I'm trying to get rid of where it says [normal], which is the state, where it says 'equipment', and all the stuff beneath.
Title: Re: Disable using items on other characters?
Post by: KK20 on November 03, 2013, 05:46:25 pm
So your other party members are basically talents/side-job skills? You would have been better off requesting an entire system rather than making this makeshift design. Not only would it be more professional, but it would also make sense in both menu design and controls.

By the way, I deleted your "bump" because it has not been 24 hours since your last post. What you want is much more than possible--it's about as difficult as a scripter's first script.
Title: Re: Disable using items on other characters?
Post by: G_G on November 03, 2013, 05:54:44 pm
KK20, instead of directly deleting the post, just append it to the last one. That way the message hasn't been deleted. That's what I try to do anyways. Also... *moves to script requests*
Title: Re: Disable using items on other characters?
Post by: KK20 on November 03, 2013, 05:58:17 pm
"Is this not possible?" was all that was posted. If it's a more substantial question or meaningful post, I append it to the last one.

Thanks for moving. According to the direction this thread is going, it seems much more appropriate.
Title: Re: Disable using items on other characters?
Post by: WhiteRose on November 03, 2013, 07:17:38 pm
I think that using the other characters as separate skills is a cool utilization of the standard scripts. :) However, like KK20, I do think that you'll better be able to get the level of polish that you'd like by building a system from scratch - it shouldn't be too hard; the skills would just be extra variables, and then you can tweak them as you'd like. :) Having a custom system built around your area would also give you some extra flexibility as to the way that things are presented, so, for example, you could have an extra menu showing what fish can be caught at different levels or something like that.

Just let us know what you'd like, and I'm sure that someone will be willing to give it a try. If it's not too hard, even I might be able to do something. :)
Title: Re: Disable using items on other characters?
Post by: firevenge007 on November 03, 2013, 07:28:54 pm
The thing is though, I had started making my game this way for a while now, and have grown used to it.

Plus, I don't want others to break their backs over making something huge for me.

I was just wondering whether it would be possible to omit the combat stats from the page and if I could get some help with that.

Also, I find it very interesting how people write code. I'm going into computer science, but I haven't taken computer science classes yet, though I know a little bit of java and a miniscule amount of ruby.

Maybe through reading some of the code that is presented, I could learn a thing or two.
Title: Re: Disable using items on other characters?
Post by: KK20 on November 04, 2013, 04:27:05 pm
Quote from: firevenge007 on November 03, 2013, 07:28:54 pm
Plus, I don't want others to break their backs over making something huge for me.

As I stated before, this is hardly a challenge. I can do it in a few hours depending on how many features there are. It's just a matter of creating another scene that displays all the profession levels and EXP. Besides, I'd find viewing the Status of my Fishing skill weird when I'm accustomed to seeing an Actor's stats being displayed in other RPG Maker games.

If you want to continue along with your design, it'd just be a lot of edits to the default windows and only displaying certain stats based on the configuration.
Title: Re: Disable using items on other characters?
Post by: firevenge007 on November 04, 2013, 06:34:10 pm
Where would the side-skills be displayed then?

I do have a lot of trouble sometimes, because of the issue that only 4 characters are allowed to be in a party, I just set 3 side-skills as the default ones, and then whenever a player enters an area where another side-skill is used, I swap out the last character for the one that might be used, and when the player goes back or teleports out, I make sure that the character is switched back.
Title: Re: Disable using items on other characters?
Post by: KK20 on November 04, 2013, 09:58:30 pm
Wherever you want them to be displayed--it's your request after all.

Think about what exactly you want and come back with a post detailing as much of your system as possible. Images will help carry the idea across too.

Also, because it sounds like your game is a one-man party, you should also mention any custom scripts you are using (one-man Menu Scene, One-Man battle system, etc.). Or, if you want the menu to look like something specific, be sure to explain that as well.

Some questions to consider answering:
- Do you want this to be done in a separate scene? For example, viewing your Items or Equips go to different scenes. Would you like a button in the menu to say something like "Side-Skills" that will show you all your skills?
- How the leveling/experience system works
- Are there any extra details you would like to be displayed other than skill level and EXP?
Title: Re: Disable using items on other characters?
Post by: firevenge007 on November 04, 2013, 11:01:29 pm
Spoiler: ShowHide
(http://i.imgur.com/ykVFRf1.png)


This is what the menu looks like as of right now.



With all the skills included fit into this tiny menu, it would look a little cramped.

As shown below, there are all the side-skills in my game...

Spoiler: ShowHide
(http://i.imgur.com/kvVkeRM.png)




I'm currently using 'Multi-Slot Script" by Guillaume777, a very old script.

as well as "Menu-modification" from which I do not have an author.

I'll post the script here...
Spoiler: ShowHide
class Window_Base < Window

def draw_actor_face(actor, x, y)
face = RPG::Cache.character("Faces/" + actor.character_name, actor.character_hue)
fw = face.width
fh = face.height
src_rect = Rect.new(0, 0, fw, fh)
self.contents.blt(x - fw / 23, y - fh, face, src_rect)
end
end
def draw_actor_battler_graphic(actor, x, y)
 bitmap = RPG::Cache.battler(actor.battler_name, actor.battler_hue)
 cw = bitmap.width
 ch = bitmap.height
 src_rect = Rect.new(0, 0, cw, ch)
 self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect)
end

#========================================
#¡ Game_Map
#--------------------------------------------------------------------------------
# Setting functions for the Map
#========================================
class Game_Map

def name
$map_infos[@map_id]
end
end

#========================================
#¡ Window_Title
#--------------------------------------------------------------------------------
# Setting functions for the Title
#========================================
class Scene_Title
$map_infos = load_data("Data/MapInfos.rxdata")
for key in $map_infos.keys
$map_infos[key] = $map_infos[key].name
end
end




#==============================================================================
# ¡ Window_MenuStatus
#------------------------------------------------------------------------------
#  Sets up the Choosing.
#==============================================================================

class Window_MenuStatus < Window_Selectable
#--------------------------------------------------------------------------
# Set up
#--------------------------------------------------------------------------
def initialize
 super(0, 0, 560, 454)
 self.contents = Bitmap.new(width - 32, height - 32)
 self.contents.font.name = "Arial"
 self.contents.font.size = 18
 refresh
 self.active = false
 self.index = -1
end
#--------------------------------------------------------------------------
# Drawing Info on Screen
#--------------------------------------------------------------------------
def refresh
 self.contents.clear
 @item_max = $game_party.actors.size
 for i in 0...$game_party.actors.size
   x = 94
   y = i * 110
   actor = $game_party.actors[i]
  # draw_actor_face(actor, 12, y + 90) #To get rid of the Face, put a "#" before the draw_ of this line
   draw_actor_graphic(actor, 48, y + 65) #and delete the "#" infront of draw of this line
   draw_actor_name(actor, x, y)
   draw_actor_level(actor, x + 144, y)
   draw_actor_state(actor, x + 280, y )
   draw_actor_exp(actor, x+ 144, y + 38)
   if actor.id == 1
       draw_actor_hp(actor, x + -20, y + 32)
       draw_actor_sp(actor, x + -20, y + 64)
   end
 end
end
#--------------------------------------------------------------------------
# Update of Cursor
#--------------------------------------------------------------------------
def update_cursor_rect
 if @index < 0
   self.cursor_rect.empty
 else
   self.cursor_rect.set(0, @index * 110, self.width - 32, 96)
 end
end
end

#=======================================#
# ¡Window_GameStats                                                             #
# written by AcedentProne                                                          #
#------------------------------------------------------------------------------#

class Window_GameStats < Window_Base
def initialize
super(0, 0, 160, 60)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = "Arial"
self.contents.font.size = 18
refresh
end

def refresh
self.contents.clear
#Drawing gold into separate commas by Dubealex
case $game_party.gold
  when 0..9999
    gold = $game_party.gold
  when 10000..99999
    gold = $game_party.gold.to_s
    array = gold.split(//)
    gold = array[0].to_s+array[1].to_s+","+array[2].to_s+array[3].to_s+array[4].to_s
  when 100000..999999
    gold = $game_party.gold.to_s
    array = gold.split(//)
    gold = array[0].to_s+array[1].to_s+array[2].to_s+","+array[3].to_s+array[4].to_s+array[5].to_s
  when 1000000..9999999
    gold = $game_party.gold.to_s
    array = gold.split(//)
    gold = array[0].to_s+","+array[1].to_s+array[2].to_s+array[3].to_s+","+array[4].to_s+array[5].to_s+array[6].to_s
  when 10000000..99999999
    gold = $game_party.gold.to_s
    array = gold.split(//)
    gold = array[0].to_s+array[1].to_s+","+array[2].to_s+array[3].to_s+array[4].to_s+","+array[5].to_s+array[6].to_s+array[7].to_s
  when 100000000..999999999
    gold = $game_party.gold.to_s
    array = gold.split(//)
    gold = array[0].to_s+array[1].to_s+array[2].to_s+","+array[3].to_s+array[4].to_s+array[5].to_s+","+array[6].to_s+array[7].to_s+array[8].to_s
  when 1000000000..9999999999
    gold = $game_party.gold.to_s
    array = gold.split(//)
    gold = array[0].to_s+","+array[1].to_s+array[2].to_s+array[3].to_s+","+array[4].to_s+array[5].to_s+array[6].to_s+","+array[7].to_s+array[8].to_s+array[9].to_s
  when 10000000000..99999999999
    gold = $game_party.gold.to_s
    array = gold.split(//)
    gold = array[0].to_s+array[1].to_s+","+array[2].to_s+array[3].to_s+array[4].to_s+","+array[5].to_s+array[6].to_s+array[7].to_s+","+array[8].to_s+array[9].to_s+array[10].to_s
  when 100000000000..999999999999
    gold = $game_party.gold.to_s
    array = gold.split(//)
    gold = array[0].to_s+array[1].to_s+array[2].to_s+","+array[3].to_s+array[4].to_s+array[5].to_s+","+array[6].to_s+array[7].to_s+array[8].to_s+","+array[9].to_s+array[10].to_s+array[11].to_s
  when 1000000000000..9999999999999
    gold = $game_party.gold.to_s
    array = gold.split(//)
    gold = array[0].to_s+","+array[1].to_s+array[2].to_s+array[3].to_s+","+array[4].to_s+array[5].to_s+array[6].to_s+","+array[7].to_s+array[8].to_s+array[9].to_s+","+array[10].to_s+array[11].to_s+array[12].to_s
  end
#Draw Gold
self.contents.font.color = system_color
gold_word = $data_system.words.gold.to_s
cx = contents.text_size(gold_word).width
cx2=contents.text_size(gold.to_s).width
self.contents.draw_text(4, 4, 120-cx-2, 32, gold_word)
self.contents.font.color = normal_color
self.contents.draw_text(124-cx2+1, 4, cx2, 32, gold.to_s, 2)
self.contents.font.color = system_color
# Draw "Time"
@total_sec = Graphics.frame_count / Graphics.frame_rate
hour = @total_sec / 60 / 60
min = @total_sec / 60 % 60
sec = @total_sec % 60
text = sprintf("%02d:%02d:%02d", hour, min, sec)
self.contents.font.color = normal_color
self.contents.draw_text(4, -10, 120, 32, text, 2)
self.contents.font.color = system_color
self.contents.draw_text(4, -10, 120, 32, "Time")
end
#--------------------------------------------------------------------------
# Update of The count
#--------------------------------------------------------------------------
def update
super
if Graphics.frame_count / Graphics.frame_rate != @total_sec
  refresh
end
end
end

#==============================================================================
# ¡ Window_Mapname
#------------------------------------------------------------------------------
# @Draws the Map name
#==============================================================================

class Window_Mapname < Window_Base
#--------------------------------------------------------------------------
# Set up
#--------------------------------------------------------------------------
def initialize
super(0, 0, 320, 44)
self.contents = Bitmap.new(width - 52, height - 32)
self.contents.font.name = "Arial"
self.contents.font.size = 18
refresh
end
#--------------------------------------------------------------------------
# Draws info on screen
#--------------------------------------------------------------------------
def refresh
self.contents.clear

# Map Name
#map = $game_map.name
self.contents.font.color = system_color
self.contents.draw_text(4, -10, 220, 32, "Location")
self.contents.font.color = normal_color
self.contents.draw_text(80, -10, 200, 32, $game_map.name)
end
end

#==============================================================================
# ¡ Scene_Menu
#------------------------------------------------------------------------------
# FF7 menu layout as requested by AcedentProne.
#==============================================================================

class Scene_Menu
#--------------------------- edit-------------------------------
attr_reader :status_window
#/--------------------------- edit-------------------------------

def initialize(menu_index = 0)
@menu_index = menu_index
end
def main
   
   s1 = $data_system.words.item
   s2 = $data_system.words.skill
   s3 = $data_system.words.equip
   s4 = "Status"
   s5 = "Save"
   s6 = "Quit"


#--------------------------- edit-------------------------------  
# Command menu
  @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6,])
@command_window.x = 640 - @command_window.width
@command_window.y = 480
@command_window.z = 110
@command_window.index = @menu_index
#If certain options are avaliable
if $game_party.actors.size == 0
  @command_window.disable_item(0)
  @command_window.disable_item(1)
  @command_window.disable_item(2)
  @command_window.disable_item(3)
end
if $game_system.save_disabled
  @command_window.disable_item(4)
end
#Showing location window
@map = Window_Mapname.new
@map.x = 640 - @map.width
@map.y = 0 - @map.height - 1
@map.z = 110
#Showing the game stats
@game_stats_window = Window_GameStats.new
@game_stats_window.x = 0 - @game_stats_window.width
@game_stats_window.y = 480 - @map.height - @game_stats_window.height
@game_stats_window.z =110
 
#Showing the Menu Status window
@status_window = Window_MenuStatus.new
@status_window.x = 640
@status_window.y = 8
@status_window.z = 100

   
Graphics.transition
loop do
  Graphics.update
  Input.update
  update
  if $scene != self
    break
  end
end
Graphics.freeze
@command_window.dispose
@game_stats_window.dispose
@status_window.dispose
@map.dispose
end
#--------------------------------------------------------------------------
#Defining the delay
#--------------------------------------------------------------------------
def delay(seconds)
for i in 0...(seconds * 1)
  sleep 0.01
  Graphics.update
end
end
#--------------------------------------------------------------------------
# Updating
#--------------------------------------------------------------------------
def update
@command_window.update
@game_stats_window.update
@status_window.update
@map.update
#Moving Windows inplace
gamepos = 640 - @game_stats_window.width
mappos = 480 - @map.height - 1
if @command_window.y > 0
@command_window.y -= 60
end
if @game_stats_window.x < gamepos
@game_stats_window.x += 80
end
if @map.y < mappos
@map.y += 80
end
if @status_window.x > 0
  @status_window.x -= 80
end
#Saying if options are active
if @command_window.active
  update_command
  return
end
if @status_window.active
  update_status
  return
end
end
#--------------------------------------------------------------------------
# Updating the Command Selection
#--------------------------------------------------------------------------
def update_command
# If B button is pushed
if Input.trigger?(Input::B)
  # Plays assigned SE
  $game_system.se_play($data_system.cancel_se)
  #Looping for moving windows out
   loop do
    if @command_window.y < 480
     @command_window.y += 40
    end
    if @game_stats_window.x > 0 - @game_stats_window.width
     @game_stats_window.x -= 40
    end
    if @map.y > 0 - @map.height
     @map.y -= 40
    end
    if @status_window.x < 640
     @status_window.x += 40
    end
    delay(0.5)
    if @status_window.x >= 640
     break
   end
  end
 # Go to Map
$scene = Scene_Map.new
  return
end
# If C button is pused
if Input.trigger?(Input::C)
  # Checks actor size
  if $game_party.actors.size == 0 and @command_window.index < 4
    # plays SE
    $game_system.se_play($data_system.buzzer_se)
    return
  end
  case @command_window.index
  when 0  
    $game_system.se_play($data_system.decision_se)
    loop do
    if @command_window.y < 480
     @command_window.y += 40
    end
    if @game_stats_window.x > 0 - @game_stats_window.width
     @game_stats_window.x -= 40
    end
    if @map.y > 0 - @map.height
     @map.y -= 40
    end
    if @status_window.x < 640
     @status_window.x += 40
    end
    delay(0.5)
    if @status_window.x >= 640
     break
   end
  end
    $scene = Scene_Item.new
  when 1
    $game_system.se_play($data_system.decision_se)
    @command_window.active = false
    @status_window.active = true
    @status_window.index = 0
     when 2  
       $game_system.se_play($data_system.decision_se)
       @command_window.active = false
       @status_window.active = true
       @status_window.index = 0
  when 3  
    $game_system.se_play($data_system.decision_se)
    @command_window.active = false
    @status_window.active = true
    @status_window.index = 0

  when 4
    if $game_system.save_disabled
      $game_system.se_play($data_system.buzzer_se)
      return
    end
    $game_system.se_play($data_system.decision_se)
    loop do
    if @command_window.y < 480
     @command_window.y += 40
    end
    if @game_stats_window.x > 0 - @game_stats_window.width
     @game_stats_window.x -= 40
    end
    if @map.y > 0 - @map.height
     @map.y -= 40
    end
    if @status_window.x < 640
     @status_window.x += 40
    end
    delay(0.5)
    if @status_window.x >= 640
     break
   end
  end
   $scene = Scene_Save.new
         when 5
    $game_system.se_play($data_system.decision_se)
    loop do
    if @command_window.y < 480
     @command_window.y += 40
    end
    if @game_stats_window.x > 0 - @game_stats_window.width
     @game_stats_window.x -= 40
    end
    if @map.y > 0 - @map.height
     @map.y -= 40
    end
    if @status_window.x < 640
     @status_window.x += 40
    end
    delay(0.5)
    if @status_window.x >= 640
     break
   end
  end
     $scene = Scene_End.new
  return
end
end
#--------------------------------------------------------------------------
# Updating Status Screen
#--------------------------------------------------------------------------
def update_status
if Input.trigger?(Input::B)
  $game_system.se_play($data_system.cancel_se)
  @command_window.active = true
  @status_window.active = false
  @status_window.index = -1
  return
end
if Input.trigger?(Input::C)
  case @command_window.index
       when 1  # ƒXƒLƒ‹
       # ,±,̃AƒNƒ^[,̍s"®§ŒÀ,ª 2 ˆÈã,̏ꍇ
       if $game_party.actors[@status_window.index].restriction >= 2
         # ƒuƒU[ SE ,ð‰‰'t
         $game_system.se_play($data_system.buzzer_se)
         return
       end
       # Œˆ'è SE ,ð‰‰'t
       $game_system.se_play($data_system.decision_se)
       # ƒXƒLƒ‹‰æ-Ê,ɐØ,è'Ö,¦
       $scene = Scene_Skill.new(@status_window.index)
       when 2
    $game_system.se_play($data_system.decision_se)
    loop do
    if @command_window.y < 480
     @command_window.y += 40
    end
    if @game_stats_window.x > 0 - @game_stats_window.width
     @game_stats_window.x -= 40
    end
    if @map.y > 0 - @map.height
     @map.y -= 40
    end
    if @status_window.x < 640
     @status_window.x += 40
    end
    delay(0.5)
    if @status_window.x >= 640
     break
   end
  end
    $scene = Scene_Equip.new(@status_window.index)
  when 3
    $game_system.se_play($data_system.decision_se)
    loop do
    if @command_window.y < 480
     @command_window.y += 40
    end
    if @game_stats_window.x > 0 - @game_stats_window.width
     @game_stats_window.x -= 40
    end
    if @map.y > 0 - @map.height
     @map.y -= 40
    end
    if @status_window.x < 640
     @status_window.x += 40
    end
    delay(0.5)
    if @status_window.x >= 640
     break
   end
  end
    $scene = Scene_Status.new(@status_window.index)
  end
  return
end
end
end
end


As you could probably tell, I'm using a level limit breaker, which is Blizzard's unlimited Levels.

And I am using some miniature scripts, like yours for example:

VALID_ACTORS_FOR_STATS = [1] # want just one actor? do this: [1]

class Window_Base < Window
 alias draw_hp_for_one_actor draw_actor_hp
 def draw_actor_hp(actor, x, y, width = 144)
   return unless VALID_ACTORS_FOR_STATS.include?(actor.id)
   draw_hp_for_one_actor(actor, x, y, width)
 end

 alias draw_sp_for_one_actor draw_actor_sp
 def draw_actor_sp(actor, x, y, width = 144)
   return unless VALID_ACTORS_FOR_STATS.include?(actor.id)
   draw_sp_for_one_actor(actor, x, y, width)
 end
end


This script is meant to omit other characters' health and Magic.


Regarding your question about having stats displayed on a different scene, I think it might be inefficient due to the fact that the player doesn't even know what his/her stats are until they check their menu, so having to go through even more buttons might be irritating, and maybe even confuse some new players.
I saw some people having trouble finding where to equip items because they went to the item slot instead of the equipment slot.

The leveling/experiencing system is pulled from the original curvature, with some altered parameters for certain skills.

If it were possible, having an option to select the side-skill on the menu and pressing enter, which would bring up a kind-of guide which would display what the player could do at a certain level with that certain side-skill would be beneficial.

Also, having a level-up message each time a player levels up a certain skill would be nice for the player to determine when he or she has reached a goal.

(I tried doing this with one skill, and it ended up being a lot of switches which would turn on every time a player would level up, which was connected to a lot of different parallel events and would display a multitude of pictures that I drew myself, which would queue a certain animation. It came out to be 1000s of lines of code in the editor and it became hard to see because the window wasn't wide enough so the indenting eventually led me to not seeing some of the code... in the end it was just a nightmare.)

If it isn't possible though, it's okay.

Thanks for all your help by the way. It really does mean a lot to have someone help you.
Title: Re: Disable using items on other characters?
Post by: KK20 on November 05, 2013, 12:20:38 am
So this is the idea I have so far.

Comments?
Title: Re: Disable using items on other characters?
Post by: firevenge007 on November 05, 2013, 01:13:38 am
That sounds pretty nice.

How about if I decide to keep using the characters, would it be hard to grab the character X's data and use that to display the experience/skill in the new window.

The reason I would rather use the characters I already have is due to the fact that I've been in the development of this game for over 5 years now, so it would be almost a complete rewrite.



Also, to explain what the side-skills are, so you have an idea of what to place where:

-Fishing: Used to gather food, which would be eaten raw for a constant amount of health and magic restoration based on the tier of the seafood.

-Agility: Leveled up by completing courses which are essentially obstacle courses in which you just go round and around. Training agility unlocks shortcuts which saves time when crossing from one area to another without having to walk all the way around a large mountain or something like that. It is not a very useful skill, but I plan on giving it more uses soon.

-Legend: This is a dungeon exploring skill. During the game, a main dungeon is explored, which is where the player gains most of his/her levels. Though, there are 'world dungeons' which are dungeons that the player can raid that, once conquered can no longer be conquered again. Legend is useful to be able to fight higher level bosses in more difficult dungeons to potentially receive better loot.

-Farming: A passive skill. This means that you plant seeds while you train other skills. The downside of this skill is that you must be playing the game to have your plants grow. For players who want to accomplish some sort of goal, this usually means keeping the game on and racking hundreds of unnecessary game-hours, but that's not the major point. Due to the fact that it is not on the main tab because the player, fishing, agility, and legend are the 4 main characters, farming is only able to be trained in designated areas, which are isolated from the rest of the environment.

-Hunting: Same thing with farming about isolation. Hunting is a skill where a player can catch woodland creatures and considerably larger creatures like bulls and tigers later on for their pelts. With the pelts, players can craft armour which can increase chances of catching their prey.

-Building: Essentially a skill where a player builds a home. The isolation aspect of this skill works as it is meant to be in an isolated area, in the player's house. Players can use this skill to build furniture and cooking areas, (to cook which, which increases it's healing value) at lower levels, and gardens and dungeons at higher levels.

-Rogue: A skill which encourages a player to level his/her combat/main character's level. A player is given a randomly generated task from the various tasks implemented into the database, while still incorporating the player's combat and rogue level. The player is assigned to kill N amount of an X type of monster. When the player has finally killed enough monsters (the player can track his progress through an item in his/her inventory), he/she must return to the rogue master and will receive rogue experience alongside a number of rogue points which exponentially increases as the player's rogue level increases.
Rogue level is only displayed in the character menu when the player is in proximity of a rogue master, which could be quite inconvenient for those who want to check what rogue level they are during a rogue task.

-Plundering: A more story-based side-skill. Involves traveling to the a village in the Saharan desert, which potentially could make the player rich. The player teams up with some other thiefs and goes on a multitude of quests to gain loot or to gain the trust of the town's royalty just to get more loot.
Plundering is only shown when in the Saharan desert. This has restricted me from making any plundering uses outside of the Saharan village.

-Scroll-Making: This side-skill involves taking scrolls made from papyrus and infusing them with a spell at the respected obelisks. Scroll-making is meant to be for players who are keen to train magic or gain high level spells to ease transportation with new teleports, to gain more ease in combat with strengthened offensive spells, or simply to make life easier (enhancing speed, mixing multiple potions at one time...)
Scroll-Making only shows up when the player is in an obelisk realm. An obelisk realm can be accessed by little rainbows which are scattered over the world. They teleport the player to the realm, where the player can craft papyrus scrolls into spell scrolls.

-Herbalism: Uses 'special herbs' achievable only through combat at the moment, to make concoctions, which in conjunction with secondary ingredients, can make final potions which effectively boost the player's stats during combat, temporarily. Herbalism is only shown in the character slot in a single area, which makes it very confusing for people trying to level the skill as people have to constantly go back to this location to check their level.

-Holyness: This is the final skill. This skill incorporates the story/lore of the gods. Ferrous is a human who eventually rose to power with his charisma and his overwhelming support from the public and with his power, struck the two gods, 'good and evil' (not true names, but for simplicity) and banished them to another realm. These banished gods are needed for balance in the world, and without them, there is confusion and corruption spread across the world. The banished gods have found a slight rupture that gives them the ability to send messages to the realm the player is playing in.
The player cannot read all messages that the gods are sending though, and must start siphoning small messages, from which he/she learns to decipher more complex ones.
This skill serves a purpose towards the main story of the game, which is to bring down Ferrous, the corrupt leader.




By reading these, I hope you have a basic understanding of my game, and how to place these skill accordingly in the list.
Title: Re: Disable using items on other characters?
Post by: firevenge007 on November 06, 2013, 12:23:42 am
So... any updates?
Title: Re: Disable using items on other characters?
Post by: KK20 on November 06, 2013, 02:04:23 am
Patience, my friend. I've got a life outside of script requests :P Today was spent programming in Intel X86-64 for a class assignment. Wanna have a look at this hellish stuff?
Spoiler: ShowHide
Code: Intel X86-64

;Statement of Purpose:  This subprogram will calculate the approximate value of e^x. By using a Taylor Series, it will continuously
;                       loop until the next added term is less than 2^(-n).
;
;Status: First release. Any discovered bugs should be reported to the author.
;
;Assemble: nasm -f elf64 -l tscalc.lis -o tscalc.o tscalc.asm
;
;Pre-conditions:
;  - rdi holds the value of n
;  - rax holds 1
;  - xmm0 holds the value of x
;
;Post-conditions:
;  - rax holds the number of terms required for the calculation
;  - xmm0 holds the calculated value of e^x
;  - xmm1 holds the last term that was added to get e^x
;  - Remaining xmm-registers will be corrupt

;=====[ Begin ]======================================================================================================================

%include "debug.inc"                                        ;Requires debug.asm and debug.inc ; This line can be omitted

global tscalc                                               ;Makes this program callable by other programs

;=====[ Begin program instructions ]=================================================================================================

segment .data                                               ;Begin initialized data

segment .bss                                                ;Begin uninitialized data

segment .text                                               ;Begin instructions

tscalc:                                                     ;Begin execution of the program [setgetarrays]

;=====[ Back up used registers ]=====================================================================================================

align 16                                                    ;Start new data only on 16-byte boundaries

push rbp                                                    ;Save the base pointer
push rdi                                                    ;Save common parameter
push rsi                                                    ;Save common parameter
push rcx                                                    ;Save register that will store important data
push r13                                                    ;Save register that will store important data
push r14                                                    ;Save register that will store important data
push r15                                                    ;Save register that will store important data
pushf                                                       ;Back up flag registers
pushf                                                       ;

;=====[ Calculate 2^(-n) ]===========================================================================================================

neg rdi                                                     ;Makes the user's input for n to be negative
mov qword rcx, 1023                                         ;Stores bias number for calculating exponents in floats
add rdi, rcx                                                ;Real Exponent + Bias Number = Stored Exponenet
shl rdi, 52                                                 ;Shifts the stored exponent enough spaces to give us 2^(-n)

push rdi                                                    ;Store this value onto the stack to move to SSE2
movsd xmm15, [rsp]                                          ;Puts value into safe, out-of-the-way xmm-register
pop rax                                                     ;Remove the recent push onto the stack

;=====[ Initialize the rest of the xmm-registers ]===================================================================================

movsd xmm1, xmm0                                            ;Store copy of x into a temporary register
mulsd xmm1, xmm0                                            ;Calculate x^2

push qword 0                                                ;************************************************************************
movsd [rsp], xmm1                                           ;   Loads two instances of x^2 onto the stack. It will then pack these
push qword 0                                                ;   numbers into a register's high and low ends. This will be
movsd [rsp], xmm1                                           ;   crucial for incrementing the terms in the series via parallel
movupd xmm3, [rsp]                                          ;   process.
pop rax                                                     ;  
pop rax                                                     ;************************************************************************

mov rdi, 0x3ff0000000000000                                 ;Holds 1.0 to be pushed into the stack multiple times

push rdi                                                    ;************************************************************************
push qword 0                                                ;   Loads 1.0 and x onto the stack. It will pack these into a register's
movsd [rsp], xmm0                                           ;   high and low ends. These will represent the first two terms in the
movupd xmm1, [rsp]                                          ;   Taylor Series. As the program loops, these will hold the current
pop rax                                                     ;   iterations being added to e^x.
pop rax                                                     ;************************************************************************
                                                   
push qword 0                                                ;************************************************************************
push rdi                                                    ;   Loads 0 and 1.0 onto the stack. It will pack these into a register's
movupd xmm2, [rsp]                                          ;   high and low ends. These will represent the denominator for the
pop rax                                                     ;   current term in the series. It will also track the number of terms.
pop rax                                                     ;************************************************************************

push rdi                                                    ;************************************************************************
push rdi                                                    ;   Loads two instaces of 1.0 onto the stack. It will put them into a
movupd xmm4, [rsp]                                          ;   register's high and low ends. This will increment the denominators
pop rax                                                     ;   for each term in the series. Done for convention.
pop rax                                                     ;************************************************************************

push qword 0                                                ;************************************************************************
push qword 0                                                ;   This process will clear xmm0 of its values in the high and low ends.
movupd xmm0, [rsp]                                          ;   This is done because this register will hold the sums of the terms.
pop rax                                                     ;
pop rax                                                     ;************************************************************************

;------------------------------------------------------------------------------------------------------------------------------------
; This is how the XMM-registers will be used
;          high         low
;        __________ __________
; xmm15 |          |  2^(-n)  |  Constant value. Is compared with xmm5 every loop. Breaks loop if xmm5 is less than xmm15.
; . . . |          |          |
; xmm5  |          |abs(xmm1) |  Temporary register. Stores absolute value of low xmm1 here. Compares itself with xmm15.
; xmm4  |   1.0    |   1.0    |  Constant of 1. Added into xmm2 to increment the factorial in the denominator for each term.
; xmm3  |   x^2    |   x^2    |  Constant of x^2. Multiplied into xmm1 to increment numerator for two terms.
; xmm2  |    0     |   1.0    |  Current factorial number. Increases by two every loop. Low end plus one gives us number of terms.
; xmm1  |   1.0    |    x     |  Current term being added into the series.
; xmm0  |    0     |    0     |  Sums of the high and low end terms. Added together at the end of the program to get e^x.
;       -----------------------
;------------------------------------------------------------------------------------------------------------------------------------

;=====[ Perform Taylor Series calculations ]=========================================================================================

mov rdi, 0x8000000000000000                                 ;Holds -0.0 for absolute value conversions

tsLoop:                                                     ;<Begin Loop>

addpd xmm0, xmm1                                            ;Adds last terms to the sums

                                                           ;***** Get the absolute value of the last term *****

push qword 0                                                ;Reserve space on the stack to put float number into
movsd [rsp], xmm1                                           ;Puts last term calculated onto the stack
pop rax                                                     ;Put this float into rax

or  rax, rdi                                                ;Changes the left-most bit to a 1
sub rax, rdi                                                ;Changes the left-most bit to a 0

push rax                                                    ;Push number back onto the stack to be transferred into xmm-register
movsd xmm5, [rsp]                                           ;Put float number into temporary register
pop rax                                                     ;Remove recent push

                                                           ;***** Compare absolute value of the last term with 2^(-n) *****

ucomisd xmm5, xmm15                                         ;If   abs(last_term) < 2^(-n)
jb tsDone                                                   ;Then Jump to [tsDone]

                                                           ;***** Calculate next two terms in the series *****

mulpd xmm1, xmm3                                            ;Increment terms twice by multiplying x^2 to them
addpd xmm2, xmm4                                            ;Increment denominators by one...
divpd xmm1, xmm2                                            ;...and divide it with the current term
addpd xmm2, xmm4                                            ;  (Repeat this process twice because we
divpd xmm1, xmm2                                            ;    are calculating two terms at once)

jmp tsLoop                                                  ;Repeat loop [tsLoop]

;=====[ Add the two sums together ]==================================================================================================

tsDone:                                                     ;<End Loop>

push qword 0                                                ;Reserve two spaces onto the stack to put the...
push qword 0                                                ;...two sums in so that they can be added together.
movupd [rsp], xmm0                                          ;Puts both sums onto the stack
movsd xmm3, [rsp+8]                                         ;Load high end sum back into an unneeded xmm-register
addsd xmm0, xmm3                                            ;Add the high and low end sums together
pop rax                                                     ;Remove the two pushes made to the stack
pop rax                                                     ;

;=====[ Move number of terms to rax ]================================================================================================

addsd xmm2, xmm4                                            ;Increment number of terms by one (low end is odd when even is expected)
cvtsd2si rax, xmm2                                          ;Convert float number into integer

;=====[ Finish up and exit ]=========================================================================================================

popf                                                        ;Restore the flags register
popf                                                        ;Repeat since it was done twice
pop r15                                                     ;Restore the registers in order they were pushed
pop r14                                                     ;    |
pop r13                                                     ;    |
pop rcx                                                     ;    |
pop rsi                                                     ;    |
pop rdi                                                     ;    |
pop rbp                                                     ;    V

ret                                                         ;Pop return address from stack and return to caller

;====================================================================================================================================
;               E N D   O F   P R O G R A M                 [tscalc]
;====================================================================================================================================

Anyways, I'll get onto it tomorrow since I have a lot of free time.
Title: Re: Disable using items on other characters?
Post by: firevenge007 on November 06, 2013, 11:10:11 am
That's pretty interesting! I can't wait to get into coding next semester.

Also, I was wondering, is it possible to have each side-skill and the main character have a variable for their level so that all the levels can be added up and a total level can be displayed?


Thanks.
Title: Re: Disable using items on other characters?
Post by: KK20 on November 06, 2013, 11:45:13 am
Quote from: firevenge007 on November 06, 2013, 11:10:11 am
That's pretty interesting!

huhu you say that now...
I wonder if you will ever have to code in an Assembly language. I hear most schools just teach the fundamentals (e.g. calculating floats and translating them into hexadecimal). It's a pretty hard language for many people to get into--80% of the class have no idea how their programs are even working.

Working on the request right now. Whose gradient bars script are you using? I need to see how the bars will fit into the overall design I have here.

And yes, creating a variable that holds the total of the levels is easy to do. If you mean storing this number into a Game Variable, you can easily event that. Just create a Common Event with no trigger and choose a game variable that will add up all the actor's levels into it.
Title: Re: Disable using items on other characters?
Post by: firevenge007 on November 06, 2013, 03:27:25 pm
This is the script used for the colored bars:
class Game_Actor < Game_Battler
  def now_exp
    return @exp - @exp_list[@level]
  end
  def next_exp
    return @exp_list[@level+1] > 0 ? @exp_list[@level+1] - @exp_list[@level] : 0
  end
end

#==============================================================================
# ¡ Window_Base
#------------------------------------------------------------------------------
# @ƒQ[ƒ€'†,Ì,·,×,Ä,̃EƒBƒ"ƒhƒE,̃X[ƒp[ƒNƒ‰ƒX,Å,·B
#==============================================================================

class Window_Base < Window
  #--------------------------------------------------------------------------
  # œ HP ƒQ[ƒW,Ì•`‰æ
  #--------------------------------------------------------------------------
  # ƒIƒŠƒWƒiƒ‹,ÌHP•`‰æ,ð draw_actor_hp_original ,Æ-¼'O•ύX
 
  alias :draw_actor_hp_original :draw_actor_hp
  def draw_actor_hp(actor, x, y, width = 144)
    # •ϐ"rate,É Œ»Ý,ÌHP/MHP,ð'ã"ü
    if actor.maxhp != 0
      rate = actor.hp.to_f / actor.maxhp
    else
      rate = 0
    end
   
    # plus_x:XÀ•W,̈Ê'u•␳ rate_x:XÀ•W,̈Ê'u•␳(%) plus_y:YÀ•W,̈Ê'u•␳
    # plus_width:•,̕␳ rate_width:•,̕␳(%) height:c•
    # align1:•`‰æƒ^ƒCƒv1 0:¶‹l,ß 1:'†‰›'µ,¦ 2:‰E‹l,ß
    # align2:•`‰æƒ^ƒCƒv2 0:ã‹l,ß 1:'†‰›'µ,¦ 2:‰º‹l,ß
    # align3:ƒQ[ƒWƒ^ƒCƒv 0:¶‹l,ß 1:‰E‹l,ß
    plus_x = 0
    rate_x = 0
    plus_y = 25
    plus_width = 0
    rate_width = 100
    height = 10
    align1 = 1
    align2 = 2
    align3 = 0
    # ƒOƒ‰ƒf[ƒVƒ‡ƒ"Ý'è grade1:‹óƒQ[ƒW grade2:ŽÀƒQ[ƒW
    # (0:‰¡,ɃOƒ‰ƒf[ƒVƒ‡ƒ" 1:c,ɃOƒ‰ƒf[ƒVƒ‡ƒ" 2:ŽÎ,ß,ɃOƒ‰ƒf[ƒVƒ‡ƒ"(Œƒd)j
    grade1 = 1
    grade2 = 0
    # FÝ'èBcolor1:ŠO˜gCcolor2:'†˜g
    # color3:‹óƒQ[ƒWƒ_[ƒNƒJƒ‰[Ccolor4:‹óƒQ[ƒWƒ‰ƒCƒgƒJƒ‰[
    # color5:ŽÀƒQ[ƒWƒ_[ƒNƒJƒ‰[Ccolor6:ŽÀƒQ[ƒWƒ‰ƒCƒgƒJƒ‰[
    color1 = Color.new(0, 0, 0, 192)
    color2 = Color.new(255, 255, 192, 192)
    color3 = Color.new(0, 0, 0, 192)
    color4 = Color.new(64, 0, 0, 192)
    color5 = Color.new(80 - 24 * rate, 80 * rate, 14 * rate, 192)
    color6 = Color.new(240 - 72 * rate, 240 * rate, 62 * rate, 192)
    # •ϐ"sp,É•`‰æ,·,éƒQ[ƒW,Ì•,ð'ã"ü
    if actor.maxhp != 0
      hp = (width + plus_width) * actor.hp * rate_width / 100 / actor.maxhp
    else
      hp = 0
    end
    # ƒQ[ƒW,Ì•`‰æ
    gauge_rect(x + plus_x + width * rate_x / 100, y + plus_y,
                width, plus_width + width * rate_width / 100,
                height, hp, align1, align2, align3,
                color1, color2, color3, color4, color5, color6, grade1, grade2)
    # ƒIƒŠƒWƒiƒ‹,ÌHP•`‰æˆ--,ðŒÄ,яo,µ
    draw_actor_hp_original(actor, x, y, width)
  end
   
  #--------------------------------------------------------------------------
  # œ SP ƒQ[ƒW,Ì•`‰æ
  #--------------------------------------------------------------------------
  # ƒIƒŠƒWƒiƒ‹,ÌSP•`‰æ,ð draw_actor_sp_original ,Æ-¼'O•ύX
  alias :draw_actor_sp_original :draw_actor_sp
  def draw_actor_sp(actor, x, y, width = 144)
    # •ϐ"rate,É Œ»Ý,ÌSP/MSP,ð'ã"ü
    if actor.maxsp != 0
      rate = actor.sp.to_f / actor.maxsp
    else
      rate = 1
    end
    # plus_x:XÀ•W,̈Ê'u•␳ rate_x:XÀ•W,̈Ê'u•␳(%) plus_y:YÀ•W,̈Ê'u•␳
    # plus_width:•,̕␳ rate_width:•,̕␳(%) height:c•
    # align1:•`‰æƒ^ƒCƒv1 0:¶‹l,ß 1:'†‰›'µ,¦ 2:‰E‹l,ß
    # align2:•`‰æƒ^ƒCƒv2 0:ã‹l,ß 1:'†‰›'µ,¦ 2:‰º‹l,ß
    # align3:ƒQ[ƒWƒ^ƒCƒv 0:¶‹l,ß 1:‰E‹l,ß
    plus_x = 0
    rate_x = 0
    plus_y = 25
    plus_width = 0
    rate_width = 100
    height = 10
    align1 = 1
    align2 = 2
    align3 = 0
    # ƒOƒ‰ƒf[ƒVƒ‡ƒ"Ý'è grade1:‹óƒQ[ƒW grade2:ŽÀƒQ[ƒW
    # (0:‰¡,ɃOƒ‰ƒf[ƒVƒ‡ƒ" 1:c,ɃOƒ‰ƒf[ƒVƒ‡ƒ" 2:ŽÎ,ß,ɃOƒ‰ƒf[ƒVƒ‡ƒ"(Œƒd)j
    grade1 = 1
    grade2 = 0
    # FÝ'èBcolor1:ŠO˜gCcolor2:'†˜g
    # color3:‹óƒQ[ƒWƒ_[ƒNƒJƒ‰[Ccolor4:‹óƒQ[ƒWƒ‰ƒCƒgƒJƒ‰[
    # color5:ŽÀƒQ[ƒWƒ_[ƒNƒJƒ‰[Ccolor6:ŽÀƒQ[ƒWƒ‰ƒCƒgƒJƒ‰[
    color1 = Color.new(0, 0, 0, 192)
    color2 = Color.new(255, 255, 192, 192)
    color3 = Color.new(0, 0, 0, 192)
    color4 = Color.new(0, 64, 0, 192)
    color5 = Color.new(14 * rate, 80 - 24 * rate, 80 * rate, 192)
    color6 = Color.new(62 * rate, 240 - 72 * rate, 240 * rate, 192)
    # •ϐ"sp,É•`‰æ,·,éƒQ[ƒW,Ì•,ð'ã"ü
    if actor.maxsp != 0
      sp = (width + plus_width) * actor.sp * rate_width / 100 / actor.maxsp
    else
      sp = (width + plus_width) * rate_width / 100
    end
    # ƒQ[ƒW,Ì•`‰æ
    gauge_rect(x + plus_x + width * rate_x / 100, y + plus_y,
                width, plus_width + width * rate_width / 100,
                height, sp, align1, align2, align3,
                color1, color2, color3, color4, color5, color6, grade1, grade2)
    # ƒIƒŠƒWƒiƒ‹,ÌSP•`‰æˆ--,ðŒÄ,яo,µ
    draw_actor_sp_original(actor, x, y, width)
  end
  #--------------------------------------------------------------------------
  # œ EXP ƒQ[ƒW,Ì•`‰æ
  #--------------------------------------------------------------------------
  # ƒIƒŠƒWƒiƒ‹,ÌEXP•`‰æ,ð draw_actor_sp_original ,Æ-¼'O•ύX
  alias :draw_actor_exp_original :draw_actor_exp
  def draw_actor_exp(actor, x, y, width = 204)
    # •ϐ"rate,É Œ»Ý,Ìexp/nextexp,ð'ã"ü
    if actor.next_exp != 0
      rate = actor.now_exp.to_f / actor.next_exp
    else
      rate = 1
    end
    # plus_x:XÀ•W,̈Ê'u•␳ rate_x:XÀ•W,̈Ê'u•␳(%) plus_y:YÀ•W,̈Ê'u•␳
    # plus_width:•,̕␳ rate_width:•,̕␳(%) height:c•
    # align1:•`‰æƒ^ƒCƒv1 0:¶‹l,ß 1:'†‰›'µ,¦ 2:‰E‹l,ß
    # align2:•`‰æƒ^ƒCƒv2 0:ã‹l,ß 1:'†‰›'µ,¦ 2:‰º‹l,ß
    # align3:ƒQ[ƒWƒ^ƒCƒv 0:¶‹l,ß 1:‰E‹l,ß
    plus_x = 0
    rate_x = 0
    plus_y = 25
    plus_width = 0
    rate_width = 100
    height = 10
    align1 = 1
    align2 = 2
    align3 = 0
    # ƒOƒ‰ƒf[ƒVƒ‡ƒ"Ý'è grade1:‹óƒQ[ƒW grade2:ŽÀƒQ[ƒW
    # (0:‰¡,ɃOƒ‰ƒf[ƒVƒ‡ƒ" 1:c,ɃOƒ‰ƒf[ƒVƒ‡ƒ" 2:ŽÎ,ß,ɃOƒ‰ƒf[ƒVƒ‡ƒ"(Œƒd)j
    grade1 = 1
    grade2 = 0
    # FÝ'èBcolor1:ŠO˜gCcolor2:'†˜g
    # color3:‹óƒQ[ƒWƒ_[ƒNƒJƒ‰[Ccolor4:‹óƒQ[ƒWƒ‰ƒCƒgƒJƒ‰[
    # color5:ŽÀƒQ[ƒWƒ_[ƒNƒJƒ‰[Ccolor6:ŽÀƒQ[ƒWƒ‰ƒCƒgƒJƒ‰[
    color1 = Color.new(0, 0, 0, 192)
    color2 = Color.new(255, 255, 192, 192)
    color3 = Color.new(0, 0, 0, 192)
    color4 = Color.new(64, 0, 0, 192)
    color5 = Color.new(80 * rate, 80 - 80 * rate ** 2, 80 - 80 * rate, 192)
    color6 = Color.new(240 * rate, 240 - 240 * rate ** 2, 240 - 240 * rate, 192)
    # •ϐ"exp,É•`‰æ,·,éƒQ[ƒW,Ì•,ð'ã"ü
    if actor.next_exp != 0
      exp = (width + plus_width) * actor.now_exp * rate_width /
                                                          100 / actor.next_exp
    else
      exp = (width + plus_width) * rate_width / 100
    end
    # ƒQ[ƒW,Ì•`‰æ
    gauge_rect(x + plus_x + width * rate_x / 100, y + plus_y,
                width, plus_width + width * rate_width / 100,
                height, exp, align1, align2, align3,
                color1, color2, color3, color4, color5, color6, grade1, grade2)
    # ƒIƒŠƒWƒiƒ‹,ÌEXP•`‰æˆ--,ðŒÄ,яo,µ
    draw_actor_exp_original(actor, x, y)
  end
  #--------------------------------------------------------------------------
  # œ ƒQ[ƒW,Ì•`‰æ
  #--------------------------------------------------------------------------
  def gauge_rect(x, y, rect_width, width, height, gauge, align1, align2, align3,
                color1, color2, color3, color4, color5, color6, grade1, grade2)
    case align1
    when 1
      x += (rect_width - width) / 2
    when 2
      x += rect_width - width
    end
    case align2
    when 1
      y -= height / 2
    when 2
      y -= height
    end
    # ˜g•`‰æ
    self.contents.fill_rect(x, y, width, height, color1)
    self.contents.fill_rect(x + 1, y + 1, width - 2, height - 2, color2)
    if align3 == 0
      if grade1 == 2
        grade1 = 3
      end
      if grade2 == 2
        grade2 = 3
      end
    end
    if (align3 == 1 and grade1 == 0) or grade1 > 0
      color = color3
      color3 = color4
      color4 = color
    end
    if (align3 == 1 and grade2 == 0) or grade2 > 0
      color = color5
      color5 = color6
      color6 = color
    end
    # ‹óƒQ[ƒW,Ì•`‰æ
    self.contents.gradation_rect(x + 2, y + 2, width - 4, height - 4,
                                  color3, color4, grade1)
    if align3 == 1
      x += width - gauge
    end
    # ŽÀƒQ[ƒW,Ì•`‰æ
    self.contents.gradation_rect(x + 2, y + 2, gauge - 4, height - 4,
                                  color5, color6, grade2)
  end
end

#------------------------------------------------------------------------------
# @BitmapƒNƒ‰ƒX,ɐV,½,È‹@"\,ð'ljÁ,µ,Ü,·B
#==============================================================================

class Bitmap
  #--------------------------------------------------------------------------
  # œ ‹éŒ`,ðƒOƒ‰ƒf[ƒVƒ‡ƒ"•\ަ
  #     color1 : ƒXƒ^[ƒgƒJƒ‰[
  #     color2 : ƒGƒ"ƒhƒJƒ‰[
  #     align  :  0:‰¡,ɃOƒ‰ƒf[ƒVƒ‡ƒ"
  #               1:c,ɃOƒ‰ƒf[ƒVƒ‡ƒ"
  #               2:ŽÎ,ß,ɃOƒ‰ƒf[ƒVƒ‡ƒ"iŒƒd,É,Â,«'ˆÓj
  #--------------------------------------------------------------------------
  def gradation_rect(x, y, width, height, color1, color2, align = 0)
    if align == 0
      for i in x...x + width
        red   = color1.red + (color2.red - color1.red) * (i - x) / (width - 1)
        green = color1.green +
                (color2.green - color1.green) * (i - x) / (width - 1)
        blue  = color1.blue +
                (color2.blue - color1.blue) * (i - x) / (width - 1)
        alpha = color1.alpha +
                (color2.alpha - color1.alpha) * (i - x) / (width - 1)
        color = Color.new(red, green, blue, alpha)
        fill_rect(i, y, 1, height, color)
      end
    elsif align == 1
      for i in y...y + height
        red   = color1.red +
                (color2.red - color1.red) * (i - y) / (height - 1)
        green = color1.green +
                (color2.green - color1.green) * (i - y) / (height - 1)
        blue  = color1.blue +
                (color2.blue - color1.blue) * (i - y) / (height - 1)
        alpha = color1.alpha +
                (color2.alpha - color1.alpha) * (i - y) / (height - 1)
        color = Color.new(red, green, blue, alpha)
        fill_rect(x, i, width, 1, color)
      end
    elsif align == 2
      for i in x...x + width
        for j in y...y + height
          red   = color1.red + (color2.red - color1.red) *
                  ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
          green = color1.green + (color2.green - color1.green) *
                  ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
          blue  = color1.blue + (color2.blue - color1.blue) *
                  ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
          alpha = color1.alpha + (color2.alpha - color1.alpha) *
                  ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
          color = Color.new(red, green, blue, alpha)
          set_pixel(i, j, color)
        end
      end
    elsif align == 3
      for i in x...x + width
        for j in y...y + height
          red   = color1.red + (color2.red - color1.red) *
                ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
          green = color1.green + (color2.green - color1.green) *
                ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
          blue  = color1.blue + (color2.blue - color1.blue) *
                ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
          alpha = color1.alpha + (color2.alpha - color1.alpha) *
                ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
          color = Color.new(red, green, blue, alpha)
          set_pixel(i, j, color)
        end
      end
    end
  end
end


And I was thinking maybe of having some text at the bottom on the menu screen displaying the total level
Title: Re: Disable using items on other characters?
Post by: KK20 on November 07, 2013, 08:40:12 pm
Alright, I implemented a method for that. You can use a script call to get it's value. I've made a parameter for it too, allowing you to get total levels with or without the player's level.

Here's a couple pictures of what I got done so far. Just need to fix up the Menu screen I think and then you can try it for yourself.
Spoiler: ShowHide
(http://i.imgur.com/QHWfnKp.png)

As you can see it still uses the Actors in the Database.

Don't mind the test map. It was for trying out my Tilemap class rewrite. :P
Title: Re: Disable using items on other characters?
Post by: Zexion on November 07, 2013, 10:13:56 pm
Wow KK, this is so impressive I'm going to lev++ you for it haha.
Title: Re: Disable using items on other characters?
Post by: firevenge007 on November 07, 2013, 10:34:58 pm
Wow, I really appreciate all of your help. It looks fantastic as well. Leveled you up :)

Excited for the release!
Title: Re: Disable using items on other characters?
Post by: KK20 on November 08, 2013, 12:23:14 am
Haha thanks you two! :haha:
Beta version up
Spoiler: ShowHide


module SS_Config
 # Contains a list of the Actor IDs that are being used as "dummies" to keep
 # track of side-skill level and EXP. The order these numbers are listed will
 # also determine the order they are drawn on the window.
 ACTORS_REPRESENTING_SKILLS = [2,3,4,5,6,7,8,9,10,11,12]

 # Animation to be played when a side skill levels up. ID represents the
 # database ID in the 'Animations' tab.
 SS_LVLUP_ANIM = 20
 
 # Scene that the player will return to after pressing Cancel
 RETURN_SCENE = Scene_Menu.new(4)
 
 # When viewing the side-skills scene, each skill will display a small
 # description in a window. Configure what is said in each skill here.
 def self.description(skill_id)
   return case skill_id
   when 2 then "Allows you to find food near waters. A higher level improves your success rate at capturing better sealife. Captured sealife may be consumed for partial stat restoration.\n\nExperience gained from catching sealife."
   when 3 then "Whatever you want this description to be for the side skill being represented by actor ID 3. Just follow the same format as above."
   when 4 then "Also, you can create new lines by using backslash n. Like this.\nYou can use it multiple times too.\n\n\nSee?"
   else "You probably won't need an else case. After writing the descriptions for all your skills, you can delete this line."
   end
 end
 
end

#===============================================================================
# Handles all processing when viewing 'Side-Skills' from the menu
#===============================================================================
class Scene_SideSkills

 def main
   # Create windows for scene
   @skill_list_win = Window_ListOfSkills.new
   @skill_specs_win = Window_SideSkillDesc.new
   @skill_specs_win.draw_desc(SS_Config::ACTORS_REPRESENTING_SKILLS[0])
   # Execute transition
   Graphics.transition
   # Main loop
   loop do
     # Update game screen
     Graphics.update
     # Update input information
     Input.update
     # Frame update
     update
     # Abort loop if screen is changed
     if $scene != self
       break
     end
   end
   # Prepare for transition
   Graphics.freeze
   # Dispose of windows
   @skill_list_win.dispose
   @skill_specs_win.dispose
 end
 
 def update
   if Input.trigger?(Input::B)
     $game_system.se_play($data_system.cancel_se)
     $scene = SS_Config::RETURN_SCENE
     return
   end
   current_index = @skill_list_win.index
   @skill_list_win.update
   # If player has moved selection cursor up or down
   if current_index != @skill_list_win.index
     # Update the skill information needed to be displayed
     @skill_specs_win.draw_desc(SS_Config::ACTORS_REPRESENTING_SKILLS[@skill_list_win.index])
   end
 end
end
#===============================================================================
# Draws the list of side skills on the left side of the screen. Also takes care
# of the Total Skill Level window above it.
#===============================================================================
class Window_ListOfSkills < Window_Selectable
 def initialize
   super(0, 96, 240, 416-32)
   @item_max = SS_Config::ACTORS_REPRESENTING_SKILLS.size
   self.index = 0
   self.contents = Bitmap.new(240-32, 416-64)
   @skill_total_levels = Window_Base.new(0,0,240,96)
   @skill_total_levels.contents = Bitmap.new(240-32, 64)
   draw_skills
 end
 
 def draw_skills
   @skill_total_levels.contents.draw_text(0,0,208,32,"Total Skill Level", 1)
   @skill_total_levels.contents.draw_text(0,32,208,32,$game_player.total_levels(1).to_s, 1)
   index = 0
   SS_Config::ACTORS_REPRESENTING_SKILLS.each{|id|
     side_skill = $game_actors[id]
     name = side_skill.name
     self.contents.draw_text(4, index * 32, 200, 32, name)
     index += 1
   }
 end
 
 alias dispose_level_win dispose
 def dispose
   @skill_total_levels.dispose
   dispose_level_win
 end
end
#===============================================================================
# Draws the two windows on the right side of the screen. Draws level, exp, and
# the skill's description.
#===============================================================================
class Window_SideSkillDesc < Window_Base
 def initialize
   super(240, 0, 400, 140)
   self.contents = Bitmap.new(400 - 32, 140 - 32)
   @skill_description = Window_Base.new(240, 140, 400, 340)
   @skill_description.contents = Bitmap.new(400-32, 340-32)
 end
 
 def draw_desc(actor_id)
   self.contents.clear
   @skill_description.contents.clear
   return if actor_id.nil?
   side_skill = $game_actors[actor_id]
   return if side_skill.nil?
   draw_actor_graphic(side_skill,40,80)
   self.contents.draw_text(40,10,328,32,side_skill.name,1)
   draw_actor_level(side_skill,80,40)
   draw_actor_exp(side_skill,80,70)
   
   format = self.contents.slice_text(SS_Config.description(actor_id), 360)
   format.each_index{|line|
     text = format[line]
     @skill_description.contents.draw_text(4, line * 32, 400-32, 32, text)
   }
 end
 
 alias dispose_desc_window dispose
 def dispose
   @skill_description.dispose
   dispose_desc_window
 end
end
#===============================================================================
# Window that is viewed on the field. When a side skill levels up, this window
# will appear from the top of the screen.
#===============================================================================
class Window_SideSkill_Levelup < Window_Base
 def initialize
   super(180, -96, 280, 96)
   self.contents = Bitmap.new(width - 32, height - 32)
   @phase = 0
   @frame_counter = 0
   self.opacity = 180
 end
 
 def draw_skill_levelup(id)
   self.contents.clear
   return if id.nil?
   side_skill = $game_actors[id]
   return if side_skill.nil?
   draw_actor_graphic(side_skill, 32, 64)
   self.contents.draw_text(50, 0, width - 32 - 50, 32, "LEVEL UP!",1)
   self.contents.draw_text(50, 32, width - 32- 50, 32, side_skill.name + " LV " + side_skill.level.to_s,1)
   @phase = 1
   @frame_counter = 200
 end
 
 def update
   case @phase
   when 0 # Startup phase
     if !$game_temp.ss_lvlup_list.empty?
       draw_skill_levelup($game_temp.ss_lvlup_list.shift)
     end
   when 1 # Appearing
     self.y += 8 if self.y < 0
     @phase = 2 if self.y >= 0
   when 2 # Displaying window for 5 seconds
     @frame_counter -= 1
     @phase = 3 if @frame_counter == 0
   when 3 # Disappearing
     if !$game_temp.ss_lvlup_list.empty?
       @phase = 0
       return
     end
     self.y -= 8 if self.y > -96
     @phase = 0 if self.y <= -96
   end
 end
end
#===============================================================================
# Adds a new method to calculate all the side skill levels together. It will
# optionally add the player's level as well.
#===============================================================================
class Game_Player < Game_Character
 
 def total_levels(type = 0)
   total = 0
   SS_Config::ACTORS_REPRESENTING_SKILLS.each{|id|
     skill = $game_actors[id]
     total += skill.level
   }
   return (type == 0 ? total + $game_party.actors[0].level : total)
 end
 
end
#===============================================================================
# Doesn't change the EXP and Level methods much. Only checks if a side skill
# has leveled up while on Scene_Map. If so, the level up window will appear.
#===============================================================================
class Game_Actor
 alias add_exp_normally exp=
 def exp=(amt)
   cur_lv = @level
   add_exp_normally(amt)
   # If side-skill actor and level increased and currently on Scene_Map
   if SS_Config::ACTORS_REPRESENTING_SKILLS.include?(@actor_id) and cur_lv < @level and
   $scene.is_a?(Scene_Map)
     $game_player.animation_id = SS_Config::SS_LVLUP_ANIM
     $game_temp.side_skill_levelup(@actor_id)
   end
 end
 
 alias add_level_normally level=
 def level=(amt)
   cur_lv = @level
   add_level_normally(amt)
   if SS_Config::ACTORS_REPRESENTING_SKILLS.include?(@actor_id) and cur_lv < @level and
   $scene.is_a?(Scene_Map)
     $game_player.animation_id = SS_Config::SS_LVLUP_ANIM
     $game_temp.side_skill_levelup(@actor_id)
   end
 end
end
#===============================================================================
# Holds the list of skills that have leveled up to be displayed in the level
# up window.
#===============================================================================
class Game_Temp
 attr_accessor :ss_lvlup_list
 
 alias init_for_sslvlup initialize
 def initialize
   init_for_sslvlup
   @ss_lvlup_list = []
 end
 
 def side_skill_levelup(id)
   return unless SS_Config::ACTORS_REPRESENTING_SKILLS.include?(id)
   @ss_lvlup_list.push(id) unless @ss_lvlup_list.include?(id)
 end
 
end
#===============================================================================
# Initializes the level up window
#===============================================================================
class Scene_Map
 alias init_sslevelup_win_main main
 def main
   @sslevelup_window = Window_SideSkill_Levelup.new
   init_sslevelup_win_main
   @sslevelup_window.dispose
 end
 
 alias update_for_sideskills update
 def update
   @sslevelup_window.update
   update_for_sideskills
 end

end
#===============================================================================
# Blizzard's slice_text method. Slightly modified by KK20 to include a
# "new line" feature. Use "\n" in your strings to use it.
#===============================================================================
class Bitmap
 def slice_text(text, width)
   lines = text.split("\n")
   result = []
   lines.each{|text_chunk|
     words = text_chunk.split(' ')
     current_text = words.shift
     if words.empty?
       result.push((current_text == nil ? "" : current_text))
       next
     end
     words.each_index {|i|
       if self.text_size("#{current_text} #{words[i]}").width > width
         result.push(current_text)
         current_text = words[i]
       else
         current_text = "#{current_text} #{words[i]}"
       end
       result.push(current_text) if i >= words.size - 1
     }
   }
   return result
 end
end


#========================================
# firevenge007's Menu-Modification Scripts
# Editted by KK20
#========================================
class Window_Base < Window

def draw_actor_face(actor, x, y)
face = RPG::Cache.character("Faces/" + actor.character_name, actor.character_hue)
fw = face.width
fh = face.height
src_rect = Rect.new(0, 0, fw, fh)
self.contents.blt(x - fw / 23, y - fh, face, src_rect)
end
end
def draw_actor_battler_graphic(actor, x, y)
 bitmap = RPG::Cache.battler(actor.battler_name, actor.battler_hue)
 cw = bitmap.width
 ch = bitmap.height
 src_rect = Rect.new(0, 0, cw, ch)
 self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect)
end

#========================================
#¡ Game_Map
#--------------------------------------------------------------------------------
# Setting functions for the Map
#========================================
class Game_Map

def name
$map_infos[@map_id]
end
end

#========================================
#¡ Window_Title
#--------------------------------------------------------------------------------
# Setting functions for the Title
#========================================
class Scene_Title
$map_infos = load_data("Data/MapInfos.rxdata")
for key in $map_infos.keys
$map_infos[key] = $map_infos[key].name
end
end




#==============================================================================
# ¡ Window_MenuStatus
#------------------------------------------------------------------------------
#  Sets up the Choosing.
#==============================================================================

class Window_MenuStatus < Window_Selectable
#--------------------------------------------------------------------------
# Set up
#--------------------------------------------------------------------------
def initialize
 super(0, 0, 560, 454)
 self.contents = Bitmap.new(width - 32, height - 32)
 self.contents.font.name = "Arial"
 self.contents.font.size = 18
 refresh
 self.active = false
 self.index = -1
end
#--------------------------------------------------------------------------
# Drawing Info on Screen
#--------------------------------------------------------------------------
def refresh
 self.contents.clear
 @item_max = $game_party.actors.size
 for i in 0...$game_party.actors.size
   x = 94
   y = i * 110
   actor = $game_party.actors[i]
  # draw_actor_face(actor, 12, y + 90) #To get rid of the Face, put a "#" before the draw_ of this line
   draw_actor_graphic(actor, 48, y + 65) #and delete the "#" infront of draw of this line
   draw_actor_name(actor, x, y)
   draw_actor_level(actor, x + 144, y)
   draw_actor_state(actor, x + 280, y )
   draw_actor_exp(actor, x+ 144, y + 38)
   if actor.id == 1
       draw_actor_hp(actor, x + -20, y + 32)
       draw_actor_sp(actor, x + -20, y + 64)
   end
 end
end
#--------------------------------------------------------------------------
# Update of Cursor
#--------------------------------------------------------------------------
def update_cursor_rect
 if @index < 0
   self.cursor_rect.empty
 else
   self.cursor_rect.set(0, @index * 110, self.width - 32, 96)
 end
end
end

#=======================================#
# ¡Window_GameStats                                                             #
# written by AcedentProne                                                          #
#------------------------------------------------------------------------------#

class Window_GameStats < Window_Base
def initialize
super(0, 0, 160, 60)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = "Arial"
self.contents.font.size = 18
refresh
end

def refresh
self.contents.clear
#Drawing gold into separate commas by Dubealex
case $game_party.gold
  when 0..9999
    gold = $game_party.gold
  when 10000..99999
    gold = $game_party.gold.to_s
    array = gold.split(//)
    gold = array[0].to_s+array[1].to_s+","+array[2].to_s+array[3].to_s+array[4].to_s
  when 100000..999999
    gold = $game_party.gold.to_s
    array = gold.split(//)
    gold = array[0].to_s+array[1].to_s+array[2].to_s+","+array[3].to_s+array[4].to_s+array[5].to_s
  when 1000000..9999999
    gold = $game_party.gold.to_s
    array = gold.split(//)
    gold = array[0].to_s+","+array[1].to_s+array[2].to_s+array[3].to_s+","+array[4].to_s+array[5].to_s+array[6].to_s
  when 10000000..99999999
    gold = $game_party.gold.to_s
    array = gold.split(//)
    gold = array[0].to_s+array[1].to_s+","+array[2].to_s+array[3].to_s+array[4].to_s+","+array[5].to_s+array[6].to_s+array[7].to_s
  when 100000000..999999999
    gold = $game_party.gold.to_s
    array = gold.split(//)
    gold = array[0].to_s+array[1].to_s+array[2].to_s+","+array[3].to_s+array[4].to_s+array[5].to_s+","+array[6].to_s+array[7].to_s+array[8].to_s
  when 1000000000..9999999999
    gold = $game_party.gold.to_s
    array = gold.split(//)
    gold = array[0].to_s+","+array[1].to_s+array[2].to_s+array[3].to_s+","+array[4].to_s+array[5].to_s+array[6].to_s+","+array[7].to_s+array[8].to_s+array[9].to_s
  when 10000000000..99999999999
    gold = $game_party.gold.to_s
    array = gold.split(//)
    gold = array[0].to_s+array[1].to_s+","+array[2].to_s+array[3].to_s+array[4].to_s+","+array[5].to_s+array[6].to_s+array[7].to_s+","+array[8].to_s+array[9].to_s+array[10].to_s
  when 100000000000..999999999999
    gold = $game_party.gold.to_s
    array = gold.split(//)
    gold = array[0].to_s+array[1].to_s+array[2].to_s+","+array[3].to_s+array[4].to_s+array[5].to_s+","+array[6].to_s+array[7].to_s+array[8].to_s+","+array[9].to_s+array[10].to_s+array[11].to_s
  when 1000000000000..9999999999999
    gold = $game_party.gold.to_s
    array = gold.split(//)
    gold = array[0].to_s+","+array[1].to_s+array[2].to_s+array[3].to_s+","+array[4].to_s+array[5].to_s+array[6].to_s+","+array[7].to_s+array[8].to_s+array[9].to_s+","+array[10].to_s+array[11].to_s+array[12].to_s
  end
#Draw Gold
self.contents.font.color = system_color
gold_word = $data_system.words.gold.to_s
cx = contents.text_size(gold_word).width
cx2=contents.text_size(gold.to_s).width
self.contents.draw_text(4, 4, 120-cx-2, 32, gold_word)
self.contents.font.color = normal_color
self.contents.draw_text(124-cx2+1, 4, cx2, 32, gold.to_s, 2)
self.contents.font.color = system_color
# Draw "Time"
@total_sec = Graphics.frame_count / Graphics.frame_rate
hour = @total_sec / 60 / 60
min = @total_sec / 60 % 60
sec = @total_sec % 60
text = sprintf("%02d:%02d:%02d", hour, min, sec)
self.contents.font.color = normal_color
self.contents.draw_text(4, -10, 120, 32, text, 2)
self.contents.font.color = system_color
self.contents.draw_text(4, -10, 120, 32, "Time")
end
#--------------------------------------------------------------------------
# Update of The count
#--------------------------------------------------------------------------
def update
super
if Graphics.frame_count / Graphics.frame_rate != @total_sec
  refresh
end
end
end

#==============================================================================
# ¡ Window_Mapname
#------------------------------------------------------------------------------
# @Draws the Map name
#==============================================================================

class Window_Mapname < Window_Base
#--------------------------------------------------------------------------
# Set up
#--------------------------------------------------------------------------
def initialize
super(0, 0, 320, 44)
self.contents = Bitmap.new(width - 52, height - 32)
self.contents.font.name = "Arial"
self.contents.font.size = 18
refresh
end
#--------------------------------------------------------------------------
# Draws info on screen
#--------------------------------------------------------------------------
def refresh
self.contents.clear

# Map Name
#map = $game_map.name
self.contents.font.color = system_color
self.contents.draw_text(4, -10, 220, 32, "Location")
self.contents.font.color = normal_color
self.contents.draw_text(80, -10, 200, 32, $game_map.name)
end
end

#==============================================================================
# ¡ Scene_Menu
#------------------------------------------------------------------------------
# FF7 menu layout as requested by AcedentProne.
#==============================================================================

class Scene_Menu
#--------------------------- edit-------------------------------
attr_reader :status_window
#/--------------------------- edit-------------------------------

def initialize(menu_index = 0)
@menu_index = menu_index
end
def main
   
   s1 = $data_system.words.item
   s2 = $data_system.words.skill
   s3 = $data_system.words.equip
   s4 = "Status"
   s5 = "Side-Skills"
   s6 = "Save"
   s7 = "Quit"


#--------------------------- edit-------------------------------  
# Command menu
  @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7])
@command_window.x = 640 - @command_window.width
@command_window.y = 480
@command_window.z = 110
@command_window.index = @menu_index
#If certain options are avaliable
if $game_party.actors.size == 0
  @command_window.disable_item(0)
  @command_window.disable_item(1)
  @command_window.disable_item(2)
  @command_window.disable_item(3)
end
if $game_system.save_disabled
  @command_window.disable_item(5)
end
#Showing location window
@map = Window_Mapname.new
@map.x = 640 - @map.width
@map.y = 0 - @map.height - 1
@map.z = 110
#Showing the game stats
@game_stats_window = Window_GameStats.new
@game_stats_window.x = 0 - @game_stats_window.width
@game_stats_window.y = 480 - @map.height - @game_stats_window.height
@game_stats_window.z =110
 
#Showing the Menu Status window
@status_window = Window_MenuStatus.new
@status_window.x = 640
@status_window.y = 8
@status_window.z = 100

   
Graphics.transition
loop do
  Graphics.update
  Input.update
  update
  if $scene != self
    break
  end
end
Graphics.freeze
@command_window.dispose
@game_stats_window.dispose
@status_window.dispose
@map.dispose
end
#--------------------------------------------------------------------------
#Defining the delay
#--------------------------------------------------------------------------
def delay(seconds)
for i in 0...(seconds * 1)
  sleep 0.01
  Graphics.update
end
end
#--------------------------------------------------------------------------
# Updating
#--------------------------------------------------------------------------
def update
@command_window.update
@game_stats_window.update
@status_window.update
@map.update
#Moving Windows inplace
gamepos = 640 - @game_stats_window.width
mappos = 480 - @map.height - 1
if @command_window.y > 0
@command_window.y -= 60
end
if @game_stats_window.x < gamepos
@game_stats_window.x += 80
end
if @map.y < mappos
@map.y += 80
end
if @status_window.x > 0
  @status_window.x -= 80
end
#Saying if options are active
if @command_window.active
  update_command
  return
end
end
#--------------------------------------------------------------------------
# Updating the Command Selection
#--------------------------------------------------------------------------
def update_command
# If B button is pushed
if Input.trigger?(Input::B)
  # Plays assigned SE
  $game_system.se_play($data_system.cancel_se)
  #Looping for moving windows out
   loop do
    if @command_window.y < 480
     @command_window.y += 40
    end
    if @game_stats_window.x > 0 - @game_stats_window.width
     @game_stats_window.x -= 40
    end
    if @map.y > 0 - @map.height
     @map.y -= 40
    end
    if @status_window.x < 640
     @status_window.x += 40
    end
    delay(0.5)
    if @status_window.x >= 640
     break
   end
  end
 # Go to Map
$scene = Scene_Map.new
  return
end
# If C button is pused
if Input.trigger?(Input::C)
  # Checks actor size
  if $game_party.actors.size == 0 and @command_window.index < 4
    # plays SE
    $game_system.se_play($data_system.buzzer_se)
    return
  end
  case @command_window.index
  when 0  
    $scene = Scene_Item.new
  when 1
    $scene = Scene_Skill.new(0)
  when 2  
    $scene = Scene_Equip.new(0)
  when 3  
    $scene = Scene_Status.new(0)
  when 4
    $scene = Scene_SideSkills.new
  when 5
    if $game_system.save_disabled
      $game_system.se_play($data_system.buzzer_se)
      return
    end
    $scene = Scene_Save.new
 when 6
    $scene = Scene_End.new
 end
 $game_system.se_play($data_system.decision_se)
 loop do
   if @command_window.y < 480
     @command_window.y += 40
   end
   if @game_stats_window.x > 0 - @game_stats_window.width
     @game_stats_window.x -= 40
   end
   if @map.y > 0 - @map.height
     @map.y -= 40
   end
   if @status_window.x < 640
     @status_window.x += 40
   end
   delay(0.5)
   if @status_window.x >= 640
     break
   end
 end
end
end
#--------------------------------------------------------------------------
# Updating Status Screen
#--------------------------------------------------------------------------
def update_status
if Input.trigger?(Input::B)
  $game_system.se_play($data_system.cancel_se)
  @command_window.active = true
  @status_window.active = false
  @status_window.index = -1
  return
end
if Input.trigger?(Input::C)
  case @command_window.index
   when 1  # ƒXƒLƒ‹
     # ,±,̃AƒNƒ^[,̍s"®§ŒÀ,ª 2 ˆÈã,̏ꍇ
     if $game_party.actors[@status_window.index].restriction >= 2
       # ƒuƒU[ SE ,ð‰‰'t
       $game_system.se_play($data_system.buzzer_se)
       return
     end
     # Œˆ'è SE ,ð‰‰'t
     $game_system.se_play($data_system.decision_se)
     # ƒXƒLƒ‹‰æ-Ê,ɐØ,è'Ö,¦
     $scene = Scene_Skill.new(@status_window.index)
   when 2
    $game_system.se_play($data_system.decision_se)
    loop do
    if @command_window.y < 480
     @command_window.y += 40
    end
    if @game_stats_window.x > 0 - @game_stats_window.width
     @game_stats_window.x -= 40
    end
    if @map.y > 0 - @map.height
     @map.y -= 40
    end
    if @status_window.x < 640
     @status_window.x += 40
    end
    delay(0.5)
    if @status_window.x >= 640
     break
   end
  end
    $scene = Scene_Equip.new(@status_window.index)
  when 3
    $game_system.se_play($data_system.decision_se)
    loop do
    if @command_window.y < 480
     @command_window.y += 40
    end
    if @game_stats_window.x > 0 - @game_stats_window.width
     @game_stats_window.x -= 40
    end
    if @map.y > 0 - @map.height
     @map.y -= 40
    end
    if @status_window.x < 640
     @status_window.x += 40
    end
    delay(0.5)
    if @status_window.x >= 640
     break
    end
    end
    $scene = Scene_Status.new(@status_window.index)
  end
  return
end
end

end
#=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
#=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
# Modified classes by KK20 to ensure best quality of menu controls
#=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
#=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
class Scene_Save < Scene_File
 alias decision_menu_mod on_decision
 def on_decision(filename)
   decision_menu_mod(filename)
   $scene = Scene_Menu.new(5)
 end
 
 alias cancel_menu_mod on_cancel
 def on_cancel
   cancel_menu_mod
   $scene = Scene_Menu.new(5)
 end
end

class Scene_End
 alias back_to_menu_mod main
 def main
   back_to_menu_mod
   $scene = Scene_Menu.new(6) unless $scene.is_a?(Scene_Title)
 end
end

class Window_Target < Window_Selectable
 #--------------------------------------------------------------------------
 # * Object Initialization
 #--------------------------------------------------------------------------
 def initialize
   super(0, 0, 336, 120)
   self.contents = Bitmap.new(width - 32, height - 32)
   self.z += 10
   @item_max = 1
   refresh
 end
 #--------------------------------------------------------------------------
 # * Refresh
 #--------------------------------------------------------------------------
 def refresh
   self.contents.clear
   i = 0
   x = 4
   y = i * 116
   actor = $game_party.actors[i]
   draw_actor_name(actor, x, y)
   draw_actor_class(actor, x + 144, y)
   draw_actor_level(actor, x + 8, y + 32)
   draw_actor_state(actor, x + 8, y + 64)
   draw_actor_hp(actor, x + 152, y + 32)
   draw_actor_sp(actor, x + 152, y + 64)
 end
end

class Scene_Skill
 #--------------------------------------------------------------------------
 # * Frame Update (if skill window is active)
 #--------------------------------------------------------------------------
 def update_skill
   # 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(1)
     return
   end
   # If C button was pressed
   if Input.trigger?(Input::C)
     # Get currently selected data on the skill window
     @skill = @skill_window.skill
     # If unable to use
     if @skill == nil or not @actor.skill_can_use?(@skill.id)
       # Play buzzer SE
       $game_system.se_play($data_system.buzzer_se)
       return
     end
     # Play decision SE
     $game_system.se_play($data_system.decision_se)
     # If effect scope is ally
     if @skill.scope >= 3
       # Activate target window
       @skill_window.active = false
       @target_window.x = (@skill_window.index + 1) % 2 * 304
       @target_window.visible = true
       @target_window.active = true
       # Set cursor position to effect scope (single / all)
       if @skill.scope == 4 || @skill.scope == 6
         @target_window.index = -1
       elsif @skill.scope == 7
         @target_window.index = @actor_index - 10
       else
         @target_window.index = 0
       end
     # If effect scope is other than ally
     else
       # If common event ID is valid
       if @skill.common_event_id > 0
         # Common event call reservation
         $game_temp.common_event_id = @skill.common_event_id
         # Play use skill SE
         $game_system.se_play(@skill.menu_se)
         # Use up SP
         @actor.sp -= @skill.sp_cost
         # Remake each window content
         @status_window.refresh
         @skill_window.refresh
         @target_window.refresh
         # Switch to map screen
         $scene = Scene_Map.new
         return
       end
     end
     return
   end
 end
end

class Scene_Equip
 #--------------------------------------------------------------------------
 # * Frame Update (when right window is active)
 #--------------------------------------------------------------------------
 def update_right
   # 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(2)
     return
   end
   # If C button was pressed
   if Input.trigger?(Input::C)
     # If equipment is fixed
     if @actor.equip_fix?(@right_window.index)
       # Play buzzer SE
       $game_system.se_play($data_system.buzzer_se)
       return
     end
     # Play decision SE
     $game_system.se_play($data_system.decision_se)
     # Activate item window
     @right_window.active = false
     @item_window.active = true
     @item_window.index = 0
     return
   end
 end
end

class Scene_Status
 #--------------------------------------------------------------------------
 # * Frame Update
 #--------------------------------------------------------------------------
 def update
   # 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
 end
end

class Window_Base < Window
 def draw_actor_state(actor, x, y, width = 152)
   text = make_battler_state_text(actor, width, true)
   self.contents.font.color = actor.hp == 0 ? knockout_color : normal_color
   self.contents.draw_text(x, y, width, 32, text, 2)
 end
end

class Window_MenuStatus < Window_Selectable
#--------------------------------------------------------------------------
# Drawing Info on Screen
#--------------------------------------------------------------------------
def refresh
 self.contents.clear
 x = 32
 y = 144
 SS_Config::ACTORS_REPRESENTING_SKILLS.each_index{|i|
   side_skill = $game_actors[SS_Config::ACTORS_REPRESENTING_SKILLS[i]]
   draw_actor_graphic(side_skill, x + (i%2)*230, y + i * 26)
   draw_actor_level(side_skill, x + (i%2)*230, y + i * 26 - 48)
   draw_actor_exp(side_skill, x + (i%2)*230, y + i * 26 - 32, 180)
 }
 self.contents.draw_text(232, 64, 160, 32, "Total Level: ")
 self.contents.draw_text(232, 64, 160, 32, $game_player.total_levels.to_s, 2)
 actor = $game_party.actors[0]
 draw_actor_graphic(actor, 32, 65)
 draw_actor_name(actor, 74, 0)
 draw_actor_level(actor, 232, 16)
 draw_actor_state(actor, 285, 13)
 draw_actor_exp(actor, 232, 40)
 draw_actor_hp(actor, 74, 16)
 draw_actor_sp(actor, 74, 40)
end
end


The first code is everything I did from scratch. The second is your collection of scripts that modify the menu. I made some edits to it to make it look and function much nicer such as removing the "Select Actor whom you wish to view Equip" and pressing R/L to view the next/previous actor (seeing as your game only has one true actor).

Image for the curious
Spoiler: ShowHide
(http://i.imgur.com/68tfHsQ.png)
Title: Re: Disable using items on other characters?
Post by: firevenge007 on November 08, 2013, 01:14:12 am
This script is very good, no doubt about it.

I also like that you were able to fit the skills on the first menu!

Spoiler: ShowHide
(http://i.imgur.com/w9WhhS2.png)


Though, is it possible to move the text off of the pictures by moving them slightly to the right as well as squishing the experience bars slightly vertically, so that they don't interfere with the picture?

These are just aesthetic modifications, but I like it already how it is!


Edit: Also I seem to have a little problem ( I just noticed ) with some quests that require using an extra actor.

The only time I have another actor is during a battle where when you go into battle, a character is automatically added to your party, and once the battle is over, the battler is released.
It seems that the battler character only has 1 health or so because it gets killed in 1 hit, which is unfortunate.
Title: Re: Disable using items on other characters?
Post by: Blizzard on November 08, 2013, 01:56:17 am
If you are using a yellow background, I suggest that you change the font color to black. :)
Title: Re: Disable using items on other characters?
Post by: firevenge007 on November 08, 2013, 02:25:48 am
But the experience bar is black, so the black text will mend in with the black bar.
Title: Re: Disable using items on other characters?
Post by: Zexion on November 08, 2013, 04:09:50 am
Well, you might want to change the color of the menu to at least a darker shade of yellow because it causes immense eyeburn *-*
Title: Re: Disable using items on other characters?
Post by: KK20 on November 08, 2013, 02:29:06 pm
Agreeing about what is being said with the menu colors. They are a bit too bright and "obnoxious" so to speak. Are the colors red and yellow significant for anything game-wise?

Not having the pictures at my disposal made the positioning of everything a total guess. At the bottom of the menu-edits scripts, you will see this:
Spoiler: ShowHide

class Window_MenuStatus < Window_Selectable
#--------------------------------------------------------------------------
# Drawing Info on Screen
#--------------------------------------------------------------------------
def refresh
  self.contents.clear
  x = 32
  y = 144
  SS_Config::ACTORS_REPRESENTING_SKILLS.each_index{|i|
    side_skill = $game_actors[SS_Config::ACTORS_REPRESENTING_SKILLS[i]]
    draw_actor_graphic(side_skill, x + (i%2)*230, y + i * 26)
    draw_actor_level(side_skill, x + (i%2)*230, y + i * 26 - 48)
    draw_actor_exp(side_skill, x + (i%2)*230, y + i * 26 - 32, 180)
  }
  self.contents.draw_text(232, 64, 160, 32, "Total Level: ")
  self.contents.draw_text(232, 64, 160, 32, $game_player.total_levels.to_s, 2)
  actor = $game_party.actors[0]
  draw_actor_graphic(actor, 32, 65)
  draw_actor_name(actor, 74, 0)
  draw_actor_level(actor, 232, 16)
  draw_actor_state(actor, 285, 13)
  draw_actor_exp(actor, 232, 40)
  draw_actor_hp(actor, 74, 16)
  draw_actor_sp(actor, 74, 40)
end
end

To shift the exp bars to the right:

draw_actor_exp(side_skill, x + (i%2)*230, y + i * 26 - 32, 180)    # REDUCE THE NUMBER 32 TO SHIFT RIGHT

I don't know what you mean by squishing the bars vertically. Do you mean moving the bars so that they're more compact with each other or adjusting the graphical height of each bar?

By the way, I noticed in your screenshot, the EXP bars of the side skills are longer (default size) than what I made them (take a look at my screenshot with the scripts posted).
Title: Re: Disable using items on other characters?
Post by: firevenge007 on November 08, 2013, 03:40:44 pm
I meant to say squish horizontally, because it was taking up too much space, I can't get it to move right as well.

Also, how am I meant to move the "Lv" text off of the graphic?
Title: Re: Disable using items on other characters?
Post by: KK20 on November 08, 2013, 03:51:25 pm
Quote from: firevenge007 on November 08, 2013, 03:40:44 pm
I meant to say squish horizontally, because it was taking up too much space,

That's weird. Was that screenshot taken when you inserted the script for the first time? If so, I don't see how the EXP bars could have changed width.

draw_actor_exp(side_skill, x + (i%2)*230, y + i * 26 - 32, 180)

The 180 determines the width of the EXP bar. If you remove it, it will default to a width of 204 (I think that's what the Gauge script said). Did you accidentally remove the 180? If not, I don't get how you are getting those results.

Quote from: firevenge007 on November 08, 2013, 03:40:44 pm
I can't get it to move right as well.

Quote from: KK20 on November 08, 2013, 02:29:06 pm
To shift the exp bars to the right:

draw_actor_exp(side_skill, x + (i%2)*230, y + i * 26 - 32, 180)    # REDUCE THE NUMBER 32 TO SHIFT RIGHT


Did you even reduce the 32 in the script?

Quote from: firevenge007 on November 08, 2013, 03:40:44 pm
Also, how am I meant to move the "Lv" text off of the graphic?

If you change the 230 in this line to something higher

draw_actor_level(side_skill, x + (i%2)*230, y + i * 26 - 48)
Title: Re: Disable using items on other characters?
Post by: firevenge007 on November 08, 2013, 04:03:56 pm
I was able to get the "Lv" text off of the graphic, but yes, I did mess around with everything, including the 180, the -32, etc, but to no avail.
Title: Re: Disable using items on other characters?
Post by: KK20 on November 08, 2013, 04:20:21 pm
I'm at a loss. I can move and change my EXP bars easily. Only thing I can think of left is script conflicts.

Either give me a list of all the scripts you have in order as they appear in the database or give me a copy of your Scripts.rxdata file in the projects Data folder.
Title: Re: Disable using items on other characters?
Post by: firevenge007 on November 08, 2013, 04:29:22 pm
I don't think any other scripts has anything to do with it.

draw_actor_exp(side_skill, x + (i%2)*260, y + i * 26 - 32, 180)

Anything I do to change it will only move it vertically. I cannot find a way to make this move be moved/squished horizontally. Even changing the 180 doesn't do anything.
Title: Re: Disable using items on other characters?
Post by: KK20 on November 08, 2013, 04:31:43 pm
Then I can't help you any further. As I said, it all checks out fine on my end. You have to give me something in your project, either a demo or the scripts.
Title: Re: Disable using items on other characters?
Post by: firevenge007 on November 08, 2013, 05:02:52 pm
Spoiler: ShowHide
class Scene_Battle
 #--------------------------------------------------------------------------
 # * Frame Update
 #--------------------------------------------------------------------------
 def update
   # If battle event is running
   if $game_system.battle_interpreter.running?
     # Update interpreter
     $game_system.battle_interpreter.update
     # If a battler which is forcing actions doesn't exist
     if $game_temp.forcing_battler == nil
       # If battle event has finished running
       unless $game_system.battle_interpreter.running?
         # Rerun battle event set up if battle continues
         unless judge
           setup_battle_event
         end
       end
       # If not after battle phase
       if @phase != 5
         # Refresh status window
         @status_window.refresh
       end
     end
   end
   # Update system (timer) and screen
   $game_system.update
   $game_screen.update
   # If timer has reached 0
   # Update windows
   @help_window.update
   @party_command_window.update
   @actor_command_window.update
   @status_window.update
   @message_window.update
   # Update sprite set
   @spriteset.update
   # If transition is processing
   if $game_temp.transition_processing
     # Clear transition processing flag
     $game_temp.transition_processing = false
     # Execute transition
     if $game_temp.transition_name == ""
       Graphics.transition(20)
     else
       Graphics.transition(40, "Graphics/Transitions/" +
         $game_temp.transition_name)
     end
   end
   # If message window is showing
   if $game_temp.message_window_showing
     return
   end
   # If effect is showing
   if @spriteset.effect?
     return
   end
   # If game over
   if $game_temp.gameover
     # Switch to game over screen
     $scene = Scene_Gameover.new
     return
   end
   # If returning to title screen
   if $game_temp.to_title
     # Switch to title screen
     $scene = Scene_Title.new
     return
   end
   # If battle is aborted
   if $game_temp.battle_abort
     # Return to BGM used before battle started
     $game_system.bgm_play($game_temp.map_bgm)
     # Battle ends
     battle_end(1)
     return
   end
   # If waiting
   if @wait_count > 0
     # Decrease wait count
     @wait_count -= 1
     return
   end
   # If battler forcing an action doesn't exist,
   # and battle event is running
   if $game_temp.forcing_battler == nil and
      $game_system.battle_interpreter.running?
     return
   end
   # Branch according to phase
   case @phase
   when 1  # pre-battle phase
     update_phase1
   when 2  # party command phase
     update_phase2
   when 3  # actor command phase
     update_phase3
   when 4  # main phase
     update_phase4
   when 5  # after battle phase
     update_phase5
   end
 end
end


class Window_Base < Window
 def draw_actor_exp(actor, x, y)
   self.contents.font.color = system_color
   self.contents.draw_text(x, y, 24, 32, "E")
   self.contents.font.color = normal_color
   if actor.exp_list[actor.level+1] > 0
     self.contents.draw_text(x + 24, y, 84, 32, actor.exp_s, 2)
     self.contents.draw_text(x + 108, y, 12, 32, "/", 1)
     self.contents.draw_text(x + 120, y, 84, 32, actor.next_exp_s)
   else
     self.contents.draw_text(x + 24, y, 84, 32, actor.exp_s, 2)
   end
 end
end

class Game_Actor < Game_Battler
 attr_reader   :exp_list
 def exp_s
   return @exp.to_s
 end
end


class Game_Actor < Game_Battler
 def now_exp
   return @exp - @exp_list[@level]
 end
 def next_exp
   return @exp_list[@level+1] > 0 ? @exp_list[@level+1] - @exp_list[@level] : 0
 end
end

#==============================================================================
# ¡ Window_Base
#------------------------------------------------------------------------------
# @ƒQ[ƒ€'†,Ì,·,×,Ä,̃EƒBƒ"ƒhƒE,̃X[ƒp[ƒNƒ‰ƒX,Å,·B
#==============================================================================

class Window_Base < Window
 #--------------------------------------------------------------------------
 # œ HP ƒQ[ƒW,Ì•`‰æ
 #--------------------------------------------------------------------------
 # ƒIƒŠƒWƒiƒ‹,ÌHP•`‰æ,ð draw_actor_hp_original ,Æ-¼'O•ύX
 
 alias :draw_actor_hp_original :draw_actor_hp
 def draw_actor_hp(actor, x, y, width = 144)
   # •ϐ"rate,É Œ»Ý,ÌHP/MHP,ð'ã"ü
   if actor.maxhp != 0
     rate = actor.hp.to_f / actor.maxhp
   else
     rate = 0
   end
   
   # plus_x:XÀ•W,̈Ê'u•␳ rate_x:XÀ•W,̈Ê'u•␳(%) plus_y:YÀ•W,̈Ê'u•␳
   # plus_width:•,̕␳ rate_width:•,̕␳(%) height:c•
   # align1:•`‰æƒ^ƒCƒv1 0:¶‹l,ß 1:'†‰›'µ,¦ 2:‰E‹l,ß
   # align2:•`‰æƒ^ƒCƒv2 0:ã‹l,ß 1:'†‰›'µ,¦ 2:‰º‹l,ß
   # align3:ƒQ[ƒWƒ^ƒCƒv 0:¶‹l,ß 1:‰E‹l,ß
   plus_x = 0
   rate_x = 0
   plus_y = 25
   plus_width = 0
   rate_width = 100
   height = 10
   align1 = 1
   align2 = 2
   align3 = 0
   # ƒOƒ‰ƒf[ƒVƒ‡ƒ"Ý'è grade1:‹óƒQ[ƒW grade2:ŽÀƒQ[ƒW
   # (0:‰¡,ɃOƒ‰ƒf[ƒVƒ‡ƒ" 1:c,ɃOƒ‰ƒf[ƒVƒ‡ƒ" 2:ŽÎ,ß,ɃOƒ‰ƒf[ƒVƒ‡ƒ"(Œƒd)j
   grade1 = 1
   grade2 = 0
   # FÝ'èBcolor1:ŠO˜gCcolor2:'†˜g
   # color3:‹óƒQ[ƒWƒ_[ƒNƒJƒ‰[Ccolor4:‹óƒQ[ƒWƒ‰ƒCƒgƒJƒ‰[
   # color5:ŽÀƒQ[ƒWƒ_[ƒNƒJƒ‰[Ccolor6:ŽÀƒQ[ƒWƒ‰ƒCƒgƒJƒ‰[
   color1 = Color.new(0, 0, 0, 192)
   color2 = Color.new(255, 255, 192, 192)
   color3 = Color.new(0, 0, 0, 192)
   color4 = Color.new(64, 0, 0, 192)
   color5 = Color.new(80 - 24 * rate, 80 * rate, 14 * rate, 192)
   color6 = Color.new(240 - 72 * rate, 240 * rate, 62 * rate, 192)
   # •ϐ"sp,É•`‰æ,·,éƒQ[ƒW,Ì•,ð'ã"ü
   if actor.maxhp != 0
     hp = (width + plus_width) * actor.hp * rate_width / 100 / actor.maxhp
   else
     hp = 0
   end
   # ƒQ[ƒW,Ì•`‰æ
   gauge_rect(x + plus_x + width * rate_x / 100, y + plus_y,
               width, plus_width + width * rate_width / 100,
               height, hp, align1, align2, align3,
               color1, color2, color3, color4, color5, color6, grade1, grade2)
   # ƒIƒŠƒWƒiƒ‹,ÌHP•`‰æˆ--,ðŒÄ,яo,µ
   draw_actor_hp_original(actor, x, y, width)
 end
   
 #--------------------------------------------------------------------------
 # œ SP ƒQ[ƒW,Ì•`‰æ
 #--------------------------------------------------------------------------
 # ƒIƒŠƒWƒiƒ‹,ÌSP•`‰æ,ð draw_actor_sp_original ,Æ-¼'O•ύX
 alias :draw_actor_sp_original :draw_actor_sp
 def draw_actor_sp(actor, x, y, width = 144)
   # •ϐ"rate,É Œ»Ý,ÌSP/MSP,ð'ã"ü
   if actor.maxsp != 0
     rate = actor.sp.to_f / actor.maxsp
   else
     rate = 1
   end
   # plus_x:XÀ•W,̈Ê'u•␳ rate_x:XÀ•W,̈Ê'u•␳(%) plus_y:YÀ•W,̈Ê'u•␳
   # plus_width:•,̕␳ rate_width:•,̕␳(%) height:c•
   # align1:•`‰æƒ^ƒCƒv1 0:¶‹l,ß 1:'†‰›'µ,¦ 2:‰E‹l,ß
   # align2:•`‰æƒ^ƒCƒv2 0:ã‹l,ß 1:'†‰›'µ,¦ 2:‰º‹l,ß
   # align3:ƒQ[ƒWƒ^ƒCƒv 0:¶‹l,ß 1:‰E‹l,ß
   plus_x = 0
   rate_x = 0
   plus_y = 25
   plus_width = 0
   rate_width = 100
   height = 10
   align1 = 1
   align2 = 2
   align3 = 0
   # ƒOƒ‰ƒf[ƒVƒ‡ƒ"Ý'è grade1:‹óƒQ[ƒW grade2:ŽÀƒQ[ƒW
   # (0:‰¡,ɃOƒ‰ƒf[ƒVƒ‡ƒ" 1:c,ɃOƒ‰ƒf[ƒVƒ‡ƒ" 2:ŽÎ,ß,ɃOƒ‰ƒf[ƒVƒ‡ƒ"(Œƒd)j
   grade1 = 1
   grade2 = 0
   # FÝ'èBcolor1:ŠO˜gCcolor2:'†˜g
   # color3:‹óƒQ[ƒWƒ_[ƒNƒJƒ‰[Ccolor4:‹óƒQ[ƒWƒ‰ƒCƒgƒJƒ‰[
   # color5:ŽÀƒQ[ƒWƒ_[ƒNƒJƒ‰[Ccolor6:ŽÀƒQ[ƒWƒ‰ƒCƒgƒJƒ‰[
   color1 = Color.new(0, 0, 0, 192)
   color2 = Color.new(255, 255, 192, 192)
   color3 = Color.new(0, 0, 0, 192)
   color4 = Color.new(0, 64, 0, 192)
   color5 = Color.new(14 * rate, 80 - 24 * rate, 80 * rate, 192)
   color6 = Color.new(62 * rate, 240 - 72 * rate, 240 * rate, 192)
   # •ϐ"sp,É•`‰æ,·,éƒQ[ƒW,Ì•,ð'ã"ü
   if actor.maxsp != 0
     sp = (width + plus_width) * actor.sp * rate_width / 100 / actor.maxsp
   else
     sp = (width + plus_width) * rate_width / 100
   end
   # ƒQ[ƒW,Ì•`‰æ
   gauge_rect(x + plus_x + width * rate_x / 100, y + plus_y,
               width, plus_width + width * rate_width / 100,
               height, sp, align1, align2, align3,
               color1, color2, color3, color4, color5, color6, grade1, grade2)
   # ƒIƒŠƒWƒiƒ‹,ÌSP•`‰æˆ--,ðŒÄ,яo,µ
   draw_actor_sp_original(actor, x, y, width)
 end
 #--------------------------------------------------------------------------
 # œ EXP ƒQ[ƒW,Ì•`‰æ
 #--------------------------------------------------------------------------
 # ƒIƒŠƒWƒiƒ‹,ÌEXP•`‰æ,ð draw_actor_sp_original ,Æ-¼'O•ύX
 alias :draw_actor_exp_original :draw_actor_exp
 def draw_actor_exp(actor, x, y, width = 204)
   # •ϐ"rate,É Œ»Ý,Ìexp/nextexp,ð'ã"ü
   if actor.next_exp != 0
     rate = actor.now_exp.to_f / actor.next_exp
   else
     rate = 1
   end
   # plus_x:XÀ•W,̈Ê'u•␳ rate_x:XÀ•W,̈Ê'u•␳(%) plus_y:YÀ•W,̈Ê'u•␳
   # plus_width:•,̕␳ rate_width:•,̕␳(%) height:c•
   # align1:•`‰æƒ^ƒCƒv1 0:¶‹l,ß 1:'†‰›'µ,¦ 2:‰E‹l,ß
   # align2:•`‰æƒ^ƒCƒv2 0:ã‹l,ß 1:'†‰›'µ,¦ 2:‰º‹l,ß
   # align3:ƒQ[ƒWƒ^ƒCƒv 0:¶‹l,ß 1:‰E‹l,ß
   plus_x = 0
   rate_x = 0
   plus_y = 25
   plus_width = 0
   rate_width = 100
   height = 10
   align1 = 1
   align2 = 2
   align3 = 0
   # ƒOƒ‰ƒf[ƒVƒ‡ƒ"Ý'è grade1:‹óƒQ[ƒW grade2:ŽÀƒQ[ƒW
   # (0:‰¡,ɃOƒ‰ƒf[ƒVƒ‡ƒ" 1:c,ɃOƒ‰ƒf[ƒVƒ‡ƒ" 2:ŽÎ,ß,ɃOƒ‰ƒf[ƒVƒ‡ƒ"(Œƒd)j
   grade1 = 1
   grade2 = 0
   # FÝ'èBcolor1:ŠO˜gCcolor2:'†˜g
   # color3:‹óƒQ[ƒWƒ_[ƒNƒJƒ‰[Ccolor4:‹óƒQ[ƒWƒ‰ƒCƒgƒJƒ‰[
   # color5:ŽÀƒQ[ƒWƒ_[ƒNƒJƒ‰[Ccolor6:ŽÀƒQ[ƒWƒ‰ƒCƒgƒJƒ‰[
   color1 = Color.new(0, 0, 0, 192)
   color2 = Color.new(255, 255, 192, 192)
   color3 = Color.new(0, 0, 0, 192)
   color4 = Color.new(64, 0, 0, 192)
   color5 = Color.new(80 * rate, 80 - 80 * rate ** 2, 80 - 80 * rate, 192)
   color6 = Color.new(240 * rate, 240 - 240 * rate ** 2, 240 - 240 * rate, 192)
   # •ϐ"exp,É•`‰æ,·,éƒQ[ƒW,Ì•,ð'ã"ü
   if actor.next_exp != 0
     exp = (width + plus_width) * actor.now_exp * rate_width /
                                                         100 / actor.next_exp
   else
     exp = (width + plus_width) * rate_width / 100
   end
   # ƒQ[ƒW,Ì•`‰æ
   gauge_rect(x + plus_x + width * rate_x / 100, y + plus_y,
               width, plus_width + width * rate_width / 100,
               height, exp, align1, align2, align3,
               color1, color2, color3, color4, color5, color6, grade1, grade2)
   # ƒIƒŠƒWƒiƒ‹,ÌEXP•`‰æˆ--,ðŒÄ,яo,µ
   draw_actor_exp_original(actor, x, y)
 end
 #--------------------------------------------------------------------------
 # œ ƒQ[ƒW,Ì•`‰æ
 #--------------------------------------------------------------------------
 def gauge_rect(x, y, rect_width, width, height, gauge, align1, align2, align3,
               color1, color2, color3, color4, color5, color6, grade1, grade2)
   case align1
   when 1
     x += (rect_width - width) / 2
   when 2
     x += rect_width - width
   end
   case align2
   when 1
     y -= height / 2
   when 2
     y -= height
   end
   # ˜g•`‰æ
   self.contents.fill_rect(x, y, width, height, color1)
   self.contents.fill_rect(x + 1, y + 1, width - 2, height - 2, color2)
   if align3 == 0
     if grade1 == 2
       grade1 = 3
     end
     if grade2 == 2
       grade2 = 3
     end
   end
   if (align3 == 1 and grade1 == 0) or grade1 > 0
     color = color3
     color3 = color4
     color4 = color
   end
   if (align3 == 1 and grade2 == 0) or grade2 > 0
     color = color5
     color5 = color6
     color6 = color
   end
   # ‹óƒQ[ƒW,Ì•`‰æ
   self.contents.gradation_rect(x + 2, y + 2, width - 4, height - 4,
                                 color3, color4, grade1)
   if align3 == 1
     x += width - gauge
   end
   # ŽÀƒQ[ƒW,Ì•`‰æ
   self.contents.gradation_rect(x + 2, y + 2, gauge - 4, height - 4,
                                 color5, color6, grade2)
 end
end

#------------------------------------------------------------------------------
# @BitmapƒNƒ‰ƒX,ɐV,½,È‹@"\,ð'ljÁ,µ,Ü,·B
#==============================================================================

class Bitmap
 #--------------------------------------------------------------------------
 # œ ‹éŒ`,ðƒOƒ‰ƒf[ƒVƒ‡ƒ"•\ަ
 #     color1 : ƒXƒ^[ƒgƒJƒ‰[
 #     color2 : ƒGƒ"ƒhƒJƒ‰[
 #     align  :  0:‰¡,ɃOƒ‰ƒf[ƒVƒ‡ƒ"
 #               1:c,ɃOƒ‰ƒf[ƒVƒ‡ƒ"
 #               2:ŽÎ,ß,ɃOƒ‰ƒf[ƒVƒ‡ƒ"iŒƒd,É,Â,«'ˆÓj
 #--------------------------------------------------------------------------
 def gradation_rect(x, y, width, height, color1, color2, align = 0)
   if align == 0
     for i in x...x + width
       red   = color1.red + (color2.red - color1.red) * (i - x) / (width - 1)
       green = color1.green +
               (color2.green - color1.green) * (i - x) / (width - 1)
       blue  = color1.blue +
               (color2.blue - color1.blue) * (i - x) / (width - 1)
       alpha = color1.alpha +
               (color2.alpha - color1.alpha) * (i - x) / (width - 1)
       color = Color.new(red, green, blue, alpha)
       fill_rect(i, y, 1, height, color)
     end
   elsif align == 1
     for i in y...y + height
       red   = color1.red +
               (color2.red - color1.red) * (i - y) / (height - 1)
       green = color1.green +
               (color2.green - color1.green) * (i - y) / (height - 1)
       blue  = color1.blue +
               (color2.blue - color1.blue) * (i - y) / (height - 1)
       alpha = color1.alpha +
               (color2.alpha - color1.alpha) * (i - y) / (height - 1)
       color = Color.new(red, green, blue, alpha)
       fill_rect(x, i, width, 1, color)
     end
   elsif align == 2
     for i in x...x + width
       for j in y...y + height
         red   = color1.red + (color2.red - color1.red) *
                 ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
         green = color1.green + (color2.green - color1.green) *
                 ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
         blue  = color1.blue + (color2.blue - color1.blue) *
                 ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
         alpha = color1.alpha + (color2.alpha - color1.alpha) *
                 ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
         color = Color.new(red, green, blue, alpha)
         set_pixel(i, j, color)
       end
     end
   elsif align == 3
     for i in x...x + width
       for j in y...y + height
         red   = color1.red + (color2.red - color1.red) *
               ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
         green = color1.green + (color2.green - color1.green) *
               ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
         blue  = color1.blue + (color2.blue - color1.blue) *
               ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
         alpha = color1.alpha + (color2.alpha - color1.alpha) *
               ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
         color = Color.new(red, green, blue, alpha)
         set_pixel(i, j, color)
       end
     end
   end
 end
end


class Window_Base < Window

def draw_actor_face(actor, x, y)
face = RPG::Cache.character("Faces/" + actor.character_name, actor.character_hue)
fw = face.width
fh = face.height
src_rect = Rect.new(0, 0, fw, fh)
self.contents.blt(x - fw / 23, y - fh, face, src_rect)
end
end
def draw_actor_battler_graphic(actor, x, y)
 bitmap = RPG::Cache.battler(actor.battler_name, actor.battler_hue)
 cw = bitmap.width
 ch = bitmap.height
 src_rect = Rect.new(0, 0, cw, ch)
 self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect)
end

#========================================
#¡ Game_Map
#--------------------------------------------------------------------------------
# Setting functions for the Map
#========================================
class Game_Map

def name
$map_infos[@map_id]
end
end

#========================================
#¡ Window_Title
#--------------------------------------------------------------------------------
# Setting functions for the Title
#========================================
class Scene_Title
$map_infos = load_data("Data/MapInfos.rxdata")
for key in $map_infos.keys
$map_infos[key] = $map_infos[key].name
end
end




#==============================================================================
# ¡ Window_MenuStatus
#------------------------------------------------------------------------------
#  Sets up the Choosing.
#==============================================================================

class Window_MenuStatus < Window_Selectable
#--------------------------------------------------------------------------
# Set up
#--------------------------------------------------------------------------
def initialize
 super(0, 0, 560, 454)
 self.contents = Bitmap.new(width - 32, height - 32)
 self.contents.font.name = "Arial"
 self.contents.font.size = 18
 refresh
 self.active = false
 self.index = -1
end
#--------------------------------------------------------------------------
# Drawing Info on Screen
#--------------------------------------------------------------------------
def refresh
 self.contents.clear
 @item_max = $game_party.actors.size
 for i in 0...$game_party.actors.size
   x = 94
   y = i * 110
   actor = $game_party.actors[i]
  # draw_actor_face(actor, 12, y + 90) #To get rid of the Face, put a "#" before the draw_ of this line
   draw_actor_graphic(actor, 48, y + 65) #and delete the "#" infront of draw of this line
   draw_actor_name(actor, x, y)
   draw_actor_level(actor, x + 144, y)
   draw_actor_state(actor, x + 280, y )
   draw_actor_exp(actor, x+ 144, y + 38)
   if actor.id == 1
       draw_actor_hp(actor, x + -20, y + 32)
       draw_actor_sp(actor, x + -20, y + 64)
   end
 end
end
#--------------------------------------------------------------------------
# Update of Cursor
#--------------------------------------------------------------------------
def update_cursor_rect
 if @index < 0
   self.cursor_rect.empty
 else
   self.cursor_rect.set(0, @index * 110, self.width - 32, 96)
 end
end
end

#=======================================#
# ¡Window_GameStats                                                             #
# written by AcedentProne                                                          #
#------------------------------------------------------------------------------#

class Window_GameStats < Window_Base
def initialize
super(0, 0, 160, 60)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = "Arial"
self.contents.font.size = 18
refresh
end

def refresh
self.contents.clear
#Drawing gold into separate commas by Dubealex
case $game_party.gold
  when 0..9999
    gold = $game_party.gold
  when 10000..99999
    gold = $game_party.gold.to_s
    array = gold.split(//)
    gold = array[0].to_s+array[1].to_s+","+array[2].to_s+array[3].to_s+array[4].to_s
  when 100000..999999
    gold = $game_party.gold.to_s
    array = gold.split(//)
    gold = array[0].to_s+array[1].to_s+array[2].to_s+","+array[3].to_s+array[4].to_s+array[5].to_s
  when 1000000..9999999
    gold = $game_party.gold.to_s
    array = gold.split(//)
    gold = array[0].to_s+","+array[1].to_s+array[2].to_s+array[3].to_s+","+array[4].to_s+array[5].to_s+array[6].to_s
  when 10000000..99999999
    gold = $game_party.gold.to_s
    array = gold.split(//)
    gold = array[0].to_s+array[1].to_s+","+array[2].to_s+array[3].to_s+array[4].to_s+","+array[5].to_s+array[6].to_s+array[7].to_s
  when 100000000..999999999
    gold = $game_party.gold.to_s
    array = gold.split(//)
    gold = array[0].to_s+array[1].to_s+array[2].to_s+","+array[3].to_s+array[4].to_s+array[5].to_s+","+array[6].to_s+array[7].to_s+array[8].to_s
  when 1000000000..9999999999
    gold = $game_party.gold.to_s
    array = gold.split(//)
    gold = array[0].to_s+","+array[1].to_s+array[2].to_s+array[3].to_s+","+array[4].to_s+array[5].to_s+array[6].to_s+","+array[7].to_s+array[8].to_s+array[9].to_s
  when 10000000000..99999999999
    gold = $game_party.gold.to_s
    array = gold.split(//)
    gold = array[0].to_s+array[1].to_s+","+array[2].to_s+array[3].to_s+array[4].to_s+","+array[5].to_s+array[6].to_s+array[7].to_s+","+array[8].to_s+array[9].to_s+array[10].to_s
  when 100000000000..999999999999
    gold = $game_party.gold.to_s
    array = gold.split(//)
    gold = array[0].to_s+array[1].to_s+array[2].to_s+","+array[3].to_s+array[4].to_s+array[5].to_s+","+array[6].to_s+array[7].to_s+array[8].to_s+","+array[9].to_s+array[10].to_s+array[11].to_s
  when 1000000000000..9999999999999
    gold = $game_party.gold.to_s
    array = gold.split(//)
    gold = array[0].to_s+","+array[1].to_s+array[2].to_s+array[3].to_s+","+array[4].to_s+array[5].to_s+array[6].to_s+","+array[7].to_s+array[8].to_s+array[9].to_s+","+array[10].to_s+array[11].to_s+array[12].to_s
  end
#Draw Gold
self.contents.font.color = system_color
gold_word = $data_system.words.gold.to_s
cx = contents.text_size(gold_word).width
cx2=contents.text_size(gold.to_s).width
self.contents.draw_text(4, 4, 120-cx-2, 32, gold_word)
self.contents.font.color = normal_color
self.contents.draw_text(124-cx2+1, 4, cx2, 32, gold.to_s, 2)
self.contents.font.color = system_color
# Draw "Time"
@total_sec = Graphics.frame_count / Graphics.frame_rate
hour = @total_sec / 60 / 60
min = @total_sec / 60 % 60
sec = @total_sec % 60
text = sprintf("%02d:%02d:%02d", hour, min, sec)
self.contents.font.color = normal_color
self.contents.draw_text(4, -10, 120, 32, text, 2)
self.contents.font.color = system_color
self.contents.draw_text(4, -10, 120, 32, "Time")
end
#--------------------------------------------------------------------------
# Update of The count
#--------------------------------------------------------------------------
def update
super
if Graphics.frame_count / Graphics.frame_rate != @total_sec
  refresh
end
end
end

#==============================================================================
# ¡ Window_Mapname
#------------------------------------------------------------------------------
# @Draws the Map name
#==============================================================================

class Window_Mapname < Window_Base
#--------------------------------------------------------------------------
# Set up
#--------------------------------------------------------------------------
def initialize
super(0, 0, 320, 44)
self.contents = Bitmap.new(width - 52, height - 32)
self.contents.font.name = "Arial"
self.contents.font.size = 18
refresh
end
#--------------------------------------------------------------------------
# Draws info on screen
#--------------------------------------------------------------------------
def refresh
self.contents.clear

# Map Name
#map = $game_map.name
self.contents.font.color = system_color
self.contents.draw_text(4, -10, 220, 32, "Location")
self.contents.font.color = normal_color
self.contents.draw_text(80, -10, 200, 32, $game_map.name)
end
end

#==============================================================================
# ¡ Scene_Menu
#------------------------------------------------------------------------------
# FF7 menu layout as requested by AcedentProne.
#==============================================================================

class Scene_Menu
#--------------------------- edit-------------------------------
attr_reader :status_window
#/--------------------------- edit-------------------------------

def initialize(menu_index = 0)
@menu_index = menu_index
end
def main
   
   s1 = $data_system.words.item
   s2 = $data_system.words.skill
   s3 = $data_system.words.equip
   s4 = "Status"
   s5 = "Save"
   s6 = "Quit"


#--------------------------- edit-------------------------------  
# Command menu
  @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6,])
@command_window.x = 640 - @command_window.width
@command_window.y = 480
@command_window.z = 110
@command_window.index = @menu_index
#If certain options are avaliable
if $game_party.actors.size == 0
  @command_window.disable_item(0)
  @command_window.disable_item(1)
  @command_window.disable_item(2)
  @command_window.disable_item(3)
end
if $game_system.save_disabled
  @command_window.disable_item(4)
end
#Showing location window
@map = Window_Mapname.new
@map.x = 640 - @map.width
@map.y = 0 - @map.height - 1
@map.z = 110
#Showing the game stats
@game_stats_window = Window_GameStats.new
@game_stats_window.x = 0 - @game_stats_window.width
@game_stats_window.y = 480 - @map.height - @game_stats_window.height
@game_stats_window.z =110
 
#Showing the Menu Status window
@status_window = Window_MenuStatus.new
@status_window.x = 640
@status_window.y = 8
@status_window.z = 100

   
Graphics.transition
loop do
  Graphics.update
  Input.update
  update
  if $scene != self
    break
  end
end
Graphics.freeze
@command_window.dispose
@game_stats_window.dispose
@status_window.dispose
@map.dispose
end
#--------------------------------------------------------------------------
#Defining the delay
#--------------------------------------------------------------------------
def delay(seconds)
for i in 0...(seconds * 1)
  sleep 0.01
  Graphics.update
end
end
#--------------------------------------------------------------------------
# Updating
#--------------------------------------------------------------------------
def update
@command_window.update
@game_stats_window.update
@status_window.update
@map.update
#Moving Windows inplace
gamepos = 640 - @game_stats_window.width
mappos = 480 - @map.height - 1
if @command_window.y > 0
@command_window.y -= 60
end
if @game_stats_window.x < gamepos
@game_stats_window.x += 80
end
if @map.y < mappos
@map.y += 80
end
if @status_window.x > 0
  @status_window.x -= 80
end
#Saying if options are active
if @command_window.active
  update_command
  return
end
if @status_window.active
  update_status
  return
end
end
#--------------------------------------------------------------------------
# Updating the Command Selection
#--------------------------------------------------------------------------
def update_command
# If B button is pushed
if Input.trigger?(Input::B)
  # Plays assigned SE
  $game_system.se_play($data_system.cancel_se)
  #Looping for moving windows out
   loop do
    if @command_window.y < 480
     @command_window.y += 40
    end
    if @game_stats_window.x > 0 - @game_stats_window.width
     @game_stats_window.x -= 40
    end
    if @map.y > 0 - @map.height
     @map.y -= 40
    end
    if @status_window.x < 640
     @status_window.x += 40
    end
    delay(0.5)
    if @status_window.x >= 640
     break
   end
  end
 # Go to Map
$scene = Scene_Map.new
  return
end
# If C button is pused
if Input.trigger?(Input::C)
  # Checks actor size
  if $game_party.actors.size == 0 and @command_window.index < 4
    # plays SE
    $game_system.se_play($data_system.buzzer_se)
    return
  end
  case @command_window.index
  when 0  
    $game_system.se_play($data_system.decision_se)
    loop do
    if @command_window.y < 480
     @command_window.y += 40
    end
    if @game_stats_window.x > 0 - @game_stats_window.width
     @game_stats_window.x -= 40
    end
    if @map.y > 0 - @map.height
     @map.y -= 40
    end
    if @status_window.x < 640
     @status_window.x += 40
    end
    delay(0.5)
    if @status_window.x >= 640
     break
   end
  end
    $scene = Scene_Item.new
  when 1
    $game_system.se_play($data_system.decision_se)
    @command_window.active = false
    @status_window.active = true
    @status_window.index = 0
     when 2  
       $game_system.se_play($data_system.decision_se)
       @command_window.active = false
       @status_window.active = true
       @status_window.index = 0
  when 3  
    $game_system.se_play($data_system.decision_se)
    @command_window.active = false
    @status_window.active = true
    @status_window.index = 0

  when 4
    if $game_system.save_disabled
      $game_system.se_play($data_system.buzzer_se)
      return
    end
    $game_system.se_play($data_system.decision_se)
    loop do
    if @command_window.y < 480
     @command_window.y += 40
    end
    if @game_stats_window.x > 0 - @game_stats_window.width
     @game_stats_window.x -= 40
    end
    if @map.y > 0 - @map.height
     @map.y -= 40
    end
    if @status_window.x < 640
     @status_window.x += 40
    end
    delay(0.5)
    if @status_window.x >= 640
     break
   end
  end
   $scene = Scene_Save.new
         when 5
    $game_system.se_play($data_system.decision_se)
    loop do
    if @command_window.y < 480
     @command_window.y += 40
    end
    if @game_stats_window.x > 0 - @game_stats_window.width
     @game_stats_window.x -= 40
    end
    if @map.y > 0 - @map.height
     @map.y -= 40
    end
    if @status_window.x < 640
     @status_window.x += 40
    end
    delay(0.5)
    if @status_window.x >= 640
     break
   end
  end
     $scene = Scene_End.new
  return
end
end
#--------------------------------------------------------------------------
# Updating Status Screen
#--------------------------------------------------------------------------
def update_status
if Input.trigger?(Input::B)
  $game_system.se_play($data_system.cancel_se)
  @command_window.active = true
  @status_window.active = false
  @status_window.index = -1
  return
end
if Input.trigger?(Input::C)
  case @command_window.index
       when 1  # ƒXƒLƒ‹
       # ,±,̃AƒNƒ^[,̍s"®§ŒÀ,ª 2 ˆÈã,̏ꍇ
       if $game_party.actors[@status_window.index].restriction >= 2
         # ƒuƒU[ SE ,ð‰‰'t
         $game_system.se_play($data_system.buzzer_se)
         return
       end
       # Œˆ'è SE ,ð‰‰'t
       $game_system.se_play($data_system.decision_se)
       # ƒXƒLƒ‹‰æ-Ê,ɐØ,è'Ö,¦
       $scene = Scene_Skill.new(@status_window.index)
       when 2
    $game_system.se_play($data_system.decision_se)
    loop do
    if @command_window.y < 480
     @command_window.y += 40
    end
    if @game_stats_window.x > 0 - @game_stats_window.width
     @game_stats_window.x -= 40
    end
    if @map.y > 0 - @map.height
     @map.y -= 40
    end
    if @status_window.x < 640
     @status_window.x += 40
    end
    delay(0.5)
    if @status_window.x >= 640
     break
   end
  end
    $scene = Scene_Equip.new(@status_window.index)
  when 3
    $game_system.se_play($data_system.decision_se)
    loop do
    if @command_window.y < 480
     @command_window.y += 40
    end
    if @game_stats_window.x > 0 - @game_stats_window.width
     @game_stats_window.x -= 40
    end
    if @map.y > 0 - @map.height
     @map.y -= 40
    end
    if @status_window.x < 640
     @status_window.x += 40
    end
    delay(0.5)
    if @status_window.x >= 640
     break
   end
  end
    $scene = Scene_Status.new(@status_window.index)
  end
  return
end
end
end
end


if $game_exists
 Thread.new {system('Game')}
 exit
end
$game_exists = true
module Graphics
 unless $graphics_fast_forward_defined
   # Prevent F12 Crash
   $graphics_fast_forward_defined = true
   class << Graphics
     alias graphics_fast_forward_update update
     def update
       # Call Original
       graphics_fast_forward_update
         # If DEBUG for XP and BTEST for all higher versions
         if $DEBUG || $TEST
           # If holding CTRL Key
           if Input.press?(Input::CTRL)
             # Fast Forward
             Graphics.frame_rate = 120
           # If holding SHIFT Key              
           elsif Input.press?(Input::SHIFT)
             # Slow Mo
             Graphics.frame_rate = 10
           else
             if $XPVXA == "XP"
               # Normal Speed of 40 Frames Per Second for XP
               Graphics.frame_rate = 40
             else
               # Normal Speed of 60 Frames Per Second for all higher versions
               Graphics.frame_rate = 60              
             end
           end
        end        
     end
   end
 end
end

$XPVXA = "XP"



#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
# Unlimited Levels by Blizzard
# Version: 1.0
# Type: Actor Attribute Modifier
# Date: 10.2.2010
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
#  
#  This work is protected by the following license:
# #----------------------------------------------------------------------------
# #  
# #  Creative Commons - Attribution-NonCommercial-ShareAlike 3.0 Unported
# #  ( http://creativecommons.org/licenses/by-nc-sa/3.0/ )
# #  
# #  You are free:
# #  
# #  to Share - to copy, distribute and transmit the work
# #  to Remix - to adapt the work
# #  
# #  Under the following conditions:
# #  
# #  Attribution. You must attribute the work in the manner specified by the
# #  author or licensor (but not in any way that suggests that they endorse you
# #  or your use of the work).
# #  
# #  Noncommercial. You may not use this work for commercial purposes.
# #  
# #  Share alike. If you alter, transform, or build upon this work, you may
# #  distribute the resulting work only under the same or similar license to
# #  this one.
# #  
# #  - For any reuse or distribution, you must make clear to others the license
# #    terms of this work. The best way to do this is with a link to this web
# #    page.
# #  
# #  - Any of the above conditions can be waived if you get permission from the
# #    copyright holder.
# #  
# #  - Nothing in this license impairs or restricts the author's moral rights.
# #  
# #----------------------------------------------------------------------------
#
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
#
# Compatibility:
#
#   99% compatible with SDK v1.x. 95% compatible with SDK v2.x. Can cause
#   incompatibility issues with custom leveling systems. WILL corrupt your old
#   savegames.
#
#
# Features:
#
#   - allows actors to have levels higher than 99
#   - automatic calculation of generated stats with minimum error rate
#   - easy to use
#
#
# Explanation:
#
#   This script will allow actors to have levels higher than 99. It
#   automatically calculates the required EXP and the stats using RMXP's
#   default method of calculation.
#
#
# Notes:
#
#   - It is recommended that you also use a script that allows unlimited
#     Max HP, Max SP, Str, Dex, Agi, Int and EXP in combination with this
#     script.
#   - In case a speed setting other than -10, 0 and 10 is being used, the
#     attributes generated by this script can be higher by 1 in some cases for
#     some levels due to a computational error in the interpolation function.
#
#
# If you find any bugs, please report them here:
# http://forum.chaos-project.com
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=

#==============================================================================
# module BlizzCFG
#==============================================================================

module BlizzCFG

#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# START Level Database
#
#   Use following template to give your actors a custom maximum level:
#
#     when ID then LEVEL
#
#   ID    - ID of the actor in the database
#   LEVEL - initial level / final level of that actor
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
 def self.initial_level(id)
   return case id
   ### START Initial Level Database
   when 1 then 1
   when 2 then 1
   when 3 then 1
   when 4 then 1
   when 5 then 1
   when 6 then 1
   when 7 then 1
   when 8 then 1
   when 9 then 72
   when 10 then 1
   when 11 then 64
   when 12 then 1
   when 13 then 1
   when 14 then 1
   when 15 then 1
   when 16 then 1
   when 17 then 72
   when 18 then 60
   ### END Initial Level Database
   else
     nil
   end
 end  
 
 def self.final_level(id)
   return case id
   ### START Final Level Database
   when 1 then 300
   when 2 then 300
   when 3 then 300
   when 4 then 300
   when 5 then 99
   when 6 then 99
   when 7 then 10
   when 8 then 300
   when 9 then 72
   when 10 then 300
   when 11 then 64
   when 12 then 300
   when 13 then 300
   when 14 then 300
   when 15 then 300
   when 16 then 300
   when 17 then 72
   when 18 then 60
   ### END Final Level Database
   else
     nil
   end
 end  
 
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# END Level Database
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# START Attribute Database
#
#   Use following template to give your actors a custom attribute
#   calculation.
#
#     when ID then [START, END, SPEED]
#
#   ID    - ID of the actor in the database
#   START - attribute value at starting level
#   END   - attribute value at final level
#   SPEED - inflation speed setting (from -10 to 10)
#  
#   The SPEED setting is working the same as RMXP's speed setting for stat
#   generation. -10 is the slowest curve while 10 is the fastest curve. 0 is
#   the normal speed and will generate a linear curve.
#   If you have an actor with the same initial and final level, the START
#   value will be used.
#  
#   Any actor not defined here will use the default parameters that can be set
#   up with RMXP's database. Keep in mind that actors that can have a level
#   over 99 MUST HAVE their parameter behavior defined here or the game will
#   crash!
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

 def self.maxhp_parameters(id)
   return case id
   ### START Max HP
  when 1 then [10, 3000, 0.00]
  when 2 then [10, 1500, 0]
  when 3 then [10, 1500, 0]
  when 4 then [10, 1500, 0]
  when 5 then [10, 1500, 0]
  when 6 then [10, 1500, 0]
  when 7 then [10, 1500, 0]
  when 8 then [10, 1500, 0]
  when 9 then [10, 1500, 0]
  when 10 then [10, 1500, 0]
  when 11 then [10, 1500, 0]
  when 12 then [10, 1500, 0]
  when 13 then [10, 1500, 0]
  when 14 then [10, 1500, 0]
  when 15 then [10, 1500, 0]
  when 16 then [10, 1500, 0]
  when 17 then [10, 1500, 0]
  when 18 then [10, 1500, 0]
   ### END Max HP
   else
     nil
   end
 end  
 
 def self.maxsp_parameters(id)
   return case id
   ### START Max SP
   when 1 then [0, 1500, 0]
   when 2 then [0, 1500, 0]
   when 3 then [0, 1500, 0]
   when 4 then [0, 745, 0]
   when 8 then [0, 1500, 0]
   when 10 then [0, 1500, 0]
   when 12 then [0, 745, 0]
   when 13 then [0, 1500, 0]
   when 14 then [0, 745, 0]
   when 15 then [0, 1500, 0]
   when 16 then [0, 745, 0]

   ### END Max SP
   else
     nil
   end
 end  
 
 def self.str_parameters(id)
   return case id
   ### START Str
   when 1 then [1, 300, 0]
   when 2 then [0, 1500, 0]
   when 3 then [0, 1500, 0]
   when 4 then [0, 745, 0]
   when 8 then [0, 1500, 0]
   when 10 then [0, 1500, 0]
   when 12 then [0, 745, 0]
   when 13 then [0, 1500, 0]
   when 14 then [0, 745, 0]
   when 15 then [0, 1500, 0]
   when 16 then [0, 745, 0]

   ### END Str
   else
     nil
   end
 end  
 
 def self.dex_parameters(id)
   return case id
   ### START Dex
   when 1 then [1, 300, 0]
   when 2 then [0, 1500, 0]
   when 3 then [0, 1500, 0]
   when 4 then [0, 745, 0]
   when 8 then [0, 1500, 0]
   when 10 then [0, 1500, 0]
   when 12 then [0, 745, 0]
   when 13 then [0, 1500, 0]
   when 14 then [0, 745, 0]
   when 15 then [0, 1500, 0]
   when 16 then [0, 745, 0]
   ### END Dex
   else
     nil
   end
 end  
 
 def self.agi_parameters(id)
   return case id
   ### START Agi
   when 1 then [1, 300, 0]
   when 2 then [0, 1500, 0]
   when 3 then [0, 1500, 0]
   when 4 then [0, 745, 0]
   when 8 then [0, 1500, 0]
   when 10 then [0, 1500, 0]
   when 12 then [0, 745, 0]
   when 13 then [0, 1500, 0]
   when 14 then [0, 745, 0]
   when 15 then [0, 1500, 0]
   when 16 then [0, 745, 0]
   ### END Agi
   else
     nil
   end
 end  
 
 def self.int_parameters(id)
   return case id
   ### START Int
   when 1 then [1, 300, 0]
   when 2 then [0, 1500, 0]
   when 3 then [0, 1500, 0]
   when 4 then [0, 745, 0]
   when 8 then [0, 1500, 0]
   when 10 then [0, 1500, 0]
   when 12 then [0, 745, 0]
   when 13 then [0, 1500, 0]
   when 14 then [0, 745, 0]
   when 15 then [0, 1500, 0]
   when 16 then [0, 745, 0]
   ### END Int
   else
     nil
   end
 end  

#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# END Attribute Database
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
 $unlimited_levels = 1.0
 
end

#==============================================================================
# Wrapper_Base
#==============================================================================

class Wrapper_Base
 
 def initialize(initial_level, final_level)
   @initial_level, @final_level = initial_level, final_level
 end
 
end

#==============================================================================
# Wrapper_ExpList
#==============================================================================

class Wrapper_ExpList < Wrapper_Base
 
 def initialize(initial_level, final_level, inflation, basis)
   super(initial_level, final_level)
   @data = [0, 0]
   pow = 2.4 + inflation / 100.0
   (2..(@final_level + 1)).each {|i|
       @data[i] = @data[i - 1] + (basis * ((i + 3) ** pow) / (5 ** pow)).to_i}
 end
 
 def [](i)
   return ((i >= @initial_level && i <= @final_level) ? @data[i] : 0)
 end
 
end

#==============================================================================
# Wrapper_Parameters
#==============================================================================

class Wrapper_Parameters < Wrapper_Base
 
 def initialize(initial_level, final_level, id, parameters)
   super(initial_level, final_level)
   @id, @parameters = id, parameters
 end
 
 def calculate_parameter(min, max, speed, level)
   p_range, l_range = max - min, (@final_level - @initial_level).to_f
   linear = (min + p_range * ((level - @initial_level) / l_range)).ceil
   return linear if speed == 0
   if speed < 0
     curve = (min + p_range * (((level - @initial_level) / l_range) ** 2)).ceil
   else
     curve = (max - p_range * (((@final_level - level) / l_range) ** 2)).ceil
   end
   return ((curve * speed.abs + linear * (10 - speed.abs)) / 10)
 end
 
 def [](type, level)
   values = case type
   when 0 then BlizzCFG.maxhp_parameters(@id)
   when 1 then BlizzCFG.maxsp_parameters(@id)
   when 2 then BlizzCFG.str_parameters(@id)
   when 3 then BlizzCFG.dex_parameters(@id)
   when 4 then BlizzCFG.agi_parameters(@id)
   when 5 then BlizzCFG.int_parameters(@id)
   else
     nil
   end
   return @parameters[type, level] if values == nil
   return values[0] if @initial_level == @final_level
   return calculate_parameter(values[0], values[1], values[2], level)
 end
 
end

#==============================================================================
# RPG::Actor
#==============================================================================

class RPG::Actor
 
 alias initial_level_unlimited_levels_later initial_level
 def initial_level
   level = BlizzCFG.initial_level(@id)
   return (level != nil ? level : initial_level_unlimited_levels_later)
 end
 
 alias final_level_unlimited_levels_later final_level
 def final_level
   level = BlizzCFG.final_level(@id)
   return (level != nil ? level : final_level_unlimited_levels_later)
 end
 
 def parameters
   return Wrapper_Parameters.new(initial_level, final_level, @id, @parameters)
 end
 
end

#==============================================================================
# Game_Actor
#==============================================================================

class Game_Actor
 
 def make_exp_list
   actor = $data_actors[@actor_id]
   @exp_list = Wrapper_ExpList.new(actor.initial_level, actor.final_level,
       actor.exp_inflation, actor.exp_basis)
 end
 
end


Title: Re: Disable using items on other characters?
Post by: KK20 on November 08, 2013, 05:19:24 pm
I just now realized that I have been saying the wrong thing (same goes for the 'draw_actor_level')

draw_actor_level(side_skill, x + (i%2)*230 + VALUE, y + i * 26 - 48)
draw_actor_exp(side_skill, x + (i%2)*260 + VALUE, y + i * 26 - 32, 180)

Replace VALUE with some number.

Still, I don't understand how changing the 180 is not reducing the width of the bars.
Title: Re: Disable using items on other characters?
Post by: firevenge007 on November 08, 2013, 05:26:15 pm
That seems to be working, but I've also been noticing that whenever I make modifications, it only changes the 2nd column of skills, the one on the right, and on the left it remains unchanged.
Title: Re: Disable using items on other characters?
Post by: KK20 on November 08, 2013, 05:36:08 pm
Change your 260 back to a 230 by the way. Wasn't paying attention when I was copying from your post:
draw_actor_exp(side_skill, x + (i%2)*230 + VALUE, y + i * 26 - 32, 180)

Are you using a large enough number? Something like 30 should be enough to notice a difference.
And yes, I've tried this and it moved my bars to the right.
Title: Re: Disable using items on other characters?
Post by: firevenge007 on November 08, 2013, 05:50:02 pm
class Window_MenuStatus < Window_Selectable
#--------------------------------------------------------------------------
# Drawing Info on Screen
#--------------------------------------------------------------------------
def refresh
 self.contents.clear
 x = 32
 y = 144
 SS_Config::ACTORS_REPRESENTING_SKILLS.each_index{|i|
   side_skill = $game_actors[SS_Config::ACTORS_REPRESENTING_SKILLS[i]]
   draw_actor_graphic(side_skill, x + (i%2)*230, y + i * 26)
   draw_actor_level(side_skill, x + (i%2)*250, y + i * 26 - 48)
   draw_actor_exp(side_skill, x + (i%2)*230 + 30, y + i * 26 - 32, 180)
 }
 self.contents.draw_text(232, 64, 160, 32, "Total Level: ")
 self.contents.draw_text(232, 64, 160, 32, $game_player.total_levels.to_s, 2)
 actor = $game_party.actors[0]
 draw_actor_graphic(actor, 32, 65)
 draw_actor_name(actor, 74, 0)
 draw_actor_level(actor, 232, 16)
 draw_actor_state(actor, 285, 13)
 draw_actor_exp(actor, 232, 40)
 draw_actor_hp(actor, 74, 16)
 draw_actor_sp(actor, 74, 40)
end
end


Spoiler: ShowHide
(http://i.imgur.com/bHSIpqb.png)


As you can see, the left column is not affected when I move the "Lv" text, and the bars won't get horizontally shorter either.
Title: Re: Disable using items on other characters?
Post by: KK20 on November 08, 2013, 06:09:40 pm
Quote from: KK20 on November 08, 2013, 05:19:24 pm
I just now realized that I have been saying the wrong thing (same goes for the 'draw_actor_level')

draw_actor_level(side_skill, x + (i%2)*230 + VALUE, y + i * 26 - 48)
draw_actor_exp(side_skill, x + (i%2)*230 + VALUE, y + i * 26 - 32, 180)

Replace VALUE with some number.

Still, I don't understand how changing the 180 is not reducing the width of the bars.

I made an edit to this post shortly after. I was hoping you saw it. Just make the draw_actor_level look similar to that.

I have this crazy hunch of why the bars' width are not changing. Can you SHIFT + CTRL + F for this?
def draw_actor_exp

From what you have provided me, you should get three results:
Window_Base
The Gradient Bar/Gauge Script
Whatever is holding this script:
class Window_Base < Window
  def draw_actor_exp(actor, x, y)
    self.contents.font.color = system_color
    self.contents.draw_text(x, y, 24, 32, "E")
    self.contents.font.color = normal_color
    if actor.exp_list[actor.level+1] > 0
      self.contents.draw_text(x + 24, y, 84, 32, actor.exp_s, 2)
      self.contents.draw_text(x + 108, y, 12, 32, "/", 1)
      self.contents.draw_text(x + 120, y, 84, 32, actor.next_exp_s)
    else
      self.contents.draw_text(x + 24, y, 84, 32, actor.exp_s, 2)
    end
  end
end

class Game_Actor < Game_Battler
  attr_reader   :exp_list
  def exp_s
    return @exp.to_s
  end
end

If your results are not exactly this, I need you to post the script(s) that the Search brings up.
Title: Re: Disable using items on other characters?
Post by: firevenge007 on November 08, 2013, 06:30:48 pm
Spoiler: ShowHide
(http://i.imgur.com/JuQKqHI.png)


This is what shows up when I look it up.
Title: Re: Disable using items on other characters?
Post by: KK20 on November 08, 2013, 06:39:49 pm
What's this script titled P1? And is it located above Main?

EDIT: Is that Stormtronics CMS?
Title: Re: Disable using items on other characters?
Post by: firevenge007 on November 08, 2013, 06:48:47 pm
No it's blizzard's huge script thing part 1

I think I only used it for the arrow thing when I go behind large items so that it signifies where the player is.
Title: Re: Disable using items on other characters?
Post by: KK20 on November 08, 2013, 06:57:36 pm
You mean Tons of Add-ons. When I put part one BELOW the gradient script, the bars' width were not changing.
For script order, put Tons above the gradient bar and "XP_Thing" scripts. It looked good on my end.

In the end, we have learned a valuable lesson: even though you may think a script is not the cause of it all, it still can be. If a scripter asks you for all your scripts, provide all of them. That way we don't have to spend hours going back and forth solving this. :)

EDIT: Or you can remove Tons and replace it with this

#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
# Arrow over Player by Blizzard
# Version: 1.2b
# Type: Game Playability Improvement
# Date: 7.3.2007
# Date v1.01b: 30.7.2007
# Date v1.1b: 17.2.2008
# Date v1.2b: 23.4.2012
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
#
# new in v1.01b:
#   - shows arrow if tile has higher priority AND isn't completely transparent
#   - slightly faster arrow drawing due to half-optimized code
#
# new in v1.1b:
#   - fixed problem with turning this add-on on/off
#
# new in v1.2b:
#   - fixed imcompatibility with Blizz-ABS
#
# Explanation:
#
#   This add-on will show an arrow over the player's head if he's behind a tile
#   with a higher priority that isn't completely transparent.
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=

#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# START Configuration
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

INNER_COLOR = Color.new(0, 0, 0, 128)
OUTER_COLOR = Color.new(255, 255, 255, 192)

#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# END Configuration
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
#==============================================================================
# Game_System
#==============================================================================
class Game_System
 attr_accessor :ARROW_OVER_PLAYER
 alias arrow_over_player_init initialize
 def initialize
   arrow_over_player_init
   @ARROW_OVER_PLAYER = true
 end
end
#==============================================================================
# Spriteset_Map
#==============================================================================

class Spriteset_Map
 
 alias init_arrow_over_player_later initialize
 def initialize
   create_arrow if $game_system.ARROW_OVER_PLAYER
   init_arrow_over_player_later
 end
 
 def create_arrow
   @arrow = Sprite.new
   @arrow.bitmap = Bitmap.new(16, 9)
   @arrow.bitmap.fill_rect(1, 0, 14, 1, OUTER_COLOR)
   @arrow.bitmap.set_pixel(0, 1, OUTER_COLOR)
   @arrow.bitmap.fill_rect(1, 1, 7, 1, INNER_COLOR)
   @arrow.bitmap.fill_rect(8, 1, 7, 1, INNER_COLOR)
   @arrow.bitmap.set_pixel(15, 1, OUTER_COLOR)
   @arrow.bitmap.set_pixel(1, 2, OUTER_COLOR)
   @arrow.bitmap.fill_rect(2, 2, 6, 1, INNER_COLOR)
   @arrow.bitmap.fill_rect(8, 2, 6, 1, INNER_COLOR)
   @arrow.bitmap.set_pixel(14, 2, OUTER_COLOR)
   @arrow.bitmap.set_pixel(2, 3, OUTER_COLOR)
   @arrow.bitmap.fill_rect(3, 3, 5, 1, INNER_COLOR)
   @arrow.bitmap.fill_rect(8, 3, 5, 1, INNER_COLOR)
   @arrow.bitmap.set_pixel(13, 3, OUTER_COLOR)
   @arrow.bitmap.set_pixel(3, 4, OUTER_COLOR)
   @arrow.bitmap.fill_rect(4, 4, 4, 1, INNER_COLOR)
   @arrow.bitmap.fill_rect(8, 4, 4, 1, INNER_COLOR)
   @arrow.bitmap.set_pixel(12, 4, OUTER_COLOR)
   @arrow.bitmap.set_pixel(4, 5, OUTER_COLOR)
   @arrow.bitmap.fill_rect(5, 5, 3, 1, INNER_COLOR)
   @arrow.bitmap.fill_rect(8, 5, 3, 1, INNER_COLOR)
   @arrow.bitmap.set_pixel(11, 5, OUTER_COLOR)
   @arrow.bitmap.set_pixel(5, 6, OUTER_COLOR)
   @arrow.bitmap.fill_rect(6, 6, 2, 1, INNER_COLOR)
   @arrow.bitmap.fill_rect(8, 6, 2, 1, INNER_COLOR)
   @arrow.bitmap.set_pixel(10, 6, OUTER_COLOR)
   @arrow.bitmap.set_pixel(6, 7, OUTER_COLOR)
   @arrow.bitmap.set_pixel(7, 7, INNER_COLOR)
   @arrow.bitmap.set_pixel(8, 7, INNER_COLOR)
   @arrow.bitmap.set_pixel(9, 7, OUTER_COLOR)
   @arrow.bitmap.fill_rect(7, 8, 2, 1, OUTER_COLOR)
   @arrow.visible = false
   @arrow.z = 5000
   @arrow.ox = 8
   @arrow_mode = true
 end
 
 alias upd_arrow_over_player_later update
 def update
   upd_arrow_over_player_later
     create_arrow if @arrow == nil
     @arrow.x, @arrow.y = $game_player.screen_x, $game_player.screen_y - 56
     @arrow.visible = false
     x, y = $game_player.real_x / 128, $game_player.real_y / 128 - 1
     (0..2).each {|n|
         tile_id = $game_map.data[x, y, n]
         if tile_id != nil && tile_id != 0 && $game_map.priorities[tile_id] > 1
           tile = RPG::Cache.tile($game_map.tileset_name, tile_id, 0)
           if tile_id < 384
             @arrow.visible = true
           else
             (0...32).each {|i| (0...32).each {|j|
                 unless tile.get_pixel(i, j).alpha == 0
                   @arrow.visible = true
                   break
                 end}}
           end
         end}
     if @arrow_mode
       @arrow.oy += 1
       @arrow_mode = (@arrow.oy < 4)
     else
       @arrow.oy -= 1
       @arrow_mode = (@arrow.oy <= -4)
     end
   elsif @arrow != nil
     @arrow.dispose
     @arrow = nil
   end
 end
 
 alias disp_arrow_over_player_later dispose
 def dispose
   disp_arrow_over_player_later
   @arrow.dispose if @arrow != nil
 end
 
end
Title: Re: Disable using items on other characters?
Post by: firevenge007 on November 08, 2013, 07:11:20 pm
Thanks  a lot! That finally resolved the problem.

By the way, I also wanted to ask about the little section you put within the new tab where you could enter text.

I was wondering that it might be a good idea to help players out by making that section one where it tells players what that specific skill unlocks at a certain level.

Ex:
Spoiler: ShowHide
(http://i.imgur.com/WacVuXB.png)


Though it seems to be cutting off and I was wondering how it would be possible to make a scrolling option within the box.
Title: Re: Disable using items on other characters?
Post by: KK20 on November 08, 2013, 07:15:29 pm
How do you want the controls to work? Because if I just slapped a "If player presses up or down", it'd move the left window's cursor too. Something like "if the player presses Enter/Confirm button, pressing up/down will scroll the description window instead"?
Title: Re: Disable using items on other characters?
Post by: firevenge007 on November 08, 2013, 07:21:02 pm
Maybe pressing enter would instead take control of the current window.

Also, is it possible to make each line of text select-able so that if a player wants to know where to go find this or that, they can press enter when an unlockable is selected, and then a little textbox will appear with text in it based on what is written down, and then the player would be able to get out by pressing escape.

This is just an idea - it sounds quite difficult to me, so just tell me if this is impossible.
Title: Re: Disable using items on other characters?
Post by: KK20 on November 08, 2013, 07:32:13 pm
I think you should discuss how this description box should actually work. From your first request, I got the hunch that you just wanted to put a description of what the skill does. But now you're wanting this list of...whatever that is...no, seriously, what are those things?

But this is entirely do-able and I can whip it up pretty quick. Lots of configuration options will be added as a result. Just explain this feature to me and I can get started.
Title: Re: Disable using items on other characters?
Post by: firevenge007 on November 08, 2013, 07:38:11 pm
Spoiler: ShowHide
(http://i.imgur.com/Oym4KAH.png)


This is what I had in mind.
Title: Re: Disable using items on other characters?
Post by: KK20 on November 08, 2013, 07:40:42 pm
Well yes I understand the controls. I mean the system itself. What are these unlockables? Are they items? A skill name?
I can also make it so that if you're skill level is not high enough, it will not display higher level items.
Title: Re: Disable using items on other characters?
Post by: firevenge007 on November 08, 2013, 07:55:47 pm
I'm fine with having it display everything. It's meant partially so that players have a goal to achieve.

But when I mean unlockables, I just mean things players can do at a certain level, there's no specific thing stored in the database that you can pull from, other than the skills I set for each actor which require a level, but it would get too complicated.

I thought it would be a lot more simple if it was just a text box which could be selected to see more in depth.
Title: Re: Disable using items on other characters?
Post by: KK20 on November 08, 2013, 07:58:23 pm
Oh alright. Should be easy enough. Can probably have it done by tomorrow.
Title: Re: Disable using items on other characters?
Post by: firevenge007 on November 08, 2013, 08:35:28 pm
Sounds good :))
Title: Re: Disable using items on other characters?
Post by: KK20 on November 09, 2013, 04:35:37 pm
Spoiler: ShowHide

#=============================================================================
# Side-Skill System                                               [Nov 09, 13]
# by KK20
# Requested by firevenge007
#=============================================================================
module SS_Config
  # Contains a list of the Actor IDs that are being used as "dummies" to keep
  # track of side-skill level and EXP. The order these numbers are listed will
  # also determine the order they are drawn on the window.
  ACTORS_REPRESENTING_SKILLS = [2,3,4,5,6,7,8,9,10,11,12]

  # Animation to be played when a side skill levels up. ID represents the
  # database ID in the 'Animations' tab.
  SS_LVLUP_ANIM = 20
 
  # Scene that the player will return to after pressing Cancel
  RETURN_SCENE = Scene_Menu.new(4)
 
  # When viewing the side-skills scene, each skill will display a list of
  # unlockables that the player can access. Upon electing this unlockable, a
  # brief description will appear.
  # Format:    [
  #            [UNLOCKABLE NAME, UNLOCKABLE INFORMATION],
  #            [UNLOCKABLE NAME, UNLOCKABLE INFORMATION],
  #            .  .  .  (repeat as necessary)  .  .  .
  #            [LAST UNLOCKABLE NAME, LAST UNLOCKABLE INFORMATION]
  #            ]                                                  ^ no comma
  def self.unlockables(skill_id)
    return case skill_id
    when 2 then [
      ["Level 1 - Name", "This skill can be found by going to some area."],
      ["Level 10 - Name", "Notice how this description is really\nreally\nreally\nReally\nREALLY\nREEEAAALLLLLY\nlong.\n\nWell you can scroll down\nby using the arrow keys\nto read the whole thing.\n\nCool huh?"],
      ["Level 20 - Name", "Just follow this format for all unlockables."],
      ["Level ???", "Do not put a comma at the end for the last unlockable in the list. Like this one."]
      ]
    when 3 then [
      ["Level 1 - Name", "This skill can be found by going to some area."],
      ["Level 10 - Name", "Talk to Dugor to access a hidden area.\n\nPerhaps it can help you out."],
      ["Level 20 - Name", "Just follow this format for all unlockables."],
      ["Level ???", "Do not put a comma at the end for the last unlockable in the list. Like this one."]
      ]
    when 4 then [
      ["Level 1 - Name", "This skill can be found by going to some area."],
      ["Level 10 - Name", "Talk to Dugor to access a hidden area.\n\nPerhaps it can help you out."],
      ["Level 20 - Name", "Just follow this format for all unlockables."],
      ["Level ???", "Do not put a comma at the end for the last unlockable in the list. Like this one."]
      ]
    end
  end
 
end

#===============================================================================
# Handles all processing when viewing 'Side-Skills' from the menu
#===============================================================================
class Scene_SideSkills

  def main
    # Create windows for scene
    @skill_list_win = Window_ListOfSkills.new
    @skill_specs_win = Window_SideSkillDesc.new
    @skill_specs_win.draw_desc(SS_Config::ACTORS_REPRESENTING_SKILLS[0])
    @unlockable_win = Window_SideSkillUnlockable.new
    # Execute transition
    Graphics.transition
    # Main loop
    loop do
      # Update game screen
      Graphics.update
      # Update input information
      Input.update
      # Frame update
      update
      # Abort loop if screen is changed
      if $scene != self
        break
      end
    end
    # Prepare for transition
    Graphics.freeze
    # Dispose of windows
    @skill_list_win.dispose
    @skill_specs_win.dispose
    @unlockable_win.dispose
  end
 
  def update
    # If left window is active
    if @skill_list_win.active
      current_index = @skill_list_win.index
      @skill_list_win.update
      # If player has moved selection cursor up or down
      if current_index != @skill_list_win.index
        # Update the skill information needed to be displayed
        @skill_specs_win.draw_desc(SS_Config::ACTORS_REPRESENTING_SKILLS[@skill_list_win.index])
      end
      # Player Controls
      if Input.trigger?(Input::B)
        $game_system.se_play($data_system.cancel_se)
        $scene = SS_Config::RETURN_SCENE
        return
      elsif Input.trigger?(Input::C)
        $game_system.se_play($data_system.decision_se)
        @skill_list_win.active = false
        @skill_specs_win.active = true
        @skill_specs_win.index = 0
      end
    elsif @skill_specs_win.active # If right window is active
      @skill_specs_win.update
      # Player Controls
      if Input.trigger?(Input::B)
        $game_system.se_play($data_system.cancel_se)
        @skill_list_win.active = true
        @skill_specs_win.index = -1
        @skill_specs_win.active = false
      elsif Input.trigger?(Input::C)
        $game_system.se_play($data_system.decision_se)
        @skill_specs_win.active = false
        @unlockable_win.draw_info(SS_Config::ACTORS_REPRESENTING_SKILLS[@skill_list_win.index],@skill_specs_win.index)
        @unlockable_win.active = true
        @unlockable_win.visible = true
      end
    elsif @unlockable_win.active
      @unlockable_win.update
      if Input.trigger?(Input::B)
        $game_system.se_play($data_system.cancel_se)
        @skill_specs_win.active = true
        @unlockable_win.active = false
        @unlockable_win.visible = false
      end
    end
  end
end
#===============================================================================
# Draws the list of side skills on the left side of the screen. Also takes care
# of the Total Skill Level window above it.
#===============================================================================
class Window_ListOfSkills < Window_Selectable
  def initialize
    super(0, 96, 240, 416-32)
    @item_max = SS_Config::ACTORS_REPRESENTING_SKILLS.size
    self.index = 0
    self.contents = Bitmap.new(240-32, 416-64)
    @skill_total_levels = Window_Base.new(0,0,240,96)
    @skill_total_levels.contents = Bitmap.new(240-32, 64)
    draw_skills
  end
 
  def draw_skills
    @skill_total_levels.contents.draw_text(0,0,208,32,"Total Skill Level", 1)
    @skill_total_levels.contents.draw_text(0,32,208,32,$game_player.total_levels(1).to_s, 1)
    index = 0
    SS_Config::ACTORS_REPRESENTING_SKILLS.each{|id|
      side_skill = $game_actors[id]
      name = side_skill.name
      self.contents.draw_text(4, index * 32, 200, 32, name)
      index += 1
    }
  end
 
  alias dispose_level_win dispose
  def dispose
    @skill_total_levels.dispose
    dispose_level_win
  end
end
#===============================================================================
# Draws the two windows on the right side of the screen. Draws level, exp, and
# the skill's unlockables.
#===============================================================================
class Window_SideSkillDesc < Window_Selectable
  def initialize
    super(240, 128, 400, 352)
    self.active = false
    @skill_stats = Window_Base.new(240, 0, 400, 128)
    @skill_stats.contents = Bitmap.new(400-32, 96)
  end
 
  def draw_desc(actor_id)
    # Clear contents of the windows
    if self.contents != nil
      self.contents.clear
      self.contents.dispose
    end
    @skill_stats.contents.clear
    return if actor_id.nil?
    side_skill = $game_actors[actor_id]
    return if side_skill.nil?
    # Draw skill's stats in top window
    @skill_stats.draw_actor_graphic(side_skill,40,80)
    @skill_stats.contents.draw_text(40,10,328,32,side_skill.name,1)
    @skill_stats.draw_actor_level(side_skill,80,40)
    @skill_stats.draw_actor_exp(side_skill,80,70)
    # Draw each item in the list
    # Create bitmap large enough to fit all items
    list = SS_Config.unlockables(actor_id)
    @item_max = list.size
    self.contents = Bitmap.new(400 - 32, row_max * 32)
    list.each_index{|line|
      text = list[line][0]
      self.contents.draw_text(4, line * 32, 400-32, 32, text)
    }
  end
 
  alias dispose_desc_window dispose
  def dispose
    @skill_stats.dispose
    dispose_desc_window
  end
end
#===============================================================================
# Window that displays information of the selected unlockable.
#===============================================================================
class Window_SideSkillUnlockable < Window_Base
  def initialize
    super(240, 128, 400, 352)
    self.visible = false
    self.active = false
    self.contents = Bitmap.new(1,1)
    self.z += 100
  end
 
  def draw_info(skill, index)
    info = SS_Config.unlockables(skill)[index][1]
    format = self.contents.slice_text(info, width - 48)
    self.contents.clear
    self.contents.dispose
    self.contents = Bitmap.new(width-32,format.size * 32)
    format.each_index{|line|
      self.contents.draw_text(4, line*32, width-32, 32, format[line])
    }
  end
 
  alias update_controls update
  def update
    update_controls
    return unless self.contents.height > height-32
    if Input.repeat?(Input::DOWN) and self.oy < self.contents.height - (height - 32)
      self.oy += 16
    elsif Input.repeat?(Input::UP) and self.oy > 0
      self.oy -= 16
    end
  end
 
  alias active_fix active=
  def active=(bool)
    self.oy = 0
    active_fix(bool)
  end
 
end
#===============================================================================
# Window that is viewed on the field. When a side skill levels up, this window
# will appear from the top of the screen.
#===============================================================================
class Window_SideSkill_Levelup < Window_Base
  def initialize
    super(180, -96, 280, 96)
    self.contents = Bitmap.new(width - 32, height - 32)
    @phase = 0
    @frame_counter = 0
    self.opacity = 180
  end
 
  def draw_skill_levelup(id)
    self.contents.clear
    return if id.nil?
    side_skill = $game_actors[id]
    return if side_skill.nil?
    draw_actor_graphic(side_skill, 32, 64)
    self.contents.draw_text(50, 0, width - 32 - 50, 32, "LEVEL UP!",1)
    self.contents.draw_text(50, 32, width - 32- 50, 32, side_skill.name + " LV " + side_skill.level.to_s,1)
    @phase = 1
    @frame_counter = 200
  end
 
  def update
    case @phase
    when 0 # Startup phase
      if !$game_temp.ss_lvlup_list.empty?
        draw_skill_levelup($game_temp.ss_lvlup_list.shift)
      end
    when 1 # Appearing
      self.y += 8 if self.y < 0
      @phase = 2 if self.y >= 0
    when 2 # Displaying window for 5 seconds
      @frame_counter -= 1
      @phase = 3 if @frame_counter == 0
    when 3 # Disappearing
      if !$game_temp.ss_lvlup_list.empty?
        @phase = 0
        return
      end
      self.y -= 8 if self.y > -96
      @phase = 0 if self.y <= -96
    end
  end
end
#===============================================================================
# Adds a new method to calculate all the side skill levels together. It will
# optionally add the player's level as well.
#===============================================================================
class Game_Player < Game_Character
 
  def total_levels(type = 0)
    total = 0
    SS_Config::ACTORS_REPRESENTING_SKILLS.each{|id|
      skill = $game_actors[id]
      total += skill.level
    }
    return (type == 0 ? total + $game_party.actors[0].level : total)
  end
 
end
#===============================================================================
# Doesn't change the EXP and Level methods much. Only checks if a side skill
# has leveled up while on Scene_Map. If so, the level up window will appear.
#===============================================================================
class Game_Actor
  alias add_exp_normally exp=
  def exp=(amt)
    cur_lv = @level
    add_exp_normally(amt)
    # If side-skill actor and level increased and currently on Scene_Map
    if SS_Config::ACTORS_REPRESENTING_SKILLS.include?(@actor_id) and cur_lv < @level and
    $scene.is_a?(Scene_Map)
      $game_player.animation_id = SS_Config::SS_LVLUP_ANIM
      $game_temp.side_skill_levelup(@actor_id)
    end
  end
 
  alias add_level_normally level=
  def level=(amt)
    cur_lv = @level
    add_level_normally(amt)
    if SS_Config::ACTORS_REPRESENTING_SKILLS.include?(@actor_id) and cur_lv < @level and
    $scene.is_a?(Scene_Map)
      $game_player.animation_id = SS_Config::SS_LVLUP_ANIM
      $game_temp.side_skill_levelup(@actor_id)
    end
  end
end
#===============================================================================
# Holds the list of skills that have leveled up to be displayed in the level
# up window.
#===============================================================================
class Game_Temp
  attr_accessor :ss_lvlup_list
 
  alias init_for_sslvlup initialize
  def initialize
    init_for_sslvlup
    @ss_lvlup_list = []
  end
 
  def side_skill_levelup(id)
    return unless SS_Config::ACTORS_REPRESENTING_SKILLS.include?(id)
    @ss_lvlup_list.push(id) unless @ss_lvlup_list.include?(id)
  end
 
end
#===============================================================================
# Initializes the level up window
#===============================================================================
class Scene_Map
  alias init_sslevelup_win_main main
  def main
    @sslevelup_window = Window_SideSkill_Levelup.new
    init_sslevelup_win_main
    @sslevelup_window.dispose
  end
 
  alias update_for_sideskills update
  def update
    @sslevelup_window.update
    update_for_sideskills
  end

end
#===============================================================================
# Blizzard's slice_text method. Slightly modified by KK20 to include a
# "new line" feature. Use "\n" in your strings to use it.
#===============================================================================
class Bitmap
  def slice_text(text, width)
    lines = text.split("\n")
    result = []
    lines.each{|text_chunk|
      words = text_chunk.split(' ')
      current_text = words.shift
      if words.empty?
        result.push((current_text == nil ? "" : current_text))
        next
      end
      words.each_index {|i|
        if self.text_size("#{current_text} #{words[i]}").width > width
          result.push(current_text)
          current_text = words[i]
        else
          current_text = "#{current_text} #{words[i]}"
        end
        result.push(current_text) if i >= words.size - 1
      }
    }
    return result
  end
end

Replace the old script with this one.
Title: Re: Disable using items on other characters?
Post by: firevenge007 on November 09, 2013, 08:47:01 pm
Thank you! This is exactly what I wanted.

I wrote all of my necessary material with this. Thanks!

    when 2 then [
      ["Introduction to Fishing", "Fish are a source of both food and magic. Fish are caught in multiples, which allow for a more efficient source of energy."],
      ["Level 1 - Sardine", "Can be fished after the completion of the Rat Catcher Quest. Talk to the Captain at the Emporian Docks to get there. Requires a Fly Fishing Pole and bait."],
      ["Level 15 - Trout", "Can be fished in the Emporian River."],
      ["Level 25 - Salmon", "Requires Level 21 Combat to access the Lakiki Desert. They are found in a small oasis. \n\ Requires a Strong Fishing Pole and bait."],
      ["Level 35 - Lobster", "Found in a half-frozen lake in the Fairy's meadow. \n\ Requires Lobster Pot and Lobster Bait."],
      ["Level 45 - Shark", "Requires a Fishing scroll obtainable from Legends which requires 55 Legends to obtain. The fishing spot is located in East Emporia. \n\ Requires Harpoon, Nets, Vials of Blood, and Stabilizers for the net."],
      ["Level 55 - Fire Ray", "Completion of the Milk quest is required to fish these. They are located in the Jungle. \n\ Catched by hand."],
      ["Level 150 - Deep Sea Fishing", "Requires access to the foreign lands. \n\ Requires a Deep Sea Fishing Pole and Deep Sea Fishing bait."]
      ]
    when 3 then [
      ["Introduction to Agility", "Agility is useful for accessing quick shortcuts, or even entire new locations. \n\ Agility also offers protection in combat with the increased chance of evading with every level."],
      ["Level 1 - Lakiki Agility Course", "Can be accessed at West Lakiki Island."],
      ["Level 15 - Icy Agility Course", "Ccan be accessed near the Combat guild in Fairy's meadow."],
      ["Level 25 - Heavenly Agility Course", "Can be found when accessing Heaven through the rainbow in East Lakiki."],
      ["Level 35 - Musaph Agility Course", "Can be accessed by traveling through the Swamps north of East Lakiki. \n\ Requires completion of Quest of the Musaph and 80 Legends for the Agility Scroll."],
      ["Level 45 - Enhanced Agility Course", "A shortcut to the Regular Musaph Agility Course opens at this level."],
      ["Level 80 - Mountain Agility Course", "Can be accessed through the Inpenetrable Pass."]
      ]
    when 4 then [
      ["Introduction to Legend", "Legend is a skill in which you delve into dungeons and battle ferocious monsters in order to reach the final destination. \n\ The Main source for leveling Legend is through the Elemental Floors, which can be accessed by talking to the Legend master near the Combat guild in the Fairy's meadow. \n\ Leveling legend gives access to new weapons, abilities, and even areas which offer more efficient ways of making money or leveling your skills."],
      ["Level 1 - Earth Floor 1", "Can be found in the Legend Area, by talking to the Legend Master, north of the Combat guild in Fairy's meadow."],
      ["Level 10 - Earth Floor 2", "Can be found in the Legend Area, by talking to the Legend Master, north of the Combat guild in Fairy's meadow."],
      ["Level 20 - Water Floor 3", "Can be found in the Legend Area, by talking to the Legend Master, north of the Combat guild in Fairy's meadow."],
      ["Level 30 - Water Floor 5", "Can be found in the Legend Area, by talking to the Legend Master, north of the Combat guild in Fairy's meadow."],
      ["Level 40 - Wind Floor 6", "Can be found in the Legend Area, by talking to the Legend Master, north of the Combat guild in Fairy's meadow."],
      ["Level 50 - Wind Floor 7", "Can be found in the Legend Area, by talking to the Legend Master, north of the Combat guild in Fairy's meadow."],
      ["Level 60 - Fire Floor 8", "Can be found in the Legend Area, by talking to the Legend Master, north of the Combat guild in Fairy's meadow."],
      ["Level 70 - Fire Floor 9", "Can be found in the Legend Area, by talking to the Legend Master, north of the Combat guild in Fairy's meadow."],
      ["Level 80 - Elemental Floor 10", "Can be found in the Legend Area, by talking to the Legend Master, north of the Combat guild in Fairy's meadow."],
      ["Level 90 - Elemental Floor 11", "Can be found in the Legend Area, by talking to the Legend Master, north of the Combat guild in Fairy's meadow."],
      ["Level ? - World Dungeons", "World Dungeons are scattered dungeons all over the world. They vary based on Legend level and can only be raided once. After the dungeon has been defeated, it is yours to keep."],
      ]
    when 8 then [
      ["Introduction to Farming", "To start farming, visit the area west of Emporia. \n\ Planting tostle seeds is a good way to raise farming at low levels. \n\ Your plants grow over-time, and when they are ready to harvest, you must go collect them. \n\ Plants have a variety of uses from helping make potions, and could be used to make bows, or planks, to build your house. \n\ The use of each plant varies."],
      ["Level 1 - Tostle Plant", "Can be planted in Herb Patches"],
      ["Level 10 - Rosemary Plant", "Can be planted in Herb Patches"],
      ["Level 15 - Oak Tree", "Can be planted in Tree plots. \n\ Requires Scroll of Secrets 2 to access."],
      ["Level 20 - Ratheford Plant", "Can be planted in Herb Patches."],
      ["Level 30 - Willow Tree", "Can be planted in Tree plots. \n\ Requires Scroll of Secrets 2 to access."],
      ["Level 35 - Mirabelle Plant", " Can be planted in Herb Patches."],
      ["Level 45 - Maple Tree","Can be planted in Tree plots. \n\ Requires Scroll of Secrets 2 to access."],
      ["Level 45 - Pumpkin", "Can be planted in a Pumpkin Patch plot."],
      ["Level 60 - Yew Tree","Can be planted in Tree plots. \n\ Requires Scroll of Secrets 2 to access."],
      ["Level 75 - Mystic Tree","Can be planted in Tree plots. \n\ Requires Scroll of Secrets 2 to access."],
      ["Level 100 - Halloween Tree", "Can be planted in the Halloween Tree plot."]
      ]
    when 10 then [
      ["Introduction to Hunting", "Hunting can be accessed by traveling east of Creekside, and going up the Creekside waterfall. \n\ The hunting master will explain what you need to know about getting started with hunting. \n\ The tool box sells supplies which can be used for crafting Perfect skins into useful objects."],
      ["Level 1 - Rabbits", "Perfect Rabbit furs can be crafted into a Rabbit Hat. \n\ This offers a higher success rate when catching rabbits."],
      ["Level 10 - Frogs", "Perfect Frog skins can be used to create Frog-skin boots. \n\ Not only do they offer a decent accuracy bonus, but also offer a higher success rate when catching Frogs."],
      ["Level 15 - Seagulls", "Requires bird nets to catch, which can be purchased at the hunting tool-box. \n\ Perfect Feathers can be used in conjuction with high-tier healing potions (super, and extreme potions) to double the healing effect."],
      ["Level 20 - Squirrels", "Perfect Squirrel furs can be made into squirrel mitts, which offer a higher success rate when catching squirrels."],
      ["Level 30 - Blackbirds", "Requires bird nets to catch, which can be purchased at the hunting tool-box. \n\ Perfect Feathers can be used in conjuction with high-tier healing potions (super, and extreme potions) to double the healing effect."],
      ["Level 40 - Bulls", "A teasing stick, which can be found on the mountain in a crevice where the bulls live, is needed to hunt bulls. \n\ Perfect bull skins can be used to create a Bull-skin vest, which offers a lower rate of engaging combat with the bull, and a higher rate of receiving Perfect Bull skins."],
      ["Level 50 - Jungle Tigers", "Partial Completion of the Milk quest is needed to hunt these creatures. Their fur does not offer any advantages, but does have a very high market, making these skins very valuable."]
      ]
    when 12 then [
      ["Introdction to Building", "To start off, you must purchase a house from an estate agent. \n\ The agent is located in a building shop east of the Quanzfall Outskirts and the Abandoned village. \n\ To purchase a house, you must be willing to give up 100,000 Coins. The benefits of a house are very valuable, though. \n\ These benefits include a very useful home teleport, many ways to restore oneself, a storage system, a means of teleporting to hard-to-reach areas, the ability to enhance some skills using workbenches... the list goes on."],
      ["Level 1 - Chair", "Offers comfort for a tired bottom."],
      ["Level 3 - Small Rug", "Offers beauty to your home."],
      ["Level 5 - Cupboard", "Items can be stored in here."],
      ["Level 5 - Potted Plant", "Offers beauty to your home."],
      ["Level 7 - Fireplace", "Can cook fish you earn from fishing. \n\ Cooked fish offer 50% bonuses."],
      ["Level 8 - Water Supply", "Refills any empty watering cans"],
      ["Level 10 - Chicken Trophy", "Shows your victory against a chicken."],
      ["Level 13 - Basic Carpet", "Offers beauty to your home."],
      ["Level 13 - Bed", "Restores your health to full."],
      ["Level 15 - Table", "This works as a workbench. You may make empty watering cans which can be filled with a Water supply, which offer double farming produce, or Fishing orbs, which offer double fishing catch. Both items can be made out of clay as well."],
      ["Level 16 - Medium Rug", "Offers beauty to your home."],
      ["Level 16 - Majestic Chair", "Offers comfort for a tired bottom. \n\ Unlocks a new teleport."],
      ["Level 20 - Zombie Trophy", "Shows your victory against a zombie."],
      ["Level 20 - Plank Table", "Useful for turning logs into planks."],
      ["Level 22 - Simple Portal", "Used for teleporting to certain locations."],
      ["Level 24 - Large Rug", "Offers beauty to your home."],
      ["Level 24 - Ornate Bed", "Restores your health and magic to full."],
      ["Level 26 - Ornate Plant", "Offers beauty to your home."],
      ["Level 28 - Magic Carpet", "Used as a walk-way to your throne."],
      ["Level 30 - Dragon Trophy", "Shows your victory against a dragon."],
      ["Level 32 - Marble Fireplace", "Can cook fish you earn from fishing. \n\ Cooked fish offer 50% bonuses."],
      ["Level 34 - Throne", "Offers comfort for a tired bottom. \n\ Unlocks a new teleport."],
      ["Level 34 - Enhanced Portal", "Used for teleporting to a variety of locations."],
      ["Level 46 - Ornate Portal", "Used for teleporting to a wide variety of locations."],
      ["Level 54 - Emperial Throne", "Offers comfort for a tired bottom. \n\ Unlocks a new teleport."],
      ["Level 58 - Intricate Obelisk", "Only used after completion of the Milk Quest. \n\ Fragments can be used in conjunction with this obelisk to obtain very strong armour."],
      ["Level 60 - Backyard", "Unlocks a backyard with a new Herb farming patch."]
      ]
    when 13 then [
      ["Introduction to Plundering", "Plundering is a story-driven skill. \n\ You team up with some thiefs to gain the respect of the Saharan Town's royalty to be let into the castle. \n\ To begin plundering, completion of the Dangerous passage quest is required. \n\ This quest can be started in the Lakiki Desert which requires 21 Combat to access, and traveling North into a cave with menacing boulders."],
      ["Level 1 - Civilians", "Offers no more than 100 Coins."],
      ["Level 10 - Farmers", "Offers a variety of Herb and Tree seeds."],
      ["Level 16 - Intern Rogues", "Offers up to 5,000 Coins."],
      ["Level 20 - Intern Guard", "Offers up to 8,000 Coins."],
      ["Level 30 - Guard", "Offers a variety of swords from Bronze to Fire."],
      ["Level 30 - Picklocking the Castle Door", "Offers entry to the Saharan Castle."],
      ["Level 32 - Chest", "Offers up to 20,000 Coins."],
      ["Level 40 - Nobles", "Offers up to 65,000 Coins."],
      ["Level 52 - Legend", "Offers a variety of Legend items \n\ Requires a Legend level of 90 to steal from."]
      ]
    when 14 then [
      ["Introduction to Rogue", "Rogue is a combat-oriented skill in which a rogue master assigns you tasks which you can complete based on your combat and rogue level. \n\ Rogue monsters have potentially valuable drops, which increase in value with each rogue monster. \n\ Higher-level rogue masters offer more difficult, but more rewarding tasks."],
      ["Level 1 - Muck Rogue Master", "Can be reached in the outskirts of Quanzfalls in a little shack."],
      ["level 15 - White Wolf", "This monsters is located in Muck's dungeon."],
      ["Level 25 - Samadaen", "This monster is located in Muck's dungeon."],
      ["Level 35 - Mucaeous", "This monster is located in Muck's dungeon."],
      ["Level 45 - Aberstyne Wolf", "This monster is located in to the East of Muck's Shack."],
      ["Level 60 - Nes Rogue Master", "Can be reached to the south-west of the location of Aberstyne wolves. \n\ He lives in a giant oak tree. \n\ His tasks are considerably more difficult and lengthier. \n\ Only recommended for those who truly enjoy rogue."],
      ["Level 60 - Maelstrom", "This monster is located south-west of Nes's oak tree. \n\ They are located in a small dungeon."],
      ["Level 65 - Soulless Wolf", "This monster can be reached by accessing Nes's rogue dungeon. \n\ A lantern is required for this task."],
      ["Level 70 - Pheonixus", "This monster is very powerful, and located underneath Nes's oak tree, in a dungeon far below ground level. \n\ A lantern is required for this task."],
      ["Level 75 - Vellixum", "This monster can be reached by entering a crevice in the Paladin's Fireplace in Paladin City."],
      ["Level 80 - Rochet", "This monster is located in the Fortmaster's camp in a small dungeon. \n\ Partial completion of the Milk Quest is necessary to access this dungeon."],
      ["Level 90 - Breugus", "This monster can be accessed by heading West of Lakiki Island and entering an area with a circle of stones. \n\ North-east is where the dungeon is located. \n\ A high agility level would help considerably to cross the blazing lava to reach these monsters."],   
      ["Level 100 - Musaphus Rogue Master", "This rogue master is accessed by hopping onto a floating log on a river located South-East of where the Aberstyne wolves live. \n\ A requirement of Level 100 Agility is needed to use this log to reach Tenebris forest, where you can access rogue tasks. \n\ These rogue tasks are very difficult, and are not recommended for anyone under Level 150 Combat."]
      ]
    when 15 then [
      ["Introduction to Scroll-Making", "Scroll-Making is a skill in which you must use Papyrus scrolls purchasable through Scroll salesmen, and use these scrolls on certain obelisks to infuse them with magical abilities. \n\ Papyrus costs 1,000 Coins each, and the first salesman is located in the outskirts of Quanzfalls."],
      ["Level 1 - Light Healing Scrolls", "This obelisk is located East of the first salesman, and east of the Abandoned village, and south of the Fortmaster's Camp. \n\ This scroll can be used for small healing, or healing-over-time in battle."],
      ["Level 5 - Slash Scrolls", "This obelisk is located in the swamp, North of East Lakiki Island. \n\ This scroll offers a magical ability to damage all of your opponents in combat."],
      ["Level 10 - Crush Scrolls", "This obelisk is located in the Saharan Desert. \n\ Completion of the Dangerous Passage Quest is required to access this obelisk. \n\ This scroll offers a magical ability to damage all of your opponents in combat."],
      ["Level 15 - Aberstyne Scrolls", "This obelisk is located South-East of where Aberstyne wolves live. \n\ This scroll offers a teleport near the Aberstyne obelisk."],
      ["Level 20 - Holarian Scrolls", "This obelisk is located in Quanzfalls. \n\ This scroll offers the ability to heal yourself for 400 Health, while wearing a Holarian Staff."],
      ["Level 20 - Urothmus Scrolls", "This obelisk is located South of Quanzfalls, in the Webycium Cave. \n\ This scroll offers the ability to damage all opponents in combat for very high damage, while wearing an Urothmus Staff."],
      ["Level 35 - Arabellus Scrolls", "This oeblisk is located in Paladin City \n\ This scroll offers the ability to enhance your agility potions to make them offer you every more walking speed. (This reverts back to normal once you have teleported)."],
      ["Level 35 - Scroll-Making Guild", "This Guild is located South-West of the large Quanzfalls outskirts. \n\ Here you can level your Scroll-Making through little games like alchemy, teleportation, and mazes. \n\ With your points you earn, you can purchase new ways to train scroll-making, or items that could enhance your magical abilities."],
      ["Level 40 - Vitrum Scrolls", "This obelisk is located South-East of the Aberstyne Wolves, and South of the large oak tree. \n\ This scroll offers the ability to make special-herb potions in multiples of 10, rather than one by one."]
      ]
    when 16 then [
      ["Introduction to Herbalism", "Herbalism is a skill which uses special herbs in order to make potions with special enhancements. \n\ These enhancements range from a boost in accuracy to a boost in strength to even a boost in health. \n\ With the increase of your herbalism, you can make more powerful versions of the basic concoctions."],
      ["Level 1 - Clean Guoren", "Cleans a Guoren Herb."],
      ["Level 1 - Accuracy Potion", "Requires a Guoren Mixture + Tostle Substance"],
      ["Level 5 - Melanose", "Cleans a Melanose Herb."],
      ["Level 5 - Agility potion", "Requires a Melanose Mixture + Aqueous Berries \n\ Aqueous Berries can be found in a cavern south of Lakiki Island in the water."],
      ["Level 10 - Pelepanose", "Cleans a Pelepanose Herb."],
      ["Level 10 - Magical Defense Potion", "Requires a Pelepanose Mixture + Rosemary Substance"],
      ["Level 15 - Ferfella", "Cleans a Ferfella Herb."],
      ["Level 15 - Magical Potion", "Requires a Ferfella Mixture + Ferrore \n\ Ferrore can be obtained by talking to a farmer in the outskirts of Quanzfalls."],
      ["Level 20 - Reganose", "Cleans a Reganose Herb."],
      ["Level 20 - Physical Defense Potion", "Requires a Reganose Mixture + Mirabelle Substance"],
      ["Level 35 - Enhanced Accuracy Potion", "Requires a Guoren Mixture + Desert Root \n\ Desert Root can be bought from at the Foreign lands."],
      ["Level 40 - Enhanced Agility Potion", "Requires a Melanose Mixture + Enchanted Bark \n\ Enchanted Bark can be bought from at the Foreign lands."],
      ["Level 45 - Enchanted Magical Defense Potion", "Requires a Peleanose Mixture + Cinnamon \n\ Cinnamon can be bought from at the Foreign lands."],
      ["Level 50 - Enchanted Magical Potion", "Requires a Ferfella Mixture + Enchanted Grain \n\ Enchanted Grain can be bought from at the Foreign lands."],
      ["Level 55 - Enchanted Physical Defense Potion", "Requires a Reganose Mixture + Lilac Flower \n\ Lilac Flower can be bought from at the Foreign lands."]
      ]
    when 20 then [
      ["Introduction to Holyness", "Holyness is a skill involving freeing the gods. Ferrous, the god that rose to power from human, took advantage of his power and banished Urothmus and Holaria into another realm. \n\ You must read messages that the gods are sending to you as Soul Sprites. \n\ Messages vary in complication, and to decipher these higher-tier messages, your must increase your understanding through leveling your Holyness. \n\ To start training, you must pay the hooded Ferrous guard to allow you entry to a sacred area in the Ridgeville woods."],
      ["Level 1 - Light Energy Portal", "This portal is located North of the Ridgeville Woods"],
      ["Level 10 - Healing Energy Portal", "This portal is located on Lakiki Island"],
      ["level 20 - Destructive Energy Portal", "This portal is located in the Ruins of Urothmus, North of Quanzfalls."],
      ["Level 30 - Dense Energy Portal", "This portal is located in the Jungle. \n\ Partial completion of the Milk Quest is required to access this area."],
      ["Level 40 - Combusting Energy Portal", "This portal is located in Paladin City."],
      ]
Title: Re: Disable using items on other characters?
Post by: KK20 on November 10, 2013, 12:09:22 am
It's actually \n not \n\
Unless it's working fine as is that way.

But glad it's all good :D If there's anything else that needs tweaking, post away.
Title: Re: Disable using items on other characters?
Post by: firevenge007 on November 10, 2013, 02:54:13 am
I actually think the system is perfect. You should post it on a script thread so that others can use it as well!

Anyways, I'll probably request another script soon.

The skill, "scroll-making" in my game, requires a player to make scrolls, which are used in spells. These spells require the scrolls to be used through a common event, which make the player cast in combat and lose sp before a message tells the player that he/she cannot cast this spell.
Also, I am not able to make very intricate combat spells due to the fact that it all has to be in a common event. To combat this, I just randomly altered the damage output of the spell based on the user's scroll-making level, so that if a randomly generated variable X, from 1 to 10 was equal to Y, then Y would equal 400 Damage (example).

I'm not sure if you're up for that, but I'll definitely post a new thread about it soon.

Thank you again for your help on this one. :)