I recently decided to use Dargor's large party script that allows more than 4 characters in the party. Sadly, I noticed that only the first four characters appear in the shop menu. Is there any way to fix this? I'm using the default shop script if you are wondering.
There's Dargo's script if needed:
#==============================================================================
# ** Large Party
#------------------------------------------------------------------------------
# Author: Dargor
# Version 1.3
# 02/08/2007
#==============================================================================
#==============================================================================
# ** Large Party Customization Module
#==============================================================================
module Dargor
module Large_Party
# Maximum number of actors allowed in the party
Max_Size = 9
# Battle status window refresh rate (used in phase5)
Battle_Refresh_Rate = 32
end
end
#==============================================================================
# ** Game_Temp
#------------------------------------------------------------------------------
# This class handles temporary data that is not included with save data.
# Refer to "$game_temp" for the instance of this class.
#==============================================================================
class Game_Temp
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :battle_actor_index # @actor_index in battle scene
#--------------------------------------------------------------------------
# * Alias Listing
#--------------------------------------------------------------------------
alias large_party_temp_initialize initialize
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
large_party_temp_initialize
@battle_actor_index = 0
end
end
#==============================================================================
# ** Game_Party
#------------------------------------------------------------------------------
# This class handles the party. It includes information on amount of gold
# and items. Refer to "$game_party" for the instance of this class.
#==============================================================================
class Game_Party
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :max_size # Max number of actors allowed in the party
#--------------------------------------------------------------------------
# * Alias Listing
#--------------------------------------------------------------------------
alias large_party_initialize initialize
alias large_party_add_actor add_actor
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
large_party_initialize
@max_size = Dargor::Large_Party::Max_Size
end
#--------------------------------------------------------------------------
# * Add an Actor
# actor_id : actor ID
#--------------------------------------------------------------------------
def add_actor(actor_id)
# Original method
large_party_add_actor(actor_id)
# Get actor
actor = $game_actors[actor_id]
# If the party has less than 4 members and this actor is not in the party
if @actors.size < @max_size and not @actors.include?(actor)
# Add actor
@actors.push(actor)
# Refresh player
$game_player.refresh
end
end
end
#==============================================================================
# ** Sprite_Battler
#------------------------------------------------------------------------------
# This sprite is used to display the battler.It observes the Game_Character
# class and automatically changes sprite conditions.
#==============================================================================
class Sprite_Battler < RPG::Sprite
#--------------------------------------------------------------------------
# * Alias Listing
#--------------------------------------------------------------------------
alias large_party_sprite_update update
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
# Original method
large_party_sprite_update
# Set sprite coordinates
if @battler.is_a?(Game_Actor)
self.x = @battler.screen_x - ($game_temp.battle_actor_index / 4) * 640
end
end
end
#==============================================================================
# ** Spriteset_Battle
#------------------------------------------------------------------------------
# This class brings together battle screen sprites. It's used within
# the Scene_Battle class.
#==============================================================================
class Spriteset_Battle
#--------------------------------------------------------------------------
# * Alias Listing
#--------------------------------------------------------------------------
alias large_party_spriteset_update update
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
# Cycle through all extra actors (4+)
# Create/update sprites
for i in 4...$game_party.actors.size
if @actor_sprites[i].nil?
@actor_sprites.push(Sprite_Battler.new(@viewport2))
end
@actor_sprites[i].battler = $game_party.actors[i]
end
# Original method
large_party_spriteset_update
end
end
#==============================================================================
# ** Window_MenuStatus
#------------------------------------------------------------------------------
# This window displays party member status on the menu screen.
#==============================================================================
class Window_MenuStatus < Window_Selectable
#--------------------------------------------------------------------------
# * Alias Listing
#--------------------------------------------------------------------------
alias large_party_menu_status_initialize initialize
alias large_party_menu_status_refresh refresh
alias large_party_menu_status_update_cursor_rect update_cursor_rect
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
# Original method
large_party_menu_status_initialize
# Adjust contents height
@item_max = $game_party.actors.size
height = @item_max * 120
self.contents = Bitmap.new(width - 32, height - 32)
# Refresh
refresh
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh(*args)
# Original method
large_party_menu_status_refresh(*args)
# Adjust default height
self.height = 480
end
#--------------------------------------------------------------------------
# * Cursor Rectangle Update
#--------------------------------------------------------------------------
def update_cursor_rect
large_party_menu_status_update_cursor_rect
row = @index / @column_max
if row < self.top_row
self.top_row = row
end
if row > self.top_row + (self.page_row_max - 1)
self.top_row = row - (self.page_row_max - 1)
end
cursor_width = self.width / @column_max - 32
x = @index % @column_max * (cursor_width + 32)
y = @index / @column_max * 116 - self.oy
self.cursor_rect.set(x, y, cursor_width, 96)
end
#--------------------------------------------------------------------------
# * Top Row
#--------------------------------------------------------------------------
def top_row
return self.oy / 116
end
#--------------------------------------------------------------------------
# * Set Top Row
# row : new row
#--------------------------------------------------------------------------
def top_row=(row)
if row < 0
row = 0
end
if row > row_max - 1
row = row_max - 1
end
self.oy = row * 116
end
#--------------------------------------------------------------------------
# * Page Row Max
#--------------------------------------------------------------------------
def page_row_max
return 4
end
end
#==============================================================================
# ** Window_BattleStatus
#------------------------------------------------------------------------------
# This window displays the status of all party members on the battle screen.
#==============================================================================
class Window_BattleStatus < Window_Base
#--------------------------------------------------------------------------
# * Alias Listing
#--------------------------------------------------------------------------
alias large_party_battle_status_initialize initialize
alias large_party_battle_status_refresh refresh
alias large_party_battle_status_update update
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
@column_max = 4
large_party_battle_status_initialize
width = $game_party.actors.size * 160
self.contents = Bitmap.new(width - 32, height - 32)
self.width = 640
@level_up_flags = []
for i in 0...$game_party.actors.size
@level_up_flags << false
end
@item_max = $game_party.actors.size
refresh
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
# Refresh contents when actors are added/removed in-battle
if $game_party.actors.size != @item_max
@item_max = $game_party.actors.size
width = @item_max * 160
self.contents = Bitmap.new(width - 32, height - 32)
self.width = 640
end
large_party_battle_status_refresh
column = $game_temp.battle_actor_index / 4
self.ox = column * 640
end
end
#==============================================================================
# ** Scene_Battle
#------------------------------------------------------------------------------
# This class performs battle screen processing.
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# * Alias Listing
#--------------------------------------------------------------------------
alias large_party_phase3_setup_command_window phase3_setup_command_window
alias large_party_update_phase4_step2 update_phase4_step2
alias large_party_start_phase5 start_phase5
alias large_party_update_phase5 update_phase5
#--------------------------------------------------------------------------
# * Actor Command Window Setup
#--------------------------------------------------------------------------
def phase3_setup_command_window
$game_temp.battle_actor_index = @actor_index
@status_window.refresh
large_party_phase3_setup_command_window
@actor_command_window.x = (@actor_index%4) * 160
end
#--------------------------------------------------------------------------
# * Frame Update (main phase step 2 : start action)
#--------------------------------------------------------------------------
def update_phase4_step2
if @active_battler.is_a?(Game_Actor)
$game_temp.battle_actor_index = @active_battler.index
@status_window.refresh
end
large_party_update_phase4_step2
end
#--------------------------------------------------------------------------
# * Frame Update (main phase step 4 : animation for target)
#--------------------------------------------------------------------------
def update_phase4_step4
if @target_battlers[0] != nil
$game_temp.battle_actor_index = @target_battlers[0].index
@status_window.refresh
end
# Animation for target
for target in @target_battlers
target.animation_id = @animation2_id
target.animation_hit = (target.damage != "Miss")
end
# Animation has at least 8 frames, regardless of its length
@wait_count = 8
# Shift to step 5
@phase4_step = 5
end
#--------------------------------------------------------------------------
# * Start After Battle Phase
#--------------------------------------------------------------------------
def start_phase5
@actor_index = 0
@status_wait = Graphics.frame_count
large_party_start_phase5
end
#--------------------------------------------------------------------------
# * Frame Update (after battle phase)
#--------------------------------------------------------------------------
def update_phase5
refresh_rate = Dargor::Large_Party::Battle_Refresh_Rate
if Graphics.frame_count >= @status_wait + refresh_rate
$game_temp.battle_actor_index = @actor_index
@status_window.refresh
@status_wait = Graphics.frame_count
max = ($game_party.actors.size.to_f/4).ceil * 4
@actor_index = (@actor_index+1) % max
end
large_party_update_phase5
end
end
This is my speciality. I can write a fix for you right now - hold on just a few minutes.
EDIT: Are you hoping for a shop window with a specific maximum number of characters (5 or 6 or whatever,) or for one that accounts for any number of characters in the party? Either way should be pretty doable, though the former would probably be a bit simpler.
EDIT 2: Looks like the maximum value that you have set in the script is nine. That's big enough that it'll probably be easier to make one that scrolls to accommodate any number of party members. I'll have that ready in a few minutes....
EDIT 3: Because the actor shopping window never actually scrolls, this might be harder than I thought. Sorry to let you down. :( I'll see if I can come up with an idea to make this work, but you might have to just end up using a different shop interface. There are a few in the Script Database, if you want to take a look.
That's ok, thanks for your help.
I've tried other shop scripts such as Leon's but all of them seems to have the same problem.
This is actually going to need to be a script request. Since your party can be a size of 9, trying to draw all the actors in the party in the same way as the shop scene does it is not going to fit on the screen.
You should describe (or better yet, provide a picture) of what you would want the scene to look like and any extra controls should there be any.
So it's happens that I asked this in another site and I got a script that allows me to use the L & R member cycling keys i.e the Q & W on the keyboard to switch between the buy window and the status window where all the characters are displayed.
I will leave it here:
#==============================================================================
# ** Large Party Scene Shop & Window Expansion
#------------------------------------------------------------------------------
# by DerVVulfman
# version 1.0
# 08-28-2013
# RGSS / RPGMaker XP
#------------------------------------------------------------------------------
#
# Requested by: Simon Greedwell
#
# Just a quick rewrite of the Shop Status window and Scene_Shop script to
# allow Dargor's Large Party system work. It should also work with other
# similar large party systems for RPGMaker XP, but untried. However, the
# highlighting feature works even without the use of a large party system.
#
# When in the Shop Buy window, hitting the L & R member cycling keys ( or
# the Q & W on the keyboard ), you exit the Buy window & enter the status
# window. During this time, all the members within the window will be
# highlighted. Use Up/Down keys to scroll through them. ESC returns you
# to the Buy window.
#
#==============================================================================
#==============================================================================
# ** Window_ShopStatus
#------------------------------------------------------------------------------
# This window displays number of items in possession and the actor's equipment
# on the shop screen.
#==============================================================================
class Window_ShopStatus < Window_Base
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :index # Window Index
attr_accessor :item_max # Window Max Items
#--------------------------------------------------------------------------
# * Alias Listing
#--------------------------------------------------------------------------
alias large_party_shop_status_initialize initialize
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
# Original method
large_party_shop_status_initialize
# Set Contents index
@index = 0
# Set Contents size
@item_max = $game_party.actors.size
# Refresh
refresh
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
return if @item.nil?
case @item
when RPG::Item ; number = $game_party.item_number(@item.id)
when RPG::Weapon ; number = $game_party.weapon_number(@item.id)
when RPG::Armor ; number = $game_party.armor_number(@item.id)
end
self.contents.font.color = system_color
self.contents.draw_text(4, 0, 200, 32, "number in possession")
self.contents.font.color = normal_color
self.contents.draw_text(204, 0, 32, 32, number.to_s, 2)
return if @item.is_a?(RPG::Item)
# Create Start and End points for actor sorting
start_count = 0 + @index
end_count = start_count + 3
end_count = $game_party.actors.size if end_count > $game_party.actors.size
# Reset Line Count for Text Display
line_count = 0
# Equipment adding information
for i in start_count..end_count
# Get actor
actor = $game_party.actors[i]
# If equippable, use normal text color, otherwise use invalid text color
self.contents.font.color = (actor.equippable?(@item)) ?
normal_color : disabled_color
# Draw actor's name
self.contents.draw_text(4, 48 + 64 * line_count, 120, 32, actor.name)
# Get current equipment
if @item.is_a?(RPG::Weapon)
# For Weapon
item1 = $data_weapons[actor.weapon_id]
else
# For armor, branched on Armor kind
case @item.kind
when 0 ; item1 = $data_armors[actor.armor1_id]
when 1 ; item1 = $data_armors[actor.armor2_id]
when 2 ; item1 = $data_armors[actor.armor3_id]
else ; item1 = $data_armors[actor.armor4_id]
end
end
# If equippable
if actor.equippable?(@item)
# If weapon
if @item.is_a?(RPG::Weapon)
atk1 = item1 != nil ? item1.atk : 0
atk2 = @item != nil ? @item.atk : 0
change = atk2 - atk1
end
# If armor
if @item.is_a?(RPG::Armor)
pdef1 = item1 != nil ? item1.pdef : 0
mdef1 = item1 != nil ? item1.mdef : 0
pdef2 = @item != nil ? @item.pdef : 0
mdef2 = @item != nil ? @item.mdef : 0
change = pdef2 - pdef1 + mdef2 - mdef1
end
# Draw parameter change values
self.contents.draw_text(124, 48 + 64 * line_count, 112, 32,
sprintf("%+d", change), 2)
end
# Draw item
unless item1.nil?
x = 4
y = 80 + 64 * line_count
bitmap = RPG::Cache.icon(item1.icon_name)
opacity = self.contents.font.color == normal_color ? 255 : 128
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
self.contents.draw_text(x + 28, y, 212, 32, item1.name)
end
# Advance Line by 1
line_count += 1
end
# Update Cursor Rectangle
update_cursor_rect
end
#--------------------------------------------------------------------------
# * Update Cursor Rectangle
#--------------------------------------------------------------------------
def update_cursor_rect
# Remove if window is inactive
return self.cursor_rect.empty unless self.active
# Update cursor rectangle
self.cursor_rect.set(0, 48, 240, 256)
end
end
#==============================================================================
# ** Scene_Shop
#------------------------------------------------------------------------------
# This class performs shop screen processing.
#==============================================================================
class Scene_Shop
#--------------------------------------------------------------------------
# * Alias Listing
#--------------------------------------------------------------------------
alias large_party_scene_shop_update update
alias large_party_scene_shop_update_buy update_buy
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
large_party_scene_shop_update
# If status window is active: call update_status
if @status_window.active
update_status
return
end
end
#--------------------------------------------------------------------------
# * Frame Update (when buy window is active)
#--------------------------------------------------------------------------
def update_buy
large_party_scene_shop_update_buy
@status_window.active = false
# If C button was pressed
if Input.trigger?(Input::L) or Input.trigger?(Input::R)
# Play decision SE
$game_system.se_play($data_system.cursor_se)
@status_window.active = true
@buy_window.active = false
@status_window.refresh
return
end
end
#--------------------------------------------------------------------------
# * Frame Update (when buy window is active)
#--------------------------------------------------------------------------
def update_status
if Input.repeat?(Input::DOWN)
$game_system.se_play($data_system.cursor_se)
max = @status_window.item_max - 4
val = @status_window.index += 1
val = max if val > max
@status_window.index = val
@status_window.refresh
end
if Input.repeat?(Input::UP)
$game_system.se_play($data_system.cursor_se)
val = @status_window.index -= 1
val = 0 if val < 0
@status_window.index = val
@status_window.refresh
end
# If C button was pressed
if Input.trigger?(Input::B)
# Play decision SE
$game_system.se_play($data_system.cancel_se)
@status_window.active = false
@buy_window.active = true
@status_window.refresh
return
end
end
end