#============================================================================== # +++ MOG - Monogatari (物語) (v1.5) +++ #============================================================================== # By Moghunter # [url=http://www.atelier-rgss.com/]http://www.atelier-rgss.com/[/url] #============================================================================== # Sistema avançado de menu, voltado para scripters que desejam saber sobre # técnicas de manipulação de sprites e janelas. #============================================================================== #============================================================================== # Version History. #============================================================================== # 1.5 - Função de desabilitar o save. # Definição dos nomes das fontes baseado na fonte padrão do sistema, # para resolver o problema de compatibilidade de fontes de outras línguas. # Melhoria na posição das janelas. # Correção do bug de não atualizar o número de itens. (Dual Wield) # 1.4 - Compatibilidade com Mog Menu Cursor. # 1.3 - Corrigido o bug do som da Scene Skill. # 1.2 - Compatibilidade com Third Party scripts. # - Scene File incorporado ao sistema Monogatari, melhorando a performance. #============================================================================== #============================================================================== # NOTA - Como este é um script para apresentar técnicas de RGSS, não foram # adicionados comentários explicativos no modulo de configuração #============================================================================== #============================================================================== # ■ MAIN MENU #============================================================================== module MOG_MENU NUMBER_OF_PARTICLES = 20 BACKGROUND_SCROLL_SPEED = [0,0]#[1,0] COMMAND_POSITION = [150, 136] #[32, 84] COMMAND_POSITION_2 = [0,0]#[10,100] COMMAND_SPACE = 4 COMMAND_NAME_POSITION = [0,-500] #-500 COMMAND_NAME_POSITION_2 = [512,-100]#-100,表示不需要 ACTOR_SPACE = 100 ACTOR_POSITION = [240,0] ACTOR_LAYOUT_POSITON = [0,475]#[0,275] ACTOR_HP1_POSITON = [28,515]#以下全部y+200 ACTOR_HP2_POSITON = [50,530] ACTOR_MP1_POSITON = [28,546] ACTOR_MP2_POSITON = [50,561] ACTOR_HP_METER_POSITON = [29,529] ACTOR_MP_METER_POSITON = [29,560] ACTOR_LEVEL_POSITON = [20,490] ACTOR_STATES_POSITION = [63,483]#end MEMBERS_FACE_POSITION =[280,100]#[150,55] MEMBERS_FACE_SPACE = 64 MEMBERS_ARROW_LAYOUT_POSITION = [465,80] MEMBERS_ARROW_1_POSITION = [430,80] MEMBERS_ARROW_2_POSITION = [550,80] GOLD_NUMBER_POS = [445,55]#388 TIME_NUMBER_POS = [560,55] LOCATION_POS = [755,-100] #380 end #============================================================================== # ■ MOG_MENU ITEM #============================================================================== module MOG_MENU_ITEM NUMBER_OF_PARTICLES = 20 BACKGROUND_SCROLL_SPEED = [0,0]#[1,0] COMMAND_POSITION = [100, 120]#[200, 69] BUTTON_POSITION = [195, 80] #[210, 30] BUTTON_SPACE = 90 FONT_SIZE = 18 FONT_BOLD = true end #============================================================================== # ■ MOG_MENU SKILL #============================================================================== module MOG_MENU_SKILL NUMBER_OF_PARTICLES = 20 BACKGROUND_SCROLL_SPEED = [0,0]#[1,0] FONT_SIZE = 18 FONT_BOLD = true end #============================================================================== # ■ MOG_ACTOR SKILL STATUS #============================================================================== module MOG_ACTOR_SKILL_STATUS MEMBERS_SPACE = 80 LAYOUT_POSITION = [225,50] PAR_POSITION = [10,0] FACE_POSITION = [-13,-3] HP_METER_POSITION = [158,15] MP_METER_POSITION = [177,35] STATES_POSITION = [71,136]#[71,36] STATES_SCROLLING_ANIMATION = false NAME_POSITION = [105,34] FONT_SIZE = 18 FONT_BOLD = true end #============================================================================== # ■ MOG_MENU EQUIP #============================================================================== module MOG_MENU_EQUIP NUMBER_OF_PARTICLES = 20 BACKGROUND_SCROLL_SPEED = [0,0]#[1,0] FONT_SIZE = 18 FONT_BOLD = true FONT_ITALIC = false end #============================================================================== # ■ MOG_MENU STATUS #============================================================================== module MOG_EQUIP_STATUS LAYOUT_POSITION = [30,180] #L FACE_POSITION = [60,-50] PAR_POSITION = [5,32] NAME_POSITION = [15,-5] FONT_SIZE = 18 FONT_BOLD = true end #============================================================================== # ■ MOG_MENU STATUS #============================================================================== module MOG_MENU_STATUS NUMBER_OF_PARTICLES = 20 BACKGROUND_SCROLL_SPEED = [0,0]#[1,0] end #============================================================================== # ■ MOG MENU PARTY #============================================================================== module MOG_MENU_PARTY NUMBER_OF_PARTICLES = 20 BACKGROUND_SCROLL_SPEED = [0,0]#[1,0] end #============================================================================== # ■ MOG MENU SAVE #============================================================================== module MOG_MENU_SAVE FILES_MAX = 9 NUMBER_OF_PARTICLES = 20 BACKGROUND_SCROLL_SPEED = [0,0]#[1,0] end #============================================================================== # ■ MOG MENU END #============================================================================== module MOG_MENU_END NUMBER_OF_PARTICLES = 20 BACKGROUND_SCROLL_SPEED = [0,0]#[1,0] end #============================================================================== # ■ MOG ACTOR MENU STATUS #============================================================================== module MOG_ACTOR_MENU_STATUS LAYOUT_POSITION = [20,335]#[385,115] FACE_POSITION = [48,-22] PAR_POSITION = [5,64] STATES_POSITION = [15,25] STATES_SCROLLING_ANIMATION = false#true# NAME_POSITION = [10,60] FONT_SIZE = 18 FONT_BOLD = true end #============================================================================== # ■ MOG MEMBERS LAYOUT #============================================================================== module MOG_MEMBERS_LAYOUT #使用物品时,显示队友菜单 MEMBERS_SPACE = 80 LAYOUT_POSITION = [15,160]#[3,160] PAR_POSITION = [20,25] FACE_POSITION = [0,-2] HP_METER_POSITION = [32,45] MP_METER_POSITION = [106,45] SCOPE_TEXT_POSITION = [0,170] ARROW_1_POSITION = [50,55] ARROW_2_POSITION = [50,4] NAME_POSITION = [75,5] FONT_SIZE = 18 FONT_BOLD = true end #============================================================================== # ■ MOG ACTOR MENU PARTY #Party 界面位置设定 #============================================================================== module MOG_ACTOR_MENU_PARTY FACE_POSITION = [640,80]#[390,96] NAME_POSITION = [640,57]#[390,73] FONT_SIZE = 16 FONT_BOLD = true end #============================================================================== # ■ MOG MENU BASE #============================================================================== module MOG_MENU_BASE end $imported = {} if $imported.nil? $imported[:mog_monogatari] = true #============================================================================== # ■ Game Temp #============================================================================== class Game_Temp attr_accessor :menu_index attr_accessor :actor_menu_temp attr_accessor :item_scope attr_accessor :temp_actor_equip #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- alias mog_menu_index_initialize initialize def initialize @menu_index = 0 @actor_menu_temp = -1 @item_scope = 0 @temp_actor_equip = nil mog_menu_index_initialize end end #============================================================================== # ■ Scene Map #============================================================================== class Scene_Map < Scene_Base #-------------------------------------------------------------------------- # ● Update Call Menu #-------------------------------------------------------------------------- alias mog_menu_monogatari_update_call_menu update_call_menu def update_call_menu if $game_party.members.size == 0 @call_menu = false return end mog_menu_monogatari_update_call_menu end #-------------------------------------------------------------------------- # ● Call Menu #-------------------------------------------------------------------------- alias mog_menu_monogatari_call_menu call_menu def call_menu $game_temp.menu_index = 0 mog_menu_monogatari_call_menu end end #============================================================================== # ■ Window Command #============================================================================== class Window_Command < Window_Selectable attr_reader :list end #============================================================================== # ■ Game Party #============================================================================== class Game_Party < Game_Unit attr_accessor :menu_actor_id end #============================================================================== # ■ Game Interpreter #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # ● gain Tp #-------------------------------------------------------------------------- def gain_tp(actor_id,value) return if $game_party.members[actor_id] == nil $game_party.members[actor_id].tp += value.truncate end #-------------------------------------------------------------------------- # ● Lose Tp #-------------------------------------------------------------------------- def lose_tp(actor_id,value) return if $game_party.members[actor_id] == nil $game_party.members[actor_id].tp -= value.truncate end end #============================================================================== # ■ Cache #============================================================================== module Cache #-------------------------------------------------------------------------- # ● Menu #-------------------------------------------------------------------------- def self.menu(filename) load_bitmap("Graphics/Menus/", filename) end #-------------------------------------------------------------------------- # ● Menu Main #-------------------------------------------------------------------------- def self.menu_main(filename) load_bitmap("Graphics/Menus/Main/", filename) end #-------------------------------------------------------------------------- # ● Menu Item #-------------------------------------------------------------------------- def self.menu_item(filename) load_bitmap("Graphics/Menus/Item/", filename) end #-------------------------------------------------------------------------- # ● Menu Skill #-------------------------------------------------------------------------- def self.menu_skill(filename) load_bitmap("Graphics/Menus/Skill/", filename) end #-------------------------------------------------------------------------- # ● Menu Equip #-------------------------------------------------------------------------- def self.menu_equip(filename) load_bitmap("Graphics/Menus/Equip/", filename) end #-------------------------------------------------------------------------- # ● Menu Status #-------------------------------------------------------------------------- def self.menu_status(filename) load_bitmap("Graphics/Menus/Status/", filename) end #-------------------------------------------------------------------------- # ● Menu Save #-------------------------------------------------------------------------- def self.menu_save(filename) load_bitmap("Graphics/Menus/Save/", filename) end #-------------------------------------------------------------------------- # ● Menu Party #-------------------------------------------------------------------------- def self.menu_party(filename) load_bitmap("Graphics/Menus/Party/", filename) end #-------------------------------------------------------------------------- # ● Menu End #-------------------------------------------------------------------------- def self.menu_end(filename) load_bitmap("Graphics/Menus/End/", filename) end end #============================================================================== # ■ Game_Temp #============================================================================== class Game_Temp attr_accessor :pre_cache_main_menu attr_accessor :pre_cache_actor_menu attr_accessor :pre_cache_item_menu attr_accessor :pre_cache_skill_menu attr_accessor :pre_cache_equip_menu attr_accessor :pre_cache_status_menu attr_accessor :pre_cache_party_menu attr_accessor :pre_cache_file_menu attr_accessor :pre_cache_end_menu attr_accessor :pre_cache_icon attr_accessor :pre_symbol #-------------------------------------------------------------------------- # ● Pre Cache Atelier Menu #-------------------------------------------------------------------------- def pre_cache_atelier_menu @pre_cache_main_menu = [] @pre_cache_item_menu = [] @pre_cache_skill_menu = [] @pre_cache_equip_menu = [] @pre_cache_status_menu = [] @pre_cache_party_menu = [] @pre_cache_file_menu = [] @pre_cache_end_menu = [] @pre_symbol = "" execute_pre_cache_icon if can_pre_cache_icon? execute_pre_cache_actor execute_pre_cache_main_menu execute_pre_cache_item_menu execute_pre_cache_skill_menu execute_pre_cache_equip_menu execute_pre_cache_status_menu execute_pre_cache_file_menu execute_pre_cache_party_menu execute_pre_cache_end_menu end #-------------------------------------------------------------------------- # ● Pre Cache Icon #-------------------------------------------------------------------------- def execute_pre_cache_icon @pre_cache_icon = Cache.system("Iconset") end #-------------------------------------------------------------------------- # ● Can Pre Cache Menu? #-------------------------------------------------------------------------- def can_pre_cache_icon? return true if @pre_cache_icon == nil return true if @pre_cache_icon.disposed? rescue return false return false end end #============================================================================== # ■ Spriteset_Map #============================================================================== class Spriteset_Map #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- alias mog_atelier_menu_initialize initialize def initialize $game_temp.pre_cache_atelier_menu if $game_temp.can_pre_cache_icon? mog_atelier_menu_initialize end end #============================================================================== # ■ Particles_Menu #============================================================================== class Particles_Menu < Sprite #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- def initialize(viewport = nil) super(viewport) @speed_x = 0 @speed_y = 0 @speed_a = 0 self.bitmap = Cache.menu("Particles") self.blend_type = 0 self.z = 1 reset_setting(true) end #~ #-------------------------------------------------------------------------- #~ # ● Reset Setting #~ #-------------------------------------------------------------------------- #~ def reset_setting(initial = false) #~ zoom = (50 + rand(100)) / 100.1 #~ self.zoom_x = zoom #~ self.zoom_y = zoom #~ self.x = rand(WIDTH+32) - 160 #576 #~ self.y = initial == true ? rand(480) : 512 #~ self.opacity = 0 #~ @speed_y = -(1 + rand(3)) #~ @speed_x = (1 + rand(2)) #~ @speed_a = (1 + rand(2)) #~ end #-------------------------------------------------------------------------- # ● Reset Setting #-------------------------------------------------------------------------- def reset_setting(initial = false) self.zoom_x = rand(0) + 0.5 self.zoom_y = rand(0) + 0.5 self.x = rand(WIDTH) self.y = rand(HEIGHT) self.angle = rand(360) self.opacity = 0 @speed_y = (1 + rand(4)) @speed_x = (1 + rand(3)) @speed_a = (0.5 + rand(0)) end #-------------------------------------------------------------------------- # ● Dispose #-------------------------------------------------------------------------- def dispose super self.bitmap.dispose if self.bitmap != nil end #~ #-------------------------------------------------------------------------- #~ # ● Update #~ #-------------------------------------------------------------------------- #~ def update #~ super #~ self.x += @speed_x #~ self.y += @speed_y #~ self.opacity += 5 #~ reset_setting if can_reset_setting? #~ end #~ #~ #-------------------------------------------------------------------------- #~ # ● Can Reset Setting #~ #-------------------------------------------------------------------------- #~ def can_reset_setting? #~ return true if self.y < -50 #~ return true if self.x > WIDTH #576 #~ return false #~ end #-------------------------------------------------------------------------- # ● Update #-------------------------------------------------------------------------- #我的修改:粒子更新方式(上升还是下落) def update super self.x -= @speed_x self.y += @speed_y self.angle += @speed_a self.opacity += 5 reset_setting if can_reset_setting? end #-------------------------------------------------------------------------- # ● Can Reset Setting #-------------------------------------------------------------------------- def can_reset_setting? return true if self.y > HEIGHT return true if self.x < 0 return false end end #============================================================================== # ■ Window_Actor_Status_0 #============================================================================== class Members_Windows_Status < Window_Selectable attr_reader :pending_index #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- def initialize(x = 0, y = 0) super(x, y, window_width, window_height) self.windowskin = Cache.menu("") self.opacity = 0 self.contents_opacity = 0 self.visible = false @input_lag = 0 @old_index = -1 @pending_index = -1 refresh end #-------------------------------------------------------------------------- # ● Window Width #-------------------------------------------------------------------------- def window_width 40 end #-------------------------------------------------------------------------- # ● Window Height #-------------------------------------------------------------------------- def window_height 40 end #-------------------------------------------------------------------------- # ● Cursor Movable? #-------------------------------------------------------------------------- def cursor_movable? active && open? && !@cursor_fix && !@cursor_all && item_max > 0 && @input_lag == 0 end #-------------------------------------------------------------------------- # ● Item Max #-------------------------------------------------------------------------- def item_max $game_party.members.size end #-------------------------------------------------------------------------- # ● Item Height #-------------------------------------------------------------------------- def item_height (height - standard_padding * 2) / 4 end #-------------------------------------------------------------------------- # ● Draw Item Background #-------------------------------------------------------------------------- def draw_item_background(index) end #-------------------------------------------------------------------------- # ● Pending Index #-------------------------------------------------------------------------- def pending_index=(index) last_pending_index = @pending_index @pending_index = index end #-------------------------------------------------------------------------- # ● Process OK #-------------------------------------------------------------------------- def process_ok $game_party.target_actor = $game_party.members[index] unless @cursor_all call_ok_handler end #-------------------------------------------------------------------------- # ● Select Last #-------------------------------------------------------------------------- def select_last select($game_party.target_actor.index || 0) end #-------------------------------------------------------------------------- # ● Select For Item #-------------------------------------------------------------------------- def select_for_item(item) @cursor_fix = item.for_user? @cursor_all = item.for_all? if @cursor_fix select($game_party.menu_actor.index) elsif @cursor_all select(0) else @index = @index < 0 ? 0 : @index end end #-------------------------------------------------------------------------- # ● Draw Item #-------------------------------------------------------------------------- def draw_item(index) end #-------------------------------------------------------------------------- # ● Process Cursor Move 2 #-------------------------------------------------------------------------- def process_cursor_move2 return unless cursor_movable? last_index = @index cursor_down (Input.trigger?(:RIGHT)) if Input.repeat?(:RIGHT) cursor_up (Input.trigger?(:LEFT)) if Input.repeat?(:LEFT) Sound.play_cursor if @index != last_index end #-------------------------------------------------------------------------- # ● Update #-------------------------------------------------------------------------- def update super @input_lag -= 1 if @input_lag > 0 if @old_index != @index @old_index = @index @input_lag = 5 end end end #============================================================================== # ■ Members Menu #============================================================================== class Members_Menu include MOG_MEMBERS_LAYOUT attr_accessor :actor #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- def initialize(actor,index) @actor = actor @index = index @index_old = -1 @com_index = 0 @max_index = $game_party.members.size - 1 @active = false @active_old = false @opac = 0 @opac_active = [0,0] @par = [] @float = [0,0,0] set_old_parameter create_sprites create_sprites_support if @index == 0 end #-------------------------------------------------------------------------- # ● Create Sprites #-------------------------------------------------------------------------- def create_sprites @meter_image = $game_temp.pre_cache_actor_menu[6] @meter_cw = @meter_image.width @meter_ch = @meter_image.height / 2 @parameter_number = $game_temp.pre_cache_actor_menu[2] @parameter_cw = @parameter_number.width / 10 @parameter_ch = @parameter_number.height @visible = false create_layout create_parameter create_face create_name create_hp_meter create_mp_meter @next_pos = [-@layout.width - 64,0] @now_index = [-@layout.width - 64,0,0] @before_index = [-@layout.width - 64,0,0] @next_index = [-@layout.width - 64,0,0] set_position(-@layout.width - 64,0) set_opacity(0) end #-------------------------------------------------------------------------- # ● Create Sprites #-------------------------------------------------------------------------- def create_sprites_support create_scope_all create_arrow end #-------------------------------------------------------------------------- # ● Create Scope All #-------------------------------------------------------------------------- def create_scope_all @scope = Sprite.new @scope.bitmap = $game_temp.pre_cache_actor_menu[4] @scope_cw = @scope.bitmap.width @org_pos_scope = [SCOPE_TEXT_POSITION[0],SCOPE_TEXT_POSITION[1],SCOPE_TEXT_POSITION[0] - @scope_cw] @scope.x = @org_pos_scope[2] @scope.y = @org_pos_scope[1] @scope.z = 15 end #-------------------------------------------------------------------------- # ● Update Scope #-------------------------------------------------------------------------- def update_scope if @active and all_targets if @scope.x < @org_pos_scope[0] @scope.x += 15 if @scope.x >= @org_pos_scope[0] @scope.x = @org_pos_scope[0] end end else if @scope.x > @org_pos_scope[2] @scope.x -= 15 if @scope.x <= @org_pos_scope[2] @scope.x = @org_pos_scope[2] end end end end #-------------------------------------------------------------------------- # ● Create Arrow #-------------------------------------------------------------------------- def create_arrow @arrow_float = [0,0,0] @arrow_np_1 = [0,0] @arrow_np_2 = [0,0] @arrow_image = $game_temp.pre_cache_actor_menu[5] @arrow_image_cw = @arrow_image.width @arrow_image_ch = @arrow_image.height# / 2 @arrow_1 = Sprite.new @arrow_1.bitmap = Bitmap.new(@arrow_image_cw,@arrow_image_ch) @arrow_cw = @arrow_1.bitmap.width @org_pos_arrow_1 = [ARROW_1_POSITION[0],ARROW_1_POSITION[1]] @arrow_1.x = @org_pos_arrow_1[0] @arrow_1.y = @org_pos_arrow_1[1] @arrow_1.z = 15 @arrow_1.opacity = 0 @arrow_2 = Sprite.new @arrow_2.bitmap = Bitmap.new(@arrow_image_cw,@arrow_image_ch) @arrow_2.ox = @arrow_2.bitmap.width / 2 @arrow_2.oy = @arrow_2.bitmap.height / 2 @arrow_2.angle = 180 ar_y = (MEMBERS_SPACE * 4) + ARROW_2_POSITION[1] @org_pos_arrow_2 = [ARROW_2_POSITION[0] + @arrow_2.ox,ar_y] @arrow_2.x = @org_pos_arrow_2[0] @arrow_2.y = @org_pos_arrow_2[1] @arrow_2.z = 15 @arrow_2.opacity = 0 @arrow_time_1 = 0 @arrow_time_2 = 0 refresh_arrow(0,@arrow_1,0) refresh_arrow(1,@arrow_2,0) end #-------------------------------------------------------------------------- # ● Refresh_arrow 1 #-------------------------------------------------------------------------- def refresh_arrow(arrow,sprite,type) sprite.bitmap.clear h = @arrow_image_ch * type a_rect = Rect.new(0,h,@arrow_image_cw,@arrow_image_ch) sprite.bitmap.blt(0,0,@arrow_image,a_rect) @arrow_time_1 = 20 if arrow == 0 @arrow_time_2 = 20 if arrow ==1 end #-------------------------------------------------------------------------- # ● Update Arrow #-------------------------------------------------------------------------- def update_arrow # update_arrow_type update_arrow_visible update_arrow_float_animation end #-------------------------------------------------------------------------- # ● Update Arrow Type #-------------------------------------------------------------------------- def update_arrow_type if @arrow_time_1 > 0 @arrow_time_1 -= 1 refresh_arrow(0,@arrow_1,0) if @arrow_time_1 == 0 end if @arrow_time_2 > 0 @arrow_time_2 -= 1 refresh_arrow(1,@arrow_2,0) if @arrow_time_2 == 0 end end #-------------------------------------------------------------------------- # ● Refresh Arrow Type #-------------------------------------------------------------------------- def refresh_arrow_type return if @index_old > @com_index refresh_arrow(0,@arrow_1,1) else refresh_arrow(1,@arrow_2,1) end end #-------------------------------------------------------------------------- # ● Update Arrow Visible #-------------------------------------------------------------------------- def update_arrow_visible if can_arrow_visible? @arrow_1.opacity += 15 @arrow_2.opacity += 15 @arrow_np_1 = [@org_pos_arrow_1[0],@org_pos_arrow_1[1]] @arrow_np_2 = [@org_pos_arrow_2[0],@org_pos_arrow_2[1]] else @arrow_1.opacity -= 10 @arrow_2.opacity -= 10 @arrow_np_1 = [-@arrow_cw,@org_pos[1]] @arrow_np_2 = [-@arrow_cw + @arrow_2.ox,@org_pos[1] + @arrow_2.oy] end end #-------------------------------------------------------------------------- # ● Update Slide Arrow #-------------------------------------------------------------------------- def update_slide_arrow(type,sprite,cp,np) cp -= @arrow_float[1] if type == 1 sp = 2 + ((cp - np).abs / 20) if cp > np cp -= sp cp = np if cp < np elsif cp < np cp += sp cp = np if cp > np end sprite.x = cp if type == 0 sprite.y = cp + @arrow_float[1] if type == 1 end #-------------------------------------------------------------------------- # ● Can Arrow Visiblle? #-------------------------------------------------------------------------- def can_arrow_visible? return false if !@active return false if all_targets return false if $game_party.members.size < 2 return true end #-------------------------------------------------------------------------- # ● Update Arrow Float Animation #-------------------------------------------------------------------------- def update_arrow_float_animation @arrow_float[2] += 1 if @arrow_float[2] > 2 @arrow_float[2] = 0 @arrow_float[0] += 1 case @arrow_float[0] when 1..11 @arrow_float[1] += 1 when 12..22 @arrow_float[1] -= 1 else @arrow_float[0] = 0 @arrow_float[1] = 0 end end update_slide_arrow(0,@arrow_1,@arrow_1.x,@arrow_np_1[0]) update_slide_arrow(1,@arrow_1,@arrow_1.y,@arrow_np_1[1]) update_slide_arrow(0,@arrow_2,@arrow_2.x,@arrow_np_2[0]) update_slide_arrow(1,@arrow_2,@arrow_2.y,@arrow_np_2[1]) end #-------------------------------------------------------------------------- # ● Create Scope All #-------------------------------------------------------------------------- def update_support update_scope update_arrow end #-------------------------------------------------------------------------- # ● Set Old Parameter #-------------------------------------------------------------------------- def set_old_parameter @par.clear @par = [@actor.hp,@actor.mhp,@actor.mp,@actor.mmp,@actor.level] end #-------------------------------------------------------------------------- # ● Members Spate #-------------------------------------------------------------------------- def members_space LAYOUT_POSITION[1] + (@index * MEMBERS_SPACE) end #-------------------------------------------------------------------------- # ● Dispose #-------------------------------------------------------------------------- def dispose dispose_layout dispose_parameter dispose_face dispose_name dispose_hp_meter dispose_mp_meter dispose_support if @index == 0 end #-------------------------------------------------------------------------- # ● Dispose Support #-------------------------------------------------------------------------- def dispose_support dispose_scope dispose_arrow end #-------------------------------------------------------------------------- # ● Dispose Layout #-------------------------------------------------------------------------- def dispose_layout @layout.dispose end #-------------------------------------------------------------------------- # ● Dispose Scope #-------------------------------------------------------------------------- def dispose_scope @scope.dispose end #-------------------------------------------------------------------------- # ● Dispose_Arrow #-------------------------------------------------------------------------- def dispose_arrow @arrow_1.bitmap.dispose @arrow_1.dispose @arrow_2.bitmap.dispose @arrow_2.dispose end #-------------------------------------------------------------------------- # ● Dispose Parameter #-------------------------------------------------------------------------- def dispose_parameter @parameter.bitmap.dispose @parameter.dispose end #-------------------------------------------------------------------------- # ● Dispose Face #-------------------------------------------------------------------------- def dispose_face @face.dispose end #-------------------------------------------------------------------------- # ● Dispose HP Meter #-------------------------------------------------------------------------- def dispose_hp_meter @hp_meter.bitmap.dispose @hp_meter.dispose end #-------------------------------------------------------------------------- # ● Dispose MP Meter #-------------------------------------------------------------------------- def dispose_mp_meter @mp_meter.bitmap.dispose @mp_meter.dispose end #-------------------------------------------------------------------------- # ● Dispose Name #-------------------------------------------------------------------------- def dispose_name @name.bitmap.dispose @name.dispose end #-------------------------------------------------------------------------- # ● Create Layout #-------------------------------------------------------------------------- def create_layout @layout = Sprite.new @layout.bitmap = Cache.menu("Actor_Layout_1") @org_pos = [LAYOUT_POSITION[0],LAYOUT_POSITION[1]] @layout.x = @org_pos[0] @layout.y = @org_pos[1] @layout.z = 10 #@layout.opacity = 0 end #-------------------------------------------------------------------------- # ● Create Parameter #-------------------------------------------------------------------------- def create_parameter @parameter = Sprite.new @parameter.bitmap = Bitmap.new(@layout.bitmap.width,@layout.bitmap.height) @org_pos_par = [@org_pos[0] + PAR_POSITION[0], @org_pos[1] + PAR_POSITION[1]] @parameter.x = @org_pos_par[0] @parameter.y = @org_pos_par[1] @parameter.z = 12 # @parameter.opacity = 0 refresh_parameter end #-------------------------------------------------------------------------- # ● Create HP Meter #-------------------------------------------------------------------------- def create_hp_meter @hp_meter_old = [-1,-1] @hp_meter = Sprite.new @hp_meter.bitmap = Bitmap.new(@meter_cw,@meter_ch) @org_pos_hp = [@org_pos[0] + HP_METER_POSITION[0], @org_pos[1] + HP_METER_POSITION[1]] @hp_meter.x = @org_pos_hp[0] @hp_meter.y = @org_pos_hp[1] @hp_meter.z = 11 end #-------------------------------------------------------------------------- # ● Refresh HP Meter #-------------------------------------------------------------------------- def refresh_hp_meter @hp_meter_old[0] = @actor.hp @hp_meter_old[1] = @actor.mhp @hp_meter.bitmap.clear width_range = @meter_cw * @actor.hp / @actor.mhp m_rect = Rect.new(0,0,width_range,@meter_ch) @hp_meter.bitmap.blt(0,0,@meter_image,m_rect) end #-------------------------------------------------------------------------- # ● Create MP Meter #-------------------------------------------------------------------------- def create_mp_meter @mp_meter_old = [-1,-1] @mp_meter = Sprite.new @mp_meter.bitmap = Bitmap.new(@meter_cw,@meter_ch) @org_pos_mp = [@org_pos[0] + MP_METER_POSITION[0], @org_pos[1] + MP_METER_POSITION[1]] @mp_meter.x = @org_pos_mp[0] @mp_meter.y = @org_pos_mp[1] @mp_meter.z = 11 end #-------------------------------------------------------------------------- # ● Refresh MP Meter #-------------------------------------------------------------------------- def refresh_mp_meter @mp_meter_old[0] = @actor.mp @mp_meter_old[1] = @actor.mmp @mp_meter.bitmap.clear width_range = @meter_cw * @actor.mp / @actor.mmp rescue nil width_range = 0 if width_range == nil m_rect = Rect.new(0,@meter_ch,width_range,@meter_ch) @mp_meter.bitmap.blt(0,0,@meter_image,m_rect) end #-------------------------------------------------------------------------- # ● Create Face #-------------------------------------------------------------------------- def refresh_parameter set_old_parameter @parameter.bitmap.clear value = @actor.level x = 146+30 y = 0 refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y) value = @actor.hp x = 72 y = 24 refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y) value = @actor.mp x = 146 y = 24 refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y) end #-------------------------------------------------------------------------- # ● Refresh Number #-------------------------------------------------------------------------- def refresh_number(sprite,image,value,number_cw,number_ch,x,y) number = value.abs.to_s.split(//) x2 = -number_cw * number.size for i in 0..number.size - 1 number_abs = number[i].to_i nsrc_rect = Rect.new(number_cw * number_abs, 0, number_cw , number_ch) sprite.bitmap.blt(x + x2 + (number_cw * i), y, image, nsrc_rect) end end #-------------------------------------------------------------------------- # ● Create Face #-------------------------------------------------------------------------- def create_face @face = Sprite.new @org_pos_face = [@org_pos[0] + FACE_POSITION[0], @org_pos[1] + FACE_POSITION[1]] @face.x = @org_pos_face[0] @face.y = @org_pos_face[1] @face.z = 11 #@face.opacity = 0 refresh_face end #-------------------------------------------------------------------------- # ● Refresh Face #-------------------------------------------------------------------------- def refresh_face face_name = "Face_B" + @actor.id.to_s @face.bitmap = Cache.menu(face_name.to_s) rescue nil end #-------------------------------------------------------------------------- # ● Create Name #-------------------------------------------------------------------------- def create_name @name = Sprite.new @name.bitmap = Bitmap.new(140,32) @name.bitmap.font.size = FONT_SIZE @name.bitmap.font.bold = FONT_BOLD @name.bitmap.font.color = Color.new(255,255,0,255) #人物名字颜色 @org_pos_name = [@org_pos[0] + NAME_POSITION[0], @org_pos[1] + NAME_POSITION[1]] @name.x = @org_pos_name[0] @name.y = @org_pos_name[1] @name.z = 11 refresh_name end #-------------------------------------------------------------------------- # ● Refresh Name #-------------------------------------------------------------------------- def refresh_name @name.bitmap.clear @name.bitmap.draw_text(0,0,140,32,@actor.name.to_s,0) end #-------------------------------------------------------------------------- # ● Set Actor #-------------------------------------------------------------------------- def set_actor(actor) @actor = actor end #-------------------------------------------------------------------------- # ● Can Refresh HP Meter #-------------------------------------------------------------------------- def can_refresh_hp_meter? return true if @hp_meter_old[0] != @actor.hp return true if @hp_meter_old[1] != @actor.mhp return false end #-------------------------------------------------------------------------- # ● Can Refresh MP Meter #-------------------------------------------------------------------------- def can_refresh_mp_meter? return true if @mp_meter_old[0] != @actor.mp return true if @mp_meter_old[1] != @actor.mmp return false end #-------------------------------------------------------------------------- # ● Can Refresh Parameter #-------------------------------------------------------------------------- def can_refresh_parameter? return true if @par[0] != @actor.hp return true if @par[1] != @actor.mhp return true if @par[2] != @actor.mp return true if @par[3] != @actor.mmp return true if @par[4] != @actor.level return false end #-------------------------------------------------------------------------- # ● Refresh_Visible #-------------------------------------------------------------------------- def refresh_visible if can_visible? set_visible(true) else set_visible(false) end end #-------------------------------------------------------------------------- # ● Set Index #-------------------------------------------------------------------------- def set_index @now_index[0] = @com_index @before_index[0] = @com_index - 1 @next_index[0] = @com_index + 1 @before_index[0] = @max_index if @before_index[0] < 0 @next_index[0] = 0 if @next_index[0] > @max_index end #-------------------------------------------------------------------------- # ● Can Visible? #-------------------------------------------------------------------------- def can_visible? return true if @index == @now_index[0] return true if @index == @next_index[0] return true if @index == @before_index[0] return false end #-------------------------------------------------------------------------- # ● Set Visible #-------------------------------------------------------------------------- def set_visible(value) @visible = value return @layout.visible = @visible @parameter.visible = @visible @hp_meter.visible = @visible @mp_meter.visible = @visible @face.visible = @visible @name.visible = @visible end #-------------------------------------------------------------------------- # ● Update Position #-------------------------------------------------------------------------- def update_position update_slide(0,@layout,@layout.x,@next_pos[0] + @org_pos[0]) update_slide(1,@layout,@layout.y,@next_pos[1] + @org_pos[1]) update_slide(0,@parameter,@parameter.x,@next_pos[0] + @org_pos_par[0]) update_slide(1,@parameter,@parameter.y,@next_pos[1] + @org_pos_par[1]) update_slide(0,@hp_meter,@hp_meter.x,@next_pos[0] + @org_pos_hp[0]) update_slide(1,@hp_meter,@hp_meter.y,@next_pos[1] + @org_pos_hp[1]) update_slide(0,@mp_meter,@mp_meter.x,@next_pos[0] + @org_pos_mp[0]) update_slide(1,@mp_meter,@mp_meter.y,@next_pos[1] + @org_pos_mp[1]) update_slide(0,@face,@face.x,@next_pos[0] + @org_pos_face[0]) update_slide(1,@face,@face.y,@next_pos[1] + @org_pos_face[1]) update_slide(0,@name,@name.x,@next_pos[0] + @org_pos_name[0]) update_slide(1,@name,@name.y,@next_pos[1] + @org_pos_name[1]) end #-------------------------------------------------------------------------- # ● Update Float #-------------------------------------------------------------------------- def update_float @float[2] += 1 if @float[2] > 5 @float[2] = 0 @float[0] += 1 case @float[0] when 1..5 @float[1] -= 1 when 6..15 @float[1] += 1 when 16..20 @float[1] -= 1 else @float = [0,0,0] end end end #-------------------------------------------------------------------------- # ● Update Slide #-------------------------------------------------------------------------- def update_slide(type,sprite,cp,np) cp -= @float[1] if type == 1 sp = 3 + ((cp - np).abs / 10) if cp > np cp -= sp cp = np if cp < np elsif cp < np cp += sp cp = np if cp > np end sprite.x = cp if type == 0 sprite.y = cp + @float[1] if type == 1 end #-------------------------------------------------------------------------- # ● All Targets #-------------------------------------------------------------------------- def all_targets return true if $game_temp.item_scope == 8 return true if $game_temp.item_scope == 10 return false end #-------------------------------------------------------------------------- # ● Update Opacity #-------------------------------------------------------------------------- def update_opacity if @visible if all_targets if @max_index == 0 @next_pos = [0,0] else if @index == @before_index[0] @next_pos = [0,-MEMBERS_SPACE] elsif @index == @next_index[0] @next_pos = [0,MEMBERS_SPACE] else @next_pos = [0,0] end end update_opacity_active update_float else if ((@index == @before_index[0]) or (@index == @next_index[0])) and @max_index != 0 opac_limit = 170 if @opac > opac_limit @opac -= 10 @opac = opac_limit if @opac < opac_limit elsif @opac < opac_limit @opac += 10 @opac = opac_limit if @opac > opac_limit end @float = [0,0,0] else update_opacity_active update_float end end else @opac -= 10 if @opac > 0 @opac = 0 if @opac < 0 @float = [0,0,0] end set_opacity(@opac) end #-------------------------------------------------------------------------- # ● Update Opacity Active #-------------------------------------------------------------------------- def update_opacity_active @opac_active[0] += 1 case @opac_active[0] when 1..30 @opac_active[1] += 4 when 31..60 @opac_active[1] -= 4 else @opac_active[1] = 0 @opac_active[0] = 0 end @opac = 160 + @opac_active[1] end #-------------------------------------------------------------------------- # ● Set Opacity #-------------------------------------------------------------------------- def set_opacity(opac) @layout.opacity = opac @layout.opacity = opac @parameter.opacity = opac @parameter.opacity = opac @hp_meter.opacity = opac @hp_meter.opacity = opac @mp_meter.opacity = opac @mp_meter.opacity = opac @face.opacity = opac @face.opacity = opac @name.opacity = opac @name.opacity = opac end #-------------------------------------------------------------------------- # ● Refresh Index #-------------------------------------------------------------------------- def refresh_index refresh_arrow_type if @index == 0 @index_old = @com_index set_index refresh_visible set_next_position end #-------------------------------------------------------------------------- # ● Set Next Position #-------------------------------------------------------------------------- def set_next_position if @max_index == 0 @next_pos = [0,0] return end if @visible if @index == @before_index[0] @next_pos = [-32,-MEMBERS_SPACE] if @layout.opacity < 150 set_position(@next_pos[0],-MEMBERS_SPACE * 2) set_opacity(0) end elsif @index == @next_index[0] @next_pos = [-32,MEMBERS_SPACE] if @layout.opacity < 150 set_position(@next_pos[0],MEMBERS_SPACE * 2) set_opacity(0) end else @next_pos = [0,0] end else @next_pos = [-64,0] end end #-------------------------------------------------------------------------- # ● Update Position #-------------------------------------------------------------------------- def set_position(pos_x,pos_y) @layout.x = @org_pos[0] + pos_x @layout.y = @org_pos[1] + pos_y @parameter.x = @org_pos_par[0] + pos_x @parameter.y = @org_pos_par[1] + pos_y @hp_meter.x = @org_pos_hp[0] + pos_x @hp_meter.y = @org_pos_hp[1] + pos_y @mp_meter.x = @org_pos_mp[0] + pos_x @mp_meter.y = @org_pos_mp[1] + pos_y @face.x = @org_pos_face[0] + pos_x @face.y = @org_pos_face[1] + pos_y @name.x = @org_pos_name[0] + pos_x @name.y = @org_pos_name[1] + pos_y end #-------------------------------------------------------------------------- # ● Refresh Active #-------------------------------------------------------------------------- def refresh_active @active_old = @active @visible = @active refresh_index if !@active @visible = @active @next_pos = [-@layout.width - 64,0] else set_position(-@layout.width - 64,0) end end #-------------------------------------------------------------------------- # ● Update #-------------------------------------------------------------------------- def update(active,com_index) @active = active @com_index = com_index refresh_active if @active != @active_old update_opacity update_position update_support if @index == 0 return if !@active refresh_index if @index_old != @com_index return if !@active or !@visible refresh_hp_meter if can_refresh_hp_meter? refresh_mp_meter if can_refresh_mp_meter? refresh_parameter if can_refresh_parameter? end #-------------------------------------------------------------------------- # ● Current Actor #-------------------------------------------------------------------------- def current_actor return true if @com_index == @index return false end end #============================================================================== # ■ Game_Temp #============================================================================== class Game_Temp #-------------------------------------------------------------------------- # ● Execute Pre Cache Actor #-------------------------------------------------------------------------- def execute_pre_cache_actor @pre_cache_actor_menu = [] @pre_cache_actor_menu.push(Cache.menu("Actor_Layout_1")) @pre_cache_actor_menu.push(Cache.menu("Actor_Layout_2")) @pre_cache_actor_menu.push(Cache.menu("Actor_Number_1")) @pre_cache_actor_menu.push(Cache.menu("Actor_Number_2")) @pre_cache_actor_menu.push(Cache.menu("Actor_Scope_All")) @pre_cache_actor_menu.push(Cache.menu("Actor_Members_Arrow")) @pre_cache_actor_menu.push(Cache.menu("Actor_Meter")) end end #============================================================================== # ■ Actor Menu Status #============================================================================== class Actor_Menu_Status include MOG_ACTOR_MENU_STATUS #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- def initialize(actor) @actor = actor @active = false set_old_parameter create_sprites end #-------------------------------------------------------------------------- # ● Create Sprites #-------------------------------------------------------------------------- def create_sprites @parameter_number = $game_temp.pre_cache_actor_menu[3] @parameter_cw = @parameter_number.width / 10 @parameter_ch = @parameter_number.height create_layout create_face create_parameter create_name create_states # update(true,@actor) end #-------------------------------------------------------------------------- # ● Dispose #-------------------------------------------------------------------------- def dispose dispose_layout dispose_face dispose_parameter dispose_name dispose_states end #-------------------------------------------------------------------------- # ● Dispose Layout #-------------------------------------------------------------------------- def dispose_layout @layout.dispose end #-------------------------------------------------------------------------- # ● Dispose Face #-------------------------------------------------------------------------- def dispose_face @face.bitmap.dispose if @face.bitmap != nil @face.dispose end #-------------------------------------------------------------------------- # ● Dispose Parameter #-------------------------------------------------------------------------- def dispose_parameter @parameter.bitmap.dispose @parameter.dispose end #-------------------------------------------------------------------------- # ● Dispose Name #-------------------------------------------------------------------------- def dispose_name @name.bitmap.dispose @name.dispose end #-------------------------------------------------------------------------- # ● Dispose States #-------------------------------------------------------------------------- def dispose_states return if @status == nil @status.bitmap.dispose @status.dispose if @actor_status != nil @actor_status.dispose @actor_status = nil end end #风宥雪 #-------------------------------------------------------------------------- # ● Set Old Parameter #-------------------------------------------------------------------------- def set_old_parameter @par = [] if @par == nil @par.clear @par = [@actor.hp,@actor.mhp,@actor.mp,@actor.mmp,@actor.atk,@actor.def, @actor.mat,@actor.mdf,@actor.agi,@actor.luk,@actor.level,@actor.tp] end #-------------------------------------------------------------------------- # ● Create Layout #-------------------------------------------------------------------------- def create_layout @layout = Sprite.new @layout.bitmap = $game_temp.pre_cache_actor_menu[1] @org_pos = [LAYOUT_POSITION[0],LAYOUT_POSITION[1]] @layout.x = @org_pos[0] + 150 @layout.y = @org_pos[1] @layout.z = 10 @layout.opacity = 0 end #-------------------------------------------------------------------------- # ● Create Parameter #-------------------------------------------------------------------------- def create_parameter @parameter = Sprite.new @parameter.bitmap = Bitmap.new(@layout.bitmap.width,@layout.bitmap.height) @org_pos_par = [@org_pos[0] + PAR_POSITION[0], @org_pos[1] + PAR_POSITION[1]] @parameter.x = @org_pos_par[0] + 150 @parameter.y = @org_pos_par[1] @parameter.z = 11 @parameter.opacity = 0 refresh_parameter end #-------------------------------------------------------------------------- # ● Create Face #-------------------------------------------------------------------------- def create_face @face = Sprite.new @face.bitmap = Bitmap.new(96,96) @org_pos_face = [@org_pos[0] + FACE_POSITION[0], @org_pos[1] + FACE_POSITION[1]] @face.x = @org_pos_face[0] + 150 @face.y = @org_pos_face[1] @face.z = 11 @face.opacity = 0 refresh_face end #-------------------------------------------------------------------------- # ● Create Name #-------------------------------------------------------------------------- def create_name @name = Sprite.new @name.bitmap = Bitmap.new(140,32) @name.bitmap.font.size = FONT_SIZE @name.bitmap.font.bold = FONT_BOLD @org_pos_name = [@org_pos[0] + NAME_POSITION[0], @org_pos[1] + NAME_POSITION[1]] @name.x = @org_pos_name[0] + 150 @name.y = @org_pos_name[1] @name.z = 11 @name.opacity = 0 refresh_name end #-------------------------------------------------------------------------- # ● Create_States #-------------------------------------------------------------------------- def create_states @status_old = nil @status_flow = [-24,0] @status = Sprite.new @status.bitmap = Bitmap.new(24,24) @org_pos_states = [@org_pos[0] + STATES_POSITION[0], @org_pos[1] + STATES_POSITION[1]] @status.x = @org_pos_states[0] + 150 @status.y = @org_pos_states[1] @status.z = 11 end #-------------------------------------------------------------------------- # * Refresh States #-------------------------------------------------------------------------- def refresh_states check_icon_image @status_old = @actor.states @status_flow = [0,0] @actor_status.dispose if @actor_status != nil @states_size = @actor.states.size > 0 ? (26 * @actor.states.size) : 24 @actor_status = Bitmap.new(@states_size,24) index = 0 for i in @actor.states rect = Rect.new(i.icon_index % 16 * 24, i.icon_index / 16 * 24, 24, 24) @actor_status.blt(26 * index , 0, @icon_image, rect) index += 1 end end #-------------------------------------------------------------------------- # * Flow_Status #-------------------------------------------------------------------------- def flow_states return if @actor_status == nil @status.bitmap.clear return if @actor.states.size == 0 st_src_rect = Rect.new(@status_flow[0],0, 24,24) @status.bitmap.blt(0,0, @actor_status, st_src_rect) if STATES_SCROLLING_ANIMATION @status_flow[0] += 1 @status_flow[0] = -24 if @status_flow[0] >= @states_size + 2 else @status_flow[1] += 1 unless @actor.states.size <= 1 if @status_flow[1] > 30 @status_flow[1] = 0 @status_flow[0] += 26 @status_flow[0] = 0 if @status_flow[0] >= (@states_size - 0) end end end #-------------------------------------------------------------------------- # * Check Icon Image #-------------------------------------------------------------------------- def check_icon_image if @icon_image == nil or @icon_image.disposed? @icon_image = Cache.system("Iconset") end end #-------------------------------------------------------------------------- # ● Can Refresh Parameter #-------------------------------------------------------------------------- def can_refresh_parameter? return false if !@active return true if @par[0] != @actor.hp return true if @par[1] != @actor.mhp return true if @par[2] != @actor.mp return true if @par[3] != @actor.mmp return true if @par[4] != @actor.atk return true if @par[5] != @actor.def return true if @par[6] != @actor.mat return true if @par[7] != @actor.mdf return true if @par[8] != @actor.agi return true if @par[9] != @actor.luk return true if @par[10] != @actor.level return true if @par[11] != @actor.tp return false end #-------------------------------------------------------------------------- # ● Refresh All #-------------------------------------------------------------------------- def refresh_all(actor) @actor = actor refresh_parameter refresh_face refresh_name end #-------------------------------------------------------------------------- # ● Refresh Name #-------------------------------------------------------------------------- def refresh_name @name.bitmap.clear @name.bitmap.draw_text(0,0,140,32,@actor.name.to_s,0) end #-------------------------------------------------------------------------- # ● Create Face #-------------------------------------------------------------------------- def refresh_parameter set_old_parameter @parameter.bitmap.clear value = @actor.level x = 67 y = 24 refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y) value = @actor.tp x = 140 y = 24 refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y) value = @actor.hp x = 70 y = 46 refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y) value = @actor.mhp x = 140 y = 46 refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y) value = @actor.mp x = 70 y = 46 + 22 * 1 refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y) value = @actor.mmp x = 140 y = 46 + 22 * 1 refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y) value = @actor.atk x = 70 y = 46 + 22 * 2 refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y) value = @actor.def x = 70 y = 46 + 22 * 3 refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y) value = @actor.agi x = 70 y = 46 + 22 * 4 refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y) value = @actor.mat x = 140 y = 46 + 22 * 2 refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y) value = @actor.mdf x = 140 y = 46 + 22 * 3 refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y) value = @actor.luk x = 140 y = 46 + 22 * 4 refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y) end #-------------------------------------------------------------------------- # ● Refresh Number #-------------------------------------------------------------------------- def refresh_number(sprite,image,value,number_cw,number_ch,x,y) number = value.truncate.abs.to_s.split(//) x2 = -number_cw * number.size for i in 0..number.size - 1 number_abs = number[i].to_i nsrc_rect = Rect.new(number_cw * number_abs, 0, number_cw , number_ch) sprite.bitmap.blt(x + x2 + (number_cw * i), y, image, nsrc_rect) end end #-------------------------------------------------------------------------- # ● Refresh Face #-------------------------------------------------------------------------- def refresh_face #return @face.bitmap.clear face_image = Cache.face(@actor.face_name) arect = Rect.new(@actor.face_index % 4 * 96, @actor.face_index / 4 * 96, 96, 96) @face.bitmap.blt(0,0, face_image, arect) # face_image.dispose end #-------------------------------------------------------------------------- # ● Update Slide #-------------------------------------------------------------------------- def update_slide slide_speed = 10 opac_speed = 23 @slide_range = (@org_pos[0] + 150) if @active if @layout.x > @org_pos[0] @layout.x -= slide_speed @parameter.x -= slide_speed @face.x -= slide_speed @name.x -= slide_speed @status.x -= slide_speed @layout.opacity += opac_speed @parameter.opacity += opac_speed @face.opacity += opac_speed @name.opacity += opac_speed @status.opacity += opac_speed if @layout.x <= @org_pos[0] @layout.x = @org_pos[0] @parameter.x = @org_pos_par[0] @face.x = @org_pos_face[0] @name.x = @org_pos_name[0] @status.x = @org_pos_states[0] @layout.opacity = 255 @parameter.opacity = 255 @face.opacity = 255 @name.opacity = 255 @status.opacity = 255 end end else if @layout.x < @slide_range @layout.x += slide_speed @parameter.x += slide_speed @face.x += slide_speed @name.x += slide_speed @status.x += slide_speed @layout.opacity -= opac_speed @parameter.opacity -= opac_speed @face.opacity -= opac_speed @name.opacity -= opac_speed @status.opacity -= opac_speed if @layout.x >= @slide_range @layout.x = @slide_range @parameter.x = @org_pos_par[0] + 150 @face.x = @org_pos_face[0] + 150 @name.x = @org_pos_name[0] + 150 @status.x = @org_pos_states[0] + 150 @layout.opacity = 0 @parameter.opacity = 0 @face.opacity = 0 @name.opacity = 0 @status.opacity = 0 end end end end #-------------------------------------------------------------------------- # ● Update #-------------------------------------------------------------------------- def update(active,actor) @active = active update_slide return if !@active refresh_all(actor) if actor != @actor refresh_parameter if can_refresh_parameter? refresh_states if @status_old != @actor.states flow_states end end #============================================================================== # ■ Game_Temp #============================================================================== class Game_Temp #-------------------------------------------------------------------------- # ● Execute Pre Cache Main Menu #-------------------------------------------------------------------------- def execute_pre_cache_main_menu @pre_cache_main_menu = [] @pre_cache_main_menu.push(Cache.menu_main("Background")) @pre_cache_main_menu.push(Cache.menu_main("Layout")) @pre_cache_main_menu.push(Cache.menu_main("Time_Number")) @pre_cache_main_menu.push(Cache.menu_main("Gold_Number")) @pre_cache_main_menu.push(Cache.menu_main("Members_Layout")) @pre_cache_main_menu.push(Cache.menu_main("Members_Arrow")) @pre_cache_main_menu.push(Cache.menu_main("Par_Number_1")) @pre_cache_main_menu.push(Cache.menu_main("Par_Number_2")) @pre_cache_main_menu.push(Cache.menu_main("Par_Meter")) @pre_cache_main_menu.push(Cache.menu_main("Par_Layout")) end end #============================================================================== # ■ Scene_Menu #============================================================================== class Scene_Menu include MOG_MENU include MOG_MENU_BASE #-------------------------------------------------------------------------- # ● Main #-------------------------------------------------------------------------- def main execute_setup execute_loop execute_dispose end #-------------------------------------------------------------------------- # ● Execute Setup #-------------------------------------------------------------------------- def execute_setup $game_temp.execute_pre_cache_icon if $game_temp.can_pre_cache_icon? @phase = 0 @members_windows_active = false @members_index = 0 create_sprites end #-------------------------------------------------------------------------- # ● Execute Lopp #-------------------------------------------------------------------------- def execute_loop Graphics.transition(10) loop do Input.update update Graphics.update break if SceneManager.scene != self end end end #============================================================================== # ■ Face Members #============================================================================== class Face_Members_Sprite < Sprite include MOG_MENU attr_accessor :index attr_accessor :active attr_accessor :actor_id #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- def initialize(viewport = nil, index, actor_id) super(viewport) @active = false @index = index @actor_id = actor_id @active = false self.bitmap = Cache.menu("Face" + @actor_id.to_s) self.z = 12 self.ox = self.bitmap.width / 2 self.oy = self.bitmap.height / 2 members_size = $game_party.members.size - 1 members_size = 3 if members_size > 3 space_base = (MEMBERS_FACE_SPACE * @index) space = space_base - ((ACTOR_SPACE * members_size ) / 2) + MEMBERS_FACE_POSITION[0] @org_pos = [space + self.ox , self.oy ] @ny = 0 @zoom_duration = [0,0,false] self.x = @org_pos[0] self.y = @org_pos[1] end #-------------------------------------------------------------------------- # ● Dispose #-------------------------------------------------------------------------- def dispose super self.bitmap.dispose end #-------------------------------------------------------------------------- # ● Update #-------------------------------------------------------------------------- def update_command(index, ny) @active = index == @index ? true : false @ny = ny update_slide(index) update_opacity update_zoom end #-------------------------------------------------------------------------- # ● Update Opacity #-------------------------------------------------------------------------- def update_opacity if @active self.opacity += 12 else self.opacity -= 6 if self.opacity > 120 end end #-------------------------------------------------------------------------- # ● Update Zoom #-------------------------------------------------------------------------- def update_zoom if @active if !@zoom_duration[2] update_zoom_out @zoom_duration = [0,0,true] if self.zoom_x == 1.00 else update_zoom_effect end else @zoom_duration[2] = false update_zoom_in end end #-------------------------------------------------------------------------- # ● Update Zoom Out #-------------------------------------------------------------------------- def update_zoom_out return if self.zoom_x == 1.00 self.zoom_x += 0.03 self.zoom_y += 0.03 if self.zoom_x >= 1.00 self.zoom_x = 1.00 self.zoom_y = 1.00 end end #-------------------------------------------------------------------------- # ● Update Zoom In #-------------------------------------------------------------------------- def update_zoom_in return if self.zoom_x == 0.80 self.zoom_x -= 0.03 self.zoom_y -= 0.03 if self.zoom_x <= 0.80 self.zoom_x = 0.80 self.zoom_y = 0.80 end end #-------------------------------------------------------------------------- # ● Update Zoom_effect #-------------------------------------------------------------------------- def update_zoom_effect @zoom_duration[0] += 1 return if @zoom_duration[0] < 1 @zoom_duration[0] = 0 @zoom_duration[1] += 1 case @zoom_duration[1] when 1..30 self.zoom_x -= 0.005 self.zoom_y -= 0.005 when 31..60 self.zoom_x += 0.005 self.zoom_y += 0.005 when 61..999 @zoom_duration[1] = 0 self.zoom_x = 1.00 self.zoom_y = 1.00 end end #-------------------------------------------------------------------------- # ● Update Slide #-------------------------------------------------------------------------- def update_slide(index) np = @org_pos[0] - (index * MEMBERS_FACE_SPACE) + @ny cp = self.x sp = 5 + ((cp - np).abs / 5) if cp > np cp -= sp cp = np if cp < np elsif cp < np cp += sp cp = np if cp > np end self.x = cp end #-------------------------------------------------------------------------- # ● Active #-------------------------------------------------------------------------- def active(value) @active = value end end #============================================================================== # ■ Members Arrow Sprite #============================================================================== class Members_Arrow_Sprite include MOG_MENU attr_accessor :active #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- def initialize @active = false create_members_layout create_arrows end #-------------------------------------------------------------------------- # ● Create Members Layout #-------------------------------------------------------------------------- def create_members_layout @layout_members = Sprite.new @layout_members.bitmap = $game_temp.pre_cache_main_menu[4] @layout_members.z = 13 @layout_members_pos = [MEMBERS_ARROW_LAYOUT_POSITION[0], MEMBERS_ARROW_LAYOUT_POSITION[1]] @layout_members.x = @layout_members_pos[0] @layout_members.y = @layout_members_pos[1] @layout_members.opacity = 0 end #-------------------------------------------------------------------------- # ● Create Arrows #-------------------------------------------------------------------------- def create_arrows @arrow_animation_duration = [0,0] @arrow_1 = Sprite.new @arrow_1.bitmap = $game_temp.pre_cache_main_menu[5] @arrow_1.z = 13 @arrow1_pos = [MEMBERS_ARROW_1_POSITION[0], MEMBERS_ARROW_1_POSITION[1]] @arrow_1.x = @arrow1_pos[0] @arrow_1.y = @arrow1_pos[1] @arrow_1.opacity = 0 @arrow_2 = Sprite.new @arrow_2.bitmap = $game_temp.pre_cache_main_menu[5] @arrow_2.z = 13 @arrow_2.mirror = true @arrow2_pos = [MEMBERS_ARROW_2_POSITION[0], MEMBERS_ARROW_2_POSITION[1]] @arrow_2.x = @arrow2_pos[0] @arrow_2.y = @arrow2_pos[1] @arrow_2.opacity = 0 @nx = 0 @nx2 = 0 end #-------------------------------------------------------------------------- # ● Dispose #-------------------------------------------------------------------------- def dispose dispose_members_layout dispose_arrows end #-------------------------------------------------------------------------- # ● Dispose Arrows #-------------------------------------------------------------------------- def dispose_arrows return if @arrow_1 == nil @arrow_1.dispose @arrow_2.dispose @arrow_1 = nil end #-------------------------------------------------------------------------- # ● Dispose Members Layout #-------------------------------------------------------------------------- def dispose_members_layout return if @layout_members == nil @layout_members.dispose @layout_members = nil end #-------------------------------------------------------------------------- # ● Update #-------------------------------------------------------------------------- def update update_arrow_animation update_position @layout_members.opacity += 15 @arrow_1.opacity += 15 @arrow_2.opacity += 15 end #-------------------------------------------------------------------------- # ● Update Position #-------------------------------------------------------------------------- def update_position @arrow_1.x = @arrow1_pos[0] + @nx + @nx2 @arrow_2.x = @arrow2_pos[0] + @nx - @nx2 @layout_members.x = @layout_members_pos[0] + @nx end #-------------------------------------------------------------------------- # ● Update Arrow Animation #-------------------------------------------------------------------------- def update_arrow_animation @arrow_animation_duration[0] += 1 return if @arrow_animation_duration[0] < 2 @arrow_animation_duration[0] = 0 @arrow_animation_duration[1] += 1 case @arrow_animation_duration[1] when 1..20 @nx2 -= 1 when 21..40 @nx2 += 1 when 41..999 @nx2 = 0 @arrow_animation_duration[1] = 0 end end #-------------------------------------------------------------------------- # ● Active #-------------------------------------------------------------------------- def nx(value) @nx = value end end #============================================================================== # ■ Command Menu Sprite #============================================================================== class Command_Menu_Sprite < Sprite include MOG_MENU attr_accessor :index #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- def initialize(viewport = nil,index,command_name) super(viewport) @index = index @command_name = command_name self.bitmap = Cache.menu_main("CM_" + @command_name.to_s) @cw = self.bitmap.width @ch = self.bitmap.height cw1 = self.bitmap.height / 2 cw2 = (self.bitmap.width + COMMAND_SPACE) * index self.ox = self.bitmap.width / 2 self.oy = self.bitmap.height / 2 @org_pos = [COMMAND_POSITION[0] + cw2 + self.ox, COMMAND_POSITION[1] + self.oy] @slide_max = @org_pos[1] + cw1 @zoom_duration = [0,0,false] @zoom_limit = [1.00, 1.20] self.x = -@cw self.y = -@ch self.z = 10 @active = false @visible_old = true @np = [-@cw,-@ch] @sprite_name = Sprite.new @sprite_name.bitmap = Bitmap.new(100,32) @sprite_name.bitmap.font.bold = true @sprite_name.bitmap.font.color = Color.new(255,0,255) @sprite_name.bitmap.draw_text(0,0,100,32,@command_name.to_s,0) @sprite_name.z = 11 @np_name = [-@cw,-@ch] @cw_name_pos = [@cw - self.ox + 4, -self.oy + 4] end #-------------------------------------------------------------------------- # ● Dispose #-------------------------------------------------------------------------- def dispose_command self.bitmap.dispose @sprite_name.bitmap.dispose @sprite_name.dispose end #-------------------------------------------------------------------------- # ● Update #-------------------------------------------------------------------------- def update_command(index, visible) @active = index == @index ? true : false refresh_active(visible) if @visible_old != visible update_position if !visible if @active self.opacity += 15 else self.opacity -= 15 end return end update_zoom update_opacity end #-------------------------------------------------------------------------- # ● Update Slide #-------------------------------------------------------------------------- def update_slide(type,cp,np) sp = 2 + ((cp - np).abs / 15) if cp > np cp -= sp cp = np if cp < np elsif cp < np cp += sp cp = np if cp > np end self.x = cp if type == 0 self.y = cp if type == 1 @sprite_name.x = cp if type == 2 @sprite_name.y = cp if type == 3 end #-------------------------------------------------------------------------- # ● Update Position #-------------------------------------------------------------------------- def update_position unless !@visible_old if @active @np[0] = @org_pos[0] @np[1] = @slide_max else @np[0] = @org_pos[0] @np[1] = @org_pos[1] end end update_slide(0,self.x,@np[0]) update_slide(1,self.y,@np[1]) update_sprite_name_position end #-------------------------------------------------------------------------- # ● Update Sprite Name Position #-------------------------------------------------------------------------- def update_sprite_name_position if (@active and !@visible_old) or !@active @np_name[0] = self.x + @cw_name_pos[0] + COMMAND_NAME_POSITION[0] @np_name[1] = self.y + @cw_name_pos[1] + COMMAND_NAME_POSITION[1] else @np_name[0] = COMMAND_NAME_POSITION_2[0] @np_name[1] = COMMAND_NAME_POSITION_2[1] end update_slide(2,@sprite_name.x,@np_name[0]) update_slide(3,@sprite_name.y,@np_name[1]) @sprite_name.visible = @active ? true : false end #-------------------------------------------------------------------------- # ● Refresh Active #-------------------------------------------------------------------------- def refresh_active(visible) if @active and !visible @np[0] = COMMAND_POSITION_2[0] + (@cw / 2) @np[1] = COMMAND_POSITION_2[1] self.zoom_x = @zoom_limit[0] self.zoom_y = @zoom_limit[0] else @np[0] = @org_pos[0] @np[1] = @org_pos[1] end @visible_old = visible end #-------------------------------------------------------------------------- # ● Update Opacity #-------------------------------------------------------------------------- def update_opacity if @active self.opacity += 15 else self.opacity -= 15 if self.opacity > 160 if self.opacity < 160 self.opacity += 15 self.opacity = 160 if self.opacity > 160 end end end #-------------------------------------------------------------------------- # ● Update Zoom #-------------------------------------------------------------------------- def update_zoom if @active if !@zoom_duration[2] update_zoom_out @zoom_duration = [0,0,true] if self.zoom_x == @zoom_limit[1] else update_zoom_effect end else @zoom_duration[2] = false update_zoom_in end end #-------------------------------------------------------------------------- # ● Update Zoom Out #-------------------------------------------------------------------------- def update_zoom_out return if self.zoom_x == @zoom_limit[1] self.zoom_x += 0.03 self.zoom_y += 0.03 if self.zoom_x >= @zoom_limit[1] self.zoom_x = @zoom_limit[1] self.zoom_y = @zoom_limit[1] end end #-------------------------------------------------------------------------- # ● Update Zoom In #-------------------------------------------------------------------------- def update_zoom_in return if self.zoom_x == @zoom_limit[0] self.zoom_x -= 0.03 self.zoom_y -= 0.03 if self.zoom_x <= @zoom_limit[0] self.zoom_x = @zoom_limit[0] self.zoom_y = @zoom_limit[0] end end #-------------------------------------------------------------------------- # ● Update Zoom_effect #-------------------------------------------------------------------------- def update_zoom_effect @zoom_duration[0] += 1 return if @zoom_duration[0] < 1 @zoom_duration[0] = 0 @zoom_duration[1] += 1 case @zoom_duration[1] when 1..30 self.zoom_x -= 0.005 self.zoom_y -= 0.005 when 31..60 self.zoom_x += 0.005 self.zoom_y += 0.005 when 61..999 @zoom_duration[1] = 0 self.zoom_x = @zoom_limit[1] self.zoom_y = @zoom_limit[1] end end end #============================================================================== # ■ Actor Menu Pictures #============================================================================== class Actor_Menu_Pictures < Sprite include MOG_MENU attr_accessor :index #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- def initialize(viewport = nil,index,actor_id) super(viewport) @index = index @actor_id = actor_id self.bitmap = Cache.menu("Actor" + @actor_id.to_s) self.z = 2 set_position @slide_max = @org_pos[0] + 24 auto_y = Graphics.height - self.bitmap.height self.ox = self.bitmap.width / 2 self.x = @org_pos[0] - 15 self.y = auto_y self.opacity = 0 @op_time = 10 * @index end #-------------------------------------------------------------------------- # ● Set Position #-------------------------------------------------------------------------- def set_position members_size = $game_party.members.size members_size = $game_party.max_battle_members if members_size > $game_party.max_battle_members space_members = ((Graphics.width ) / members_size) space_members_2 = (space_members * @index) space_members_3 = ((space_members / 2) * (members_size - 1)) center = Graphics.width / 2 space = center + space_members_2 - space_members_3 @org_pos = [space, ACTOR_POSITION[1]] end #-------------------------------------------------------------------------- # ● Dispose #-------------------------------------------------------------------------- def dispose_picture self.bitmap.dispose end #-------------------------------------------------------------------------- # ● Update Picture #-------------------------------------------------------------------------- def update_picture @op_time -= 1 if @op_time > 0 return if @op_time > 0 self.opacity += 15 self.x += 1 if self.x < @org_pos[0] end end #============================================================================== # ■ Actor Menu Parameter #============================================================================== class Actor_Menu_Parameter include MOG_MENU attr_accessor :index #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- def initialize(index, actor) setup(index, actor) create_layout_par create_hp_number create_hp2_number create_mp_number create_mp2_number create_hp_meter create_mp_meter create_level create_states create_name end #-------------------------------------------------------------------------- # ● Setup #-------------------------------------------------------------------------- def setup(index, actor) @actor = actor @index = index set_position @number_image_1 = $game_temp.pre_cache_main_menu[6] @number_image_1_cw = @number_image_1.width / 10 @number_image_1_ch = @number_image_1.height / 3 @number_image_2 = $game_temp.pre_cache_main_menu[7] @number_image_2_cw = @number_image_2.width / 10 @number_image_2_ch = @number_image_2.height @par_meter_image = $game_temp.pre_cache_main_menu[8] @par_meter_cw = @par_meter_image.width / 3 @par_meter_ch = @par_meter_image.height / 2 @par_meter_flow = 0 @par_meter_flow_max = @par_meter_image.width - @par_meter_cw @icon_image = $game_temp.pre_cache_icon end #-------------------------------------------------------------------------- # ● Set Position #-------------------------------------------------------------------------- def set_position members_size = $game_party.members.size members_size = $game_party.max_battle_members if members_size >= $game_party.max_battle_members space_members = ((Graphics.width ) / members_size) space_members_2 = (space_members * @index) space_members_3 = ((space_members / 2) * (members_size - 1)) center = Graphics.width / 2 layout_ox = $game_temp.pre_cache_main_menu[9].width / 2 @base_x = center - layout_ox + space_members_2 - space_members_3 end #-------------------------------------------------------------------------- # ● Create Layout Par #-------------------------------------------------------------------------- def create_layout_par @layout_par = Sprite.new @layout_par.bitmap = $game_temp.pre_cache_main_menu[9] @layout_par.z = 10 @layout_par.x = @base_x + ACTOR_LAYOUT_POSITON[0] @layout_par.y = ACTOR_LAYOUT_POSITON[1] end #-------------------------------------------------------------------------- # ● Create Name #-------------------------------------------------------------------------- def create_name @actor_name = Sprite.new @actor_name.bitmap = Bitmap.new(160,32) @actor_name.bitmap.font.size = 18 @actor_name.bitmap.font.bold = true @actor_name.bitmap.font.italic = false#true actor_name = @actor.name @actor_name.bitmap.font.color = Color.new(0,0,0) @actor_name.bitmap.draw_text(1,1,140,32,actor_name,1) @actor_name.bitmap.font.color = Color.new(255,255,0) #角色名字 @actor_name.bitmap.draw_text(0,0,140,32,actor_name,1) @actor_name.z = 12 @actor_name.x = @base_x + 30# - 20 @actor_name.y = 450#250 #角色名字位置 end #-------------------------------------------------------------------------- # ● Create HP Number #-------------------------------------------------------------------------- def create_hp_number @hp_number = Sprite.new @hp_number.bitmap = Bitmap.new(@number_image_1_cw * 5,@number_image_1_ch) @hp_number.z = 12 @hp_number.x = @base_x + ACTOR_HP1_POSITON[0] @hp_number.y = ACTOR_HP1_POSITON[1] refresh_hp end #-------------------------------------------------------------------------- # ● Refresh HP #-------------------------------------------------------------------------- def refresh_hp @hp_number.bitmap.clear number = @actor.hp.abs.to_s.split(//) number_cw = @number_image_1_cw number_ch = @number_image_1_ch for i in 0..number.size - 1 number_abs = number[i].to_i nsrc_rect = Rect.new(number_cw * number_abs, 0, number_cw , number_ch) @hp_number.bitmap.blt(number_cw * i, 0, @number_image_1, nsrc_rect) end end #-------------------------------------------------------------------------- # ● Create HP2 Number #-------------------------------------------------------------------------- def create_hp2_number @hp2_number = Sprite.new @hp2_number.bitmap = Bitmap.new(@number_image_2_cw * 5,@number_image_2_ch) @hp2_number.z = 12 @hp2_number.x = @base_x + ACTOR_HP2_POSITON[0] @hp2_number.y = ACTOR_HP2_POSITON[1] refresh_hp2 end #-------------------------------------------------------------------------- # ● Refresh HP2 #-------------------------------------------------------------------------- def refresh_hp2 @hp2_number.bitmap.clear number = @actor.mhp.abs.to_s.split(//) number_cw = @number_image_2_cw number_ch = @number_image_2_ch for i in 0..number.size - 1 number_abs = number[i].to_i nsrc_rect = Rect.new(number_cw * number_abs, 0, number_cw , number_ch) @hp2_number.bitmap.blt(number_cw * i, 0, @number_image_2, nsrc_rect) end end #-------------------------------------------------------------------------- # ● Create MP Number #-------------------------------------------------------------------------- def create_mp_number @mp_number = Sprite.new @mp_number.bitmap = Bitmap.new(@number_image_1_cw * 5,@number_image_1_ch) @mp_number.z = 12 @mp_number.x = @base_x + ACTOR_MP1_POSITON[0] @mp_number.y = ACTOR_MP1_POSITON[1] refresh_mp end #-------------------------------------------------------------------------- # ● Refresh MP #-------------------------------------------------------------------------- def refresh_mp @mp_number.bitmap.clear number = @actor.mp.abs.to_s.split(//) number_cw = @number_image_1_cw number_ch = @number_image_1_ch for i in 0..number.size - 1 number_abs = number[i].to_i nsrc_rect = Rect.new(number_cw * number_abs, 0, number_cw , number_ch) @mp_number.bitmap.blt(number_cw * i, 0, @number_image_1, nsrc_rect) end end #-------------------------------------------------------------------------- # ● Create MP2 Number #-------------------------------------------------------------------------- def create_mp2_number @mp2_number = Sprite.new @mp2_number.bitmap = Bitmap.new(@number_image_2_cw * 5,@number_image_2_ch) @mp2_number.z = 12 @mp2_number.x = @base_x + ACTOR_MP2_POSITON[0] @mp2_number.y = ACTOR_MP2_POSITON[1] refresh_mp2 end #-------------------------------------------------------------------------- # ● Refresh MP2 #-------------------------------------------------------------------------- def refresh_mp2 @mp2_number.bitmap.clear number = @actor.mmp.abs.to_s.split(//) number_cw = @number_image_2_cw number_ch = @number_image_2_ch for i in 0..number.size - 1 number_abs = number[i].to_i nsrc_rect = Rect.new(number_cw * number_abs, 0, number_cw , number_ch) @mp2_number.bitmap.blt(number_cw * i, 0, @number_image_2, nsrc_rect) end end #-------------------------------------------------------------------------- # ● Create Level #-------------------------------------------------------------------------- def create_level @level = Sprite.new @level.bitmap = Bitmap.new(@number_image_1_cw * 3, @number_image_1_ch) @level.z = 12 @level.x = @base_x + ACTOR_LEVEL_POSITON[0] @level.y = ACTOR_LEVEL_POSITON[1] refresh_level end #-------------------------------------------------------------------------- # ● Refresh Level #-------------------------------------------------------------------------- def refresh_level @level.bitmap.clear number = @actor.level.abs.to_s.split(//) number_cw = @number_image_1_cw number_ch = @number_image_1_ch for i in 0..number.size - 1 number_abs = number[i].to_i nsrc_rect = Rect.new(number_cw * number_abs, number_ch * 2, number_cw , number_ch) @level.bitmap.blt(number_cw * i, 0, @number_image_1, nsrc_rect) end end #-------------------------------------------------------------------------- # ● Create HP Meter #-------------------------------------------------------------------------- def create_hp_meter @hp_meter = Sprite.new @hp_meter.bitmap = Bitmap.new(@par_meter_cw,@par_meter_ch) @hp_meter.z = 11 @hp_meter.x = @base_x + ACTOR_HP_METER_POSITON[0] @hp_meter.y = ACTOR_HP_METER_POSITON[1] update_flow_hp end #-------------------------------------------------------------------------- # ● Update Flow HP #-------------------------------------------------------------------------- def update_flow_hp @hp_meter.bitmap.clear par_width = @par_meter_cw * @actor.hp / @actor.mhp m_scr = Rect.new(@par_meter_flow,0, par_width, @par_meter_ch) @hp_meter.bitmap.blt(0,0,@par_meter_image, m_scr) end #-------------------------------------------------------------------------- # ● Create MP Meter #-------------------------------------------------------------------------- def create_mp_meter @mp_meter = Sprite.new @mp_meter.bitmap = Bitmap.new(@par_meter_cw,@par_meter_ch) @mp_meter.z = 11 @mp_meter.x = @base_x + ACTOR_MP_METER_POSITON[0] @mp_meter.y = ACTOR_MP_METER_POSITON[1] update_flow_mp end #-------------------------------------------------------------------------- # ● Update Flow MP #-------------------------------------------------------------------------- def update_flow_mp @mp_meter.bitmap.clear par_width = @par_meter_cw * @actor.mp / @actor.mmp rescue nil par_width = 0 if par_width == nil m_scr = Rect.new(@par_meter_flow,@par_meter_ch, par_width, @par_meter_ch) @mp_meter.bitmap.blt(0,0,@par_meter_image, m_scr) @par_meter_flow += 3 @par_meter_flow = 0 if @par_meter_flow > @par_meter_flow_max end #-------------------------------------------------------------------------- # ● Create_States #-------------------------------------------------------------------------- def create_states refresh_states @status = Sprite.new @status.bitmap = Bitmap.new(24,24) @status.x = @base_x + ACTOR_STATES_POSITION[0] @status.y = ACTOR_STATES_POSITION[1] @status_flow = -24 @states_speed = 50 @status.z = 503 @old_states = @actor.states refresh_states update_flow_states end #-------------------------------------------------------------------------- # ● Upate Flow_Status #-------------------------------------------------------------------------- def update_flow_states return if @actor.states.size == 0 and !@status.visible @states_speed = 0 @status.bitmap.clear src_rect = Rect.new(@status_flow,0, 24,24) @status.bitmap.blt(0,0, @actor_status, src_rect) @status.visible = @actor.states.size == 0 ? false : true @status_flow += 1 @status_flow = -24 if @status_flow >= @states_size - 24 end #-------------------------------------------------------------------------- # ● Refresh States #-------------------------------------------------------------------------- def refresh_states @old_states = @actor.states if @actor_status != nil @actor_status.dispose @actor_status = nil end @states_size = @actor.states.size > 0 ? (48 * @actor.states.size) : 24 @actor_status = Bitmap.new(@states_size,24) index = 0 for i in @actor.states rect = Rect.new(i.icon_index % 16 * 24, i.icon_index / 16 * 24, 24, 24) @actor_status.blt(48 * index , 0, @icon_image, rect) index += 1 end end #-------------------------------------------------------------------------- # ● Update #-------------------------------------------------------------------------- def update update_flow_hp update_flow_mp update_flow_states end end #============================================================================== # ■ Actor Menu Parameter #============================================================================== class Actor_Menu_Parameter #-------------------------------------------------------------------------- # ● Dispose #-------------------------------------------------------------------------- def dispose dispose_actor_layout_par dispose_name dispose_hp_number dispose_mp_number dispose_hp_meter dispose_mp_meter dispose_states dispose_level end #-------------------------------------------------------------------------- # ● Dispose Actor Layout Par #-------------------------------------------------------------------------- def dispose_actor_layout_par return if @layout_par == nil @layout_par.dispose @layout_par = nil end #-------------------------------------------------------------------------- # ● Dispose Name #-------------------------------------------------------------------------- def dispose_name return if @actor_name == nil @actor_name.bitmap.dispose @actor_name.dispose @actor_name = nil end #-------------------------------------------------------------------------- # ● Dispose HP Number #-------------------------------------------------------------------------- def dispose_hp_number return if @hp_number == nil @hp_number.bitmap.dispose @hp_number.dispose @hp_number = nil @hp2_number.bitmap.dispose @hp2_number.dispose @hp2_number = nil end #-------------------------------------------------------------------------- # ● Dispose MP Number #-------------------------------------------------------------------------- def dispose_mp_number return if @mp_number == nil @mp_number.bitmap.dispose @mp_number.dispose @mp_number = nil @mp2_number.bitmap.dispose @mp2_number.dispose @mp2_number = nil end #-------------------------------------------------------------------------- # ● Dispose States #-------------------------------------------------------------------------- def dispose_states return if @status == nil @status.bitmap.dispose @status.dispose if @actor_status != nil @actor_status.dispose @actor_status = nil end end #-------------------------------------------------------------------------- # ● Dispose MP Meter #-------------------------------------------------------------------------- def dispose_mp_meter return if @mp_meter == nil @mp_meter.bitmap.dispose @mp_meter.dispose @mp_meter = nil end #-------------------------------------------------------------------------- # ● Dispose HP Meter #-------------------------------------------------------------------------- def dispose_hp_meter return if @hp_meter == nil @hp_meter.bitmap.dispose @hp_meter.dispose @hp_meter = nil end #-------------------------------------------------------------------------- # ● Dispose Level #-------------------------------------------------------------------------- def dispose_level return if @level == nil @level.bitmap.dispose @level.dispose @level = nil end end #============================================================================== # ■ Scene_Menu #============================================================================== class Scene_Menu #-------------------------------------------------------------------------- # ● Create Sprites #-------------------------------------------------------------------------- def create_sprites create_menu_background create_layout create_particles create_command create_actor_pictures create_timer_sprite create_gold_number create_location create_actor_parameter create_members create_members_layout update_members_face end #-------------------------------------------------------------------------- # ● Create Menu Background #-------------------------------------------------------------------------- def create_menu_background @background = Plane.new @background.bitmap = $game_temp.pre_cache_main_menu[0] @background.z = 0 @background_scroll = [BACKGROUND_SCROLL_SPEED[0],BACKGROUND_SCROLL_SPEED[1]] end #-------------------------------------------------------------------------- # ● Create Menu Background #-------------------------------------------------------------------------- def create_layout @layout = Sprite.new @layout.bitmap = $game_temp.pre_cache_main_menu[1] @layout.z = 3 end #-------------------------------------------------------------------------- # ● Create Particles #-------------------------------------------------------------------------- def create_particles @particles_sprite =[] for i in 0...NUMBER_OF_PARTICLES @particles_sprite.push(Particles_Menu.new(nil)) end end #-------------------------------------------------------------------------- # ● Create Command #-------------------------------------------------------------------------- def create_command create_command_window @command_window.visible = false @command_window.x -= WIDTH #544 @command_max = @command_window.list.size @commnad_name = [] index = 0 for i in @command_window.list @commnad_name.push(i[:name]) index += 1 end @command_scroll_max = @command_max > 6 ? 6 : @command_max @command_ny = 0 @command_sprites = [] index = 0 for i in 0...@command_max @command_sprites.push(Command_Menu_Sprite.new(nil, index,@commnad_name[index]) ) index += 1 end end #-------------------------------------------------------------------------- # ● Create Command Window #-------------------------------------------------------------------------- def create_command_window @command_window = Window_MenuCommand.new @command_window.set_handler(:item, method(:command_item)) @command_window.set_handler(:skill, method(:command_personal)) @command_window.set_handler(:equip, method(:command_personal)) @command_window.set_handler(:status, method(:command_personal)) @command_window.set_handler(:formation, method(:command_formation)) @command_window.set_handler(:save, method(:command_save)) @command_window.set_handler(:game_end, method(:command_game_end)) @command_window.set_handler(:cancel, method(:return_scene)) @command_window.index = $game_temp.menu_index end #-------------------------------------------------------------------------- # ● Create Actor Pictures #-------------------------------------------------------------------------- def create_actor_pictures @actor_pictures = [] members_size = $game_party.members.size members_size = $game_party.max_battle_members if members_size >= $game_party.max_battle_members for i in 0...members_size @actor_pictures.push(Actor_Menu_Pictures.new(nil,i,$game_party.members[i].id)) end end #-------------------------------------------------------------------------- # ● Create Timer Number #-------------------------------------------------------------------------- def create_timer_sprite update_timer @sec_old = @sec @timer_image = $game_temp.pre_cache_main_menu[2] @timer_cw = @timer_image.width / 10 @timer_ch = @timer_image.height @timer_sprite = Sprite.new @timer_sprite.bitmap = Bitmap.new(@timer_image.width*2 ,@timer_image.height) @timer_sprite.z = 11 @timer_sprite.x = TIME_NUMBER_POS[0] @timer_sprite.y = TIME_NUMBER_POS[1] refresh_timer end #-------------------------------------------------------------------------- # ● Create Gold Number #-------------------------------------------------------------------------- def create_gold_number @gold = $game_party.gold @gold_image = $game_temp.pre_cache_main_menu[3] @gold_cw = @gold_image.width / 10 @gold_ch = @gold_image.height @gold_sprite = Sprite.new @gold_sprite.bitmap = Bitmap.new(@gold_image.width ,@gold_image.height) @gold_sprite.z = 11 @gold_sprite.x = GOLD_NUMBER_POS[0] @gold_sprite.y = GOLD_NUMBER_POS[1] refresh_gold end #-------------------------------------------------------------------------- # ● Create Location #-------------------------------------------------------------------------- def create_location @location = Sprite.new @location.bitmap = Bitmap.new(200,40) @location.bitmap.font.size = 20 @location.bitmap.font.bold = true @location.bitmap.font.italic = false#true @location.z = 12 @location.x = LOCATION_POS[0] @location.y = LOCATION_POS[1] refresh_location end #-------------------------------------------------------------------------- # ● Refresh Location #-------------------------------------------------------------------------- def refresh_location location_name = $game_map.display_name @location.bitmap.clear @location.bitmap.font.color = Color.new(120,120,120,120) @location.bitmap.draw_text(6,4,190,32, location_name.to_s,2) @location.bitmap.font.color = Color.new(255,0,0) #地名颜色 @location.bitmap.draw_text(0,0,190,32, location_name.to_s,2) end #-------------------------------------------------------------------------- # ● Create Actor Parameter #-------------------------------------------------------------------------- def create_actor_parameter @actor_par = [] members_size = $game_party.members.size members_size = $game_party.max_battle_members if members_size >= $game_party.max_battle_members for i in 0...members_size @actor_par.push(Actor_Menu_Parameter.new(i,$game_party.members[i])) end end #-------------------------------------------------------------------------- # ● Create Members #-------------------------------------------------------------------------- def create_members @members_viewport = Viewport.new(MEMBERS_FACE_POSITION[0],MEMBERS_FACE_POSITION[1],400,96) @members_viewport.z = 12 @members_viewport.ox = WIDTH #-544 @members_slide_max = (MEMBERS_FACE_POSITION[0] - WIDTH) #544 @members = [] for i in 0...$game_party.members.size @members.push(Face_Members_Sprite.new(@members_viewport,i, $game_party.members[i].id)) end end #-------------------------------------------------------------------------- # ● Create Members Layout #-------------------------------------------------------------------------- def create_members_layout @members_layout = Members_Arrow_Sprite.new end end #============================================================================== # ■ Scene_Menu #============================================================================== class Scene_Menu #-------------------------------------------------------------------------- # ● Execute Dispose #-------------------------------------------------------------------------- def execute_dispose Graphics.freeze dispose_background dispose_layout dispose_particles dispose_command_sprites dispose_actor_sprites dispose_actor_parameter dispose_timer_sprite dispose_gold_number dispose_location dispose_members end #-------------------------------------------------------------------------- # ● Dispose Background #-------------------------------------------------------------------------- def dispose_background return if @background == nil @background.dispose @background = nil end #-------------------------------------------------------------------------- # ● Dispose Layout #-------------------------------------------------------------------------- def dispose_layout return if @layout == nil @layout.dispose @layout = nil end #-------------------------------------------------------------------------- # ● Dispose Particles #-------------------------------------------------------------------------- def dispose_particles return if @particles_sprite == nil @particles_sprite.each {|sprite| sprite.dispose } end #-------------------------------------------------------------------------- # ● Dispose Command Sprites #-------------------------------------------------------------------------- def dispose_command_sprites return if @command_sprites == nil @command_sprites.each {|sprite| sprite.dispose_command } @command_sprites = nil @command_window.dispose end #-------------------------------------------------------------------------- # ● Dispose Actor Sprites #-------------------------------------------------------------------------- def dispose_actor_sprites return if @actor_pictures == nil @actor_pictures.each {|sprite| sprite.dispose_picture } @actor_pictures = nil end #-------------------------------------------------------------------------- # ● Dispose timer Sprite #-------------------------------------------------------------------------- def dispose_timer_sprite return if @timer_sprite == nil @timer_sprite.dispose end #-------------------------------------------------------------------------- # ● Dispose Gold Number #-------------------------------------------------------------------------- def dispose_gold_number return if @gold_image == nil @gold_sprite.dispose @gold_sprite = nil end #-------------------------------------------------------------------------- # ● Dispose Location #-------------------------------------------------------------------------- def dispose_location return if @location == nil @location.bitmap.dispose @location.dispose @location = nil end #-------------------------------------------------------------------------- # ● Dispose Actor Parameter #-------------------------------------------------------------------------- def dispose_actor_parameter return if @actor_par == nil @actor_par.each {|sprite| sprite.dispose } @actor_par = nil end #-------------------------------------------------------------------------- # ● Dispose Members #-------------------------------------------------------------------------- def dispose_members return if @members == nil @members.each {|sprite| sprite.dispose } @members = nil @members_layout.dispose @members_viewport.dispose end end #============================================================================== # ■ Scene_Menu #============================================================================== class Scene_Menu #-------------------------------------------------------------------------- # ● Update Sprites #-------------------------------------------------------------------------- def update_sprites update_background update_particles update_command_sprites update_actor_parameter update_actor_sprites update_members_face refresh_timer if @sec_old != @sec refresh_gold if @gold != $game_party.gold end #-------------------------------------------------------------------------- # ● Update Background #-------------------------------------------------------------------------- def update_background return if @background == nil @background.ox += @background_scroll[0] @background.oy += @background_scroll[1] end #-------------------------------------------------------------------------- # ● Update Particles #-------------------------------------------------------------------------- def update_particles return if @particles_sprite == nil @particles_sprite.each {|sprite| sprite.update } end #-------------------------------------------------------------------------- # ● Update Command Sprites #-------------------------------------------------------------------------- def update_command_sprites return if @command_window == nil visible = @phase == 0 ? true : false @command_sprites.each {|sprite| sprite.update_command(@command_window.index,visible) } end #~ #-------------------------------------------------------------------------- #~ # ● Refresh Number #~ #-------------------------------------------------------------------------- #~ def refresh_timer #~ @min_old = @min #~ @timer_sprite.bitmap.clear #~ draw_number(@timer_cw * 1,0,0) if @hour < 10 #~ draw_number(@timer_cw * 2,0,@hour) #~ draw_number(@timer_cw * 4,0,0) if @min < 10 #~ draw_number(@timer_cw * 5,0,@min) #~ end #-------------------------------------------------------------------------- # ● Refresh Number #-------------------------------------------------------------------------- def refresh_timer @sec_old = @sec @timer_sprite.bitmap.clear draw_number(@timer_cw * 1,0,0) if @hour < 10 draw_number(@timer_cw * 2,0,@hour) draw_number(@timer_cw * 6.2,0,0) if @min < 10 draw_number(@timer_cw * 7.2,0,@min) draw_number(@timer_cw * 10.8,0,0) if @sec < 10 draw_number(@timer_cw * 11.8,0,@sec) end #-------------------------------------------------------------------------- # ● Draw Number #-------------------------------------------------------------------------- def draw_number(x,y,value) @number_text = value.abs.to_s.split(//) plus_x = -@timer_cw * @number_text.size for r in 0..@number_text.size - 1 @number_abs = @number_text[r].to_i nsrc_rect = Rect.new(@timer_cw * @number_abs, 0, @timer_cw, @timer_ch) @timer_sprite.bitmap.blt(plus_x + x + (@timer_cw * r), y, @timer_image, nsrc_rect) end end #-------------------------------------------------------------------------- # ● update #-------------------------------------------------------------------------- def update_timer time = $game_system.playtime @hour = time / 60 / 60 @min = time / 60 % 60 @sec = time % 60 end #-------------------------------------------------------------------------- # ● Refresh Gold #-------------------------------------------------------------------------- def refresh_gold @gold = $game_party.gold @gold_sprite.bitmap.clear value_text = @gold.abs.to_s.split(//) index = 0 for i in 0..value_text.size - 1 value_abs = value_text[i].to_i nsrc_rect = Rect.new(@gold_cw * value_abs, 0, @gold_cw, @gold_ch) @gold_sprite.bitmap.blt(@gold_cw * i, 0, @gold_image, nsrc_rect) index += 1 end ey = (index * @gold_cw) @gold_sprite.x = GOLD_NUMBER_POS[0] - ey end #-------------------------------------------------------------------------- # ● Update Actor Parameter #-------------------------------------------------------------------------- def update_actor_parameter return if @actor_par == nil @actor_par.each {|sprite| sprite.update } end #-------------------------------------------------------------------------- # ● Update Actor Sprites #-------------------------------------------------------------------------- def update_actor_sprites return if @actor_pictures == nil @actor_pictures.each {|sprite| sprite.update_picture } end #-------------------------------------------------------------------------- # ● Update Members Face #-------------------------------------------------------------------------- def update_members_face return if @members == nil or @members == 0 if @members_index > 4 ny = (5 * 64) else ny = 64 * @members_index end @members.each {|sprite| sprite.update_command(@members_index, ny) } @members_layout.update if @members_windows_active if @members_viewport.ox < 0 @members_viewport.ox += 25 end else if @members_viewport.ox > -WIDTH #-544 @members_viewport.ox -= 25 end end @members_layout.nx(@members_viewport.ox) end end #============================================================================== # ■ Scene_Menu #============================================================================== class Scene_Menu #-------------------------------------------------------------------------- # ● Update #-------------------------------------------------------------------------- def update update_timer update_sprites update_command @members_windows_active = @phase == 100 ? true : false end end #============================================================================== # ■ Scene_Menu #============================================================================== class Scene_Menu #-------------------------------------------------------------------------- # ● Update Command #-------------------------------------------------------------------------- def update_command case @phase when 0; update_main_command when 100; update_select_members end end #-------------------------------------------------------------------------- # ● Update Main Command #-------------------------------------------------------------------------- def update_main_command if Input.trigger?(:UP) or Input.trigger?(:LEFT) move_command_index(-1) elsif Input.trigger?(:DOWN) or Input.trigger?(:RIGHT) move_command_index(1) elsif Input.trigger?(:C) execute_select #我的修改(添加):避免MOG菜单与原菜单脚本重复响应! Input.update #end elsif Input.trigger?(:B) return_to_map end end #-------------------------------------------------------------------------- # ● Update Main Command #-------------------------------------------------------------------------- def move_command_index(value) Sound.play_cursor @command_window.index += value @command_window.index = 0 if @command_window.index >= @command_max @command_window.index = (@command_max - 1) if @command_window.index < 0 end #-------------------------------------------------------------------------- # ● Execute Select #-------------------------------------------------------------------------- def execute_select if @command_window.current_symbol == :save and $game_system.save_disabled Sound.play_buzzer return end #我的修改;添加了菜单有效判定 if @command_window.command_enabled?(@command_window.index) @phase = @command_window.index $game_temp.menu_index = @phase Sound.play_ok $game_temp.pre_symbol = @command_window.current_symbol @command_window.call_handler(@command_window.current_symbol) else Sound.play_buzzer return end end #-------------------------------------------------------------------------- # ● Update Select Members #-------------------------------------------------------------------------- def update_select_members if $game_party.members.size == 0 execute_cancel return end if Input.trigger?(:LEFT) move_members_index(-1) elsif Input.trigger?(:RIGHT) move_members_index(1) elsif Input.trigger?(:C) execute_select_members elsif Input.trigger?(:B) execute_cancel end end #-------------------------------------------------------------------------- # ● Execute Cancel #-------------------------------------------------------------------------- def execute_cancel Sound.play_cancel @phase = 0 @members_index = 0 end #-------------------------------------------------------------------------- # ● Move Members Index #-------------------------------------------------------------------------- def move_members_index(value) Sound.play_cursor @members_index += value @members_index = 0 if @members_index >= $game_party.members.size @members_index = ($game_party.members.size - 1) if @members_index < 0 end #-------------------------------------------------------------------------- # ● Command Formation #-------------------------------------------------------------------------- def command_formation SceneManager.call(Scene_Party) end #-------------------------------------------------------------------------- # ● Can Access Scene #-------------------------------------------------------------------------- def can_access_scene? if $game_party.members.size == 0 #Sound.play_buzzer execute_cancel return false end return true end #-------------------------------------------------------------------------- # ● Execute Select Members #-------------------------------------------------------------------------- def execute_select_members @phase = @command_window.index $game_temp.menu_index = @phase Sound.play_ok on_personal_ok end #-------------------------------------------------------------------------- # ● ON Personal OK #-------------------------------------------------------------------------- alias mog_monogatari_on_personal_ok on_personal_ok def on_personal_ok $game_temp.actor_menu_temp = $game_party.members[@members_index] $game_party.menu_actor = $game_party.members[@members_index] mog_monogatari_on_personal_ok end #-------------------------------------------------------------------------- # ● Return To Map #-------------------------------------------------------------------------- def return_to_map $game_temp.menu_index = 0 Sound.play_cancel SceneManager.return end #-------------------------------------------------------------------------- # ● Command Personal #-------------------------------------------------------------------------- def command_personal @phase = 100 end end #============================================================================== # ■ Game_Temp #============================================================================== class Game_Temp #-------------------------------------------------------------------------- # ● Execute Pre Cache Item Menu #-------------------------------------------------------------------------- def execute_pre_cache_item_menu @pre_cache_item_menu = [] @pre_cache_item_menu.push(Cache.menu_item("Background")) @pre_cache_item_menu.push(Cache.menu_item("Layout")) end end #============================================================================== # ■ Scene_Menu #============================================================================== class Scene_Item include MOG_MENU_ITEM include MOG_MENU_BASE #-------------------------------------------------------------------------- # ● Main #-------------------------------------------------------------------------- def main execute_setup execute_loop execute_dispose end #-------------------------------------------------------------------------- # ● Execute Setup #-------------------------------------------------------------------------- def execute_setup @phase = 0 @command_index = 0 @actor = $game_party.members[0] @wait_time = 0 create_sprites end #-------------------------------------------------------------------------- # ● Execute Lopp #-------------------------------------------------------------------------- def execute_loop Graphics.transition(10) loop do Input.update update Graphics.update break if SceneManager.scene != self end end end #============================================================================== # ■ Window_ItemList Z #============================================================================== class Window_ItemList_Z < Window_Selectable #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- def initialize(x, y, width, height) super @category = :none @data = [] end #-------------------------------------------------------------------------- # ● Category #-------------------------------------------------------------------------- def category=(category) return if @category == category @category = category self.oy = 0 end #-------------------------------------------------------------------------- # ● Col Max #-------------------------------------------------------------------------- def col_max return 1 end #-------------------------------------------------------------------------- # ● Item Max #-------------------------------------------------------------------------- def item_max @data ? @data.size : 1 end #-------------------------------------------------------------------------- # ● Item #-------------------------------------------------------------------------- def item @data && index >= 0 ? @data[index] : nil end #-------------------------------------------------------------------------- # ● Current Item Enabled? #-------------------------------------------------------------------------- def current_item_enabled? enable?(@data[index]) end #-------------------------------------------------------------------------- # ● Include? #-------------------------------------------------------------------------- def include?(item) case @category when :item item.is_a?(RPG::Item) && !item.key_item? when :weapon item.is_a?(RPG::Weapon) when :armor item.is_a?(RPG::Armor) when :key_item item.is_a?(RPG::Item) && item.key_item? else false end end #-------------------------------------------------------------------------- # ● Enable? #-------------------------------------------------------------------------- def enable?(item) $game_party.usable?(item) end #-------------------------------------------------------------------------- # ● Make Item List #-------------------------------------------------------------------------- def make_item_list @data = $game_party.all_items.select {|item| include?(item) } @data.push(nil) if include?(nil) end #-------------------------------------------------------------------------- # ● Select Last #-------------------------------------------------------------------------- def select_last select(@data.index($game_party.last_item.object) || 0) end #-------------------------------------------------------------------------- # ● Draw Item #-------------------------------------------------------------------------- def draw_item(index) item = @data[index] if item rect = item_rect(index) rect.width -= 4 draw_item_name(item, rect.x, rect.y, enable?(item)) draw_item_number(rect, item) end end #-------------------------------------------------------------------------- # ● Draw Item Number #-------------------------------------------------------------------------- def draw_item_number(rect, item) draw_text(rect, sprintf(":%2d", $game_party.item_number(item)), 2) end #-------------------------------------------------------------------------- # ● Update Help #-------------------------------------------------------------------------- def update_help @help_window.set_item(item) end #-------------------------------------------------------------------------- # ● Refresh #-------------------------------------------------------------------------- def refresh make_item_list create_contents draw_all_items end end #============================================================================== # ■ Window_ItemList Z #============================================================================== class Window_ItemList_Item_1 < Window_Selectable #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- def initialize(x, y, width, height) super @category = :none @data = [] end #-------------------------------------------------------------------------- # ● Category #-------------------------------------------------------------------------- def category=(category) return if @category == category @category = category self.oy = 0 end #-------------------------------------------------------------------------- # ● Col Max #-------------------------------------------------------------------------- def col_max return 1 end #-------------------------------------------------------------------------- # ● Item Max #-------------------------------------------------------------------------- def item_max @data ? @data.size : 1 end #-------------------------------------------------------------------------- # ● Item #-------------------------------------------------------------------------- def item @data && index >= 0 ? @data[index] : nil end #-------------------------------------------------------------------------- # ● Current Item Enabled? #-------------------------------------------------------------------------- def current_item_enabled? enable?(@data[index]) end #-------------------------------------------------------------------------- # ● Include? #-------------------------------------------------------------------------- def include?(item) case @category when :item ; item.is_a?(RPG::Item) && !item.key_item? else false end end #-------------------------------------------------------------------------- # ● Enable? #-------------------------------------------------------------------------- def enable?(item) $game_party.usable?(item) end #-------------------------------------------------------------------------- # ● Make Item List #-------------------------------------------------------------------------- def make_item_list @data = $game_party.all_items.select {|item| include?(item) } @data.push(nil) if include?(nil) end #-------------------------------------------------------------------------- # ● Select Last #-------------------------------------------------------------------------- def select_last select(@data.index($game_party.last_item.object) || 0) end #-------------------------------------------------------------------------- # ● Draw Item #-------------------------------------------------------------------------- def draw_item(index) item = @data[index] if item rect = item_rect(index) rect.width -= 4 draw_item_number(rect, item) end end #-------------------------------------------------------------------------- # ● Draw Item Number #-------------------------------------------------------------------------- def draw_item_number(rect, item) draw_text(rect, sprintf(":%2d", $game_party.item_number(item)), 2) end #-------------------------------------------------------------------------- # ● Update Help #-------------------------------------------------------------------------- def update_help @help_window.set_item(item) end #-------------------------------------------------------------------------- # ● Refresh #-------------------------------------------------------------------------- def refresh make_item_list create_contents draw_all_items end end #============================================================================== # ■ Window_ItemList Z #============================================================================== class Window_ItemList_Item_2 < Window_Selectable #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- def initialize(x, y, width, height) super @category = :none @data = [] end #-------------------------------------------------------------------------- # ● Category #-------------------------------------------------------------------------- def category=(category) return if @category == category @category = category self.oy = 0 end #-------------------------------------------------------------------------- # ● Col Max #-------------------------------------------------------------------------- def col_max return 1 end #-------------------------------------------------------------------------- # ● Item Max #-------------------------------------------------------------------------- def item_max @data ? @data.size : 1 end #-------------------------------------------------------------------------- # ● Item #-------------------------------------------------------------------------- def item @data && index >= 0 ? @data[index] : nil end #-------------------------------------------------------------------------- # ● Current Item Enabled? #-------------------------------------------------------------------------- def current_item_enabled? enable?(@data[index]) end #-------------------------------------------------------------------------- # ● Include? #-------------------------------------------------------------------------- def include?(item) case @category when :item ; item.is_a?(RPG::Item) && !item.key_item? else false end end #-------------------------------------------------------------------------- # ● Enable? #-------------------------------------------------------------------------- def enable?(item) $game_party.usable?(item) end #-------------------------------------------------------------------------- # ● Make Item List #-------------------------------------------------------------------------- def make_item_list @data = $game_party.all_items.select {|item| include?(item) } @data.push(nil) if include?(nil) end #-------------------------------------------------------------------------- # ● Select Last #-------------------------------------------------------------------------- def select_last select(@data.index($game_party.last_item.object) || 0) end #-------------------------------------------------------------------------- # ● Draw Item #-------------------------------------------------------------------------- def draw_item(index) item = @data[index] if item rect = item_rect(index) rect.width -= 4 draw_item_name(item, rect.x, rect.y, enable?(item)) draw_item_number(rect, item) end end #-------------------------------------------------------------------------- # ● Draw Item Number #-------------------------------------------------------------------------- def draw_item_number(rect, item) draw_text(rect, sprintf(":%2d", $game_party.item_number(item)), 2) end #-------------------------------------------------------------------------- # ● Update Help #-------------------------------------------------------------------------- def update_help end #-------------------------------------------------------------------------- # ● Refresh #-------------------------------------------------------------------------- def refresh make_item_list create_contents draw_all_items end end #============================================================================== # ■ Scene_Item #============================================================================== class Scene_Item #-------------------------------------------------------------------------- # ● Create Sprites #-------------------------------------------------------------------------- def create_sprites create_menu_background create_layout create_particles create_command create_button create_help_window create_item_window create_weapon_window create_armor_window create_key_window create_actor_window set_initial_visible end #-------------------------------------------------------------------------- # ● Create Actor Window #-------------------------------------------------------------------------- def create_actor_window @actor_window = Members_Windows_Status.new @actor_window.set_handler(:ok, method(:on_actor_ok)) @actor_window.set_handler(:cancel, method(:on_actor_cancel)) @actor_window.opacity = 0 @actor_window.x = -10 @actor_window.y = 36 @actor_window_slide_range = [@actor_window.x, -@actor_window.width] @actor_window.x = @actor_window_slide_range[1] @actor_window.visible = true @actor_window_index_old = @actor_window.index create_members_window create_actor_status update_active_window update_command_sprites end #-------------------------------------------------------------------------- # ● Create Members Window #-------------------------------------------------------------------------- def create_members_window index = 0 @members_status = [] for actor in $game_party.members @members_status.push(Members_Menu.new(actor,index)) index += 1 end end #-------------------------------------------------------------------------- # ● Create Actor Status #-------------------------------------------------------------------------- def create_actor_status @actor_status = Actor_Menu_Status.new(@actor) end #-------------------------------------------------------------------------- # ● Create Item Window #-------------------------------------------------------------------------- def create_item_window @item_window = Window_ItemList_Item_1.new(162-80,150,225+80,240) @item_window.help_window = @help_window @item_window.set_handler(:ok, method(:on_item_ok)) @item_window.set_handler(:cancel, method(:on_item_cancel)) @item_window.category = :item @item_window.active = true @item_window.refresh @item_window.index = 0 @item_window.opacity = 0 @item_window_2 = Window_ItemList_Item_2.new(162-80,150,225+80,240) @item_window_2.help_window = @help_window @item_window_2.set_handler(:ok, method(:on_item_ok)) @item_window_2.set_handler(:cancel, method(:on_item_cancel)) @item_window_2.category = :item @item_window_2.active = true @item_window_2.refresh @item_window_2.index = 0 @item_window_2.opacity = 0 end #-------------------------------------------------------------------------- # ● Create Weapon Window #-------------------------------------------------------------------------- def create_weapon_window @weapon_window = Window_ItemList_Z.new(162-80,150,225+80,240) @weapon_window.help_window = @help_window @weapon_window.set_handler(:ok, method(:on_item_ok)) @weapon_window.set_handler(:cancel, method(:on_item_cancel)) @weapon_window.category = :weapon @weapon_window.active = true @weapon_window.refresh @weapon_window.index = 0 @weapon_window.opacity = 0 end #-------------------------------------------------------------------------- # ● Create Armor Window #-------------------------------------------------------------------------- def create_armor_window @armor_window = Window_ItemList_Z.new(162-80,150,225+80,240) @armor_window.help_window = @help_window @armor_window.set_handler(:ok, method(:on_item_ok)) @armor_window.set_handler(:cancel, method(:on_item_cancel)) @armor_window.category = :armor @armor_window.active = true @armor_window.refresh @armor_window.index = 0 @armor_window.opacity = 0 end #-------------------------------------------------------------------------- # ● Create Key Window #-------------------------------------------------------------------------- def create_key_window @key_window = Window_ItemList_Z.new(162-80,150,225+80,240) @key_window.help_window = @help_window @key_window.set_handler(:ok, method(:on_item_ok)) @key_window.set_handler(:cancel, method(:on_item_cancel)) @key_window.category = :key_item @key_window.active = true @key_window.refresh @key_window.index = 0 @key_window.opacity = 0 end #-------------------------------------------------------------------------- # ● Create Help Window #-------------------------------------------------------------------------- def create_help_window @help_window = Window_Help.new @help_window.x = 0 @help_window.y = Graphics.height - @help_window.height @help_window.opacity = 0 end #-------------------------------------------------------------------------- # ● Create Menu Background #-------------------------------------------------------------------------- def create_menu_background @background = Plane.new @background.bitmap = $game_temp.pre_cache_item_menu[0] @background.z = 0 @background_scroll = [BACKGROUND_SCROLL_SPEED[0],BACKGROUND_SCROLL_SPEED[1]] end #-------------------------------------------------------------------------- # ● Create Layout #-------------------------------------------------------------------------- def create_layout @layout = Sprite.new @layout.bitmap = $game_temp.pre_cache_item_menu[1] @layout.z = 3 end #-------------------------------------------------------------------------- # ● Create Particles #-------------------------------------------------------------------------- def create_particles @particles_sprite =[] for i in 0...NUMBER_OF_PARTICLES @particles_sprite.push(Particles_Menu.new(nil)) end end #-------------------------------------------------------------------------- # ● Create Command #-------------------------------------------------------------------------- def create_command @command_sprites = [] index = 0 for i in 0...4 @command_sprites.push(Layout_Window_Sprite.new(nil, index) ) index += 1 end end #-------------------------------------------------------------------------- # ● Create Button #-------------------------------------------------------------------------- def create_button @button_sprites = [] index = 0 for i in 0...4 @button_sprites.push(Item_Button_Sprite.new(nil, index) ) index += 1 end end #-------------------------------------------------------------------------- # ● Set Initial Visible #-------------------------------------------------------------------------- def set_initial_visible @item_window.visible = false @item_window_2.visible = false @weapon_window.visible = false @armor_window.visible = false @key_window.visible = false end end #============================================================================== # ■ Layout Window Sprite #============================================================================== class Layout_Window_Sprite < Sprite include MOG_MENU_ITEM attr_accessor :index attr_accessor :position #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- def initialize(viewport = nil,index) super(viewport) @index = index self.bitmap = Cache.menu_item("Item_Window" + @index.to_s) self.z = 10 @org_pos = [COMMAND_POSITION[0],COMMAND_POSITION[1]] @slide_max = @org_pos[0] + 24 @center = (WIDTH - self.bitmap.width) - (WIDTH / 2) + (self.bitmap.width / 2)#544 @center -= 170#75 # 我的修改 -100 @left = -self.bitmap.width @right = WIDTH #544 @position = 0 @direction = 0 @org_pos = [@left ,COMMAND_POSITION[1]] self.x = @org_pos[0] self.y = @org_pos[1] self.visible = false if @index > 0 end #-------------------------------------------------------------------------- # ● Dispose #-------------------------------------------------------------------------- def dispose_sprite self.bitmap.dispose end #-------------------------------------------------------------------------- # ● Update #-------------------------------------------------------------------------- def update_command(index) slide_speed = 30 if @index == index if self.x < @center self.x += slide_speed self.x = @center if self.x >= @center elsif self.x > @center self.x -= slide_speed self.x = @center if self.x <= @center end else if @direction == -1 self.x -= slide_speed if self.x > @left else self.x += slide_speed if self.x < @right end end end #-------------------------------------------------------------------------- # ● New P #-------------------------------------------------------------------------- def newp(index,direction) now_command = index if direction == -1 pre_command = index + 1 pre_command = 0 if pre_command > 3 else pre_command = index - 1 pre_command = 3 if pre_command < 0 end if index == @index self.visible = true self.x = @right if direction == -1 self.x = @left if direction == 1 elsif pre_command == @index self.visible = true else self.visible = false end @direction = direction end end #============================================================================== # ■ Item Button Sprite #============================================================================== class Item_Button_Sprite < Sprite include MOG_MENU_ITEM attr_accessor :index #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- def initialize(viewport = nil,index) super(viewport) @index = index self.bitmap = Cache.menu_item("Button" + @index.to_s) self.z = 12 self.ox = self.bitmap.width / 2 self.oy = self.bitmap.height / 2 @org_pos = [(BUTTON_SPACE * @index) + BUTTON_POSITION[0],BUTTON_POSITION[1]] @slide_max = @org_pos[1] + 24 @next_pos = [@org_pos[0],@org_pos[1]] self.x = @org_pos[0] self.y = @org_pos[1] - 128 - (128 * @index) @zoom_duration = [0,0,false] @active = false end #-------------------------------------------------------------------------- # ● Dispose #-------------------------------------------------------------------------- def dispose_sprite self.bitmap.dispose end #-------------------------------------------------------------------------- # ● Update #-------------------------------------------------------------------------- def update_command(index) if @index == index # self.y += 2 # self.y = @slide_max if self.y > @slide_max @next_pos[1] =@slide_max self.opacity += 15 @active = true else # self.y -= 2 # self.y = @org_pos[1] if self.y < @org_pos[1] @next_pos[1] = @org_pos[1] self.opacity -= 15 if self.opacity > 160 @active = false end update_slide(1,self.y,@next_pos[1]) update_zoom end #-------------------------------------------------------------------------- # ● Update Slide #-------------------------------------------------------------------------- def update_slide(type,cp,np) sp = 3 + ((cp - np).abs / 10) if cp > np cp -= sp cp = np if cp < np elsif cp < np cp += sp cp = np if cp > np end self.x = cp if type == 0 self.y = cp if type == 1 end #-------------------------------------------------------------------------- # ● Update Zoom #-------------------------------------------------------------------------- def update_zoom if @active if !@zoom_duration[2] update_zoom_in @zoom_duration = [0,0,true] if self.zoom_x == 1.00 else update_zoom_effect end else @zoom_duration[2] = false update_zoom_in end end #-------------------------------------------------------------------------- # ● Update Zoom Out #-------------------------------------------------------------------------- def update_zoom_out return if self.zoom_x == 1.00 self.zoom_x += 0.03 self.zoom_y += 0.03 if self.zoom_x >= 1.00 self.zoom_x = 1.00 self.zoom_y = 1.00 end end #-------------------------------------------------------------------------- # ● Update Zoom In #-------------------------------------------------------------------------- def update_zoom_in return if self.zoom_x == 1.00 self.zoom_x -= 0.03 self.zoom_y -= 0.03 if self.zoom_x <= 1.00 self.zoom_x = 1.00 self.zoom_y = 1.00 end end #-------------------------------------------------------------------------- # ● Update Zoom_effect #-------------------------------------------------------------------------- def update_zoom_effect @zoom_duration[0] += 1 return if @zoom_duration[0] < 1 @zoom_duration[0] = 0 @zoom_duration[1] += 1 case @zoom_duration[1] when 1..30 self.zoom_x += 0.005 self.zoom_y += 0.005 when 31..60 self.zoom_x -= 0.005 self.zoom_y -= 0.005 when 61..999 @zoom_duration[1] = 0 self.zoom_x = 1.00 self.zoom_y = 1.00 end end end #============================================================================== # ■ Scene_Item #============================================================================== class Scene_Item #-------------------------------------------------------------------------- # ● Execute Dispose #-------------------------------------------------------------------------- def execute_dispose Graphics.freeze dispose_background dispose_layout dispose_particles dispose_command_sprites dispose_button_sprites dispose_windows dispose_members_status end #-------------------------------------------------------------------------- # ● Dispose Background #-------------------------------------------------------------------------- def dispose_background return if @background == nil @background.dispose @background = nil end #-------------------------------------------------------------------------- # ● Dispose Layout #-------------------------------------------------------------------------- def dispose_layout return if @layout == nil @layout.dispose @layout = nil end #-------------------------------------------------------------------------- # ● Dispose Particles #-------------------------------------------------------------------------- def dispose_particles return if @particles_sprite == nil @particles_sprite.each {|sprite| sprite.dispose } end #-------------------------------------------------------------------------- # ● Dispose Command Sprites #-------------------------------------------------------------------------- def dispose_command_sprites return if @command_sprites == nil @command_sprites.each {|sprite| sprite.dispose_sprite } @command_sprites = nil end #-------------------------------------------------------------------------- # ● Dispose Button Sprites #-------------------------------------------------------------------------- def dispose_button_sprites return if @button_sprites == nil @button_sprites.each {|sprite| sprite.dispose_sprite } @button_sprites = nil end #-------------------------------------------------------------------------- # ● Dispose Members Status #-------------------------------------------------------------------------- def dispose_members_status return if @members_status == nil @members_status.each {|sprite| sprite.dispose } end #-------------------------------------------------------------------------- # ● Dispose Winndows #-------------------------------------------------------------------------- def dispose_windows return if @item_window == nil @item_window.dispose @item_window_2.dispose @weapon_window.dispose @armor_window.dispose @key_window.dispose @actor_window.dispose @actor_status.dispose @help_window.dispose end end #============================================================================== # ■ Scene_Item #============================================================================== class Scene_Item #-------------------------------------------------------------------------- # ● Update Sprites #-------------------------------------------------------------------------- def update_sprites update_background update_particles update_command_sprites update_button_sprites update_windows update_members_status end #-------------------------------------------------------------------------- # ● Update Members Status #-------------------------------------------------------------------------- def update_members_status @members_status.each {|sprite| sprite.update(@actor_window.active,@actor_window.index) } end #-------------------------------------------------------------------------- # ● Update Background #-------------------------------------------------------------------------- def update_background return if @background == nil @background.ox += @background_scroll[0] @background.oy += @background_scroll[1] end #-------------------------------------------------------------------------- # ● Update Particles #-------------------------------------------------------------------------- def update_particles return if @particles_sprite == nil @particles_sprite.each {|sprite| sprite.update } end #-------------------------------------------------------------------------- # ● Update Command Sprites #-------------------------------------------------------------------------- def update_command_sprites return if @command_sprites == nil for i in @command_sprites i.update_command(@command_index) if i.index == 0 @item_window.x = i.x @item_window.visible = i.visible @item_window_2.x = i.x @item_window_2.visible = i.visible elsif i.index == 1 @weapon_window.x = i.x @weapon_window.visible = i.visible elsif i.index == 2 @armor_window.x = i.x @armor_window.visible = i.visible elsif i.index == 3 @key_window.x = i.x @key_window.visible = i.visible end end end #-------------------------------------------------------------------------- # ● Update Button Sprites #-------------------------------------------------------------------------- def update_button_sprites return if @button_sprites == nil @button_sprites.each {|sprite| sprite.update_command(@command_index) } end #-------------------------------------------------------------------------- # ● Update Winndow #-------------------------------------------------------------------------- def update_windows return if @item_window == nil @item_window_2.index = @item_window.index @item_window.update @weapon_window.update @armor_window.update @key_window.update @actor_window.update update_actor_window_slide update_actor_window2_slide end #-------------------------------------------------------------------------- # ● Update Actor Window Slide #-------------------------------------------------------------------------- def update_actor_window_slide if @actor_window.active if @actor_window.x < @actor_window_slide_range[0] @actor_window.x += 15 @actor_window.contents_opacity += 23 if @actor_window.x >= @actor_window_slide_range[0] @actor_window.x = @actor_window_slide_range[0] @actor_window.contents_opacity = 255 end end else if @actor_window.x >= @actor_window_slide_range[1] @actor_window.x -= 15 @actor_window.contents_opacity -= 3 if @actor_window.x <= @actor_window_slide_range[1] @actor_window.x = @actor_window_slide_range[1] @actor_window.contents_opacity = 0 end end end end #-------------------------------------------------------------------------- # ● Update Actor Window Slide #-------------------------------------------------------------------------- def update_actor_window2_slide @actor_status.update(@actor_window.active,@actor) end end #============================================================================== # ■ Scene_Item #============================================================================== class Scene_Item #-------------------------------------------------------------------------- # ● Update #-------------------------------------------------------------------------- def update update_command update_sprites end end #============================================================================== # ■ Scene_Item #============================================================================== class Scene_Item #-------------------------------------------------------------------------- # ● Update Command #-------------------------------------------------------------------------- def update_command if @actor_window.active update_target_select else update_main_command update_active_window end end #-------------------------------------------------------------------------- # ● Update Active Window #-------------------------------------------------------------------------- def update_active_window @item_window_2.active = false if @command_index == 0 @item_window.active = true @weapon_window.active = false @armor_window.active = false @key_window.active = false elsif @command_index == 1 @item_window.active = false @weapon_window.active = true @armor_window.active = false @key_window.active = false elsif @command_index == 2 @item_window.active = false @weapon_window.active = false @armor_window.active = true @key_window.active = false elsif @command_index == 3 @item_window.active = false @weapon_window.active = false @armor_window.active = false @key_window.active = true end end #-------------------------------------------------------------------------- # ● Update Main Command #-------------------------------------------------------------------------- def update_main_command @wait_time -= 1 if @wait_time > 0 if Input.trigger?(:LEFT) move_command_index(-1) elsif Input.trigger?(:RIGHT) move_command_index(1) elsif Input.trigger?(:B) return_scene end end #-------------------------------------------------------------------------- # ● Return Scene #-------------------------------------------------------------------------- def return_scene Sound.play_cancel SceneManager.return end #-------------------------------------------------------------------------- # ● Cancel_Selection #-------------------------------------------------------------------------- def cancel_selection Sound.play_cancel @phase = 0 end #-------------------------------------------------------------------------- # ● Update Main Command #-------------------------------------------------------------------------- def move_command_index(value) return if @wait_time > 0 @wait_time = 7 pre_index = @command_index @command_index += value @command_index = 0 if @command_index > 3 @command_index = 3 if @command_index < 0 for i in @command_sprites i.newp(@command_index,value) end Sound.play_cursor end #-------------------------------------------------------------------------- # ● ON Category OK #-------------------------------------------------------------------------- def on_category_ok if @command_index == 0 @item_window.activate @item_window.select_last elsif @command_index == 1 @weapon_window.activate @weapon_window.select_last elsif @command_index == 2 @armor_window.activate @armor_window.select_last elsif @command_index == 3 @key_window.activate @key_window.select_last end refresh_actor_status end #-------------------------------------------------------------------------- # ● ON Item OK #-------------------------------------------------------------------------- def on_item_ok $game_party.last_item.object = item determine_item end #-------------------------------------------------------------------------- # ● ON Item Cancel #-------------------------------------------------------------------------- def on_item_cancel @item_window.unselect end #-------------------------------------------------------------------------- # ● Play SE For Item #-------------------------------------------------------------------------- def play_se_for_item Sound.play_use_item end #-------------------------------------------------------------------------- # ● Item #-------------------------------------------------------------------------- def item if @command_index == 0 @item_window.item elsif @command_index == 1 @weapon_window.item elsif @command_index == 2 @armor_window.item elsif @command_index == 3 @key_window.item end end #-------------------------------------------------------------------------- # ● User #-------------------------------------------------------------------------- def user $game_party.movable_members.max_by {|member| member.pha } end #-------------------------------------------------------------------------- # ● Cursor Left #-------------------------------------------------------------------------- def cursor_left? @item_window.index % 2 == 0 end #-------------------------------------------------------------------------- # ● Show Sub Window #-------------------------------------------------------------------------- def show_sub_window(window) window.show.activate end #-------------------------------------------------------------------------- # ● Hide Sub Window #-------------------------------------------------------------------------- def hide_sub_window(window) window.deactivate activate_item_window end #-------------------------------------------------------------------------- # ● ON Actor OK #-------------------------------------------------------------------------- def on_actor_ok if item_usable? use_item refresh_window else Sound.play_buzzer end end #-------------------------------------------------------------------------- # ● Refresh Window #-------------------------------------------------------------------------- def refresh_window if @command_index == 0 old_item = @item_window.item @item_window.refresh # set_actor_for_members_menu if @item_window.item == nil @item_window.index -= 1 @item_window.index = 0 if @item_window.index < 0 @item_window.update end if old_item != @item_window.item on_actor_cancel cancel_selection @item_window_2.refresh @item_window.update_help end elsif @command_index == 1 @weapon_window.refresh elsif @command_index == 2 @armor_window.refresh elsif @command_index == 3 @key_window.refresh end end #-------------------------------------------------------------------------- # ● Set Actor for Members Menu #-------------------------------------------------------------------------- def set_actor_for_members_menu index = 0 for actor in $game_party.members @members_status[index].set_actor(actor) index += 1 end end #-------------------------------------------------------------------------- # ● ON Actor Cancel #-------------------------------------------------------------------------- def on_actor_cancel hide_sub_window(@actor_window) end #-------------------------------------------------------------------------- # ● Determine Item #-------------------------------------------------------------------------- def determine_item if item.for_friend? show_sub_window(@actor_window) @actor_window.select_for_item(item) $game_temp.item_scope = @item_window.item.scope rescue nil else use_item activate_item_window end end #-------------------------------------------------------------------------- # ● Activate Item Window #-------------------------------------------------------------------------- def activate_item_window if @command_index == 0 @item_window.refresh @item_window.activate elsif @command_index == 1 @weapon_window.refresh @weapon_window.activate elsif @command_index == 2 @armor_window.refresh @armor_window.activate elsif @command_index == 3 @key_window.refresh @key_window.activate end end #-------------------------------------------------------------------------- # ● Item Target Actors #-------------------------------------------------------------------------- def item_target_actors if !item.for_friend? [] elsif item.for_all? $game_party.members else [$game_party.members[@actor_window.index]] end end #-------------------------------------------------------------------------- # ● Item Usable? #-------------------------------------------------------------------------- def item_usable? user.usable?(item) && item_effects_valid? end #-------------------------------------------------------------------------- # ● Item Effects Valid? #-------------------------------------------------------------------------- def item_effects_valid? item_target_actors.any? do |target| target.item_test(user, item) end end #-------------------------------------------------------------------------- # ● Use Item to Actors #-------------------------------------------------------------------------- def use_item_to_actors item_target_actors.each do |target| item.repeats.times { target.item_apply(user, item) } end end #-------------------------------------------------------------------------- # ● Use Item #-------------------------------------------------------------------------- def use_item play_se_for_item user.use_item(item) use_item_to_actors check_common_event check_gameover @actor_window.refresh end #-------------------------------------------------------------------------- # ● Check Common Event #-------------------------------------------------------------------------- def check_common_event SceneManager.goto(Scene_Map) if $game_temp.common_event_reserved? end #-------------------------------------------------------------------------- # ● Update Target Select #-------------------------------------------------------------------------- def update_target_select @actor = $game_party.members[@actor_window.index] if Input.trigger?(:B) cancel_selection end end end #============================================================================== # ■ Game_Temp #============================================================================== class Game_Temp #-------------------------------------------------------------------------- # ● Execute Pre Cache Skill Menu #-------------------------------------------------------------------------- def execute_pre_cache_skill_menu @pre_cache_skill_menu = [] @pre_cache_skill_menu.push(Cache.menu_skill("Background")) @pre_cache_skill_menu.push(Cache.menu_skill("Layout")) @pre_cache_skill_menu.push(Cache.menu_skill("Type_Layout")) @pre_cache_skill_menu.push(Cache.menu_skill("List_Layout")) @pre_cache_skill_menu.push(Cache.menu_skill("Actor_Layout")) end end #============================================================================== # ■ Scene_Skill #============================================================================== class Scene_Skill include MOG_MENU_SKILL include MOG_MENU_BASE #-------------------------------------------------------------------------- # ● Main #-------------------------------------------------------------------------- def main execute_setup execute_loop execute_dispose end #-------------------------------------------------------------------------- # ● Execute Setup #-------------------------------------------------------------------------- def execute_setup @actor = $game_temp.actor_menu_temp @index_max = (@actor.added_skill_types.size - 1) @index_max = 0 if @index_max < 0 @phase = 0 @press_time = 0 @press_lag = 0 @scene_active = @actor.added_skill_types.size > 0 ? true : false create_sprites end #-------------------------------------------------------------------------- # ● Execute Lopp #-------------------------------------------------------------------------- def execute_loop Graphics.transition(10) loop do Input.update update Graphics.update break if SceneManager.scene != self end end end #============================================================================== # ■ Actor Skill Status #============================================================================== class Actor_Skill_Status include MOG_ACTOR_SKILL_STATUS #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- def initialize(actor) @actor = actor set_old_parameter create_sprites end #-------------------------------------------------------------------------- # ● Create Sprites #-------------------------------------------------------------------------- def create_sprites @meter_image = $game_temp.pre_cache_actor_menu[6] @meter_cw = @meter_image.width @meter_ch = @meter_image.height / 2 @parameter_number = $game_temp.pre_cache_actor_menu[2] @parameter_cw = @parameter_number.width / 10 @parameter_ch = @parameter_number.height @opac = 0 create_layout create_parameter create_face create_name create_hp_meter create_mp_meter create_states set_position(0,-@layout.bitmap.height - 48) end #-------------------------------------------------------------------------- # ● Set Old Parameter #-------------------------------------------------------------------------- def set_old_parameter @par = [] if @par == nil @par.clear @par = [@actor.hp,@actor.mhp,@actor.mp,@actor.mmp,@actor.level] end #-------------------------------------------------------------------------- # ● Dispose #-------------------------------------------------------------------------- def dispose dispose_layout dispose_parameter dispose_face dispose_name dispose_hp_meter dispose_mp_meter dispose_states end #-------------------------------------------------------------------------- # ● Dispose Layout #-------------------------------------------------------------------------- def dispose_layout @layout.dispose end #-------------------------------------------------------------------------- # ● Dispose Parameter #-------------------------------------------------------------------------- def dispose_parameter @parameter.bitmap.dispose @parameter.dispose end #-------------------------------------------------------------------------- # ● Dispose Face #-------------------------------------------------------------------------- def dispose_face @face.bitmap.dispose if @face.bitmap != nil @face.dispose end #-------------------------------------------------------------------------- # ● Dispose HP Meter #-------------------------------------------------------------------------- def dispose_hp_meter @hp_meter.bitmap.dispose @hp_meter.dispose end #-------------------------------------------------------------------------- # ● Dispose MP Meter #-------------------------------------------------------------------------- def dispose_mp_meter @mp_meter.bitmap.dispose @mp_meter.dispose end #-------------------------------------------------------------------------- # ● Dispose Name #-------------------------------------------------------------------------- def dispose_name @name.bitmap.dispose @name.dispose end #-------------------------------------------------------------------------- # ● Dispose States #-------------------------------------------------------------------------- def dispose_states return if @status == nil @status.bitmap.dispose @status.dispose if @actor_status != nil @actor_status.dispose @actor_status = nil end end #-------------------------------------------------------------------------- # ● Create Layout #-------------------------------------------------------------------------- def create_layout @layout = Sprite.new @layout.bitmap = $game_temp.pre_cache_skill_menu[4] @org_pos = [LAYOUT_POSITION[0],LAYOUT_POSITION[1]] @layout.x = @org_pos[0] @layout.y = @org_pos[1] @layout.z = 10 #@layout.opacity = 0 end #-------------------------------------------------------------------------- # ● Create Parameter #-------------------------------------------------------------------------- def create_parameter @parameter = Sprite.new @parameter.bitmap = Bitmap.new(@layout.bitmap.width,@layout.bitmap.height) @org_pos_par = [@org_pos[0] + PAR_POSITION[0], @org_pos[1] + PAR_POSITION[1]] @parameter.x = @org_pos_par[0] @parameter.y = @org_pos_par[1] @parameter.z = 12 # @parameter.opacity = 0 refresh_parameter end #-------------------------------------------------------------------------- # ● Create HP Meter #-------------------------------------------------------------------------- def create_hp_meter @hp_meter_old = [-1,-1] @hp_meter = Sprite.new @hp_meter.bitmap = Bitmap.new(@meter_cw,@meter_ch) @org_pos_hp = [@org_pos[0] + HP_METER_POSITION[0], @org_pos[1] + HP_METER_POSITION[1]] @hp_meter.x = @org_pos_hp[0] @hp_meter.y = @org_pos_hp[1] @hp_meter.z = 11 end #-------------------------------------------------------------------------- # ● Refresh HP Meter #-------------------------------------------------------------------------- def refresh_hp_meter @hp_meter_old[0] = @actor.hp @hp_meter_old[1] = @actor.mhp @hp_meter.bitmap.clear width_range = @meter_cw * @actor.hp / @actor.mhp m_rect = Rect.new(0,0,width_range,@meter_ch) @hp_meter.bitmap.blt(0,0,@meter_image,m_rect) end #-------------------------------------------------------------------------- # ● Create MP Meter #-------------------------------------------------------------------------- def create_mp_meter @mp_meter_old = [-1,-1] @mp_meter = Sprite.new @mp_meter.bitmap = Bitmap.new(@meter_cw,@meter_ch) @org_pos_mp = [@org_pos[0] + MP_METER_POSITION[0], @org_pos[1] + MP_METER_POSITION[1]] @mp_meter.x = @org_pos_mp[0] @mp_meter.y = @org_pos_mp[1] @mp_meter.z = 11 end #-------------------------------------------------------------------------- # ● Create_States #-------------------------------------------------------------------------- def create_states @status_old = nil @status_flow = [-24,0] @status = Sprite.new @status.bitmap = Bitmap.new(24,24) @org_pos_states = [@org_pos[0] + STATES_POSITION[0], @org_pos[1] + STATES_POSITION[1]] @status.x = @org_pos_states[0] + 1 @status.y = @org_pos_states[1] @status.z = 11 end #-------------------------------------------------------------------------- # * Refresh States #-------------------------------------------------------------------------- def refresh_states check_icon_image @status_old = @actor.states @status_flow = [0,0] @actor_status.dispose if @actor_status != nil @states_size = @actor.states.size > 0 ? (26 * @actor.states.size) : 24 @actor_status = Bitmap.new(@states_size,24) index = 0 for i in @actor.states rect = Rect.new(i.icon_index % 16 * 24, i.icon_index / 16 * 24, 24, 24) @actor_status.blt(26 * index , 0, @icon_image, rect) index += 1 end end #-------------------------------------------------------------------------- # * Flow_Status #-------------------------------------------------------------------------- def flow_states return if @actor_status == nil @status.bitmap.clear return if @actor.states.size == 0 st_src_rect = Rect.new(@status_flow[0],0, 24,24) @status.bitmap.blt(0,0, @actor_status, st_src_rect) if STATES_SCROLLING_ANIMATION @status_flow[0] += 1 @status_flow[0] = -24 if @status_flow[0] >= @states_size + 2 else @status_flow[1] += 1 unless @actor.states.size <= 1 if @status_flow[1] > 30 @status_flow[1] = 0 @status_flow[0] += 26 @status_flow[0] = 0 if @status_flow[0] >= (@states_size - 0) end end end #-------------------------------------------------------------------------- # * Check Icon Image #-------------------------------------------------------------------------- def check_icon_image if @icon_image == nil or @icon_image.disposed? @icon_image = Cache.system("Iconset") end end #-------------------------------------------------------------------------- # ● Refresh MP Meter #-------------------------------------------------------------------------- def refresh_mp_meter @mp_meter_old[0] = @actor.mp @mp_meter_old[1] = @actor.mmp @mp_meter.bitmap.clear width_range = @meter_cw * @actor.mp / @actor.mmp rescue nil width_range = 0 if width_range == nil m_rect = Rect.new(0,@meter_ch,width_range,@meter_ch) @mp_meter.bitmap.blt(0,0,@meter_image,m_rect) end #-------------------------------------------------------------------------- # ● Create Face #-------------------------------------------------------------------------- def refresh_parameter set_old_parameter @parameter.bitmap.clear value = @actor.level x = 115 y = 8 refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y) value = @actor.hp x = 218 y = 2 refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y) value = @actor.mp x = 225 y = 22 refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y) end #-------------------------------------------------------------------------- # ● Refresh Number #-------------------------------------------------------------------------- def refresh_number(sprite,image,value,number_cw,number_ch,x,y) number = value.abs.to_s.split(//) x2 = -number_cw * number.size for i in 0..number.size - 1 number_abs = number[i].to_i nsrc_rect = Rect.new(number_cw * number_abs, 0, number_cw , number_ch) sprite.bitmap.blt(x + x2 + (number_cw * i), y, image, nsrc_rect) end end #-------------------------------------------------------------------------- # ● Create Face #-------------------------------------------------------------------------- def create_face @face = Sprite.new @org_pos_face = [@org_pos[0] + FACE_POSITION[0], @org_pos[1] + FACE_POSITION[1]] @face.x = @org_pos_face[0] @face.y = @org_pos_face[1] @face.z = 11 # @face.opacity = 0 refresh_face end #-------------------------------------------------------------------------- # ● Refresh Face #-------------------------------------------------------------------------- def refresh_face face_name = "Face" + @actor.id.to_s @face.bitmap = Cache.menu(face_name.to_s) end #-------------------------------------------------------------------------- # ● Create Name #-------------------------------------------------------------------------- def create_name @name = Sprite.new @name.bitmap = Bitmap.new(140,32) @name.bitmap.font.size = FONT_SIZE @name.bitmap.font.bold = FONT_BOLD @org_pos_name = [@org_pos[0] + NAME_POSITION[0], @org_pos[1] + NAME_POSITION[1]] @name.x = @org_pos_name[0] @name.y = @org_pos_name[1] @name.z = 11 #@name.opacity = 0 refresh_name end #-------------------------------------------------------------------------- # ● Refresh Name #-------------------------------------------------------------------------- def refresh_name @name.bitmap.clear @name.bitmap.draw_text(0,0,140,32,@actor.name.to_s,0) end #-------------------------------------------------------------------------- # ● Set Actor #-------------------------------------------------------------------------- def set_actor(actor) @actor = actor end #-------------------------------------------------------------------------- # ● Can Refresh HP Meter #-------------------------------------------------------------------------- def can_refresh_hp_meter? return true if @hp_meter_old[0] != @actor.hp return true if @hp_meter_old[1] != @actor.mhp return false end #-------------------------------------------------------------------------- # ● Can Refresh MP Meter #-------------------------------------------------------------------------- def can_refresh_mp_meter? return true if @mp_meter_old[0] != @actor.mp return true if @mp_meter_old[1] != @actor.mmp return false end #-------------------------------------------------------------------------- # ● Can Refresh Parameter #-------------------------------------------------------------------------- def can_refresh_parameter? return true if @par[0] != @actor.hp return true if @par[1] != @actor.mhp return true if @par[2] != @actor.mp return true if @par[3] != @actor.mmp return false end #-------------------------------------------------------------------------- # ● Update Position #-------------------------------------------------------------------------- def update_position update_slide(0,@layout,@layout.x,@org_pos[0]) update_slide(1,@layout,@layout.y,@org_pos[1]) update_slide(0,@parameter,@parameter.x,@org_pos_par[0]) update_slide(1,@parameter,@parameter.y,@org_pos_par[1]) update_slide(0,@hp_meter,@hp_meter.x,@org_pos_hp[0]) update_slide(1,@hp_meter,@hp_meter.y,@org_pos_hp[1]) update_slide(0,@mp_meter,@mp_meter.x,@org_pos_mp[0]) update_slide(1,@mp_meter,@mp_meter.y,@org_pos_mp[1]) update_slide(0,@face,@face.x,@org_pos_face[0]) update_slide(1,@face,@face.y,@org_pos_face[1]) update_slide(0,@name,@name.x,@org_pos_name[0]) update_slide(1,@name,@name.y,@org_pos_name[1]) update_slide(0,@status,@status.x,@org_pos_states[0]) update_slide(1,@status,@status.y,@org_pos_states[1]) end #-------------------------------------------------------------------------- # ● Update Slide #-------------------------------------------------------------------------- def update_slide(type,sprite,cp,np) sp = 3 + ((cp - np).abs / 10) if cp > np cp -= sp cp = np if cp < np elsif cp < np cp += sp cp = np if cp > np end sprite.x = cp if type == 0 sprite.y = cp if type == 1 end #-------------------------------------------------------------------------- # ● Update Opacity #-------------------------------------------------------------------------- def update_opacity @opac += 10 @opac = 255 if @opac > 255 set_opacity(@opac) end #-------------------------------------------------------------------------- # ● Set Opacity #-------------------------------------------------------------------------- def set_opacity(opac) @layout.opacity = opac @layout.opacity = opac @parameter.opacity = opac @parameter.opacity = opac @hp_meter.opacity = opac @hp_meter.opacity = opac @mp_meter.opacity = opac @mp_meter.opacity = opac @face.opacity = opac @face.opacity = opac @name.opacity = opac @name.opacity = opac @status.opacity = opac end #-------------------------------------------------------------------------- # ● Update Position #-------------------------------------------------------------------------- def set_position(pos_x,pos_y) @layout.x = @org_pos[0] + pos_x @layout.y = @org_pos[1] + pos_y @parameter.x = @org_pos_par[0] + pos_x @parameter.y = @org_pos_par[1] + pos_y @hp_meter.x = @org_pos_hp[0] + pos_x @hp_meter.y = @org_pos_hp[1] + pos_y @mp_meter.x = @org_pos_mp[0] + pos_x @mp_meter.y = @org_pos_mp[1] + pos_y @face.x = @org_pos_face[0] + pos_x @face.y = @org_pos_face[1] + pos_y @name.x = @org_pos_name[0] + pos_x @name.y = @org_pos_name[1] + pos_y @status.x = @org_pos_states[0] + pos_x @status.y = @org_pos_states[1] + pos_y end #-------------------------------------------------------------------------- # ● Update #-------------------------------------------------------------------------- def update refresh_hp_meter if can_refresh_hp_meter? refresh_mp_meter if can_refresh_mp_meter? refresh_parameter if can_refresh_parameter? refresh_states if @status_old != @actor.states update_opacity update_position flow_states end end #============================================================================== # ■ Window_SkillCommand #============================================================================== class Window_SkillCommand_2 < Window_Command attr_reader :skill_window #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- def initialize(x, y) super(x, y) @actor = nil @index_max = 0 end #-------------------------------------------------------------------------- # ● Window Width #-------------------------------------------------------------------------- def window_width return 140 end #-------------------------------------------------------------------------- # ● Actor #-------------------------------------------------------------------------- def actor=(actor) return if @actor == actor @actor = actor @index_max = (@actor.added_skill_types.size - 1) @index_max = 0 if @index_max < 0 refresh select_last end #-------------------------------------------------------------------------- # ● Visible Line Number #-------------------------------------------------------------------------- def visible_line_number return 5 end #-------------------------------------------------------------------------- # ● Make Command List #-------------------------------------------------------------------------- def make_command_list return unless @actor @actor.added_skill_types.sort.each do |stype_id| name = $data_system.skill_types[stype_id] add_command(name, :skill, true, stype_id) end end #-------------------------------------------------------------------------- # ● Update #-------------------------------------------------------------------------- def update super @skill_window.stype_id = current_ext if @skill_window # update_index end #-------------------------------------------------------------------------- # ● Update #-------------------------------------------------------------------------- def update_index return if @index_max <= 0 if Input.trigger?(:RIGHT) add_index(1) elsif Input.trigger?(:LEFT) add_index(-1) end end #-------------------------------------------------------------------------- # ● Add Index #-------------------------------------------------------------------------- def add_index(value) Sound.play_cursor @index += value @index = 0 if @index > @index_max @index = @index_max if @index < 0 end #-------------------------------------------------------------------------- # ● Skill Window #-------------------------------------------------------------------------- def skill_window=(skill_window) @skill_window = skill_window update end #-------------------------------------------------------------------------- # ● Select Last #-------------------------------------------------------------------------- def select_last skill = @actor.last_skill.object if skill select_ext(skill.stype_id) else select(0) end end end #============================================================================== # ■ Window_SkillList #============================================================================== class Window_SkillList_Menu < Window_Selectable attr_accessor :windows_index #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- def initialize(x, y, width, height) super @stype_id = 0 @data = [] @windows_index = 0 self.opacity = 0 @actor = nil end #-------------------------------------------------------------------------- # ● Actor #-------------------------------------------------------------------------- def actor=(actor) return if @actor == actor @actor = actor self.oy = 0 end #-------------------------------------------------------------------------- # ● Setup #-------------------------------------------------------------------------- def setup(actor,skill_type,index) @actor = actor @stype_id = skill_type @windows_index = index refresh end #-------------------------------------------------------------------------- # ● Stype ID #-------------------------------------------------------------------------- def stype_id=(stype_id) end #-------------------------------------------------------------------------- # ● Col Max #-------------------------------------------------------------------------- def col_max return 1 end #-------------------------------------------------------------------------- # ● Item Max #-------------------------------------------------------------------------- def item_max @data ? @data.size : 1 end #-------------------------------------------------------------------------- # ● Item #-------------------------------------------------------------------------- def item @data && index >= 0 ? @data[index] : nil end #-------------------------------------------------------------------------- # ● Current Item Enabled #-------------------------------------------------------------------------- def current_item_enabled? enable?(@data[index]) end #-------------------------------------------------------------------------- # ● Include #-------------------------------------------------------------------------- def include?(item) item && item.stype_id == @stype_id end #-------------------------------------------------------------------------- # ● Enable #-------------------------------------------------------------------------- def enable?(item) @actor && @actor.usable?(item) end #-------------------------------------------------------------------------- # ● Male Item List #-------------------------------------------------------------------------- def make_item_list @data = @actor ? @actor.skills.select {|skill| include?(skill) } : [] end #-------------------------------------------------------------------------- # ● Select Last #-------------------------------------------------------------------------- def select_last select(@data.index(@actor.last_skill.object) || 0) end #-------------------------------------------------------------------------- # ● Draw Item #-------------------------------------------------------------------------- def draw_item(index) self.contents.font.size = 18 self.contents.font.bold = true skill = @data[index] if skill rect = item_rect(index) rect.width -= 4 draw_item_name(skill, rect.x, rect.y, enable?(skill),110) draw_skill_cost(rect, skill) end end #-------------------------------------------------------------------------- # ● Draw Skill Cost #-------------------------------------------------------------------------- def draw_skill_cost(rect, skill) if @actor.skill_tp_cost(skill) > 0 change_color(tp_cost_color, enable?(skill)) draw_text(rect, @actor.skill_tp_cost(skill), 2) elsif @actor.skill_mp_cost(skill) > 0 change_color(mp_cost_color, enable?(skill)) draw_text(rect, @actor.skill_mp_cost(skill), 2) end end #-------------------------------------------------------------------------- # ● Update Help #-------------------------------------------------------------------------- def update_help @help_window.set_item(item) end #-------------------------------------------------------------------------- # ● Refresh #-------------------------------------------------------------------------- def refresh make_item_list create_contents draw_all_items end end #============================================================================== # ■ Scene Skill #============================================================================== class Scene_Skill #-------------------------------------------------------------------------- # ● Create Sprites #-------------------------------------------------------------------------- def create_sprites create_menu_background create_layout create_particles create_actor_status create_help_window create_command_window create_type_layout create_item_window create_list_layout create_actor_window create_type_name @command_window.active = true end #-------------------------------------------------------------------------- # ● Create Menu Background #-------------------------------------------------------------------------- def create_menu_background @background = Plane.new @background.bitmap = $game_temp.pre_cache_skill_menu[0] @background.z = 0 @background_scroll = [BACKGROUND_SCROLL_SPEED[0],BACKGROUND_SCROLL_SPEED[1]] end #-------------------------------------------------------------------------- # ● Create Layout #-------------------------------------------------------------------------- def create_layout @layout = Sprite.new @layout.bitmap = $game_temp.pre_cache_skill_menu[1] @layout.z = 3 end #-------------------------------------------------------------------------- # ● Create Particles #-------------------------------------------------------------------------- def create_particles @particles_sprite =[] for i in 0...NUMBER_OF_PARTICLES @particles_sprite.push(Particles_Menu.new(nil)) end end #-------------------------------------------------------------------------- # ● Create Actor Status #-------------------------------------------------------------------------- def create_actor_status @actor_skill_status = Actor_Skill_Status.new(@actor) end #-------------------------------------------------------------------------- # ● Create Help Window #-------------------------------------------------------------------------- def create_help_window @help_window = Window_Help.new @help_window.x = 0 @help_window.y = Graphics.height - @help_window.height @help_window.opacity = 0 end #-------------------------------------------------------------------------- # ● Create Command Window #-------------------------------------------------------------------------- def create_command_window @command_window = Window_SkillCommand_2.new(175,200)#(0, 84) @command_window.help_window = @help_window @command_window.actor = @actor @command_window.set_handler(:skill, method(:command_skill)) @command_window.set_handler(:pagedown, method(:next_actor)) @command_window.set_handler(:pageup, method(:prev_actor)) @command_window.active = false @command_window.opacity = 0 @command_window.index = 0 @command_window.visible = @scene_active @skill_list_slide_range = [@command_window.x, -(@command_window.x + @command_window.width)] @command_window.x = @skill_list_slide_range[1] - 80 @command_window.opacity = 0 end #-------------------------------------------------------------------------- # ● Create Type Layout #-------------------------------------------------------------------------- def create_type_layout @type_layout = Sprite.new @type_layout.bitmap = $game_temp.pre_cache_skill_menu[2] @type_layout.z = @command_window.z - 1 @type_layout.x = @command_window.x @type_layout.y = @command_window.y - 30 @type_layout.opacity = 0 end #-------------------------------------------------------------------------- # ● Create Item Window #-------------------------------------------------------------------------- def create_item_window @skill_window = [] index = 0 window_max = @actor.added_skill_types.size window_max = 1 if window_max == 0 for item in 0...window_max @skill_window.push(Window_SkillList_Menu.new(345,165,205,240)) @skill_window[index].setup(@actor,@actor.added_skill_types[index],index) @skill_window[index].help_window = @help_window @skill_window[index].set_handler(:ok, method(:on_item_ok)) @skill_window[index].set_handler(:cancel, method(:on_item_cancel)) @skill_window[index].active = false @skill_window[index].index = -1 @skill_window[index].opacity = 0 @skill_window[index].contents_opacity = 0 @item_slide_range = [@skill_window[index].x, @skill_window[index].x + 50] @skill_window[index].x = @item_slide_range[1] index += 1 end @item_pre_index = @skill_window[@command_window.index].index @old_command_index = @skill_window[@command_window.index].index end #-------------------------------------------------------------------------- # ● Create List Layout #-------------------------------------------------------------------------- def create_list_layout @list_layout = Sprite.new @list_layout.bitmap = $game_temp.pre_cache_skill_menu[3] @list_layout.z = @skill_window[@command_window.index].z - 1 @list_layout.x = @item_slide_range[0] - 4 @list_layout.y = @skill_window[@command_window.index].y - 20 @list_layout.opacity = 0 @list_layout_slide_range = [@list_layout.x,@list_layout.x + 50] @list_layout.x = @list_layout_slide_range[1] end #-------------------------------------------------------------------------- # ● Create Actor Window #-------------------------------------------------------------------------- def create_actor_window @actor_window = Members_Windows_Status.new @actor_window.set_handler(:ok, method(:on_actor_ok)) @actor_window.set_handler(:cancel, method(:on_actor_cancel)) @actor_window.opacity = 0 @actor_window.x = -10 @actor_window.y = 36 @actor_window_slide_range = [@actor_window.x, -@actor_window.width] @actor_window.x = @actor_window_slide_range[1] @actor_window.visible = true @actor_window_index_old = @actor_window.index create_members_window update_active end #-------------------------------------------------------------------------- # ● Create Members Window #-------------------------------------------------------------------------- def create_members_window @actor_status = Actor_Menu_Status.new(@actor) index = 0 @members_status = [] for actor in $game_party.members @members_status.push(Members_Menu.new(actor,index)) index += 1 end end #技能类型名称位置: #-------------------------------------------------------------------------- # ● Create Type Name #-------------------------------------------------------------------------- def create_type_name @type_name = Sprite.new @type_name.x = 365#260 @type_name.y = 140#60 @type_name.z = @list_layout.z + 2 @type_name.bitmap = Bitmap.new(100,32) @type_name.bitmap.font.size = 18 @type_name.bitmap.font.bold = true @type_name.opacity = 0 refresh_type_name end #-------------------------------------------------------------------------- # ● Refresh Type Name #-------------------------------------------------------------------------- def refresh_type_name @type_name.bitmap.clear return if !@scene_active stype_id = @actor.added_skill_types[@command_window.index] type_name = $data_system.skill_types[stype_id] @type_name.bitmap.draw_text(0,0,100,32,type_name,2) end end #============================================================================== # ■ Scene_Skill #============================================================================== class Scene_Skill #-------------------------------------------------------------------------- # ● Execute Dispose #-------------------------------------------------------------------------- def execute_dispose Graphics.freeze dispose_background dispose_layout dispose_list_layout dispose_particles dispose_windows dispose_members_status dispose_type_name end #-------------------------------------------------------------------------- # ● Dispose Background #-------------------------------------------------------------------------- def dispose_background return if @background == nil @background.dispose @background = nil end #-------------------------------------------------------------------------- # ● Dispose Layout #-------------------------------------------------------------------------- def dispose_layout return if @layout == nil @layout.dispose @layout = nil end #-------------------------------------------------------------------------- # ● Dispose Particles #-------------------------------------------------------------------------- def dispose_particles return if @particles_sprite == nil @particles_sprite.each {|sprite| sprite.dispose } end #-------------------------------------------------------------------------- # ● Dispose Window #-------------------------------------------------------------------------- def dispose_windows return if @command_window == nil @skill_window.each {|sprite| sprite.dispose } @command_window.dispose @actor_window.dispose @help_window.dispose end #-------------------------------------------------------------------------- # ● Dispose List Layout #-------------------------------------------------------------------------- def dispose_list_layout return if @list_layout == nil @list_layout.dispose @type_layout.dispose @list_layout = nil end #-------------------------------------------------------------------------- # ● Dispose Members Status #-------------------------------------------------------------------------- def dispose_members_status return if @members_status == nil @actor_status.dispose @actor_skill_status.dispose @members_status.each {|sprite| sprite.dispose } end #-------------------------------------------------------------------------- # ● Dispose Type Name #-------------------------------------------------------------------------- def dispose_type_name @type_name.bitmap.dispose @type_name.dispose end end #============================================================================== # ■ Scene Skill #============================================================================== class Scene_Skill #-------------------------------------------------------------------------- # ● Update Sprites #-------------------------------------------------------------------------- def update_sprites update_background update_particles update_actor_status update_slide_item update_members_status update_windows end #-------------------------------------------------------------------------- # ● Update Background #-------------------------------------------------------------------------- def update_background return if @background == nil @background.ox += @background_scroll[0] @background.oy += @background_scroll[1] end #-------------------------------------------------------------------------- # ● Update Particles #-------------------------------------------------------------------------- def update_particles return if @particles_sprite == nil @particles_sprite.each {|sprite| sprite.update } end #-------------------------------------------------------------------------- # ● Update Windows #-------------------------------------------------------------------------- def update_windows @press_lag -= 1 if @press_lag > 0 return if @command_window == nil for skw in @skill_window skw.update unless @press_lag > 0 if skw.windows_index == @command_window.index skw.active = true if @phase == 0 skw.index = 0 if skw.index < 0 or skw.index >= skw.item_max end skw.visible = true else skw.visible = false skw.active = false end end #@skill_window[@command_window.index].update @command_window.update @actor_window.update update_actor_window_slide update_skill_list_slide end #-------------------------------------------------------------------------- # ● Update Skill List Slide #-------------------------------------------------------------------------- def update_skill_list_slide return if @phase == 999 if @actor_window.active or !@command_window.active if @command_window.x > @skill_list_slide_range[1] @command_window.x -= 15 @command_window.x = @skill_list_slide_range[1] if @command_window.x < @skill_list_slide_range[1] end else if @command_window.x < @skill_list_slide_range[0] @command_window.x += 15 @command_window.x = @skill_list_slide_range[0] if @command_window.x > @skill_list_slide_range[0] end end @type_layout.x = @command_window.x end #-------------------------------------------------------------------------- # ● Update Actor Window Slide #-------------------------------------------------------------------------- def update_actor_window_slide if @actor_window.active if @actor_window.x < @actor_window_slide_range[0] @actor_window.x += 15 @actor_window.contents_opacity += 23 if @actor_window.x >= @actor_window_slide_range[0] @actor_window.x = @actor_window_slide_range[0] @actor_window.contents_opacity = 255 end end else if @actor_window.x >= @actor_window_slide_range[1] @actor_window.x -= 15 @actor_window.contents_opacity -= 3 if @actor_window.x <= @actor_window_slide_range[1] @actor_window.x = @actor_window_slide_range[1] @actor_window.contents_opacity = 0 end end end end #-------------------------------------------------------------------------- # ● Update Actor Status #-------------------------------------------------------------------------- def update_actor_status refresh_actor_status(true) if @actor_window_index_old != @actor_window.index end #-------------------------------------------------------------------------- # ● Refresh Actor Status #-------------------------------------------------------------------------- def refresh_actor_status(reset = false) # @actor = $game_party.members[@actor_window.index] # @actor_window_index_old = @actor_window.index end #-------------------------------------------------------------------------- # ● Update Slide Item #-------------------------------------------------------------------------- def update_slide_item if @phase == 0 @command_window.contents_opacity += 10 else @command_window.contents_opacity -= 10 if @command_window.contents_opacity > 160 end @type_layout.opacity = @command_window.contents_opacity @type_name.opacity = @skill_window[@command_window.index].contents_opacity if @phase == 1 @skill_window[@command_window.index].contents_opacity += 5 @list_layout.opacity += 5 else @skill_window[@command_window.index].contents_opacity -= 10 if @skill_window[@command_window.index].contents_opacity > 165 @list_layout.opacity -= 10 if @list_layout.opacity > 160 end if @skill_window[@command_window.index].x > @item_slide_range[0] @skill_window[@command_window.index].x -= 3 @list_layout.x -= 3 if @skill_window[@command_window.index].x <= @item_slide_range[0] @skill_window[@command_window.index].x = @item_slide_range[0] @list_layout.x = @list_layout_slide_range[0] end end end #-------------------------------------------------------------------------- # ● Update Members Status #-------------------------------------------------------------------------- def update_members_status for members in @members_status members.update(@actor_window.active,@actor_window.index) @actor_2 = members.actor if members.current_actor end @actor_2 = @actor if @actor_2 == nil @actor_skill_status.update @actor_status.update(@actor_window.active,@actor_2) #@members_status.each {|sprite| sprite.update(@actor_window.active,@actor_window.index) } end end #============================================================================== # ■ Scene_Skill #============================================================================== class Scene_Skill #-------------------------------------------------------------------------- # ● Update #-------------------------------------------------------------------------- def update unless @skill_window[@command_window.index].index < 0 @item_pre_index = @skill_window[@command_window.index].index end update_command update_sprites end #-------------------------------------------------------------------------- # ● Show Sub Window #-------------------------------------------------------------------------- def show_sub_window(window) window.show.activate end #-------------------------------------------------------------------------- # ● Hide Sub Window #-------------------------------------------------------------------------- def hide_sub_window(window) window.hide.deactivate activate_item_window end #-------------------------------------------------------------------------- # ● Determine Item #-------------------------------------------------------------------------- def determine_item if item.for_friend? @phase = 2 show_sub_window(@actor_window) @actor_window.select_for_item(item) $game_temp.item_scope = @skill_window[@command_window.index].item.scope rescue nil else use_item activate_item_window end end #-------------------------------------------------------------------------- # ● ON Item OK #-------------------------------------------------------------------------- def on_item_ok return if @press_time > 1 @actor.last_skill.object = item determine_item end #-------------------------------------------------------------------------- # ● Item #-------------------------------------------------------------------------- def item @skill_window[@command_window.index].item end #-------------------------------------------------------------------------- # ● Use Item #-------------------------------------------------------------------------- def use_item super @skill_window[@command_window.index].refresh if can_refresh_item_window? end #-------------------------------------------------------------------------- # ● Activate Item Window #-------------------------------------------------------------------------- def activate_item_window @skill_window[@command_window.index].refresh if can_refresh_item_window? @skill_window[@command_window.index].activate end #-------------------------------------------------------------------------- # ● On Item Cancel #-------------------------------------------------------------------------- def on_item_cancel @skill_window[@command_window.index].unselect @command_window.activate end #-------------------------------------------------------------------------- # ● Can Refresh Item Window #-------------------------------------------------------------------------- def can_refresh_item_window? return true if @actor.mp < @skill_window[@command_window.index].item.mp_cost return true if @actor.tp < @skill_window[@command_window.index].item.tp_cost return false end end #============================================================================== # ■ Scene_Item #============================================================================== class Scene_Skill #-------------------------------------------------------------------------- # ● Update Command #-------------------------------------------------------------------------- def update_command @skill_window[@command_window.index].index = @item_pre_index if @phase == 0 update_main_command elsif @phase == 1 update_item_window elsif @phase == 2 update_target_window end update_active end #-------------------------------------------------------------------------- # ● Command Skill #-------------------------------------------------------------------------- def command_skill @skill_window[@command_window.index].activate @skill_window[@command_window.index].select_last #@item_window.activate #@item_window.select_last end #-------------------------------------------------------------------------- # ● Update Active #-------------------------------------------------------------------------- def update_active if @phase == 0 @skill_window[@command_window.index].active = false @command_window.active = true @actor_window.active = false elsif @phase == 1 @skill_window[@command_window.index].active = true @command_window.active = false @actor_window.active = false elsif @phase == 2 @skill_window[@command_window.index].active = false @command_window.active = false @actor_window.active = true end end #-------------------------------------------------------------------------- # ● Update Main Command #-------------------------------------------------------------------------- def update_main_command reset_item_index if Input.trigger?(:C) and @scene_active Sound.play_ok @phase = 1 @press_time = 2 @press_lag = 2 @skill_window[@command_window.index].index = 0 if @skill_window[@command_window.index].index == -1 elsif Input.trigger?(:B) return_scene end end #-------------------------------------------------------------------------- # ● Return Scene #-------------------------------------------------------------------------- def return_scene Sound.play_cancel SceneManager.return end #-------------------------------------------------------------------------- # ● ON Actor Charge #-------------------------------------------------------------------------- def on_actor_change @phase = 999 $game_temp.actor_menu_temp = @actor SceneManager.goto(Scene_Skill) end #-------------------------------------------------------------------------- # ● Reset Item Index #-------------------------------------------------------------------------- def reset_item_index return if @old_command_index == @command_window.index return if @command_window.index == -1 @old_command_index = @command_window.index refresh_type_name reset_item_position end #-------------------------------------------------------------------------- # ● Reset Item Position #-------------------------------------------------------------------------- def reset_item_position @skill_window[@command_window.index].x = @item_slide_range[1] @skill_window[@command_window.index].contents_opacity = 160 @list_layout.x = @list_layout_slide_range[1] @list_layout.opacity = 160 end end #============================================================================== # ■ Scene_Skill #============================================================================== class Scene_Skill #-------------------------------------------------------------------------- # ● Update Item Window #-------------------------------------------------------------------------- def update_item_window @press_time -= 1 if @press_time > 0 update_item_command update_index_type end #-------------------------------------------------------------------------- # ● Update Main Command #-------------------------------------------------------------------------- def update_item_command if Input.trigger?(:B) @phase = 0 Sound.play_cancel end end #-------------------------------------------------------------------------- # ● Update #-------------------------------------------------------------------------- def update_index_type return if @index_max <= 0 return if @command_window == nil if Input.trigger?(:RIGHT) add_index(1) elsif Input.trigger?(:LEFT) add_index(-1) end end #-------------------------------------------------------------------------- # ● Add Index #-------------------------------------------------------------------------- def add_index(value) Sound.play_cursor @command_window.index += value @command_window.index = 0 if @command_window.index > @index_max @command_window.index = @index_max if @command_window.index < 0 reset_item_index end end #============================================================================== # ■ Scene_Skill #============================================================================== class Scene_Skill #-------------------------------------------------------------------------- # ● Update Item Window #-------------------------------------------------------------------------- def update_target_window update_target_command end #-------------------------------------------------------------------------- # ● Update Main Command #-------------------------------------------------------------------------- def update_target_command if Input.trigger?(:B) @phase = 1 @skill_window[@command_window.index].index = @item_pre_index end end end #============================================================================== # ■ Game_Temp #============================================================================== class Game_Temp #-------------------------------------------------------------------------- # ● Execute Pre Cache Skill Menu #-------------------------------------------------------------------------- def execute_pre_cache_equip_menu @pre_cache_equip_menu = [] @pre_cache_equip_menu.push(Cache.menu_equip("Background")) @pre_cache_equip_menu.push(Cache.menu_equip("Layout_U")) @pre_cache_equip_menu.push(Cache.menu_equip("Layout_R")) @pre_cache_equip_menu.push(Cache.menu_equip("Layout_D")) @pre_cache_equip_menu.push(Cache.menu_equip("Layout_L")) @pre_cache_equip_menu.push(Cache.menu_equip("Par_Number")) end end #============================================================================== # ■ Scene_Skill #============================================================================== class Scene_Equip include MOG_MENU_EQUIP include MOG_MENU_BASE #-------------------------------------------------------------------------- # ● Main #-------------------------------------------------------------------------- def main execute_setup execute_loop execute_dispose end #-------------------------------------------------------------------------- # ● Execute Setup #-------------------------------------------------------------------------- def execute_setup @actor = $game_temp.actor_menu_temp @actor_old = @actor @phase = 0 create_sprites end #-------------------------------------------------------------------------- # ● Execute Lopp #-------------------------------------------------------------------------- def execute_loop Graphics.transition(10) loop do Input.update update Graphics.update break if SceneManager.scene != self end end end #============================================================================== # ■ Window_EquipStatus #============================================================================== class Window_EquipStatus < Window_Base #-------------------------------------------------------------------------- # ● Initializee #-------------------------------------------------------------------------- def initialize(x, y) super(x, y, window_width, window_height) @actor = nil @temp_actor = nil self.visible = false end #-------------------------------------------------------------------------- # ● Window Width #-------------------------------------------------------------------------- def window_width return 208 end #-------------------------------------------------------------------------- # ● Window Height #-------------------------------------------------------------------------- def window_height return 296 end #-------------------------------------------------------------------------- # ● Visible Line Number #-------------------------------------------------------------------------- def visible_line_number return 1 end #-------------------------------------------------------------------------- # ● Actor #-------------------------------------------------------------------------- def actor=(actor) return if @actor == actor @actor = actor end #-------------------------------------------------------------------------- # ● Refresh #-------------------------------------------------------------------------- def refresh contents.clear end #-------------------------------------------------------------------------- # ● Set Temp Actor #-------------------------------------------------------------------------- def set_temp_actor(temp_actor) return if @temp_actor == temp_actor @temp_actor = temp_actor $game_temp.temp_actor_equip = @temp_actor end end #============================================================================== # ■ Window_EquipCommand #============================================================================== class Window_EquipCommand < Window_HorzCommand #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- def initialize(x, y, width) @window_width = width super(x, y) end #-------------------------------------------------------------------------- # ● Window Width #-------------------------------------------------------------------------- def window_width @window_width end #-------------------------------------------------------------------------- # ● Col Max #-------------------------------------------------------------------------- def col_max return 3 end #-------------------------------------------------------------------------- # ● Make Command List #-------------------------------------------------------------------------- def make_command_list add_command(Vocab::equip2, :equip) add_command(Vocab::optimize, :optimize) add_command(Vocab::clear, :clear) end #-------------------------------------------------------------------------- # ● Draw Item #-------------------------------------------------------------------------- def draw_item(index) end end #============================================================================== # ■ Window_EquipSlot #============================================================================== class Window_EquipSlot < Window_Selectable attr_reader :status_window attr_reader :item_window include MOG_MENU_EQUIP #-------------------------------------------------------------------------- # ● Set Equip Font #-------------------------------------------------------------------------- def set_font_equip return if self.disposed? return if self.contents == nil self.contents.font.size = FONT_SIZE self.contents.font.bold = FONT_BOLD end #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- def initialize(x, y, width) super(x, y, width, window_height) @actor = nil refresh end #-------------------------------------------------------------------------- # ● Window Height #-------------------------------------------------------------------------- def window_height fitting_height(visible_line_number) end #-------------------------------------------------------------------------- # ● Visible Line Number #-------------------------------------------------------------------------- def visible_line_number return 5 end #-------------------------------------------------------------------------- # ● Actor #-------------------------------------------------------------------------- def actor=(actor) return if @actor == actor @actor = actor refresh end #-------------------------------------------------------------------------- # ● Update #-------------------------------------------------------------------------- def update super @item_window.slot_id = index if @item_window end #-------------------------------------------------------------------------- # ● Item Max #-------------------------------------------------------------------------- def item_max @actor ? @actor.equip_slots.size : 0 end #-------------------------------------------------------------------------- # ● Item #-------------------------------------------------------------------------- def item @actor ? @actor.equips[index] : nil end #-------------------------------------------------------------------------- # ● Draw Item #-------------------------------------------------------------------------- def draw_item(index) return unless @actor rect = item_rect_for_text(index) change_color(system_color, enable?(index)) set_font_equip draw_item_name(@actor.equips[index], rect.x + 92, rect.y, enable?(index)) end #-------------------------------------------------------------------------- # ● Slot Name #-------------------------------------------------------------------------- def slot_name(index) @actor ? Vocab::etype(@actor.equip_slots[index]) : "" end #-------------------------------------------------------------------------- # ● Enable #-------------------------------------------------------------------------- def enable?(index) @actor ? @actor.equip_change_ok?(index) : false end #-------------------------------------------------------------------------- # ● Current Item Enabled #-------------------------------------------------------------------------- def current_item_enabled? enable?(index) end #-------------------------------------------------------------------------- # ● Status Window #-------------------------------------------------------------------------- def status_window=(status_window) @status_window = status_window call_update_help end #-------------------------------------------------------------------------- # ● Item Window #-------------------------------------------------------------------------- def item_window=(item_window) @item_window = item_window update end #-------------------------------------------------------------------------- # ● Update Help #-------------------------------------------------------------------------- def update_help super @help_window.set_item(item) if @help_window $game_temp.temp_actor_equip = nil if @status_window end end #============================================================================== # ■ Window_EquipItem #============================================================================== class Window_EquipItem_Menu < Window_ItemList attr_reader :status_window attr_accessor :windows_index include MOG_MENU_EQUIP #-------------------------------------------------------------------------- # ● Set Equip Font #-------------------------------------------------------------------------- def set_font_equip return if self.disposed? return if self.contents == nil self.contents.font.size = FONT_SIZE self.contents.font.bold = FONT_BOLD end #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- def initialize(x, y, width, height) super @actor = nil @slot_id = 0 @windows_index = 0 self.visible = false self.opacity = 0 end #-------------------------------------------------------------------------- # ● Col Max #-------------------------------------------------------------------------- def col_max return 1 end #-------------------------------------------------------------------------- # ● Col Max #-------------------------------------------------------------------------- def col_max return 1 end #-------------------------------------------------------------------------- # ● Actor #-------------------------------------------------------------------------- def actor=(actor) return if @actor == actor @actor = actor self.oy = 0 end #-------------------------------------------------------------------------- # ● Setup #-------------------------------------------------------------------------- def setup(actor,equip_type,index) @actor = actor @slot_id = equip_type @windows_index = index refresh end #-------------------------------------------------------------------------- # ● Slot ID #-------------------------------------------------------------------------- def slot_id=(slot_id) end #-------------------------------------------------------------------------- # ● Include? #-------------------------------------------------------------------------- def include?(item) return true if item == nil return false unless item.is_a?(RPG::EquipItem) return false if @slot_id < 0 return false if item.etype_id != @actor.equip_slots[@slot_id] return @actor.equippable?(item) end #-------------------------------------------------------------------------- # ● Enable? #-------------------------------------------------------------------------- def enable?(item) return true end #-------------------------------------------------------------------------- # ● Select Last #-------------------------------------------------------------------------- def select_last end #-------------------------------------------------------------------------- # ● Status Window #-------------------------------------------------------------------------- def status_window=(status_window) @status_window = status_window call_update_help end #-------------------------------------------------------------------------- # ● Update Help #-------------------------------------------------------------------------- def update_help super if @actor && @status_window temp_actor = Marshal.load(Marshal.dump(@actor)) temp_actor.force_change_equip(@slot_id, item) $game_temp.temp_actor_equip = temp_actor end end #-------------------------------------------------------------------------- # ● Draw Item #-------------------------------------------------------------------------- def draw_item(index) item = @data[index] if item set_font_equip rect = item_rect(index) rect.width -= 4 draw_item_name(item, rect.x, rect.y, enable?(item)) draw_item_number(rect, item) end end #-------------------------------------------------------------------------- # ● Draw Item Number #-------------------------------------------------------------------------- def draw_item_number(rect, item) draw_text(rect, sprintf(": %2d", $game_party.item_number(item)), 2) end end #============================================================================== # ■ Actor Menu Status #============================================================================== class Actor_Equip_Status include MOG_EQUIP_STATUS #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- def initialize(actor) @actor = actor @actor_old = @actor $game_temp.temp_actor_equip = nil @old_temp_actor = $game_temp.temp_actor_equip set_old_parameter create_sprites end #-------------------------------------------------------------------------- # ● Create Sprites #-------------------------------------------------------------------------- def create_sprites @parameter_number = $game_temp.pre_cache_equip_menu[5] @parameter_cw = @parameter_number.width / 11 @parameter_ch = @parameter_number.height / 3 create_layout create_face create_parameter create_name end #-------------------------------------------------------------------------- # ● Dispose #-------------------------------------------------------------------------- def dispose dispose_layout dispose_face dispose_parameter dispose_name end #-------------------------------------------------------------------------- # ● Dispose Layout #-------------------------------------------------------------------------- def dispose_layout @layout.dispose end #-------------------------------------------------------------------------- # ● Dispose Face #-------------------------------------------------------------------------- def dispose_face @face.dispose end #-------------------------------------------------------------------------- # ● Dispose Parameter #-------------------------------------------------------------------------- def dispose_parameter @parameter.bitmap.dispose @parameter.dispose end #-------------------------------------------------------------------------- # ● Dispose Name #-------------------------------------------------------------------------- def dispose_name @name.bitmap.dispose @name.dispose end #-------------------------------------------------------------------------- # ● Create Layout #-------------------------------------------------------------------------- def create_layout @layout = Sprite.new @layout.bitmap = $game_temp.pre_cache_equip_menu[4] @org_pos = [LAYOUT_POSITION[0],LAYOUT_POSITION[1]] @layout.x = @org_pos[0] - 150 @layout.y = @org_pos[1] @layout.z = 10 @layout.opacity = 0 @slide_range = (@org_pos[0] - 150) end #-------------------------------------------------------------------------- # ● Create Parameter #-------------------------------------------------------------------------- def create_parameter @parameter = Sprite.new @parameter.bitmap = Bitmap.new(@layout.bitmap.width,@layout.bitmap.height) @org_pos_par = [@org_pos[0] + PAR_POSITION[0], @org_pos[1] + PAR_POSITION[1]] @parameter.x = @org_pos_par[0] - 150 @parameter.y = @org_pos_par[1] @parameter.z = 11 @parameter.opacity = 0 refresh_parameter end #-------------------------------------------------------------------------- # ● Create Face #-------------------------------------------------------------------------- def create_face @face = Sprite.new @org_pos_face = [@org_pos[0] + FACE_POSITION[0], @org_pos[1] + FACE_POSITION[1]] @face.x = @org_pos_face[0] - 150 @face.y = @org_pos_face[1] @face.z = 11 @face.opacity = 0 refresh_face end #-------------------------------------------------------------------------- # ● Create Name #-------------------------------------------------------------------------- def create_name @name = Sprite.new @name.bitmap = Bitmap.new(140,32) @name.bitmap.font.size = FONT_SIZE @name.bitmap.font.bold = FONT_BOLD @org_pos_name = [@org_pos[0] + NAME_POSITION[0], @org_pos[1] + NAME_POSITION[1]] @name.x = @org_pos_name[0] - 150 @name.y = @org_pos_name[1] @name.z = 11 @name.opacity = 0 refresh_name end #-------------------------------------------------------------------------- # ● Set Old Parameter #-------------------------------------------------------------------------- def set_old_parameter @par = [] if @par == nil @par.clear @par = [ @actor.param(0),@actor.param(1),@actor.param(2),@actor.param(3), @actor.param(4),@actor.param(5),@actor.param(6),@actor.param(7), @old_temp_actor ] end #-------------------------------------------------------------------------- # ● Can Refresh Parameter #-------------------------------------------------------------------------- def can_refresh_parameter? return true if @par[0] != @actor.param(0) return true if @par[1] != @actor.param(1) return true if @par[2] != @actor.param(2) return true if @par[3] != @actor.param(3) return true if @par[4] != @actor.param(4) return true if @par[5] != @actor.param(5) return true if @par[6] != @actor.param(6) return true if @par[7] != @actor.param(7) return true if @old_temp_actor != $game_temp.temp_actor_equip return false end #-------------------------------------------------------------------------- # ● Refresh Name #-------------------------------------------------------------------------- def refresh_name @name.bitmap.clear @name.bitmap.draw_text(0,0,140,32,@actor.name.to_s,0) end #-------------------------------------------------------------------------- # ● Create Face #-------------------------------------------------------------------------- def refresh_parameter set_old_parameter @parameter.bitmap.clear @old_temp_actor = $game_temp.temp_actor_equip x = 180 for p in 0...8 y = 24 * p refresh_number(@parameter,@parameter_number,p,@parameter_cw,@parameter_ch,x,y,0) end if $game_temp.temp_actor_equip != nil x = 180 - (@parameter_cw * 7) for p in 0...8 y = 24 * p refresh_number(@parameter,@parameter_number,p,@parameter_cw,@parameter_ch,x,y,1) end end end #-------------------------------------------------------------------------- # ● Refresh Number #-------------------------------------------------------------------------- def refresh_number(sprite,image,p,number_cw,number_ch,x,y,type) value = @actor.param(p) new_value = 0 ch = 0 if type == 1 if $game_temp.temp_actor_equip != nil new_value = $game_temp.temp_actor_equip.param(p) end d_value = new_value - value if d_value < 0 ch = 2 elsif d_value > 0 ch = 1 else ch = 0 end value = new_value end draw_arrow(sprite,image,number_cw,number_ch,x,y,ch) draw_number(sprite,image,value,number_cw,number_ch,x,y,ch) end #-------------------------------------------------------------------------- # ● Draw Arrow #-------------------------------------------------------------------------- def draw_arrow(sprite,image,number_cw,number_ch,x,y,ch) nsrc_rect = Rect.new(number_cw * 10, number_ch * ch , number_cw , number_ch) sprite.bitmap.blt(x + number_cw, y, image, nsrc_rect) end #-------------------------------------------------------------------------- # ● Draw Number #-------------------------------------------------------------------------- def draw_number(sprite,image,value,number_cw,number_ch,x,y,ch) number = value.truncate.abs.to_s.split(//) x2 = -number_cw * number.size for i in 0..number.size - 1 number_abs = number[i].to_i nsrc_rect = Rect.new(number_cw * number_abs, number_ch * ch , number_cw , number_ch) sprite.bitmap.blt(x + x2 + (number_cw * i), y, image, nsrc_rect) end end #-------------------------------------------------------------------------- # ● Refresh Face #-------------------------------------------------------------------------- def refresh_face face_name = "Face" + @actor.id.to_s @face.bitmap = Cache.menu(face_name.to_s) end #-------------------------------------------------------------------------- # ● Update Move #-------------------------------------------------------------------------- def update_move update_slide(0,@layout,@layout.x,@org_pos[0]) update_slide(1,@layout,@layout.y,@org_pos[1]) update_slide(0,@parameter,@parameter.x,@org_pos_par[0]) update_slide(1,@parameter,@parameter.y,@org_pos_par[1]) update_slide(0,@face,@face.x,@org_pos_face[0]) update_slide(1,@face,@face.y,@org_pos_face[1]) update_slide(0,@name,@name.x,@org_pos_name[0]) update_slide(1,@name,@name.y,@org_pos_name[1]) end #-------------------------------------------------------------------------- # ● Update Slide #-------------------------------------------------------------------------- def update_slide(type,sprite,cp,np) sprite.opacity += 5 sp = 3 + ((cp - np).abs / 10) if cp > np cp -= sp cp = np if cp < np elsif cp < np cp += sp cp = np if cp > np end sprite.x = cp if type == 0 sprite.y = cp if type == 1 end #-------------------------------------------------------------------------- # ● Refresh All #-------------------------------------------------------------------------- def refresh_all(actor) @actor = actor refresh_parameter refresh_face refresh_name end #-------------------------------------------------------------------------- # ● Update #-------------------------------------------------------------------------- def update(actor) update_move refresh_all(actor) if actor != @actor refresh_parameter if can_refresh_parameter? end end #============================================================================== # ■ Scene_Equip #============================================================================== class Scene_Equip #-------------------------------------------------------------------------- # ● Create Sprites #-------------------------------------------------------------------------- def create_sprites create_menu_background create_layout create_particles create_help_window create_status_window create_command_window create_slot_window create_item_window create_actor_status set_sprite_position end #-------------------------------------------------------------------------- # ● Set Sprite Position #-------------------------------------------------------------------------- def set_sprite_position @status_window.opacity = 0 @command_window.opacity = 0 @slot_window.opacity = 0 @help_window.opacity = 0 @status_window.contents_opacity = 0 @command_window.contents_opacity = 0 @slot_window.contents_opacity = 0 @help_window.contents_opacity = 0 @layout2.opacity = 0 @layout3.opacity = 0 @layout4.opacity = 0 @org_pos_help = [@help_window.x,@help_window.y] @help_window.x = @org_pos_help[0] @help_window.y = @org_pos_help[1] + 150 @org_pos_com = [@command_window.x,@command_window.y] @command_window.x = @org_pos_com[0] @command_window.y = @org_pos_com[1] - 150 @org_pos_slot = [@slot_window.x,@slot_window.y] @slot_window.x = @org_pos_slot[0] + 150 @slot_window.y = @org_pos_slot[1] @layout2.y = -150 @layout3.x = 150 @layout4.y = 150 end #-------------------------------------------------------------------------- # ● Create Actor Status #-------------------------------------------------------------------------- def create_actor_status @actor_status = Actor_Equip_Status.new(@actor) end #-------------------------------------------------------------------------- # ● Create Menu Background #-------------------------------------------------------------------------- def create_menu_background @background = Plane.new @background.bitmap = $game_temp.pre_cache_equip_menu[0] @background.z = 0 @background_scroll = [BACKGROUND_SCROLL_SPEED[0],BACKGROUND_SCROLL_SPEED[1]] end #-------------------------------------------------------------------------- # ● Create Layout #-------------------------------------------------------------------------- def create_layout @layout2 = Sprite.new @layout2.bitmap = $game_temp.pre_cache_equip_menu[1] # U @layout2.z = 3 @layout3 = Sprite.new @layout3.bitmap = $game_temp.pre_cache_equip_menu[2] # R @layout3.z = 3 @layout4 = Sprite.new @layout4.bitmap = $game_temp.pre_cache_equip_menu[3] # D @layout4.z = 3 end #-------------------------------------------------------------------------- # ● Create Particles #-------------------------------------------------------------------------- def create_particles @particles_sprite =[] for i in 0...NUMBER_OF_PARTICLES @particles_sprite.push(Particles_Menu.new(nil)) end end #-------------------------------------------------------------------------- # ● Create Help Window #-------------------------------------------------------------------------- def create_help_window @help_window = Window_Help.new @help_window.x = 0 @help_window.y = Graphics.height - @help_window.height end #-------------------------------------------------------------------------- # ● Create Status Window #-------------------------------------------------------------------------- def create_status_window @status_window = Window_EquipStatus.new(0, @help_window.height) @status_window.viewport = @viewport @status_window.actor = @actor @status_window.y = 48 end #-------------------------------------------------------------------------- # ● Create Command Window #-------------------------------------------------------------------------- def create_command_window @command_window = Window_EquipCommand.new(208+30, 0+30, 336) @command_window.help_window = @help_window @command_window.set_handler(:equip, method(:command_equip)) @command_window.set_handler(:optimize, method(:command_optimize)) @command_window.set_handler(:clear, method(:command_clear)) @command_window.set_handler(:cancel, method(:return_scene)) @command_window.set_handler(:pagedown, method(:next_actor)) @command_window.set_handler(:pageup, method(:prev_actor)) end #-------------------------------------------------------------------------- # ● Create Slot Window #-------------------------------------------------------------------------- def create_slot_window wx = @status_window.width wy = @command_window.y + @command_window.height + 5 ww = 544 - @status_window.width @slot_window = Window_EquipSlot.new(wx+30, wy, ww) @slot_window.help_window = @help_window @slot_window.status_window = @status_window @slot_window.actor = @actor @slot_window.set_handler(:ok, method(:on_slot_ok)) @slot_window.set_handler(:cancel, method(:on_slot_cancel)) @slot_window.set_handler(:pagedown, method(:next_actor)) @slot_window.set_handler(:pageup, method(:prev_actor)) end #-------------------------------------------------------------------------- # ● Create Item Window #-------------------------------------------------------------------------- def create_item_window @equip_window = [] index = 0 window_max = 5 for item in 0...window_max wx = @slot_window.x wy = @slot_window.y + @slot_window.height + 5 ww = @slot_window.width wh = 280#@slot_window.height - 5 @equip_window.push(Window_EquipItem_Menu.new(wx, wy, ww, wh)) @equip_window[item].setup(@actor,item, index) @equip_window[item].visible = false @equip_window[item].help_window = @help_window @equip_window[item].status_window = @status_window @equip_window[item].actor = @actor @equip_window[item].set_handler(:ok, method(:on_item_ok)) @equip_window[item].set_handler(:cancel, method(:on_item_cancel)) @equip_window[item].opacity = 0 @org_pos_equip = [@equip_window[item].x,@equip_window[item].y] index += 1 end end end #============================================================================== # ■ Scene_Equip #============================================================================== class Scene_Equip #-------------------------------------------------------------------------- # ● Execute Dispose #-------------------------------------------------------------------------- def execute_dispose Graphics.freeze dispose_background dispose_layout dispose_particles dispose_window dispose_actor_status end #-------------------------------------------------------------------------- # ● Dispose Background #-------------------------------------------------------------------------- def dispose_background return if @background == nil @background.dispose @background = nil end #-------------------------------------------------------------------------- # ● Dispose Layout #-------------------------------------------------------------------------- def dispose_layout return if @layout2 == nil @layout2.dispose @layout3.dispose @layout4.dispose @layout2 = nil end #-------------------------------------------------------------------------- # ● Dispose Particles #-------------------------------------------------------------------------- def dispose_particles return if @particles_sprite == nil @particles_sprite.each {|sprite| sprite.dispose } end #-------------------------------------------------------------------------- # ● Dispose Window #-------------------------------------------------------------------------- def dispose_window @status_window.dispose @command_window.dispose @slot_window.dispose @equip_window.each {|sprite| sprite.dispose } @help_window.dispose end #-------------------------------------------------------------------------- # ● Dispose Actor Status #-------------------------------------------------------------------------- def dispose_actor_status return if @actor_status == nil @actor_status.dispose end end #============================================================================== # ■ Scene_Equip #============================================================================== class Scene_Equip #-------------------------------------------------------------------------- # ● Update Sprites #-------------------------------------------------------------------------- def update_sprites update_actor_status update_background update_particles update_window update_move end #-------------------------------------------------------------------------- # ● Update Move #-------------------------------------------------------------------------- def update_move update_slide(0,@command_window,@org_pos_com[0],0) update_slide(1,@command_window,@org_pos_com[1],0) update_slide(0,@help_window,@org_pos_help[0],0) update_slide(1,@help_window,@org_pos_help[1],0) update_slide(0,@slot_window,@org_pos_slot[0],0) update_slide(1,@slot_window,@org_pos_slot[1],0) update_slide(0,@layout2,0,1) update_slide(1,@layout2,0,1) update_slide(0,@layout3,0,1) update_slide(1,@layout3,0,1) update_slide(0,@layout4,0,1) update_slide(1,@layout4,0,1) end #-------------------------------------------------------------------------- # ● Update Slide #-------------------------------------------------------------------------- def update_slide(type,sprite,np,op_type) if op_type == 0 sprite.contents_opacity += 5 else sprite.opacity += 5 end cp = type == 0 ? sprite.x : sprite.y sp = 3 + ((cp - np).abs / 10) if cp > np cp -= sp cp = np if cp < np elsif cp < np cp += sp cp = np if cp > np end sprite.x = cp if type == 0 sprite.y = cp if type == 1 end #-------------------------------------------------------------------------- # ● Update Actor Status #-------------------------------------------------------------------------- def update_actor_status return if @actor_status == nil @actor_status.update(@actor) end #-------------------------------------------------------------------------- # ● Update Background #-------------------------------------------------------------------------- def update_background return if @background == nil @background.ox += @background_scroll[0] @background.oy += @background_scroll[1] end #-------------------------------------------------------------------------- # ● Update Particles #-------------------------------------------------------------------------- def update_particles return if @particles_sprite == nil @particles_sprite.each {|sprite| sprite.update } end #-------------------------------------------------------------------------- # ● Update Window #-------------------------------------------------------------------------- def update_window @status_window.update @command_window.update @slot_window.update for equip in @equip_window update_slide(0,equip,@org_pos_equip[0],0) update_slide(1,equip,@org_pos_equip[1],0) if equip.windows_index == @slot_window.index equip.visible = true equip.update else equip.visible = false end end end end #============================================================================== # ■ Scene_Equip #============================================================================== class Scene_Equip #-------------------------------------------------------------------------- # ● Update #-------------------------------------------------------------------------- def update update_sprites update_command end #-------------------------------------------------------------------------- # ● Command Equip #-------------------------------------------------------------------------- def command_equip @slot_window.activate @slot_window.select(0) end #-------------------------------------------------------------------------- # ● Command Optimize #-------------------------------------------------------------------------- def command_optimize Sound.play_equip @actor.optimize_equipments @status_window.refresh @slot_window.refresh @command_window.activate end #-------------------------------------------------------------------------- # ● Command Clear #-------------------------------------------------------------------------- def command_clear Sound.play_equip @actor.clear_equipments @status_window.refresh @slot_window.refresh @command_window.activate end #-------------------------------------------------------------------------- # ● On Slot OK #-------------------------------------------------------------------------- def on_slot_ok @equip_window[@slot_window.index].activate @equip_window[@slot_window.index].select(0) end #-------------------------------------------------------------------------- # ● On Slot Cancel #-------------------------------------------------------------------------- def on_slot_cancel @slot_window.unselect @command_window.activate end #-------------------------------------------------------------------------- # ● On Item OK #-------------------------------------------------------------------------- def on_item_ok Sound.play_equip @actor.change_equip(@slot_window.index, @equip_window[@slot_window.index].item) @slot_window.activate @slot_window.refresh @equip_window.each do |i| i.refresh; i.index = 0; i.unselect end end #-------------------------------------------------------------------------- # ● On Item Cancel #-------------------------------------------------------------------------- def on_item_cancel @slot_window.activate @equip_window[@slot_window.index].unselect end #-------------------------------------------------------------------------- # ● Return Scene #-------------------------------------------------------------------------- def return_scene Sound.play_cancel SceneManager.return end #-------------------------------------------------------------------------- # ● ON Actor Charge #-------------------------------------------------------------------------- def on_actor_change $game_temp.actor_menu_temp = @actor SceneManager.goto(Scene_Equip) end end #============================================================================== # ■ Scene_Equip #============================================================================== class Scene_Equip #-------------------------------------------------------------------------- # ● Update Command #-------------------------------------------------------------------------- def update_command end end #============================================================================== # ■ Game_Temp #============================================================================== class Game_Temp #-------------------------------------------------------------------------- # ● Execute Pre Cache Status Menu #-------------------------------------------------------------------------- def execute_pre_cache_status_menu @pre_cache_status_menu = [] @pre_cache_status_menu.push(Cache.menu_status("Background")) @pre_cache_status_menu.push(Cache.menu_status("Layout")) end end module MOG_STATUS_PARAMETER PICTURE_POS = [-105,0] METER_POSITION = [53+240,101+80] STATES_POSITION = [21,46] STATES_SCROLLING_ANIMATION = false MAX_PARAMETER_VALUE = 999 end #============================================================================== # ■ Status Parameter #============================================================================== class Status_Parameter include MOG_STATUS_PARAMETER #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- def initialize(actor) @actor = actor create_picture create_states create_meter end #-------------------------------------------------------------------------- # ● Create Picture #-------------------------------------------------------------------------- def create_picture @picture = Sprite.new pic_name = "Actor_S" + @actor.id.to_s @picture.bitmap = Cache.menu_status(pic_name.to_s) @picture.ox = @picture.bitmap.width / 2 pos = [Graphics.width,Graphics.height - @picture.bitmap.height] @pos_org_pic = [PICTURE_POS[0] + pos[0] ,PICTURE_POS[1] + pos[1]] @picture.x = @pos_org_pic[0] @picture.y = @pos_org_pic[1] + 150 @picture.opacity = 0 @picture.z = 3 end #-------------------------------------------------------------------------- # ● Create_States #-------------------------------------------------------------------------- def create_states @status_old = nil @status_flow = [-24,0] @status = Sprite.new @status.bitmap = Bitmap.new(24,24) @org_pos_states = [STATES_POSITION[0],STATES_POSITION[1]] @status.x = @org_pos_states[0] + 150 @status.y = @org_pos_states[1] @status.z = 11 @status.opacity = 0 end #-------------------------------------------------------------------------- # * Refresh States #-------------------------------------------------------------------------- def refresh_states check_icon_image @status_old = @actor.states @status_flow = [0,0] @actor_status.dispose if @actor_status != nil @states_size = @actor.states.size > 0 ? (26 * @actor.states.size) : 24 @actor_status = Bitmap.new(@states_size,24) index = 0 for i in @actor.states rect = Rect.new(i.icon_index % 16 * 24, i.icon_index / 16 * 24, 24, 24) @actor_status.blt(26 * index , 0, @icon_image, rect) index += 1 end end #-------------------------------------------------------------------------- # * Flow_Status #-------------------------------------------------------------------------- def flow_states return if @actor_status == nil @status.bitmap.clear return if @actor.states.size == 0 st_src_rect = Rect.new(@status_flow[0],0, 24,24) @status.bitmap.blt(0,0, @actor_status, st_src_rect) if STATES_SCROLLING_ANIMATION @status_flow[0] += 1 @status_flow[0] = -24 if @status_flow[0] >= @states_size + 2 else @status_flow[1] += 1 unless @actor.states.size <= 1 if @status_flow[1] > 30 @status_flow[1] = 0 @status_flow[0] += 26 @status_flow[0] = 0 if @status_flow[0] >= (@states_size - 0) end end end #-------------------------------------------------------------------------- # * Check Icon Image #-------------------------------------------------------------------------- def check_icon_image if @icon_image == nil or @icon_image.disposed? @icon_image = Cache.system("Iconset") end end #-------------------------------------------------------------------------- # * Create Meter #-------------------------------------------------------------------------- def create_meter @meter_image = Cache.menu_status("Par_Meter") @meter_cw = @meter_image.width / 3 @meter_ch = @meter_image.height / 4 @meter = Sprite.new @meter.bitmap = Bitmap.new(380,140) @org_pos_meter = [METER_POSITION[0],METER_POSITION[1]] @meter.x = @org_pos_meter[0] + 150 @meter.y = @org_pos_meter[1] @meter.z = 11 @meter.opacity = 0 @meter_flow = [0,@meter_cw * 2] refresh_meter end #-------------------------------------------------------------------------- # * Refresh Meter #-------------------------------------------------------------------------- def refresh_meter @meter.bitmap.clear max_par = MAX_PARAMETER_VALUE value = @actor.hp value_max = @actor.mhp pos = [0,0] draw_meter(value,value_max,0,pos[0],pos[1]) value = @actor.mp value_max = @actor.mmp pos = [120,0] draw_meter(value,value_max,1,pos[0],pos[1]) value = @actor.tp value_max = @actor.max_tp pos = [240,0] draw_meter(value,value_max,2,pos[0],pos[1]) value = @actor.atk value_max = max_par pos = [0,34] draw_meter(value,value_max,3,pos[0],pos[1]) value = @actor.mat value_max = max_par pos = [120,34] draw_meter(value,value_max,3,pos[0],pos[1]) value = @actor.agi value_max = max_par pos = [240,34] draw_meter(value,value_max,3,pos[0],pos[1]) value = @actor.def value_max = max_par pos = [0,68] draw_meter(value,value_max,3,pos[0],pos[1]) value = @actor.mdf value_max = max_par pos = [120,68] draw_meter(value,value_max,3,pos[0],pos[1]) value = @actor.luk value_max = max_par pos = [240,68] draw_meter(value,value_max,3,pos[0],pos[1]) @meter_flow[0] += 5 @meter_flow[0] = 0 if @meter_flow[0] > @meter_flow[1] end #-------------------------------------------------------------------------- # * Draw Meter #-------------------------------------------------------------------------- def draw_meter(value,value_max,type,x,y) value_max = 1 if value_max <= 0 #修改:攻防可以在999以上: value_max = value if value_max < value #end range = @meter_cw * value.truncate / value_max.truncate ch = @meter_ch * type meter_scr = Rect.new(@meter_flow[0],ch,range,@meter_ch) @meter.bitmap.blt(x,y,@meter_image,meter_scr) end #-------------------------------------------------------------------------- # ● Dispose #-------------------------------------------------------------------------- def dispose dispose_picture dispose_states dispose_meter end #-------------------------------------------------------------------------- # ● Dispose Picture #-------------------------------------------------------------------------- def dispose_picture @picture.bitmap.dispose @picture.dispose end #-------------------------------------------------------------------------- # ● Dispose States #-------------------------------------------------------------------------- def dispose_states return if @status == nil @status.bitmap.dispose @status.dispose if @actor_status != nil @actor_status.dispose @actor_status = nil end end #-------------------------------------------------------------------------- # ● Dispose Meter #-------------------------------------------------------------------------- def dispose_meter return if @meter == nil @meter.bitmap.dispose @meter.dispose end #-------------------------------------------------------------------------- # ● Update #-------------------------------------------------------------------------- def update update_slide(0,@picture,@pos_org_pic[0]) update_slide(1,@picture,@pos_org_pic[1]) update_slide(0,@status,@org_pos_states[0]) update_slide(1,@status,@org_pos_states[1]) update_slide(0,@meter,@org_pos_meter[0]) update_slide(1,@meter,@org_pos_meter[1]) refresh_states if @status_old != @actor.states refresh_meter flow_states end #-------------------------------------------------------------------------- # ● Update Slide #-------------------------------------------------------------------------- def update_slide(type,sprite,np) sprite.opacity += 5 cp = type == 0 ? sprite.x : sprite.y sp = 3 + ((cp - np).abs / 10) if cp > np cp -= sp cp = np if cp < np elsif cp < np cp += sp cp = np if cp > np end sprite.x = cp if type == 0 sprite.y = cp if type == 1 end end #~ #============================================================================== #~ # ■ Scene_Status #~ #============================================================================== #~ class Scene_Status #~ #~ #-------------------------------------------------------------------------- #~ # ● Create Sprites #~ #-------------------------------------------------------------------------- #~ def create_sprites #~ create_menu_background #~ create_layout #~ create_particles #~ create_status_window #~ create_parameter #~ end #~ #-------------------------------------------------------------------------- #~ # ● Create Menu Background #~ #-------------------------------------------------------------------------- #~ def create_menu_background #~ @background = Plane.new #~ @background.bitmap = $game_temp.pre_cache_status_menu[0] #~ @background.z = 0 #~ @background_scroll = [BACKGROUND_SCROLL_SPEED[0],BACKGROUND_SCROLL_SPEED[1]] #~ end #~ #~ #-------------------------------------------------------------------------- #~ # ● Create Layout #~ #-------------------------------------------------------------------------- #~ def create_layout #~ @layout = Sprite.new #~ @layout.bitmap = $game_temp.pre_cache_status_menu[1] #~ @layout.z = 9 #~ @layout.x = -150 #~ @layout.opacity = 0 #~ end #~ #~ #-------------------------------------------------------------------------- #~ # ● Create Particles #~ #-------------------------------------------------------------------------- #~ def create_particles #~ @particles_sprite =[] #~ for i in 0...NUMBER_OF_PARTICLES #~ @particles_sprite.push(Particles_Menu.new(nil)) #~ end #~ end #~ #~ #-------------------------------------------------------------------------- #~ # ● Create Status Window #~ #-------------------------------------------------------------------------- #~ def create_status_window #~ @status_window = Window_Status.new(@actor) #~ @status_window.set_handler(:cancel, method(:return_scene)) #~ @status_window.set_handler(:pagedown, method(:next_actor)) #~ @status_window.set_handler(:pageup, method(:prev_actor)) #~ @org_pos_win = [@status_window.x,@status_window.y] #~ @status_window.x += 150 #~ @status_window.opacity = 0 #~ @status_window.contents_opacity = 0 #~ end #~ #~ #-------------------------------------------------------------------------- #~ # ● Create Parameter #~ #-------------------------------------------------------------------------- #~ def create_parameter #~ @parameter = Status_Parameter.new(@actor) #~ end #~ #~ end #~ #============================================================================== #~ # ■ Scene_Status #~ #============================================================================== #~ class Scene_Status #~ #~ #-------------------------------------------------------------------------- #~ # ● Execute Dispose #~ #-------------------------------------------------------------------------- #~ def execute_dispose #~ Graphics.freeze #~ dispose_background #~ dispose_layout #~ dispose_particles #~ dispose_status_window #~ dispose_parameter #~ end #~ #~ #-------------------------------------------------------------------------- #~ # ● Dispose Background #~ #-------------------------------------------------------------------------- #~ def dispose_background #~ return if @background == nil #~ @background.dispose #~ @background = nil #~ end #~ #~ #-------------------------------------------------------------------------- #~ # ● Dispose Layout #~ #-------------------------------------------------------------------------- #~ def dispose_layout #~ return if @layout == nil #~ @layout.dispose #~ @layout = nil #~ end #~ #~ #-------------------------------------------------------------------------- #~ # ● Dispose Particles #~ #-------------------------------------------------------------------------- #~ def dispose_particles #~ return if @particles_sprite == nil #~ @particles_sprite.each {|sprite| sprite.dispose } #~ end #~ #~ #-------------------------------------------------------------------------- #~ # ● Dispose Status Window #~ #-------------------------------------------------------------------------- #~ def dispose_status_window #~ return if @status_window == nil #~ @status_window.dispose #~ end #~ #~ #-------------------------------------------------------------------------- #~ # ● Dispose Parameter #~ #-------------------------------------------------------------------------- #~ def dispose_parameter #~ return if @parameter == nil #~ @parameter.dispose #~ end #~ #~ end #~ #============================================================================== #~ # ■ Scene Status #~ #============================================================================== #~ class Scene_Status #~ #~ #-------------------------------------------------------------------------- #~ # ● Update Sprites #~ #-------------------------------------------------------------------------- #~ def update_sprites #~ update_background #~ update_particles #~ update_status_window #~ update_parameter #~ update_move #~ end #~ #-------------------------------------------------------------------------- #~ # ● Update Background #~ #-------------------------------------------------------------------------- #~ def update_background #~ return if @background == nil #~ @background.ox += @background_scroll[0] #~ @background.oy += @background_scroll[1] #~ end #~ #~ #-------------------------------------------------------------------------- #~ # ● Update Particles #~ #-------------------------------------------------------------------------- #~ def update_particles #~ return if @particles_sprite == nil #~ @particles_sprite.each {|sprite| sprite.update } #~ end #~ #~ #-------------------------------------------------------------------------- #~ # ● Update Sprites #~ #-------------------------------------------------------------------------- #~ def update_status_window #~ return if @status_window == nil #~ @status_window.update #~ end #~ #~ #-------------------------------------------------------------------------- #~ # ● Update Move #~ #-------------------------------------------------------------------------- #~ def update_move #~ update_slide(0,@status_window,@org_pos_win[0],0) #~ update_slide(1,@status_window,@org_pos_win[1],0) #~ update_slide(0,@layout,0,1) #~ update_slide(1,@layout,0,1) #~ end #~ #~ #-------------------------------------------------------------------------- #~ # ● Update Slide #~ #-------------------------------------------------------------------------- #~ def update_slide(type,sprite,np,opa) #~ if opa == 0 #~ sprite.contents_opacity += 5 #~ else #~ sprite.opacity += 5 #~ end #~ cp = type == 0 ? sprite.x : sprite.y #~ sp = 3 + ((cp - np).abs / 10) #~ if cp > np #~ cp -= sp #~ cp = np if cp < np #~ elsif cp < np #~ cp += sp #~ cp = np if cp > np #~ end #~ sprite.x = cp if type == 0 #~ sprite.y = cp if type == 1 #~ end #~ #~ #-------------------------------------------------------------------------- #~ # ● Update Parameter #~ #-------------------------------------------------------------------------- #~ def update_parameter #~ return if @parameter == nil #~ @parameter.update #~ end #~ #~ end #~ #============================================================================== #~ # ■ Scene_Status #~ #============================================================================== #~ class Scene_Status #~ #~ #-------------------------------------------------------------------------- #~ # ● Update #~ #-------------------------------------------------------------------------- #~ def update #~ update_sprites #~ update_command #~ end #~ #-------------------------------------------------------------------------- #~ # ● Return Scene #~ #-------------------------------------------------------------------------- #~ def return_scene #~ Sound.play_cancel #~ SceneManager.return #~ end #~ #~ #-------------------------------------------------------------------------- #~ # ● ON Actor Charge #~ #-------------------------------------------------------------------------- #~ def on_actor_change #~ Sound.play_cursor #~ $game_temp.actor_menu_temp = @actor #~ SceneManager.goto(Scene_Status) #~ end #~ #~ end #~ #============================================================================== #~ # ■ Scene_Status #~ #============================================================================== #~ class Scene_Status #~ #-------------------------------------------------------------------------- #~ # ● Update Command #~ #-------------------------------------------------------------------------- #~ def update_command #~ update_next_actor #~ end #~ #~ #-------------------------------------------------------------------------- #~ # ● Update Next Actor #~ #-------------------------------------------------------------------------- #~ def update_next_actor #~ if Input.trigger?(:RIGHT) #~ @status_window.next_actor #~ elsif Input.trigger?(:LEFT) #~ @status_window.prev_actor #~ end #~ end #~ #~ end #============================================================================== # ■ Game_Temp #============================================================================== class Game_Temp #-------------------------------------------------------------------------- # ● Execute Pre Cache Party Menu #-------------------------------------------------------------------------- def execute_pre_cache_party_menu @pre_cache_party_menu = [] @pre_cache_party_menu.push(Cache.menu_party("Background")) @pre_cache_party_menu.push(Cache.menu_party("Layout")) end end #============================================================================== # ■ Scene_Party #============================================================================== class Scene_Party include MOG_MENU_PARTY include MOG_MENU_BASE #-------------------------------------------------------------------------- # ● Main #-------------------------------------------------------------------------- def main execute_setup execute_loop execute_dispose end #-------------------------------------------------------------------------- # ● Execute Setup #-------------------------------------------------------------------------- def execute_setup @phase = 0 @actor = $game_party.members[0] @actor_old = @actor create_sprites end #-------------------------------------------------------------------------- # ● Execute Lopp #-------------------------------------------------------------------------- def execute_loop Graphics.transition(10) loop do Input.update update Graphics.update break if SceneManager.scene != self end end end #============================================================================== # ■ Actor Menu Status Party #============================================================================== class Actor_Menu_Status_Party include MOG_ACTOR_MENU_PARTY #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- def initialize @active = false @max_members = $game_party.max_battle_members @max_members = $game_party.members.size if @max_members > $game_party.members.size create_sprites end #-------------------------------------------------------------------------- # ● Create Sprites #-------------------------------------------------------------------------- def create_sprites @face = [] @face_org = [] @name = [] @name_org = [] @actor_id = [] #space = 70 space = 124 index = 0 for actor in $game_party.members @face.push(Sprite.new) @face_org[index] = [FACE_POSITION[0],FACE_POSITION[1] + space * index] @face[index].x = @face_org[index][0] + 150 + (150 * index) @face[index].y = @face_org[index][1] @face[index].z = 10 @name.push(Sprite.new) @name[index].bitmap = Bitmap.new(200,120) @name[index].bitmap.font.size = FONT_SIZE @name[index].bitmap.font.bold = FONT_BOLD @name_org[index] = [NAME_POSITION[0],NAME_POSITION[1] + space * index] @name[index].x = @name_org[index][0] + 150 + (150 * index) @name[index].y = @name_org[index][1] @name[index].z = 11 @actor_id[index] = actor.id index += 1 break if index >= @max_members end refresh end #-------------------------------------------------------------------------- # ● Refresh Position #-------------------------------------------------------------------------- def refresh_position(actor,index) @actor_id[index] = actor.id @face[index].x = @face_org[index][0] + 150 + (150 * index) @name[index].x = @name_org[index][0] + 150 + (150 * index) end #-------------------------------------------------------------------------- # ● Dispose #-------------------------------------------------------------------------- def dispose @face.each {|sprite| sprite.dispose } @name.each {|sprite| sprite.bitmap.dispose } @name.each {|sprite| sprite.dispose } end #-------------------------------------------------------------------------- # ● Refresh #-------------------------------------------------------------------------- def refresh #Party界面,不需要小图 #~ index = 0 #~ for actor in $game_party.members #~ face_name = "Face_B" + actor.id.to_s #~ @face[index].bitmap = Cache.menu(face_name.to_s) #~ @name[index].bitmap.clear #~ @name[index].bitmap.draw_text(100,28,64,32,"LV " + actor.level.to_s,0) #~ aname = actor.name #~ @name[index].bitmap.draw_text(0,0,100,32,aname.to_s,0) #~ refresh_position(actor,index) if @actor_id[index] != actor.id #~ index += 1 #~ break if index >= @max_members #~ end end #-------------------------------------------------------------------------- # ● Update Slide #-------------------------------------------------------------------------- def update_slide(type,sprite,np) sprite.opacity += 5 cp = type == 0 ? sprite.x : sprite.y sp = 3 + ((cp - np).abs / 10) if cp > np cp -= sp cp = np if cp < np elsif cp < np cp += sp cp = np if cp > np end sprite.x = cp if type == 0 sprite.y = cp if type == 1 end #-------------------------------------------------------------------------- # ● Update #-------------------------------------------------------------------------- def update(actor) for index in 0...@name.size update_slide(0,@face[index],@face_org[index][0]) update_slide(1,@face[index],@face_org[index][1]) update_slide(0,@name[index],@name_org[index][0]) update_slide(1,@name[index],@name_org[index][1]) end end end #============================================================================== # ■ Window_MenuStatus Party #============================================================================== class Window_MenuStatus_Party < Window_Selectable attr_reader :pending_index #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- def initialize(x, y) super(x, y+10, window_width, window_height) @pending_index = -1 self.opacity = 0 self.contents.font.bold = true self.contents.font.size = 18 refresh end #-------------------------------------------------------------------------- # ● Window Width #-------------------------------------------------------------------------- def window_width Graphics.width - 320 #我的修改:160->320 end #-------------------------------------------------------------------------- # ● Window Height #-------------------------------------------------------------------------- def window_height Graphics.height - 80 # -80我的修改 end #-------------------------------------------------------------------------- # ● Item Max #-------------------------------------------------------------------------- def item_max $game_party.members.size end #-------------------------------------------------------------------------- # ● Item Height #-------------------------------------------------------------------------- def item_height (height - standard_padding * 2) / 4 end #-------------------------------------------------------------------------- # ● Draw Item #-------------------------------------------------------------------------- def draw_item(index) actor = $game_party.members[index] enabled = $game_party.battle_members.include?(actor) rect = item_rect(index) draw_item_background(index) draw_actor_face(actor, rect.x + 1, rect.y + 1, enabled) self.contents.font.bold = true self.contents.font.color = Color.new(255,155,55,255)#颜色 draw_text(rect.x + 60,rect.y + 23,80,32,"等级",2) draw_text(rect.x + 60,rect.y + 43,80,32,Vocab::param(0),2) draw_text(rect.x + 60,rect.y + 63,80,32,Vocab::param(1),2) draw_text(rect.x + 156,rect.y + 23,80,32,Vocab::param(2),2) draw_text(rect.x + 156,rect.y + 43,80,32,Vocab::param(3),2) draw_text(rect.x + 156,rect.y + 63,80,32,Vocab::param(6),2) draw_text(rect.x + 252,rect.y + 23,80,32,Vocab::param(4),2) draw_text(rect.x + 252,rect.y + 43,80,32,Vocab::param(5),2) draw_text(rect.x + 252,rect.y + 63,80,32,Vocab::param(7),2) self.contents.font.color = Color.new(255,255,55,255)#颜色 draw_text(rect.x + 105,rect.y,105,32,actor.name,0) self.contents.font.bold = false self.contents.font.color = Color.new(0,255,0,255)#颜色 draw_text(rect.x + 111,rect.y + 23,80,32,actor.level,2) draw_text(rect.x + 111,rect.y + 43,80,32,actor.mhp,2) draw_text(rect.x + 111,rect.y + 63,80,32,actor.mmp,2) self.contents.font.color = Color.new(0,0,255,255)#颜色 draw_text(rect.x + 200,rect.y + 23,80,32,actor.atk,2) draw_text(rect.x + 200,rect.y + 43,80,32,actor.def,2) draw_text(rect.x + 200,rect.y + 63,80,32,actor.agi,2) self.contents.font.color = Color.new(255,0,0,255)#颜色 draw_text(rect.x + 300,rect.y + 23,80,32,actor.mat,2) draw_text(rect.x + 300,rect.y + 43,80,32,actor.mdf,2) draw_text(rect.x + 300,rect.y + 63,80,32,actor.luk,2) # 我的修改(添加更详细的属性) self.contents.font.bold = true self.contents.font.color = Color.new(255,155,55,255)#颜色 draw_text(rect.x + 348,rect.y + 23,80,32,"命中",2) draw_text(rect.x + 348,rect.y + 43,80,32,"闪避",2) draw_text(rect.x + 348,rect.y + 63,80,32,"反击",2) draw_text(rect.x + 464,rect.y + 23,80,32,"暴击",2) draw_text(rect.x + 464,rect.y + 43,80,32,"回血",2) draw_text(rect.x + 464,rect.y + 63,80,32,"回蓝",2) self.contents.font.bold = false self.contents.font.color = Color.new(255,255,0,255)#颜色 draw_text(rect.x + 420,rect.y + 23,80,32,sprintf("%1.2f%%", actor.hit * 100),2) draw_text(rect.x + 420,rect.y + 43,80,32,sprintf("%1.2f%%", actor.eva * 100),2) draw_text(rect.x + 420,rect.y + 63,80,32,sprintf("%1.2f%%", actor.cnt * 100),2) self.contents.font.color = Color.new(0,255,255)#颜色 draw_text(rect.x + 536,rect.y + 23,80,32,sprintf("%1.2f%%", actor.cri * 100),2) draw_text(rect.x + 536,rect.y + 43,80,32,sprintf("%1.2f%%", actor.hrg * 100),2) draw_text(rect.x + 536,rect.y + 63,80,32,sprintf("%1.2f%%", actor.mrg * 100),2) #end end #-------------------------------------------------------------------------- # ● Draw Item Background #-------------------------------------------------------------------------- def draw_item_background(index) if index == @pending_index contents.fill_rect(item_rect(index), pending_color) end end #-------------------------------------------------------------------------- # ● Process OK #-------------------------------------------------------------------------- def process_ok super $game_party.menu_actor = $game_party.members[index] end #-------------------------------------------------------------------------- # ● Select Last #-------------------------------------------------------------------------- def select_last select($game_party.menu_actor.index || 0) end #-------------------------------------------------------------------------- # ● Pending Index #-------------------------------------------------------------------------- def pending_index=(index) last_pending_index = @pending_index @pending_index = index redraw_item(@pending_index) redraw_item(last_pending_index) end end #============================================================================== # ■ Scene_Party #============================================================================== class Scene_Party #-------------------------------------------------------------------------- # ● Create Sprites #-------------------------------------------------------------------------- def create_sprites create_menu_background create_layout create_particles create_status_window create_actor_menu end #-------------------------------------------------------------------------- # ● Create Status Window #-------------------------------------------------------------------------- def create_status_window @status_window = Window_MenuStatus_Party.new(0,50) #我的修改(0,0) command_formation end #-------------------------------------------------------------------------- # ● Create Actor Menu #-------------------------------------------------------------------------- def create_actor_menu @actor_status = Actor_Menu_Status_Party.new end #-------------------------------------------------------------------------- # ● Command Personal #-------------------------------------------------------------------------- def command_personal @status_window.select_last @status_window.activate @status_window.set_handler(:ok, method(:on_personal_ok)) @status_window.set_handler(:cancel, method(:on_personal_cancel)) end #-------------------------------------------------------------------------- # ● Command Formation #-------------------------------------------------------------------------- def command_formation @status_window.index = 0 @old_index = @status_window.index @status_window.activate @status_window.set_handler(:ok, method(:on_formation_ok)) @status_window.set_handler(:cancel, method(:on_formation_cancel)) end #-------------------------------------------------------------------------- # ● On Personal Cancel #-------------------------------------------------------------------------- def on_personal_cancel @status_window.unselect end #-------------------------------------------------------------------------- # ● On Formation OK #-------------------------------------------------------------------------- def on_formation_ok if @status_window.pending_index >= 0 $game_party.swap_order(@status_window.index, @status_window.pending_index) @status_window.pending_index = -1 @status_window.redraw_item(@status_window.index) @actor_status.refresh else @status_window.pending_index = @status_window.index end @status_window.activate end #-------------------------------------------------------------------------- # ● On Formation Cancel #-------------------------------------------------------------------------- def on_formation_cancel if @status_window.pending_index >= 0 @status_window.pending_index = -1 @status_window.activate else return_scene end end #-------------------------------------------------------------------------- # ● Create Menu Background #-------------------------------------------------------------------------- def create_menu_background @background = Plane.new @background.bitmap = $game_temp.pre_cache_party_menu[0] @background.z = 0 @background_scroll = [BACKGROUND_SCROLL_SPEED[0],BACKGROUND_SCROLL_SPEED[1]] end #-------------------------------------------------------------------------- # ● Create Layout #-------------------------------------------------------------------------- def create_layout @layout = Sprite.new @layout.bitmap = $game_temp.pre_cache_party_menu[1] @layout.z = 3 end #-------------------------------------------------------------------------- # ● Create Particles #-------------------------------------------------------------------------- def create_particles @particles_sprite =[] for i in 0...NUMBER_OF_PARTICLES @particles_sprite.push(Particles_Menu.new(nil)) end end end #============================================================================== # ■ Scene_Party #============================================================================== class Scene_Party #-------------------------------------------------------------------------- # ● Execute Dispose #-------------------------------------------------------------------------- def execute_dispose Graphics.freeze dispose_background dispose_layout dispose_particles dispose_status_window dispose_actor_menu end #-------------------------------------------------------------------------- # ● Dispose Status Window #-------------------------------------------------------------------------- def dispose_status_window @status_window.dispose end #-------------------------------------------------------------------------- # ● Dispose Background #-------------------------------------------------------------------------- def dispose_background return if @background == nil @background.dispose @background = nil end #-------------------------------------------------------------------------- # ● Dispose Layout #-------------------------------------------------------------------------- def dispose_layout return if @layout == nil @layout.dispose @layout = nil end #-------------------------------------------------------------------------- # ● Dispose Particles #-------------------------------------------------------------------------- def dispose_particles return if @particles_sprite == nil @particles_sprite.each {|sprite| sprite.dispose } end #-------------------------------------------------------------------------- # ● Dispose Actor Menu #-------------------------------------------------------------------------- def dispose_actor_menu return if @actor_status == nil @actor_status.dispose end end #============================================================================== # ■ Scene_Party #============================================================================== class Scene_Party #-------------------------------------------------------------------------- # ● Update Sprites #-------------------------------------------------------------------------- def update_sprites update_background update_particles update_status_window end #-------------------------------------------------------------------------- # ● Update Background #-------------------------------------------------------------------------- def update_background return if @background == nil @background.ox += @background_scroll[0] @background.oy += @background_scroll[1] end #-------------------------------------------------------------------------- # ● Update Particles #-------------------------------------------------------------------------- def update_particles return if @particles_sprite == nil @particles_sprite.each {|sprite| sprite.update } end #-------------------------------------------------------------------------- # ● Update Status Window #-------------------------------------------------------------------------- def update_status_window return if @status_window == nil @status_window.update update_slide(0,@status_window,160) #我的修改,原为0,靠左 update_slide(1,@status_window,40) #我的修改,原为0,靠上 @actor = $game_party.members[@status_window.index] @actor_status.update(@actor) end #-------------------------------------------------------------------------- # ● Update Slide #-------------------------------------------------------------------------- def update_slide(type,sprite,np) sprite.contents_opacity += 5 cp = type == 0 ? sprite.x : sprite.y sp = 3 + ((cp - np).abs / 10) if cp > np cp -= sp cp = np if cp < np elsif cp < np cp += sp cp = np if cp > np end sprite.x = cp if type == 0 sprite.y = cp if type == 1 end end #============================================================================== # ■ Scene_Party #============================================================================== class Scene_Party #-------------------------------------------------------------------------- # ● Update #-------------------------------------------------------------------------- def update update_sprites update_command end #-------------------------------------------------------------------------- # ● Return Scene #-------------------------------------------------------------------------- def return_scene Sound.play_cancel SceneManager.return end #-------------------------------------------------------------------------- # ● ON Actor Charge #-------------------------------------------------------------------------- def on_actor_change $game_temp.actor_menu_temp = @actor SceneManager.goto(Scene_Status) end end #============================================================================== # ■ Scene_Party #============================================================================== class Scene_Party #-------------------------------------------------------------------------- # ● Update Command #-------------------------------------------------------------------------- def update_command end end #============================================================================== # ■ Game_Temp #============================================================================== class Game_Temp #-------------------------------------------------------------------------- # ● Execute Pre Cache File Menu #-------------------------------------------------------------------------- def execute_pre_cache_file_menu @pre_cache_file_menu = [] @pre_cache_file_menu.push(Cache.menu_save("Background")) @pre_cache_file_menu.push(Cache.menu_save("Layout")) @pre_cache_file_menu.push(Cache.menu_save("File_Mode")) @pre_cache_file_menu.push(Cache.menu_save("File_layout_1")) @pre_cache_file_menu.push(Cache.menu_save("File_layout_2")) @pre_cache_file_menu.push(Cache.menu_save("File_layout_3")) @pre_cache_file_menu.push(Cache.menu_save("Character_Floor")) @pre_cache_file_menu.push(Cache.menu_save("File_Number")) end end #============================================================================== # ■ Game Temp #============================================================================== class Game_Temp attr_accessor :scene_save #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- alias mog_scene_file_initialize initialize def initialize mog_scene_file_initialize @scene_save = false end end #============================================================================== # ■ Window_Base #============================================================================== class Window_Base < Window #-------------------------------------------------------------------------- # ● draw_picture_number(x,y,value,file_name,align, space, frame_max ,frame_index) #-------------------------------------------------------------------------- # X - Posição na horizontal # Y - Posição na vertical # VALUE - Valor Numérico # FILE_NAME - Nome do arquivo # ALIGN - Centralizar 0 - Esquerda 1- Centro 2 - Direita # SPACE - Espaço entre os números. # FRAME_MAX - Quantidade de quadros(Linhas) que a imagem vai ter. # FRAME_INDEX - Definição do quadro a ser utilizado. #-------------------------------------------------------------------------- def draw_picture_number_file(x,y,value, file_name,align = 0, space = 0, frame_max = 1,frame_index = 0) number_image = $game_temp.pre_cache_file_menu[7] frame_max = 1 if frame_max < 1 frame_index = frame_max -1 if frame_index > frame_max -1 align = 2 if align > 2 cw = number_image.width / 10 ch = number_image.height / frame_max h = ch * frame_index number = value.abs.to_s.split(//) case align when 0 plus_x = (-cw + space) * number.size when 1 plus_x = (-cw + space) * number.size plus_x /= 2 when 2 plus_x = 0 end for r in 0..number.size - 1 number_abs = number[r].to_i number_rect = Rect.new(cw * number_abs, h, cw, ch) self.contents.blt(plus_x + x + ((cw - space) * r), y , number_image, number_rect) end end #-------------------------------------------------------------------------- # ● Draw Help Layout #-------------------------------------------------------------------------- def draw_face_save(name,x,y,type) if type == 0 image_name = name + "_0" elsif type == 1 image_name = name + "_1" else image_name = name + "_2" end image = Cache.face(image_name) cw = image.width ch = image.height src_rect = Rect.new(0, 0, cw, ch) self.contents.blt(x , y , image, src_rect) image.dispose end #-------------------------------------------------------------------------- # ● draw_parameter_layout #-------------------------------------------------------------------------- def draw_parameter_layout(x,y) image = $game_temp.pre_cache_file_menu[3] cw = image.width ch = image.height src_rect = Rect.new(0, 0, cw, ch) self.contents.blt(x , y , image, src_rect) end #-------------------------------------------------------------------------- # ● draw_parameter_layout2 #-------------------------------------------------------------------------- def draw_parameter_layout2(x,y,type) if type == 0 image = $game_temp.pre_cache_file_menu[4] else image = $game_temp.pre_cache_file_menu[5] end cw = image.width ch = image.height src_rect = Rect.new(0, 0, cw, ch) self.contents.blt(x , y , image, src_rect) end #-------------------------------------------------------------------------- # ● draw_character_floor #-------------------------------------------------------------------------- def draw_character_floor(x,y) image = $game_temp.pre_cache_file_menu[6] cw = image.width ch = image.height src_rect = Rect.new(0, 0, cw, ch) self.contents.blt(x , y , image, src_rect) end end #============================================================================== # ■ DataManager #============================================================================== module DataManager #-------------------------------------------------------------------------- # ● Make Save Header #-------------------------------------------------------------------------- def self.make_save_header header = {} header[:characters] = $game_party.characters_for_savefile header[:playtime_s] = $game_system.playtime_s header[:playtime] = $game_system.playtime header[:map_name] = $game_map.display_name header[:members] = $game_party.members header end end #============================================================================== # ■ Scene Save #============================================================================== class Scene_Save < Scene_File #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- def initialize $game_temp.scene_save = true super end end #============================================================================== # ■ Scene Load #============================================================================== class Scene_Load < Scene_File #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- def initialize $game_temp.scene_save = false super end end #============================================================================== # ■ Scene_File #============================================================================== class Scene_File include MOG_MENU_SAVE #-------------------------------------------------------------------------- # ● Main #-------------------------------------------------------------------------- def main $game_temp.execute_pre_cache_file_menu create_sprites Graphics.transition(10) execute_loop execute_dispose end #-------------------------------------------------------------------------- # ● Execute Loop #-------------------------------------------------------------------------- def execute_loop loop do Graphics.update Input.update update if SceneManager.scene != self break end end end end #============================================================================== # ■ Window_SaveFile #============================================================================== class Window_SaveFile_A < Window_Base attr_reader :filename attr_reader :file_exist attr_reader :time_stamp attr_reader :selected attr_reader :file_index #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- def initialize(file_index, filename) super(0, 0,720, 180) self.opacity = 0 @file_index = file_index @filename = filename load_gamedata refresh @selected = false end #-------------------------------------------------------------------------- # ● load_gamedata #-------------------------------------------------------------------------- def load_gamedata @time_stamp = Time.at(0) @file_exist = FileTest.exist?(@filename) if @file_exist header = DataManager.load_header(@file_index) if header == nil @file_exist = false return end @characters = header[:characters] @total_sec = header[:playtime] @mapname = header[:map_name] @members = header[:members] end end #-------------------------------------------------------------------------- # ● Refresh #-------------------------------------------------------------------------- MY_Y = 50 #我的修改,调整坐标 def refresh self.contents.clear self.contents.font.color = normal_color xp = 96 ex = 96#80 if @file_exist if @total_sec == nil draw_parameter_layout2(0,50+MY_Y,0) draw_parameter_layout(-10 + xp,0+MY_Y) value = @file_index + 1 draw_picture_number_file(13 + xp, 32+MY_Y,value, "File_Number_01",1,0,3,0) self.contents.draw_text(140, 50+MY_Y, 450, 32, "错误! - 请不要使用旧版的存档...", 0) return end draw_parameter_layout2(0,50+MY_Y,0) draw_parameter_layout(-10 + xp,0+MY_Y) value = @file_index + 1 draw_picture_number_file(13 + xp, 32+MY_Y,value, "File_Number_01",1,0,3,0) draw_party_characters(60 + xp, 0+MY_Y,ex) draw_playtime(555, 20+MY_Y, contents.width - 4, 2) draw_map_location( 484 + xp,64+MY_Y) draw_level(136 + xp,80+MY_Y,ex) #draw_face_save(40 + xp,0+MY_Y) #我的修改 else draw_parameter_layout2(0,50,1) draw_parameter_layout(-10 + xp,0) value = @file_index + 1 draw_picture_number_file(13 + xp, 32,value, "File_Number_01",1,0,3,0) self.contents.draw_text(260, 50, 120, 32, "没有数据", 1) end end #-------------------------------------------------------------------------- # ● draw_face #-------------------------------------------------------------------------- def draw_face_save(x,y) draw_actor_face(@members[0], x, y) end #-------------------------------------------------------------------------- # ● draw_level #-------------------------------------------------------------------------- def draw_level(x,y,ex) self.contents.font.color = normal_color for i in 0...@members.size break if i > 3 level = @members[i].level draw_picture_number_file(x + (ex * i) , y ,level, "File_Number_01",1,0,3,1) end end #-------------------------------------------------------------------------- # ● draw_map_location #-------------------------------------------------------------------------- def draw_map_location(x,y) self.contents.font.bold = true self.contents.font.size = 20 self.contents.font.italic = false self.contents.font.color = Color.new(255,0,0) self.contents.draw_text(x, y, 125, 32, @mapname.to_s, 0) end #-------------------------------------------------------------------------- # ● draw_party_characters #-------------------------------------------------------------------------- def draw_party_characters(x, y,ex) for i in 0...@characters.size break if i > 3 name = @characters[i][0] index = @characters[i][1] draw_character_floor(- 35 + x + i * ex,y - 20) draw_character(name, index, x + i * ex, y) end end #-------------------------------------------------------------------------- # ● draw_playtime #-------------------------------------------------------------------------- def draw_playtime(x, y, width, align) hour = @total_sec / 60 / 60 min = @total_sec / 60 % 60 sec = @total_sec % 60 time_string = sprintf("%02d:%02d:%02d", hour, min, sec) draw_picture_number_file(x + 18 * 0, y ,0, "File_Number_01",0,0,3,0) if hour < 10 draw_picture_number_file(x + 18 * 1, y ,hour, "File_Number_01",0,0,3,0) draw_picture_number_file(x + 18 * 3, y ,0, "File_Number_01",0,0,3,0) if min < 10 draw_picture_number_file(x + 18 * 4, y ,min, "File_Number_01",0,0,3,0) draw_picture_number_file(x + 18 * 6, y ,0, "File_Number_01",0,0,3,0) if sec < 10 draw_picture_number_file(x + 18 * 7, y ,sec , "File_Number_01",0,0,3,0) end #-------------------------------------------------------------------------- # ● selected #-------------------------------------------------------------------------- def selected=(selected) @selected = selected end end #============================================================================== # ■ Scene_File #============================================================================== class Scene_File #-------------------------------------------------------------------------- # ● Create Sprites #-------------------------------------------------------------------------- def create_sprites @saving = $game_temp.scene_save @file_max = FILES_MAX @file_max = 1 if FILES_MAX < 1 create_background create_layout create_savefile_windows create_particles @index = DataManager.latest_savefile_index @check_prev_index = true @savefile_windows[@index].selected = true end #-------------------------------------------------------------------------- # ● Create Background #-------------------------------------------------------------------------- def create_background @background = Plane.new @background.bitmap = $game_temp.pre_cache_file_menu[0] @background.z = 0 @background_scroll = [BACKGROUND_SCROLL_SPEED[0],BACKGROUND_SCROLL_SPEED[1]] end #-------------------------------------------------------------------------- # ● Create_Layout #-------------------------------------------------------------------------- def create_layout @layout_01 = Sprite.new @layout_01.bitmap = $game_temp.pre_cache_file_menu[1] @layout_01.z = 1 @layout_01.blend_type = 1 @save_image = $game_temp.pre_cache_file_menu[2] @layout_02 = Sprite.new @layout_02.bitmap = Bitmap.new(@save_image.width,@save_image.height) cw = @save_image.width ch = @save_image.height / 2 if @saving h = 0 else h = ch end src_rect = Rect.new(0, h, cw, ch) @layout_02.bitmap.blt(0,0, @save_image, src_rect) @layout_02.z = 3 #@layout_02.y = 370 @layout_02.y = 500 #我的修改 end #-------------------------------------------------------------------------- # ● Create Save File Window #-------------------------------------------------------------------------- def create_savefile_windows #~ @pw_pos = [-160,32] #~ @aw_pos = [-96,160] #~ @nw_pos = [-32,288] #我的修改: @pw_pos = [-10,50] @aw_pos = [54,210] @nw_pos = [118,370] @savefile_windows = [] for i in 0...@file_max @savefile_windows[i] = Window_SaveFile_A.new(i, DataManager.make_filename(i)) @savefile_windows[i].z = 2 @savefile_windows[i].visible = false @savefile_windows[i].x = 400 end check_active_window @item_max = @file_max end #-------------------------------------------------------------------------- # ● Create Particles #-------------------------------------------------------------------------- def create_particles @particles_sprite =[] for i in 0...NUMBER_OF_PARTICLES @particles_sprite.push(Particles_Menu.new(nil)) end end end #============================================================================== # ■ Scene_File #============================================================================== class Scene_File #-------------------------------------------------------------------------- # ● Execute Dispose #-------------------------------------------------------------------------- def execute_dispose return if @background == nil Graphics.freeze dispose_background dispose_particles dispose_layout dispose_item_windows end #-------------------------------------------------------------------------- # ● Dispose Layout #-------------------------------------------------------------------------- def dispose_layout @layout_01.dispose @layout_02.bitmap.dispose @layout_02.dispose end #-------------------------------------------------------------------------- # ● Dispose Background #-------------------------------------------------------------------------- def dispose_background @background.dispose @background = nil end #-------------------------------------------------------------------------- # ● Dispose Particles #-------------------------------------------------------------------------- def dispose_particles return if @particles_sprite == nil @particles_sprite.each {|sprite| sprite.dispose } end #-------------------------------------------------------------------------- # ● Dispose of Save File Window #-------------------------------------------------------------------------- def dispose_item_windows for window in @savefile_windows window.dispose end end end #============================================================================== # ■ Scene_File #============================================================================== class Scene_File #-------------------------------------------------------------------------- # ● Update Sprites #-------------------------------------------------------------------------- def update_sprites check_start_index update_savefile_windows update_background update_particles end #-------------------------------------------------------------------------- # ● Update Background #-------------------------------------------------------------------------- def update_background return if @background == nil @background.ox += @background_scroll[0] @background.oy += @background_scroll[1] end #-------------------------------------------------------------------------- # ● Update Particles #-------------------------------------------------------------------------- def update_particles return if @particles_sprite == nil @particles_sprite.each {|sprite| sprite.update } end #-------------------------------------------------------------------------- # ● check_start_index #-------------------------------------------------------------------------- def check_start_index return if @check_prev_index == false @check_prev_index = false check_active_window end #-------------------------------------------------------------------------- # ● check_active_window #-------------------------------------------------------------------------- def check_active_window @index = 0 if @index == nil for i in 0...@file_max @pw = @index - 1 @pw = 0 if @pw > @file_max - 1 @pw = @file_max- 1 if @pw < 0 @aw = @index @nw = @index + 1 @nw = 0 if @nw > @file_max - 1 @nw = @file_max - 1 if @nw < 0 case @savefile_windows[i].file_index when @pw,@nw @savefile_windows[i].visible = true @savefile_windows[i].contents_opacity = 80 when @aw @savefile_windows[i].visible = true @savefile_windows[i].contents_opacity = 255 else @savefile_windows[i].visible = false end end end #-------------------------------------------------------------------------- # ● Update Save File Window #-------------------------------------------------------------------------- def update_savefile_windows update_slide_window for window in @savefile_windows window.update end end #-------------------------------------------------------------------------- # ● update_slide_window #-------------------------------------------------------------------------- def update_slide_window slide_window_x(@pw,@pw_pos[0]) slide_window_x(@aw,@aw_pos[0]) slide_window_x(@nw,@nw_pos[0]) slide_window_y(@pw,@pw_pos[1]) slide_window_y(@aw,@aw_pos[1]) slide_window_y(@nw,@nw_pos[1]) end #-------------------------------------------------------------------------- # ● slide_window_x #-------------------------------------------------------------------------- def slide_window_x(i,x_pos) if @savefile_windows[i].x < x_pos @savefile_windows[i].x += 15 @savefile_windows[i].x = x_pos if @savefile_windows[i].x > x_pos end if @savefile_windows[i].x > x_pos @savefile_windows[i].x -= 15 @savefile_windows[i].x = x_pos if @savefile_windows[i].x < x_pos end end #-------------------------------------------------------------------------- # ● slide_window_y #-------------------------------------------------------------------------- def slide_window_y(i,y_pos) if @savefile_windows[i].y < y_pos @savefile_windows[i].y += 15 @savefile_windows[i].y = y_pos if @savefile_windows[i].y > y_pos end if @savefile_windows[i].y > y_pos @savefile_windows[i].y -= 15 @savefile_windows[i].y = y_pos if @savefile_windows[i].y < y_pos end end #-------------------------------------------------------------------------- # ● reset_position #-------------------------------------------------------------------------- def reset_position(diretion) check_active_window case diretion when 0 @savefile_windows[@pw].y = -64 @savefile_windows[@pw].x = 0 when 1 @savefile_windows[@nw].y = 440 @savefile_windows[@nw].x = 0 end end end #============================================================================== # ■ Scene_File #============================================================================== class Scene_File #-------------------------------------------------------------------------- # ● Frame Update #-------------------------------------------------------------------------- def update update_sprites update_command end #-------------------------------------------------------------------------- # ● Update Command #-------------------------------------------------------------------------- def update_command if Input.trigger?(Input::C) on_savefile_ok elsif Input.trigger?(Input::B) Sound.play_cancel return_scene else last_index = @index if Input.trigger?(Input::DOWN) execute_index(1) if @file_max > 2 reset_position(1) else reset_position(0) end end if Input.trigger?(Input::UP) execute_index(-1) reset_position(0) end if @index != last_index Sound.play_cursor @savefile_windows[last_index].selected = false @savefile_windows[@index].selected = true end end end #-------------------------------------------------------------------------- # ● Execute Index #-------------------------------------------------------------------------- def execute_index(value) @index += value @index = @index >= @file_max ? 0 : @index < 0 ? (@file_max - 1) : @index end end #============================================================================== # ■ Game_Temp #============================================================================== class Game_Temp #-------------------------------------------------------------------------- # ● Execute Pre Cache End Menu #-------------------------------------------------------------------------- def execute_pre_cache_end_menu @pre_cache_end_menu = [] @pre_cache_end_menu.push(Cache.menu_end("Background")) @pre_cache_end_menu.push(Cache.menu_end("Layout")) end end #============================================================================== # ■ Scene_End #============================================================================== class Scene_End include MOG_MENU_END include MOG_MENU_BASE #-------------------------------------------------------------------------- # ● Main #-------------------------------------------------------------------------- def main execute_setup execute_loop execute_dispose end #-------------------------------------------------------------------------- # ● Execute Setup #-------------------------------------------------------------------------- def execute_setup @phase = 0 create_sprites end #-------------------------------------------------------------------------- # ● Execute Lopp #-------------------------------------------------------------------------- def execute_loop Graphics.transition(10) loop do Input.update update Graphics.update break if SceneManager.scene != self end end end #============================================================================== # ■ Scene_End #============================================================================== class Scene_End #-------------------------------------------------------------------------- # ● Create Sprites #-------------------------------------------------------------------------- def create_sprites create_menu_background create_layout create_particles create_command_window end #-------------------------------------------------------------------------- # ● Create Menu Background #-------------------------------------------------------------------------- def create_menu_background @background = Plane.new @background.bitmap = $game_temp.pre_cache_end_menu[0] @background.z = 0 @background_scroll = [BACKGROUND_SCROLL_SPEED[0],BACKGROUND_SCROLL_SPEED[1]] end #-------------------------------------------------------------------------- # ● Create Layout #-------------------------------------------------------------------------- def create_layout @layout = Sprite.new @layout.bitmap = $game_temp.pre_cache_end_menu[1] @layout.z = 3 end #-------------------------------------------------------------------------- # ● Create Particles #-------------------------------------------------------------------------- def create_particles @particles_sprite =[] for i in 0...NUMBER_OF_PARTICLES @particles_sprite.push(Particles_Menu.new(nil)) end end #-------------------------------------------------------------------------- # ● Create Command Window #-------------------------------------------------------------------------- def create_command_window @command_window = Window_GameEnd.new @command_window.set_handler(:to_title, method(:command_to_title)) @command_window.set_handler(:shutdown, method(:command_shutdown)) @command_window.set_handler(:cancel, method(:return_scene)) end end #============================================================================== # ■ Scene_End #============================================================================== class Scene_End #-------------------------------------------------------------------------- # ● Execute Dispose #-------------------------------------------------------------------------- def execute_dispose Graphics.freeze dispose_background dispose_layout dispose_particles dispose_command_window end #-------------------------------------------------------------------------- # ● Dispose Background #-------------------------------------------------------------------------- def dispose_background return if @background == nil @background.dispose @background = nil end #-------------------------------------------------------------------------- # ● Dispose Layout #-------------------------------------------------------------------------- def dispose_layout return if @layout == nil @layout.dispose @layout = nil end #-------------------------------------------------------------------------- # ● Dispose Particles #-------------------------------------------------------------------------- def dispose_particles return if @particles_sprite == nil @particles_sprite.each {|sprite| sprite.dispose } end #-------------------------------------------------------------------------- # ● Dispose Command Window #-------------------------------------------------------------------------- def dispose_command_window return if @command_window == nil @command_window.dispose end end #============================================================================== # ■ Scene_End #============================================================================== class Scene_End #-------------------------------------------------------------------------- # ● Update Sprites #-------------------------------------------------------------------------- def update_sprites update_background update_particles update_command_window end #-------------------------------------------------------------------------- # ● Update Background #-------------------------------------------------------------------------- def update_background return if @background == nil @background.ox += @background_scroll[0] @background.oy += @background_scroll[1] end #-------------------------------------------------------------------------- # ● Update Particles #-------------------------------------------------------------------------- def update_particles return if @particles_sprite == nil @particles_sprite.each {|sprite| sprite.update } end #-------------------------------------------------------------------------- # ● Update Command Window #-------------------------------------------------------------------------- def update_command_window return if @command_window == nil @command_window.update end end #============================================================================== # ■ Scene_End #============================================================================== class Scene_End #-------------------------------------------------------------------------- # ● Update #-------------------------------------------------------------------------- def update update_sprites update_command end #-------------------------------------------------------------------------- # ● Return Scene #-------------------------------------------------------------------------- def return_scene Sound.play_cancel SceneManager.return end #-------------------------------------------------------------------------- # ● ON Actor Charge #-------------------------------------------------------------------------- def on_actor_change $game_temp.actor_menu_temp = @actor SceneManager.goto(Scene_Status) end #-------------------------------------------------------------------------- # ● Update Command #-------------------------------------------------------------------------- def update_command end end #-------------------------------------------------------------------------- # ●●● 以下脚本用于1024*576分辨率的坐标调整 By风宥雪 #-------------------------------------------------------------------------- class Scene_Equip #-------------------------------------------------------------------------- # ● Create Help Window #-------------------------------------------------------------------------- def create_help_window @help_window = Window_Help.new @help_window.x = Graphics.width*0.6 @help_window.y = (Graphics.height - @help_window.height)*0.5 @help_window.opacity = 0 end end class Scene_Item #-------------------------------------------------------------------------- # ● Create Help Window #-------------------------------------------------------------------------- def create_help_window @help_window = Window_Help.new @help_window.x = Graphics.width*0.6 @help_window.y = (Graphics.height - @help_window.height)*0.5 @help_window.opacity = 0 end end class Scene_Skill #-------------------------------------------------------------------------- # ● Create Help Window #-------------------------------------------------------------------------- def create_help_window @help_window = Window_Help.new @help_window.x = Graphics.width*0.6 @help_window.y = (Graphics.height - @help_window.height)*0.5 @help_window.opacity = 0 end end class Window_SaveFile_A < Window_Base #-------------------------------------------------------------------------- # ● draw_party_characters #-------------------------------------------------------------------------- def draw_party_characters(x, y,ex) for i in 0...@characters.size break if i > 3 draw_actor_face_s(@members[i], x+i*ex, y, ex) draw_character_floor(x + i * ex + 10,y + 60) end end def draw_actor_face_s(actor, x, y, ex) face_name = actor.face_name face_index = actor.face_index bitmap = Cache.face(face_name) src_rc = Rect.new(face_index % 4 * 96, face_index / 4 * 96, 96, 96) des_rc = Rect.new(x,y,ex,ex) contents.stretch_blt(des_rc, bitmap, src_rc) bitmap.dispose end end
#==============================================================================
# 此脚本来自 [url=http://www.66rpg.com]www.66rpg.com[/url]
#------------------------------------------------------------------------------
# 功能:[RMVA]增加装备栏数量
# 作者:后知后觉([email protected])
# 版本:v1.1 2012-02-20
# 使用说明:
# 1.在下面设置需要增加的数量以及增加部位的名字
# 2.在数据库-护甲-备注 里写入 @etype[位置编号]
# 默认系统一共有5个装备位置.占用了0~4号
# 所以扩展出来的装备栏位置编号是从 5 开始.比如 @etype[5] @etype[6]
# 3.在扩展位置上给角色设置初始装备的方法
# 在 数据库-角色-备注 里写入 @add_equips[装备1ID,装备2ID.....]
# 每个ID中间由半角的 , 分开 比如 @add_equips[61] @add_equips[61,63]
# 4.设置 固定装备 的初始值
# 在 数据库-角色-备注 里写入 @fix_equips[装备位置编号,装备位置编号......]
# 每个编号间由半角的 , 分开 比如 @fix_equips[5] @fix_equips[5,6]
# 5.设置 禁用装备 的初始值
# 在 数据库-角色-备注 里写入 @seal_equips[装备位置编号,装备位置编号......]
# 每个编号间由半角的 , 分开 比如 @seal_equips[5] @seal_equips[5,6]
# 6.游戏运行时可以使用:
# $game_actors[角色ID].fix_equips 来获取该角色被固定装备位置的数组
# $game_actors[角色ID].seal_equips 来获取该角色被禁用装备位置的数组
# 然后可以使用数组类的 delete 和 push 方法来删除/增加 etype_id
# 来达到解除与启用 固定、禁用的效果
# 比如 $game_actors[1].fix_equips.delete(5) 解除1号角色5号位置的固定
# $game_actors[2].seal_equips.push(6) 2号角色禁用6号装备位置
# 注意事项:
# 1.上面说的设置初始装备、固定装备、禁用装备都是只针对新扩展部位的
# 默认的前5个装备位置的固定、禁用、设置初始.还请使用RMVA默认方式设置
# 2.状态画面的描绘装备部分.在默认分辨率下.只能描绘6个装备.
# 我小改了一下.但还是觉得不怎么好看.建议你自己重新描绘那一块...
#==============================================================================
module HzhjEquip
# 设置要增加的装备部位数量
ETYPE_ADD_NUM = 4
# 设置要增加的装备部位的名字
ETYPE_ADD_NAME = ["兵 符", "饰 品", "坐 骑", "玉 石"]
end
def Vocab.etype(etype_id)
etypes = $data_system.terms.etypes + HzhjEquip::ETYPE_ADD_NAME
etypes[etype_id]
end
class RPG::Actor < RPG::BaseItem
def add_equips
if /@add_equips\[(.+?)\]/ =~ @note
result = $1.split(/,/).collect{|str|str.to_i}
result << 0 while result.size < HzhjEquip::ETYPE_ADD_NUM
else
result = Array.new(HzhjEquip::ETYPE_ADD_NUM){0}
end
result
end
def fix_equips
if /@fix_equips\[(.+?)\]/ =~ @note
result = $1.split(/,/).collect{|str|str.to_i}
else
result = []
end
result
end
def seal_equips
if /@seal_equips\[(.+?)\]/ =~ @note
result = $1.split(/,/).collect{|str|str.to_i}
else
result = []
end
result
end
end
class RPG::Armor < RPG::EquipItem
def etype_id
if /@etype\[(.+?)\]/ =~ @note
return $1.to_i
else
return @etype_id
end
end
end
class Game_Actor < Game_Battler
attr_accessor :fix_equips
attr_accessor :seal_equips
alias hzhj_old_init_equips_game_actor init_equips
def init_equips(equips)
@fix_equips = actor.fix_equips
@seal_equips = actor.seal_equips
hzhj_equips = equips.clone
add_equips = actor.add_equips
HzhjEquip::ETYPE_ADD_NUM.times{hzhj_equips << add_equips.shift}
hzhj_old_init_equips_game_actor(hzhj_equips)
end
alias hzhj_old_equip_slots_game_actor equip_slots
def equip_slots
result = hzhj_old_equip_slots_game_actor
HzhjEquip::ETYPE_ADD_NUM.times{result << result.size}
result
end
def equip_type_fixed?(etype_id)
if etype_id > 4
return @fix_equips.include?(etype_id)
else
return super
end
end
def equip_type_sealed?(etype_id)
if etype_id > 4
return @seal_equips.include?(etype_id)
else
return super
end
end
end
class Window_EquipSlot < Window_Selectable
def actor=(actor)
return if @actor == actor
@actor = actor
create_contents
refresh
end
end
class Window_Status < Window_Selectable
def draw_equipments(x, y)
x = 224 if @actor.equips.size > 6
@actor.equips.each_with_index do |item, i|
dx = x + 146 * (i / 6)
dy = y + line_height * (i % 6)
draw_item_name(item, dx, dy, true, 122)
end
end
end
chd114 发表于 2017-11-23 17:10
换个顺序试试看?
如果交换顺序有效果说明是有的方法被覆盖重定义之类的情况
#==============================================================================
# +++ 装备栏风格扩展 +++
# by:VIPArcher [email: [email protected]]
# -- 本脚本来自 [url]http://rm.66rpg.com[/url] 使用或转载请保留以上信息。
#==============================================================================
# ■ 新增装备风格
# 使用说明:在角色备注栏/职业备注栏里备注 <slot_type:x> 则角色变为x号装备风格,
# 一个角色有多个风格同时存在时,最终返回风格编号x最大的那个风格。
# 在防具上备注<etype_id:x>则把该防具设置为第x种类型,默认占用了0-4,追加的由5开始
# 在任何有备注框的地方备注 <fix_equips:x> 固定该位置的装备,固定多个则换行再写
# 在任何有备注框的地方备注 <seal_equips:x> 禁用该位置的装备,禁用多个则换行再写
# 在角色备注栏备注<ini_equips:[a,b,c...n]> 初始化初始装备(此备注将使数据库的初
# 始装备设置失效,并且请把装备对应好位置和确认装备该位置可以装备该装备。)
# 在角色备注栏备注<add_equips:[h,i,j...n]> 追加初始装备(和上面是一样的意思,
# 但是这种不会让数据库的设置无效,只会在后面追加上初始装备。)具体请自己摸索吧
#==============================================================================
$VIPArcherScript ||= {};$VIPArcherScript[:slot_type] = __FILE__ #20140803
#==============================================================================
# ★ 设定部分 ★
#==============================================================================
module VIPArcher
ETYPE_ADD_NAME = ["兵 符", "饰 品", "坐 骑", "玉 石"] #设置要增加的装备位置的名字
SLOT_TYPE = {
0 => [0,1,2,3,4,5,6,6,7,8], # 普通
1 => [0,0,2,3,4,5,6,6,7,8], # 双持武器 (这两个是默认的风格)
# 从这里开始添加装备风格
2 => [0,0,0,2,3,4,5], # 看我索爷三刀流
3 => [4], # 窝只是个需要保护的NPC装备只要首饰就够了吧。
4 => [0,2,3,3], # 233
5 => [0,1,2,3,4,5,6] # 这里的5,6对应的类型就是上面追加的类型
# 在这里继续添加类型。编号越大,优先级越高。
} # <= 这个大括号不能删
#--------------------------------------------------------------------------
# ● 追加装备位置用语
#--------------------------------------------------------------------------
def Vocab.etype(etype_id)
etype_name = $data_system.terms.etypes + ETYPE_ADD_NAME
etype_name[etype_id]
end
end
#==============================================================================
# ☆ 设定结束 ☆
#==============================================================================
class RPG::Actor < RPG::BaseItem
#--------------------------------------------------------------------------
# ● 初始装备数组
#--------------------------------------------------------------------------
alias vip_20141119_equips equips
def equips
add_equips = []
$1.split(",").each {|item|add_equips.push item.to_i} if
@note =~ /<(?:ini_equips|初始装备)[:]\[(.+?)\]>/i
return add_equips if add_equips != []
$1.split(",").each {|item|add_equips.push item.to_i} if
@note =~ /<(?:add_equips|追加初始装备)[:]\[(.+?)\]>/i
vip_20141119_equips.clone + add_equips
end
end
#-------------------------------------------------------------------------------
class RPG::Armor < RPG::EquipItem
#--------------------------------------------------------------------------
# ● 装备类型
#--------------------------------------------------------------------------
def etype_id
return @note =~ /<(?:etype_id|装备类型)[:]\s*(.*)>/i ? $1.to_i : @etype_id
end
end
#-------------------------------------------------------------------------------
class Game_BattlerBase
#--------------------------------------------------------------------------
# ● 获取装备风格
#--------------------------------------------------------------------------
def slot_type
slot =[]
feature_objects.each {|obj| slot.push $1.to_i if
obj.note =~ /<(?:slot_type|装备风格)[:]\s*(.*)>/i }
return slot.max || 0
end
#--------------------------------------------------------------------------
# ● 判定是否固定装备
#--------------------------------------------------------------------------
alias vip_20141119_equip_type_fixed? equip_type_fixed?
def equip_type_fixed?(etype_id)
fixed_type = []
feature_objects.each {|obj| obj.note.split(/[\r\n]+/).each {|line|
fixed_type.push $1.to_i if line =~ /<(?:fix_equips|固定装备)[:]\s*(.*)>/i}}
fixed_type.include?(etype_id) || vip_20141119_equip_type_fixed?(etype_id)
end
#--------------------------------------------------------------------------
# ● 判定装备是否被禁用
#--------------------------------------------------------------------------
alias vip_20141119_equip_type_sealed? equip_type_sealed?
def equip_type_sealed?(etype_id)
sealed_type = []
feature_objects.each {|obj| obj.note.split(/[\r\n]+/).each {|line|
sealed_type.push $1.to_i if line =~ /<(?:seal_equips|禁用装备)[:]\s*(.*)>/i}}
sealed_type.include?(etype_id) || vip_20141119_equip_type_sealed?(etype_id)
end
end
#-------------------------------------------------------------------------------
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ● 初始化装备
# # 方法覆盖,可能引起冲突
#--------------------------------------------------------------------------
def init_equips(equips)
type_size = VIPArcher::SLOT_TYPE.values.max_by{|type|type.size}.size
@equips = Array.new(type_size) { Game_BaseItem.new }
equips.each_with_index do |item_id, i|
etype_id = index_to_etype_id(i)
slot_id = empty_slot(etype_id)
@equips[slot_id].set_equip(etype_id == 0, item_id) if slot_id
end
refresh
end
#--------------------------------------------------------------------------
# ● 获取装备栏的数组
#--------------------------------------------------------------------------
alias vip_20140803_es equip_slots
def equip_slots
return VIPArcher::SLOT_TYPE[slot_type] if
VIPArcher::SLOT_TYPE[slot_type] != nil
vip_20140803_es
end
end
#-------------------------------------------------------------------------------
class Scene_Equip < Scene_MenuBase
#--------------------------------------------------------------------------
# ● 生成装备栏窗口
#--------------------------------------------------------------------------
alias slot_vip_create_slot_window create_slot_window
def create_slot_window
slot_vip_create_slot_window
@slot_window.create_contents
@slot_window.refresh
end
#--------------------------------------------------------------------------
# ● 物品“确定”
#--------------------------------------------------------------------------
alias slot_vip_on_item_ok on_item_ok
def on_item_ok
slot_vip_on_item_ok
@slot_window.create_contents
@slot_window.refresh
end
#--------------------------------------------------------------------------
# ● 指令“全部卸下”
#--------------------------------------------------------------------------
alias slot_vip_command_clear command_clear
def command_clear
slot_vip_command_clear
@slot_window.create_contents
@slot_window.refresh
end
#--------------------------------------------------------------------------
# ● 指令“最强装备”
#--------------------------------------------------------------------------
alias slot_vip_command_optimize command_optimize
def command_optimize
slot_vip_command_optimize
@slot_window.create_contents
@slot_window.refresh
end
#--------------------------------------------------------------------------
# ● 切换角色
#--------------------------------------------------------------------------
alias slot_vip_on_actor_change on_actor_change
def on_actor_change
slot_vip_on_actor_change
@slot_window.create_contents
@slot_window.refresh
end
end
111.jpg (17.88 KB, 下载次数: 2)
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |