#============================================================================== # +++ MOG - PICKUP AND THROW (v1.2) +++ #============================================================================== # By Moghunter # [url]http://www.atelier-rgss.com[/url] #============================================================================== # Sistema de carregar e arremessar eventos, útil para criar puzzles. #============================================================================== # Para definir quais os eventos serão arremessáveis basta nomear o evento # da seguinte forma. # # <ThrowX> # # X é a distância que o evento pode ser arremessado. # # Exemplo # # Event01<Throw4> # #============================================================================== # Sprite do personagem carregando o Objeto (Opcional) #============================================================================== # É preciso ter uma imagem do personagem em posição de carregar objeto e # nomear a imagem da sequinte forma. # # Character_Name + _Pickup # # Exemplo # # Actor1_Pickup.png #============================================================================== #============================================================================== # ● Histórico (Version History) #============================================================================== # v 1.2 - Melhor codificação. # v 1.1 - Melhor compatibilidade com scripts de terceiros. #============================================================================== module MOG_PICK_THROW #Altura do sprite do objeto carregado. SPRITE_POSITION = 20 #Definição do Som quando o objeto é arremessado. THROW_SE = "Jump2" #Definição do Som quando o objeto é carregado. PICK_UP_SE = "Jump1" #ID da Switch que desativa o sistema de carregar. DISABLE_PICKUP_SWITCH_ID = 100 # Definição do botão de carregar(Arremeçar) objetos. PICKUP_BUTTON = Input::C end #============================================================================== # ■ Game_Temp #============================================================================== class Game_Temp attr_accessor :pickup_lock attr_accessor :pickup_lock_time attr_accessor :character_pre_name attr_accessor :can_throw attr_accessor :throw_position #-------------------------------------------------------------------------- # ● initialize #-------------------------------------------------------------------------- alias mog_pick_initialize initialize def initialize @pickup_lock = false @pickup_lock_time = 0 @character_pre_name = "" @can_throw = true @throw_position = [] mog_pick_initialize end end #============================================================================== # ■ Game_Event #============================================================================== class Game_Event < Game_Character attr_reader :jump_count attr_accessor :x attr_accessor :y attr_accessor :bush_depth attr_accessor :direction #-------------------------------------------------------------------------- # ● initialize #-------------------------------------------------------------------------- alias mog_pickup_initialize initialize def initialize(map_id, event) mog_pickup_initialize(map_id, event) @throw_active = false if event.name =~ /<Throw(\d+)>/i @throw = $1.to_i end end end #============================================================================== # ■ Game_CharacterBase #============================================================================== class Game_CharacterBase attr_accessor :throw_active attr_accessor :throw #-------------------------------------------------------------------------- # ● initialize #-------------------------------------------------------------------------- alias x_pickup_initialize initialize def initialize @throw_active = false @throw = 0 x_pickup_initialize end end #============================================================================== # ■ Game_Character #============================================================================== class Game_Character < Game_CharacterBase #-------------------------------------------------------------------------- # ● Throw Action #-------------------------------------------------------------------------- def throw_action(range) moveto($game_player.x,$game_player.y) jump_range = range moveto($game_player.x,$game_player.y) range.times do unless jumping? case $game_player.direction when 6 jump(jump_range,0) if throw_range?(jump_range,0,jump_range) when 4 jump(-jump_range,0) if throw_range?(-jump_range,0,jump_range) when 2 jump(0,jump_range) if throw_range?(0,jump_range,jump_range) when 8 jump(0,-jump_range) if throw_range?(0,-jump_range,jump_range) end if @x == $game_player.x and @y == $game_player.y and jump_range == 1 $game_temp.can_throw = false end jump_range -= 1 end end end #-------------------------------------------------------------------------- # ● Throw Range? #-------------------------------------------------------------------------- def throw_range?(x, y,range ) x = $game_player.x y = $game_player.y case $game_player.direction when 2 y += range when 6 x += range when 4 x -= range when 8 y -= range end return false if collide_with_characters?(x, y) return false unless map_passable?(x, y,$game_player.direction) return true end end #============================================================================== # ■ Game_Player #============================================================================== class Game_Player < Game_Character include MOG_PICK_THROW #-------------------------------------------------------------------------- # ● Update Player Before Movement #-------------------------------------------------------------------------- alias pickup_update update def update pickup_update update_pickup_command end #-------------------------------------------------------------------------- # ● Update Pickup Command #-------------------------------------------------------------------------- def update_pickup_command $game_temp.pickup_lock_time -= 1 if $game_temp.pickup_lock_time > 0 return if $game_temp.pickup_lock_time > 0 if Input.trigger?(PICKUP_BUTTON) throw_event if can_check_throw_event? check_event_pickup([0,1,2]) if can_check_pickup_event? end end #-------------------------------------------------------------------------- # ● Check Action Event #-------------------------------------------------------------------------- alias mog_pickup_check_action_event check_action_event def check_action_event return if $game_temp.pickup_lock_time > 0 or $game_temp.pickup_lock mog_pickup_check_action_event end #-------------------------------------------------------------------------- # ● Can Check Pickup Event #-------------------------------------------------------------------------- def can_check_pickup_event? return false if $game_temp.pickup_lock return false if $game_temp.pickup_lock_time > 0 return false if $game_map.interpreter.running? return false if $game_message.visible return false if $game_switches[DISABLE_PICKUP_SWITCH_ID] return true end #-------------------------------------------------------------------------- # ● Can Check Throw Event #-------------------------------------------------------------------------- def can_check_throw_event? return false if $game_temp.pickup_lock == false return false if $game_temp.pickup_lock_time > 0 return false if $game_map.interpreter.running? return false if $game_message.visible return false if $game_switches[DISABLE_PICKUP_SWITCH_ID] return true end #-------------------------------------------------------------------------- # ● Reserve Transfer #-------------------------------------------------------------------------- alias mog_pickup_reserve_transfer reserve_transfer def reserve_transfer(map_id, x, y, direction) if $game_temp.pickup_lock == true for event in $game_map.events.values if event.throw_active == true event.throw_active = false event.moveto(@x,@y) case @direction when 2 event.jump(0,-1) when 4 event.jump(1,0) when 6 event.jump(-1,0) when 8 event.jump(0,1) end end end $game_temp.pickup_lock = false $game_temp.pickup_lock_time = 0 @character_name = $game_temp.character_pre_name end mog_pickup_reserve_transfer(map_id, x, y, direction) end #-------------------------------------------------------------------------- # ● Movable? #-------------------------------------------------------------------------- alias mog_pickup_movable movable? def movable? return false if $game_temp.pickup_lock_time > 0 mog_pickup_movable end #-------------------------------------------------------------------------- # ● Throw Event #-------------------------------------------------------------------------- def throw_event for event in $game_map.events.values if event.throw_active and not jumping? $game_temp.can_throw = true event.throw_action(event.throw) return if $game_temp.can_throw == false $game_temp.pickup_lock_time = event.jump_count $game_temp.throw_position[0] = event.x $game_temp.throw_position[1] = event.y event.throw_active = false $game_temp.pickup_lock = false Audio.se_play("Audio/SE/" + THROW_SE, 100, 100) @character_name = $game_temp.character_pre_name break end end if event == nil $game_map.reset_pickup end end #-------------------------------------------------------------------------- # ● Check Event Pickup #-------------------------------------------------------------------------- def check_event_pickup(triggers) front_x = $game_map.x_with_direction(@x, @direction) front_y = $game_map.y_with_direction(@y, @direction) for event in $game_map.events_xy(front_x, front_y) if event.throw > 0 and not jumping? event.throw_active = true $game_temp.pickup_lock = true event.jump(0,0) $game_temp.pickup_lock_time = event.jump_count event.x = $game_player.x event.y = $game_player.y Audio.se_play("Audio/SE/" + PICK_UP_SE, 100, 100) $game_temp.character_pre_name = @character_name make_pickup_pose break end end end #-------------------------------------------------------------------------- # ● Img Pickup Exist? #-------------------------------------------------------------------------- def img_pickup_exist? Cache.character(@character_name + "_Pickup") rescue return false end #-------------------------------------------------------------------------- # ● Make Pickup Pose #-------------------------------------------------------------------------- def make_pickup_pose @character_name = @character_name + "_Pickup" if img_pickup_exist? end end #============================================================================== # ■ Sprite_Character #============================================================================== class Sprite_Character < Sprite_Base include MOG_PICK_THROW #-------------------------------------------------------------------------- # ● Update X Effects #-------------------------------------------------------------------------- alias mog_pickup_update_position update_position def update_position mog_pickup_update_position update_pickup_position if can_pickup_position? end #-------------------------------------------------------------------------- # ● Can Pickup Position #-------------------------------------------------------------------------- def can_pickup_position? return false if $game_temp.pickup_lock_time > 0 return false if $game_temp.pickup_lock == false return false if @character.throw_active == false return false if @character.is_a?(Game_Player) return false if @character.jumping? return true end #-------------------------------------------------------------------------- # ● Update Pickup Position #-------------------------------------------------------------------------- def update_pickup_position @character.x = $game_player.x @character.y = $game_player.y @character.bush_depth = 0 unless @character.direction_fix @character.direction = $game_player.direction end self.x = $game_player.screen_x self.y = $game_player.screen_y - SPRITE_POSITION self.z = $game_player.screen_z + 1 end end #============================================================================== # ■ Scene_Map #============================================================================== class Scene_Map < Scene_Base #-------------------------------------------------------------------------- # ● Call Menu #-------------------------------------------------------------------------- alias mog_pickup_call_menu call_menu def call_menu return if $game_temp.pickup_lock == true mog_pickup_call_menu end end #============================================================================== # ■ Game Interpreter #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # ● Command 352 #-------------------------------------------------------------------------- alias mog_pickup_command_352 command_352 def command_352 return if $game_temp.pickup_lock == true mog_pickup_command_352 end end #============================================================================== # ■ Game_Map #============================================================================== class Game_Map #-------------------------------------------------------------------------- # ● Setup #-------------------------------------------------------------------------- alias mog_pickup_setup setup def setup(map_id) mog_pickup_setup(map_id) reset_pickup end #-------------------------------------------------------------------------- # ● Reset Pickup #-------------------------------------------------------------------------- def reset_pickup for i in $game_map.events.values if i.throw_active i.throw_active = false i.moveto($game_player.x,$game_player.y) i.jump(0,0) i.move_backward $game_player.character_name = $game_temp.character_pre_name end end $game_temp.pickup_lock_time = 0 $game_temp.pickup_lock = false end end $mog_rgss3_pickup_and_throw = true
QQ图片20131017205429.jpg (109.01 KB, 下载次数: 21)
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |