赞 | 1 |
VIP | 171 |
好人卡 | 21 |
积分 | 4 |
经验 | 59678 |
最后登录 | 2024-7-30 |
在线时间 | 1292 小时 |
Lv2.观梦者
- 梦石
- 0
- 星屑
- 362
- 在线时间
- 1292 小时
- 注册时间
- 2013-1-12
- 帖子
- 3590
|
Galv是神.... 他寫的腳本都不錯 不过要翻牆...
http://galvs-scripts.com/2013/06/15/army-manager/
這个剛剛好就是你需要的... 英文沒問題就行了....
#------------------------------------------------------------------------------# # Galv's Army Manager #------------------------------------------------------------------------------# # For: RPGMAKER VX ACE # Version 1.0 # Requested by Rue #------------------------------------------------------------------------------- # This script was designed for tactical battle system games to manager party # members (your army). You can arrange, dismiss, equip, etc. your units from # this scene as well as display some army and game related information. #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- # NOTE TAG - ACTORS OR CLASSES #------------------------------------------------------------------------------- # <a_icon: x> # icon displayed left of actor in the army manager. This icon # # will only appear if you set the ICONTYPES accordingly #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- # SCRIPT CALLS #------------------------------------------------------------------------------- # manage_army # Calls the army manager scene # # a_icon(id,icon_id) # Change an actor's icon during game. # a_access(id,x) # if x is false cannot access actor at all. Default true # a_cmd(id,:cmd,x) # used to enable/disable commands for certain actors # # :cmd is the CMD ID of the command (further down) # # x can be true or false to disable/enable commands # # armyname("Name") # Changes the name of your army #------------------------------------------------------------------------------- # EXAMPLES # a_cmd(1,:dismiss,false) # Disable the "DISMISS" command for actor 1 # a_cmd(4,:order,true) # Enable the "ORDER" command for actor 4. # # All commands are true (enabled) by default #------------------------------------------------------------------------------- ($imported ||= {})["Galv_ArmyManager"] = true module GARMY #------------------------------------------------------------------------------- # # * SETTINGS # #------------------------------------------------------------------------------- # Some Default Settings NO_ACTOR_ICON = 186 # Icon ID used if you don't tag actor with <a_icon: x> NO_CLASS_ICON = 162 # Icon ID used if you don't tag class with <a_icon: x> NO_WEAPON_ICON = 186 # Icon ID used if nothing is equipped ICONTYPE1 = :actor # these ICONTYPES can be :actor, :class or :weapon ICONTYPE2 = :weapon # This will show either the class icon, actor icon (if # ou note tagged them) or the equipped weapon icon to # the left of the actor's sprite. SPRITE_X_POS = 1.6 # width of box divided by this number to position the # character sprite. (2 is central). Default 1.6 B_MEMBERS = false # highlight members in party that are 'battle members' # true or false B_MEMBER_COLOR = 16 # windowskin color for battle member highlight box that # appears if B_MEMBERS = true # Army Info UNIT_COUNT = "Units: " # Party member count text HIGH_LEVEL = "Highest Level: " # Highest level text TIME = "Time: " # Time text FUNDS = "Funds: " # Gold amount text INFOVAR1 = 1 # Variable id used to display in info window INFOVAR2 = 2 # Variable id used to display in info window # Displays the variable name beside these. # Sounds DISMISS_SE = ["Blow8",100,100] # ["SE_Name",volume,pitch] for dimiss SE ORDER_SE = ["Wind7",100,100] # ["SE_Name",volume,pitch] for order SE # Command Setup # (Command list appears when you select a unit from your army) CMDS = { # CMD ID => ["NAME", :Scene_Class, switch, icon], :equip => ["EQUIP", :Scene_Equip, 1, 161], :status => ["STATUS", :Scene_Status,0, 236], :order => ["ORDER", :order, 0, 12], # Change only "NAME" :dismiss => ["DISMISS", :dismiss, 0, 187], # Change only "NAME" #:class => ["JOB", :Scene_Class, 0, 121], # Example yanfly class #:item => ["USE ITEM", :Scene_Item, 0, 261], } # don't touch #------------------------------------------------------------------------------- # EXPLANATION: #------------------------------------------------------------------------------- # CMD ID = unique identifier for the menu command (scripting purposes). Use # anything here but do not change :order or :dismiss or those options # will no longer function. You can, however, remove them. # "NAME" = Menu command text # :Scene_Class = The name of the scene class as a symbol # switch = a swith ID. Turn this switch ON to disable the menu command # icon = the icon ID to go with the menu command #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- # # * END OF SETTINGS # #------------------------------------------------------------------------------- end # GARMY #----------------------# #---| Game_Interpreter |---------------------------------------------------- #----------------------# class Game_Interpreter def manage_army; SceneManager.call(Scene_Army); end def a_access(id,status); $game_actors[id].a_accessible = status; end def a_cmd(id,cmd_name,status) $game_actors[id].a_cmds[cmd_name] = status end def a_icon(id,icon_id); $game_actor[id].a_icon = icon_id; end def armyname(name); $game_party.armyname = name; end end # Game_Interpreter #----------------# #---| Game_Party |---------------------------------------------------------- #----------------# class Game_Party attr_accessor :last_atroop attr_accessor :armyname alias galv_garmy_gp_initialize initialize def initialize @armyname = "Unnamed Army" galv_garmy_gp_initialize end end # Game_Party #------------------# #---| SceneManager |-------------------------------------------------------- #------------------# module SceneManager def self.gcall(scene_class) @stack.push(@scene) [url=home.php?mod=space&uid=420706]@Scene[/url] = Kernel.const_get(scene_class).new end end # SceneManager #----------------------# #---| RPG::CLASS/ACTOR |---------------------------------------------------- #----------------------# class RPG::Class def a_icon if @a_icon.nil? if @note =~ /<a_icon: (.*)>/i @a_icon = $1.to_i else @a_icon = GARMY::NO_CLASS_ICON end end @a_icon end end # RPG::Class class RPG::Actor def a_icon if @a_icon.nil? if @note =~ /<a_icon: (.*)>/i @a_icon = $1.to_i else @a_icon = GARMY::NO_ACTOR_ICON end end @a_icon end end # RPG::Class #----------------# #---| Game_Actor |---------------------------------------------------------- #----------------# class Game_Actor attr_accessor :a_accessible attr_accessor :a_cmds attr_accessor :a_icon alias galv_garmy_ga_setup setup def setup(actor_id) @a_accessible = true @a_icon = $data_actors[actor_id].a_icon @a_cmds = {} GARMY::CMDS.each { |cmd| @a_cmds[cmd[0]] = true } galv_garmy_ga_setup(actor_id) end end # Game_Actor #-----------------# #---| Scene_Army |--------------------------------------------------------- #-----------------# class Scene_Army < Scene_MenuBase def start super create_help_window create_info_window create_troop_window create_command_window create_face_window end #-----| CREATE STUFF | def create_help_window @help_window = Window_ArmyHelp.new @help_window.viewport = @viewport end def create_info_window @info_window = Window_ArmyInfo.new @info_window.viewport = @viewport end def create_troop_window wy = @help_window.height ww = Graphics.width wh = Graphics.height - @help_window.height - @info_window.height @troop_window = Window_Troops.new(0,wy,ww,wh) @troop_window.help_window = @help_window @troop_window.viewport = @viewport @troop_window.activate @troop_window.set_handler(:ok, method(:on_troop_ok)) @troop_window.set_handler(:cancel, method(:return_scene)) end def create_command_window wx = Graphics.width / 2 wy = (Graphics.height - @info_window.height - @help_window.height) / 2 @command_window = Window_ArmyCommand.new(wx,wy) @command_window.viewport = @viewport GARMY::CMDS.each { |cmd| handle = cmd[1][0].delete(' ').downcase.to_sym @command_window.set_handler(handle, method(:cmd)) } @command_window.set_handler(:cancel, method(:back_to_troop)) @command_window.y -= @command_window.height / 2 - @help_window.height @command_window.hide.deactivate end def create_face_window ww = @command_window.width wh = @command_window.height wx = @command_window.x wy = @command_window.y @face_window = Window_ArmyFace.new(wx,wy,ww,wh) @face_window.viewport = @viewport @face_window.hide end #-----| HANDLERS | def cmd list = GARMY::CMDS.to_a cmd = @command_window.index symbol = list[cmd][1][1] if custom_action(symbol) custom_on_command_ok(symbol) else SceneManager.gcall(list[cmd][1][1]) end end def custom_action(symbol) case symbol when :dismiss, :order return true else return false end end def custom_on_command_ok(symbol) case symbol when :dismiss do_dismiss when :order start_ordering end end def start_ordering if $game_party.last_atroop.a_cmds[:order] @troop_window.order_on @ordering = true @troop_window.psound = GARMY::ORDER_SE else Sound.play_buzzer end back_to_troop end def do_dismiss @troop_window.dismiss back_to_troop end def on_troop_ok if @ordering @troop_window.swap_actor @ordering = false back_to_troop else $game_party.last_atroop = actor $game_party.menu_actor = actor @command_window.refresh @face_window.refresh @command_window.show.activate @face_window.show.activate end end def back_to_troop @command_window.hide.deactivate @face_window.hide @troop_window.activate end def return_scene if @troop_window.ordering_on @ordering = false @troop_window.cancel_ordering @troop_window.activate else $game_party.last_atroop = nil SceneManager.return end end #-----| OTHER STUFF | def actor; @troop_window.actor; end def terminate super end def update super end end # Scene_Army < Scene_MenuBase #----------------------# #---| Window_ArmyHelp |---------------------------------------------------- #----------------------# class Window_ArmyHelp < Window_Help def initialize super(1) @icons = [] end def set_text(text) if text != @text @text = text refresh end end def clear set_text("") @icons = [] [url=home.php?mod=space&uid=95897]@actor[/url] = nil end def set_item(actor) @actor = actor @icons = [get_icon(GARMY::ICONTYPE1,actor),get_icon(GARMY::ICONTYPE2,actor)] set_text(actor ? create_text(actor) : "") end def create_text(actor) n = actor.name c = actor.class.name l = Vocab::level_a + actor.level.to_s text = n + " - " + l + " " + c return text end def get_icon(icontype,actor) return 0 if !actor case icontype when :actor return actor.a_icon when :class return $data_classes[actor.class_id].a_icon when :weapon if actor.equips[0].nil? return GARMY::NO_WEAPON_ICON else return actor.equips[0].icon_index end else return 0 end end def refresh contents.clear contents.font.size = 21 if Graphics.height < 480 if !@icons.empty? draw_icon(@icons[0], 0, 0) draw_icon(@icons[1], 28, 0) end if @actor offset = Graphics.width >= 640 ? 0 : -100 draw_actor_hp(@actor, 355 + offset, 0) draw_actor_mp(@actor, 490 + offset, 0) draw_text(62, 0, 280 + offset, line_height, @text) end end end # Window_ArmyHelp < Window_Help #--------------------# #---| Window_Troops |------------------------------------------------------ #--------------------# class Window_Troops < Window_Selectable attr_accessor :pending_index attr_accessor :ordering_on attr_accessor :psound def initialize(x, y, width, height) super @data = [] @last_index ||= 0 @animtime = 0 [url=home.php?mod=space&uid=348285]@walk[/url] = 0 @pending_index = -1 refresh select_last end #------| Sizes and Stuff | def item_width (width - standard_padding * 2 + spacing) / col_max - spacing end def item_height; item_width; end def spacing; return 10; end def col_max; return 6; end def item_max; @data ? @data.size : 1; end def actor; @data && index >= 0 ? @data[index] : nil; end def current_item_enabled? enable?(@data[index]) end def include?(actor) return false if actor.nil? return true end def enable?(actor) return false if !actor return false if !actor.a_accessible return false if @ordering_on && !actor.a_cmds[:order] return true end def make_item_list @data = $game_party.members.select {|actor| include?(actor) } @data.push(nil) if include?(nil) end def select_last select(@data.index($game_party.last_atroop) || 0) end def swap_actor $game_party.swap_order($game_party.last_atroop.index,index) @pending_index = -1 @ordering_on = nil refresh end def actor_rect(index) rect = Rect.new rect.width = item_width rect.height = item_height rect.x = index % col_max * (item_width + spacing) rect.y = index / col_max * item_height rect end def offset Graphics.height < 480 ? 0 : 10 end def draw_item(index) actor = @data[index] if actor rect = actor_rect(index) rect.width -= 4 draw_in_battle_party(index) if GARMY::B_MEMBERS draw_selected(index) draw_actor_text(actor,rect.x + 2,rect.y + 38 + offset, enable?(actor), rect.width) draw_character(actor.character_name, actor.character_index, rect.x + item_width / GARMY::SPRITE_X_POS - 1, rect.y + 38 + offset, enable?(actor),index) end end def draw_selected(index) if index == @pending_index pendrect = item_rect(index) pendrect.x += 1 pendrect.y += 1 pendrect.width -= 2 pendrect.height -= 2 contents.fill_rect(pendrect, pending_color) end end def draw_in_battle_party(index) if index < $game_party.max_battle_members rect = item_rect(index) w = 1 c = text_color(GARMY::B_MEMBER_COLOR) trect = Rect.new(rect.x,rect.y,rect.width,w) lrect = Rect.new(rect.x,rect.y,w,rect.height) rrect = Rect.new(rect.x + rect.width - w,rect.y,w,rect.height) brect = Rect.new(rect.x,rect.y + rect.height - w,rect.width,w) contents.fill_rect(trect,c) contents.fill_rect(lrect,c) contents.fill_rect(rrect,c) contents.fill_rect(brect,c) end end def square_color end def draw_actor_text(actor, x, y, enabled = true, w) return unless actor icon1 = get_icon(GARMY::ICONTYPE1,actor) icon2 = get_icon(GARMY::ICONTYPE2,actor) draw_icon(icon1, x + 6, y - 20, enabled) draw_icon(icon2, x + 18, y - 20, enabled) change_color(normal_color, enabled) contents.font.size = 18 draw_text(x, y, w, line_height, actor.name,1) contents.font.size = 16 lvl = Vocab::level_a + actor.level.to_s cname = actor.class.name draw_text(x + 10, y - 40, w, line_height, lvl,0) draw_text(x, y + 16, w, line_height, cname,1) end def get_icon(icontype,actor) case icontype when :actor return actor.a_icon when :class return $data_classes[actor.class_id].a_icon when :weapon if actor.equips[0].nil? return GARMY::NO_WEAPON_ICON else return actor.equips[0].icon_index end else return 0 end end def draw_character(character_name, character_index, x, y,enabled,i) return unless character_name bitmap = Cache.character(character_name) sign = character_name[/^[\!\$]./] if sign && sign.include?('$') cw = bitmap.width / 3 ch = bitmap.height / 4 else cw = bitmap.width / 12 ch = bitmap.height / 8 end n = character_index step = 0 step = @walk if enabled && i == index src_rect = Rect.new((n%4*3+1+step)*cw, (n/4*4)*ch, cw, ch) contents.blt(x - cw / 2, y - ch, bitmap, src_rect, enabled ? 255 : 150) end def update_help @help_window.set_item(actor) end def refresh make_item_list create_contents draw_all_items end def order_on @ordering_on = true @pending_index = index refresh end def cancel_ordering @ordering_on = nil @pending_index = -1 refresh end def dismiss $game_party.remove_actor(actor.id) refresh end def update super update_walk redraw_item(index) end def update_walk @animtime += 1 if @animtime == 10 case @walk when 1; @walk -= 1 when -1; @walk += 1 when 0 if @step == 1 @walk = -1; @step = 0 else @walk = 1; @step = 1 end end @animtime = 0 end end def cursor_down(wrap = false); super; cursor_move_extras; end def cursor_up(wrap = false); super; cursor_move_extras; end def cursor_left(wrap = false); super; cursor_move_extras; end def cursor_right(wrap = false); super; cursor_move_extras; end def cursor_move_extras @walk = 0 @animtime = 0 redraw_item(@last_index) @last_index = index end def process_ok if current_item_enabled? psound Input.update deactivate call_ok_handler else Sound.play_buzzer end end def psound if @psound.nil? Sound.play_ok else name,vol,pitch = @psound RPG::SE.new(name,vol,pitch).play @psound = nil end end end # Window_Troops < Window_Selectable #------------------------# #---| Window_ArmyCommand |-------------------------------------------------- #------------------------# class Window_ArmyCommand < Window_Command def initialize(x,y) super(x,y) self.opacity = 255 self.back_opacity = 255 end def window_width; return 160; end def visible_line_number; item_max; end def make_command_list @cmd_index = [] GARMY::CMDS.each { |cmd| text = cmd[1][0] handle = text.delete(' ').downcase.to_sym add_command(text,handle,check_enabled($game_switches[cmd[1][2]],cmd[0],text)) @cmd_index << cmd[0] } end def check_enabled(switch,cmd,text) return false if switch return false if cmd == :dismiss && $game_party.members.count <= 1 if $game_party.last_atroop return false if !$game_party.last_atroop.a_cmds[cmd] end return true end def draw_item(index) change_color(normal_color, command_enabled?(index)) recti = item_rect_for_text(index) recti.x += 26 draw_text(recti, command_name(index), alignment) draw_icon(GARMY::CMDS[@cmd_index[index]][3],0,recti.y) end def process_ok if current_item_enabled? psound Input.update deactivate call_ok_handler else Sound.play_buzzer end end def psound if current_symbol == :dismiss name,vol,pitch = GARMY::DISMISS_SE RPG::SE.new(name,vol,pitch).play @psound = nil else Sound.play_ok end end end # Window_ArmyCommand < Window_Command #---------------------# #---| Window_ArmyInfo |----------------------------------------------------- #---------------------# class Window_ArmyInfo < Window_Base def initialize(line_number = 2) super(0, Graphics.height - window_height, Graphics.width, window_height) refresh end def window_height h = h480? ? 30 : 0 fitting_height(3) + h end def h480?; Graphics.height >= 480; end def setup_info w = contents.width o = h480? ? 18 : 0 h = line_height y = line_height + o y2 = h * 2 + o * 1.4 contents.font.size = 21 if !h480? change_color(system_color) draw_text(0,0,contents.width,line_height,$game_party.armyname,1) change_color(normal_color) draw_horz_line(h - 4) if h480? draw_text(0,y,w,h,GARMY::UNIT_COUNT + $game_party.members.count.to_s,0) draw_text(0,y,w,h,GARMY::HIGH_LEVEL + highlevel,1) draw_text(0,y,w,h,GARMY::TIME + time_text,2) draw_text(0,y2,w,h,GARMY::FUNDS + $game_party.gold.to_s + currency,0) if GARMY::INFOVAR1 > 0 v = GARMY::INFOVAR1 n = $data_system.variables[v] draw_text(0,y2,w,h,n + $game_variables[v].to_s,1) end if GARMY::INFOVAR2 > 0 v = GARMY::INFOVAR2 n = $data_system.variables[v] draw_text(0,y2,w,h,n + $game_variables[v].to_s,2) end end def currency; Vocab::currency_unit; end def highlevel ($game_party.members.max_by { |k,v| k.level }).level.to_s end def time_text sprintf("%02d:%02d:%02d", (Graphics.frame_count / 60**2) / 60, Graphics.frame_count / 60**2 % 60, Graphics.frame_count / 60 % 60) end def draw_horz_line(y) line_y = y + line_height / 2 - 1 contents.fill_rect(0, line_y, contents_width, 2, line_color) end def line_color color = normal_color color.alpha = 48 color end def update refresh end def refresh contents.clear setup_info end end # Window_ArmyInfo < Window_Base #---------------------# #---| Window_ArmyFace |----------------------------------------------------- #---------------------# class Window_ArmyFace < Window_Base def initialize(x,y,w,h) super(x - w,y,w,h) self.opacity = 255 self.back_opacity = 255 end def draw_cont fy = (contents.height - 96) / 2 fx = (contents.width - 96) / 2 draw_actor_face($game_party.last_atroop, fx, fy) end def refresh contents.clear draw_cont end end # Window_ArmyFace < Window_Base
#------------------------------------------------------------------------------#
# Galv's Army Manager
#------------------------------------------------------------------------------#
# For: RPGMAKER VX ACE
# Version 1.0
# Requested by Rue
#-------------------------------------------------------------------------------
# This script was designed for tactical battle system games to manager party
# members (your army). You can arrange, dismiss, equip, etc. your units from
# this scene as well as display some army and game related information.
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# NOTE TAG - ACTORS OR CLASSES
#-------------------------------------------------------------------------------
# <a_icon: x> # icon displayed left of actor in the army manager. This icon
# # will only appear if you set the ICONTYPES accordingly
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# SCRIPT CALLS
#-------------------------------------------------------------------------------
# manage_army # Calls the army manager scene
#
# a_icon(id,icon_id) # Change an actor's icon during game.
# a_access(id,x) # if x is false cannot access actor at all. Default true
# a_cmd(id,:cmd,x) # used to enable/disable commands for certain actors
# # :cmd is the CMD ID of the command (further down)
# # x can be true or false to disable/enable commands
#
# armyname("Name") # Changes the name of your army
#-------------------------------------------------------------------------------
# EXAMPLES
# a_cmd(1,:dismiss,false) # Disable the "DISMISS" command for actor 1
# a_cmd(4,:order,true) # Enable the "ORDER" command for actor 4.
# # All commands are true (enabled) by default
#-------------------------------------------------------------------------------
($imported ||= {})["Galv_ArmyManager"] = true
module GARMY
#-------------------------------------------------------------------------------
#
# * SETTINGS
#
#-------------------------------------------------------------------------------
# Some Default Settings
NO_ACTOR_ICON = 186 # Icon ID used if you don't tag actor with <a_icon: x>
NO_CLASS_ICON = 162 # Icon ID used if you don't tag class with <a_icon: x>
NO_WEAPON_ICON = 186 # Icon ID used if nothing is equipped
ICONTYPE1 = :actor # these ICONTYPES can be :actor, :class or :weapon
ICONTYPE2 = :weapon # This will show either the class icon, actor icon (if
# ou note tagged them) or the equipped weapon icon to
# the left of the actor's sprite.
SPRITE_X_POS = 1.6 # width of box divided by this number to position the
# character sprite. (2 is central). Default 1.6
B_MEMBERS = false # highlight members in party that are 'battle members'
# true or false
B_MEMBER_COLOR = 16 # windowskin color for battle member highlight box that
# appears if B_MEMBERS = true
# Army Info
UNIT_COUNT = "Units: " # Party member count text
HIGH_LEVEL = "Highest Level: " # Highest level text
TIME = "Time: " # Time text
FUNDS = "Funds: " # Gold amount text
INFOVAR1 = 1 # Variable id used to display in info window
INFOVAR2 = 2 # Variable id used to display in info window
# Displays the variable name beside these.
# Sounds
DISMISS_SE = ["Blow8",100,100] # ["SE_Name",volume,pitch] for dimiss SE
ORDER_SE = ["Wind7",100,100] # ["SE_Name",volume,pitch] for order SE
# Command Setup
# (Command list appears when you select a unit from your army)
CMDS = {
# CMD ID => ["NAME", :Scene_Class, switch, icon],
:equip => ["EQUIP", :Scene_Equip, 1, 161],
:status => ["STATUS", :Scene_Status,0, 236],
:order => ["ORDER", :order, 0, 12], # Change only "NAME"
:dismiss => ["DISMISS", :dismiss, 0, 187], # Change only "NAME"
#:class => ["JOB", :Scene_Class, 0, 121], # Example yanfly class
#:item => ["USE ITEM", :Scene_Item, 0, 261],
} # don't touch
#-------------------------------------------------------------------------------
# EXPLANATION:
#-------------------------------------------------------------------------------
# CMD ID = unique identifier for the menu command (scripting purposes). Use
# anything here but do not change :order or :dismiss or those options
# will no longer function. You can, however, remove them.
# "NAME" = Menu command text
# :Scene_Class = The name of the scene class as a symbol
# switch = a swith ID. Turn this switch ON to disable the menu command
# icon = the icon ID to go with the menu command
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
#
# * END OF SETTINGS
#
#-------------------------------------------------------------------------------
end # GARMY
#----------------------#
#---| Game_Interpreter |----------------------------------------------------
#----------------------#
class Game_Interpreter
def manage_army; SceneManager.call(Scene_Army); end
def a_access(id,status); $game_actors[id].a_accessible = status; end
def a_cmd(id,cmd_name,status)
$game_actors[id].a_cmds[cmd_name] = status
end
def a_icon(id,icon_id); $game_actor[id].a_icon = icon_id; end
def armyname(name); $game_party.armyname = name; end
end # Game_Interpreter
#----------------#
#---| Game_Party |----------------------------------------------------------
#----------------#
class Game_Party
attr_accessor :last_atroop
attr_accessor :armyname
alias galv_garmy_gp_initialize initialize
def initialize
@armyname = "Unnamed Army"
galv_garmy_gp_initialize
end
end # Game_Party
#------------------#
#---| SceneManager |--------------------------------------------------------
#------------------#
module SceneManager
def self.gcall(scene_class)
@stack.push(@scene)
[url=home.php?mod=space&uid=420706]@Scene[/url] = Kernel.const_get(scene_class).new
end
end # SceneManager
#----------------------#
#---| RPG::CLASS/ACTOR |----------------------------------------------------
#----------------------#
class RPG::Class
def a_icon
if @a_icon.nil?
if @note =~ /<a_icon: (.*)>/i
@a_icon = $1.to_i
else
@a_icon = GARMY::NO_CLASS_ICON
end
end
@a_icon
end
end # RPG::Class
class RPG::Actor
def a_icon
if @a_icon.nil?
if @note =~ /<a_icon: (.*)>/i
@a_icon = $1.to_i
else
@a_icon = GARMY::NO_ACTOR_ICON
end
end
@a_icon
end
end # RPG::Class
#----------------#
#---| Game_Actor |----------------------------------------------------------
#----------------#
class Game_Actor
attr_accessor :a_accessible
attr_accessor :a_cmds
attr_accessor :a_icon
alias galv_garmy_ga_setup setup
def setup(actor_id)
@a_accessible = true
@a_icon = $data_actors[actor_id].a_icon
@a_cmds = {}
GARMY::CMDS.each { |cmd| @a_cmds[cmd[0]] = true }
galv_garmy_ga_setup(actor_id)
end
end # Game_Actor
#-----------------#
#---| Scene_Army |---------------------------------------------------------
#-----------------#
class Scene_Army < Scene_MenuBase
def start
super
create_help_window
create_info_window
create_troop_window
create_command_window
create_face_window
end
#-----| CREATE STUFF |
def create_help_window
@help_window = Window_ArmyHelp.new
@help_window.viewport = @viewport
end
def create_info_window
@info_window = Window_ArmyInfo.new
@info_window.viewport = @viewport
end
def create_troop_window
wy = @help_window.height
ww = Graphics.width
wh = Graphics.height - @help_window.height - @info_window.height
@troop_window = Window_Troops.new(0,wy,ww,wh)
@troop_window.help_window = @help_window
@troop_window.viewport = @viewport
@troop_window.activate
@troop_window.set_handler(:ok, method(:on_troop_ok))
@troop_window.set_handler(:cancel, method(:return_scene))
end
def create_command_window
wx = Graphics.width / 2
wy = (Graphics.height - @info_window.height - @help_window.height) / 2
@command_window = Window_ArmyCommand.new(wx,wy)
@command_window.viewport = @viewport
GARMY::CMDS.each { |cmd|
handle = cmd[1][0].delete(' ').downcase.to_sym
@command_window.set_handler(handle, method(:cmd))
}
@command_window.set_handler(:cancel, method(:back_to_troop))
@command_window.y -= @command_window.height / 2 - @help_window.height
@command_window.hide.deactivate
end
def create_face_window
ww = @command_window.width
wh = @command_window.height
wx = @command_window.x
wy = @command_window.y
@face_window = Window_ArmyFace.new(wx,wy,ww,wh)
@face_window.viewport = @viewport
@face_window.hide
end
#-----| HANDLERS |
def cmd
list = GARMY::CMDS.to_a
cmd = @command_window.index
symbol = list[cmd][1][1]
if custom_action(symbol)
custom_on_command_ok(symbol)
else
SceneManager.gcall(list[cmd][1][1])
end
end
def custom_action(symbol)
case symbol
when :dismiss, :order
return true
else
return false
end
end
def custom_on_command_ok(symbol)
case symbol
when :dismiss
do_dismiss
when :order
start_ordering
end
end
def start_ordering
if $game_party.last_atroop.a_cmds[:order]
@troop_window.order_on
@ordering = true
@troop_window.psound = GARMY::ORDER_SE
else
Sound.play_buzzer
end
back_to_troop
end
def do_dismiss
@troop_window.dismiss
back_to_troop
end
def on_troop_ok
if @ordering
@troop_window.swap_actor
@ordering = false
back_to_troop
else
$game_party.last_atroop = actor
$game_party.menu_actor = actor
@command_window.refresh
@face_window.refresh
@command_window.show.activate
@face_window.show.activate
end
end
def back_to_troop
@command_window.hide.deactivate
@face_window.hide
@troop_window.activate
end
def return_scene
if @troop_window.ordering_on
@ordering = false
@troop_window.cancel_ordering
@troop_window.activate
else
$game_party.last_atroop = nil
SceneManager.return
end
end
#-----| OTHER STUFF |
def actor; @troop_window.actor; end
def terminate
super
end
def update
super
end
end # Scene_Army < Scene_MenuBase
#----------------------#
#---| Window_ArmyHelp |----------------------------------------------------
#----------------------#
class Window_ArmyHelp < Window_Help
def initialize
super(1)
@icons = []
end
def set_text(text)
if text != @text
@text = text
refresh
end
end
def clear
set_text("")
@icons = []
[url=home.php?mod=space&uid=95897]@actor[/url] = nil
end
def set_item(actor)
@actor = actor
@icons = [get_icon(GARMY::ICONTYPE1,actor),get_icon(GARMY::ICONTYPE2,actor)]
set_text(actor ? create_text(actor) : "")
end
def create_text(actor)
n = actor.name
c = actor.class.name
l = Vocab::level_a + actor.level.to_s
text = n + " - " + l + " " + c
return text
end
def get_icon(icontype,actor)
return 0 if !actor
case icontype
when :actor
return actor.a_icon
when :class
return $data_classes[actor.class_id].a_icon
when :weapon
if actor.equips[0].nil?
return GARMY::NO_WEAPON_ICON
else
return actor.equips[0].icon_index
end
else
return 0
end
end
def refresh
contents.clear
contents.font.size = 21 if Graphics.height < 480
if !@icons.empty?
draw_icon(@icons[0], 0, 0)
draw_icon(@icons[1], 28, 0)
end
if @actor
offset = Graphics.width >= 640 ? 0 : -100
draw_actor_hp(@actor, 355 + offset, 0)
draw_actor_mp(@actor, 490 + offset, 0)
draw_text(62, 0, 280 + offset, line_height, @text)
end
end
end # Window_ArmyHelp < Window_Help
#--------------------#
#---| Window_Troops |------------------------------------------------------
#--------------------#
class Window_Troops < Window_Selectable
attr_accessor :pending_index
attr_accessor :ordering_on
attr_accessor :psound
def initialize(x, y, width, height)
super
@data = []
@last_index ||= 0
@animtime = 0
[url=home.php?mod=space&uid=348285]@walk[/url] = 0
@pending_index = -1
refresh
select_last
end
#------| Sizes and Stuff |
def item_width
(width - standard_padding * 2 + spacing) / col_max - spacing
end
def item_height; item_width; end
def spacing; return 10; end
def col_max; return 6; end
def item_max; @data ? @data.size : 1; end
def actor; @data && index >= 0 ? @data[index] : nil; end
def current_item_enabled?
enable?(@data[index])
end
def include?(actor)
return false if actor.nil?
return true
end
def enable?(actor)
return false if !actor
return false if !actor.a_accessible
return false if @ordering_on && !actor.a_cmds[:order]
return true
end
def make_item_list
@data = $game_party.members.select {|actor| include?(actor) }
@data.push(nil) if include?(nil)
end
def select_last
select(@data.index($game_party.last_atroop) || 0)
end
def swap_actor
$game_party.swap_order($game_party.last_atroop.index,index)
@pending_index = -1
@ordering_on = nil
refresh
end
def actor_rect(index)
rect = Rect.new
rect.width = item_width
rect.height = item_height
rect.x = index % col_max * (item_width + spacing)
rect.y = index / col_max * item_height
rect
end
def offset
Graphics.height < 480 ? 0 : 10
end
def draw_item(index)
actor = @data[index]
if actor
rect = actor_rect(index)
rect.width -= 4
draw_in_battle_party(index) if GARMY::B_MEMBERS
draw_selected(index)
draw_actor_text(actor,rect.x + 2,rect.y + 38 + offset, enable?(actor),
rect.width)
draw_character(actor.character_name, actor.character_index,
rect.x + item_width / GARMY::SPRITE_X_POS - 1, rect.y + 38 + offset,
enable?(actor),index)
end
end
def draw_selected(index)
if index == @pending_index
pendrect = item_rect(index)
pendrect.x += 1
pendrect.y += 1
pendrect.width -= 2
pendrect.height -= 2
contents.fill_rect(pendrect, pending_color)
end
end
def draw_in_battle_party(index)
if index < $game_party.max_battle_members
rect = item_rect(index)
w = 1
c = text_color(GARMY::B_MEMBER_COLOR)
trect = Rect.new(rect.x,rect.y,rect.width,w)
lrect = Rect.new(rect.x,rect.y,w,rect.height)
rrect = Rect.new(rect.x + rect.width - w,rect.y,w,rect.height)
brect = Rect.new(rect.x,rect.y + rect.height - w,rect.width,w)
contents.fill_rect(trect,c)
contents.fill_rect(lrect,c)
contents.fill_rect(rrect,c)
contents.fill_rect(brect,c)
end
end
def square_color
end
def draw_actor_text(actor, x, y, enabled = true, w)
return unless actor
icon1 = get_icon(GARMY::ICONTYPE1,actor)
icon2 = get_icon(GARMY::ICONTYPE2,actor)
draw_icon(icon1, x + 6, y - 20, enabled)
draw_icon(icon2, x + 18, y - 20, enabled)
change_color(normal_color, enabled)
contents.font.size = 18
draw_text(x, y, w, line_height, actor.name,1)
contents.font.size = 16
lvl = Vocab::level_a + actor.level.to_s
cname = actor.class.name
draw_text(x + 10, y - 40, w, line_height, lvl,0)
draw_text(x, y + 16, w, line_height, cname,1)
end
def get_icon(icontype,actor)
case icontype
when :actor
return actor.a_icon
when :class
return $data_classes[actor.class_id].a_icon
when :weapon
if actor.equips[0].nil?
return GARMY::NO_WEAPON_ICON
else
return actor.equips[0].icon_index
end
else
return 0
end
end
def draw_character(character_name, character_index, x, y,enabled,i)
return unless character_name
bitmap = Cache.character(character_name)
sign = character_name[/^[\!\$]./]
if sign && sign.include?('$')
cw = bitmap.width / 3
ch = bitmap.height / 4
else
cw = bitmap.width / 12
ch = bitmap.height / 8
end
n = character_index
step = 0
step = @walk if enabled && i == index
src_rect = Rect.new((n%4*3+1+step)*cw, (n/4*4)*ch, cw, ch)
contents.blt(x - cw / 2, y - ch, bitmap, src_rect, enabled ? 255 : 150)
end
def update_help
@help_window.set_item(actor)
end
def refresh
make_item_list
create_contents
draw_all_items
end
def order_on
@ordering_on = true
@pending_index = index
refresh
end
def cancel_ordering
@ordering_on = nil
@pending_index = -1
refresh
end
def dismiss
$game_party.remove_actor(actor.id)
refresh
end
def update
super
update_walk
redraw_item(index)
end
def update_walk
@animtime += 1
if @animtime == 10
case @walk
when 1; @walk -= 1
when -1; @walk += 1
when 0
if @step == 1
@walk = -1; @step = 0
else
@walk = 1; @step = 1
end
end
@animtime = 0
end
end
def cursor_down(wrap = false); super; cursor_move_extras; end
def cursor_up(wrap = false); super; cursor_move_extras; end
def cursor_left(wrap = false); super; cursor_move_extras; end
def cursor_right(wrap = false); super; cursor_move_extras; end
def cursor_move_extras
@walk = 0
@animtime = 0
redraw_item(@last_index)
@last_index = index
end
def process_ok
if current_item_enabled?
psound
Input.update
deactivate
call_ok_handler
else
Sound.play_buzzer
end
end
def psound
if @psound.nil?
Sound.play_ok
else
name,vol,pitch = @psound
RPG::SE.new(name,vol,pitch).play
@psound = nil
end
end
end # Window_Troops < Window_Selectable
#------------------------#
#---| Window_ArmyCommand |--------------------------------------------------
#------------------------#
class Window_ArmyCommand < Window_Command
def initialize(x,y)
super(x,y)
self.opacity = 255
self.back_opacity = 255
end
def window_width; return 160; end
def visible_line_number; item_max; end
def make_command_list
@cmd_index = []
GARMY::CMDS.each { |cmd|
text = cmd[1][0]
handle = text.delete(' ').downcase.to_sym
add_command(text,handle,check_enabled($game_switches[cmd[1][2]],cmd[0],text))
@cmd_index << cmd[0]
}
end
def check_enabled(switch,cmd,text)
return false if switch
return false if cmd == :dismiss && $game_party.members.count <= 1
if $game_party.last_atroop
return false if !$game_party.last_atroop.a_cmds[cmd]
end
return true
end
def draw_item(index)
change_color(normal_color, command_enabled?(index))
recti = item_rect_for_text(index)
recti.x += 26
draw_text(recti, command_name(index), alignment)
draw_icon(GARMY::CMDS[@cmd_index[index]][3],0,recti.y)
end
def process_ok
if current_item_enabled?
psound
Input.update
deactivate
call_ok_handler
else
Sound.play_buzzer
end
end
def psound
if current_symbol == :dismiss
name,vol,pitch = GARMY::DISMISS_SE
RPG::SE.new(name,vol,pitch).play
@psound = nil
else
Sound.play_ok
end
end
end # Window_ArmyCommand < Window_Command
#---------------------#
#---| Window_ArmyInfo |-----------------------------------------------------
#---------------------#
class Window_ArmyInfo < Window_Base
def initialize(line_number = 2)
super(0, Graphics.height - window_height, Graphics.width, window_height)
refresh
end
def window_height
h = h480? ? 30 : 0
fitting_height(3) + h
end
def h480?; Graphics.height >= 480; end
def setup_info
w = contents.width
o = h480? ? 18 : 0
h = line_height
y = line_height + o
y2 = h * 2 + o * 1.4
contents.font.size = 21 if !h480?
change_color(system_color)
draw_text(0,0,contents.width,line_height,$game_party.armyname,1)
change_color(normal_color)
draw_horz_line(h - 4) if h480?
draw_text(0,y,w,h,GARMY::UNIT_COUNT + $game_party.members.count.to_s,0)
draw_text(0,y,w,h,GARMY::HIGH_LEVEL + highlevel,1)
draw_text(0,y,w,h,GARMY::TIME + time_text,2)
draw_text(0,y2,w,h,GARMY::FUNDS + $game_party.gold.to_s + currency,0)
if GARMY::INFOVAR1 > 0
v = GARMY::INFOVAR1
n = $data_system.variables[v]
draw_text(0,y2,w,h,n + $game_variables[v].to_s,1)
end
if GARMY::INFOVAR2 > 0
v = GARMY::INFOVAR2
n = $data_system.variables[v]
draw_text(0,y2,w,h,n + $game_variables[v].to_s,2)
end
end
def currency; Vocab::currency_unit; end
def highlevel
($game_party.members.max_by { |k,v| k.level }).level.to_s
end
def time_text
sprintf("%02d:%02d:%02d", (Graphics.frame_count / 60**2) / 60,
Graphics.frame_count / 60**2 % 60,
Graphics.frame_count / 60 % 60)
end
def draw_horz_line(y)
line_y = y + line_height / 2 - 1
contents.fill_rect(0, line_y, contents_width, 2, line_color)
end
def line_color
color = normal_color
color.alpha = 48
color
end
def update
refresh
end
def refresh
contents.clear
setup_info
end
end # Window_ArmyInfo < Window_Base
#---------------------#
#---| Window_ArmyFace |-----------------------------------------------------
#---------------------#
class Window_ArmyFace < Window_Base
def initialize(x,y,w,h)
super(x - w,y,w,h)
self.opacity = 255
self.back_opacity = 255
end
def draw_cont
fy = (contents.height - 96) / 2
fx = (contents.width - 96) / 2
draw_actor_face($game_party.last_atroop, fx, fy)
end
def refresh
contents.clear
draw_cont
end
end # Window_ArmyFace < Window_Base
改一下vocab為中文就行了 然後他也有Demo的...(範例) |
评分
-
查看全部评分
|