Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

[XP] Ayuda con Script para Screenshots.

Ver el tema anterior Ver el tema siguiente Ir abajo

[XP] Ayuda con Script para Screenshots.

Mensaje por Lect el 2018-03-05, 17:56

Hola a todos.

Estaba usando un script para tomar Screenshots, pero el problema es que quisiera que esta opción solo fuera posible en determinados momentos del juego, y no se como editar el script para limitar su disponibilidad. ¿Pueden ayudarme?

Este es el script:
Spoiler:
avatar
Lect
Iniciado
Iniciado

0/3

Créditos 221

Gracias : 5

Volver arriba Ir abajo

Re: [XP] Ayuda con Script para Screenshots.

Mensaje por Wecoc el 2018-04-22, 12:47

Le he hecho algunos cambios.

Código:
# -----------------------------
# BigKev's Picture Camera v1.1 (Edit)
# -----------------------------

module BigKev
  CAMERA_SWITCH = 1 # Switch ID for camera use
end

class Game_Stored
  attr_accessor :picture_database
  attr_accessor :picture_events
  def initialize
    @new_picture_calling = false
    @picture_database = []
    @picture_events = []
  end

  # Whenever you want to check if an event that had it's picture taken use
  # $game_stored.check_picture_events
  def check_picture_events
    # Cycles through each picture to see the events located within
    for i in 1...6
      # Cycles through every possible event in each picture
      for j in 0...299
        if $game_stored.picture_events[i] != nil
          # Events taken by pictures are recognized by name
          case $game_stored.picture_events[i][j]
          when "PurpleFlower"
            $game_switches[2] = true # PurpleFlower
            $game_map.refresh
          when "Fairy"
            $game_switches[3] = true # fairy
            $game_map.refresh
          when "Sticks"
            $game_switches[5] = true # sticks
            $game_map.refresh
          when "Fire"
            $game_switches[4] = true # campfire
            $game_map.refresh
          when "Lich"
            # Recycles through every possible event in each picture
            for k in 0...299
              if $game_stored.picture_events[i][k] == "Ghost"
                $game_switches[7] = true # CaughtGhosts
                $game_map.refresh
              end
            end
          end
          # Insert other pictures you want taken here
        end
      end
    end
  end
end

class Scene_Photo_Menu # Menu that displays all the pictures you have taken
  def initialize(menu_index = 0)
    @menu_index = menu_index
  end

  def main
    # Sets up the information on the picture that shows in Window_Photo_Display
    @selected_picture = Sprite.new
    @selected_picture.x = 75
    @selected_picture.y = 20
    @selected_picture.z = 9998
    @selected_picture.zoom_x = 0.75
    @selected_picture.zoom_y = 0.75
    
    @window_photo_select = Window_Photo_Select.new
    @window_photo_select.index = @menu_index
    @window_photo_select.x = 0
    @window_photo_select.y = 400
    @photo_display_window = Window_Photo_Display.new
    @photo_display_window.x = 0
    @photo_display_window.y = 0
    @photo_options_window = Window_Photo_Options.new
    @photo_options_window.index = @menu_index
    @photo_options_window.x = 0
    @photo_options_window.y = 400
    @photo_options_window.visible = false
    @photo_options_window.active = false
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @window_photo_select.dispose
    @photo_display_window.dispose
    @photo_options_window.dispose
  end

  def update
    @window_photo_select.update
    @photo_display_window.update
    @photo_options_window.update
    if @window_photo_select.active
      i = @window_photo_select.index + 1
      if $game_stored.picture_database[i] != nil
        @selected_picture.bitmap = RPG::Cache.picture("Picture" + i.to_s)
      else
        @selected_picture.bitmap = RPG::Cache.picture("NoPicture")
      end
      if Input.trigger?(Input::C)
        # Enters Photo Options Menu
        if $game_stored.picture_database[i] != nil
          @window_photo_select.active = false
          @window_photo_select.visible = false
          @photo_options_window.visible = true
          @photo_options_window.active = true
          $game_system.se_play($data_system.decision_se)
        else
          $game_system.se_play($data_system.cancel_se)
        end
        return
      end
      # Leaves the Menu
      if Input.trigger?(Input::B)
        $game_system.se_play($data_system.cancel_se)
        @selected_picture.dispose
        $scene = Scene_Map.new
      end
      return
    end
    if @photo_options_window.active
      i = @window_photo_select.index + 1
      if Input.trigger?(Input::B)
        $game_system.se_play($data_system.cancel_se)
        @window_photo_select.active = true
        @window_photo_select.visible = true
        @photo_options_window.visible = false
        @photo_options_window.active = false
        return
      end
      if Input.trigger?(Input::C)
        case @photo_options_window.index
        when 0 # Deletes the picture
          $game_stored.picture_database[i] = nil
          $game_stored.picture_events[i] = []
          RPG::Cache.picture("Picture" + i.to_s).dispose
          @selected_picture.bitmap = RPG::Cache.picture("NoPicture")
          $game_system.se_play($data_system.decision_se)
        when 1 # Returns to Photo Select Menu
          @window_photo_select.active = true
          @window_photo_select.visible = true
          @photo_options_window.visible = false
          @photo_options_window.active = false
          $game_system.se_play($data_system.cancel_se)
        end
      end
      return
    end
  end
end

class Scene_New_Picture # Menu when you take the picture
  def initialize(index, menu_index = 0)
    @menu_index = menu_index
    @index = index
  end

  def main
    @window_save_picture = Window_Save_Picture.new
    @column_max = 2
    @window_save_picture.index = @menu_index
    @window_save_picture.x = 0
    @window_save_picture.y = 400
    @new_picture_window = Window_New_Picture.new(@index)
    @new_picture_window.x = 0
    @new_picture_window.y = 0
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @window_save_picture.dispose
    @new_picture_window.dispose
  end

  def update
    @window_save_picture.update
    @new_picture_window.update
    if @window_save_picture.active
      if Input.trigger?(Input::C)
        case @window_save_picture.index
        when 0
          $game_system.se_play($data_system.decision_se)
          for i in 1..6 # Checks to see if there is an open slot available
          if $game_stored.picture_database[i] == nil
            # Storing the newly taken picture in the database
            $game_stored.picture_database[i] = 1
            events_within_range(i)
            break
          end
        end
        $scene = Scene_Map.new
        when 1
          # Deletes the picture
          $game_system.se_play($data_system.cancel_se)
          $scene = Scene_Map.new
          RPG::Cache.picture("Picture" + @index.to_s).dispose
          return
        end
      end
      return
    end
  end
  
  # Checking to see what events are within the picture
  def events_within_range(id)
    if $game_map.events.keys.max != nil
      $game_stored.picture_events[id] = []
      dx = $game_map.display_x
      dy = $game_map.display_y
      for i in 0...$game_map.events.keys.max+1
        if $game_map.events[i] != nil
          rx = $game_map.events[i].real_x
          ry = $game_map.events[i].real_y
          if rx >= dx+64 && rx <= dx+2496 && ry >= dy+128 && ry <= dy+1792
            $game_stored.picture_events[id].push($game_map.events[i].event.name)
          end
        end
      end
    end
  end
end

class Window_Photo_Options < Window_Selectable
  def initialize
    super(0, 400, 640, 80)
    self.contents = Bitmap.new(width - 32, height - 32)
    #self.contents.font.name = $defaultfonttype
    #self.contents.font.size = $defaultfontsize
    refresh
    @item_max = 2
    @column_max = 2
    @commands = ["Borrar foto", "Volver"]
    draw_item(0, normal_color)
    draw_item(1, normal_color)
    self.index = 0
  end

  def refresh
    self.contents.clear
  end

  def draw_item(index, color)
    self.contents.font.color = color
    rect = Rect.new(160 + index * 160, 0, 128, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    self.contents.draw_text(rect, @commands[index], 1)
  end

  def update_cursor_rect
    self.cursor_rect.set(160 + index * 160, 0, 128, 32)
  end
end

class Window_Photo_Select < Window_Selectable
  def initialize
    super(0, 400, 640, 80)
    self.contents = Bitmap.new(width - 32, height - 32)
    #self.contents.font.name = $defaultfonttype
    #self.contents.font.size = $defaultfontsize
    refresh
    @item_max = 6
    @column_max = 6
    @commands = ["Foto 1", "Foto 2", "Foto 3", "Foto 4", "Foto 5", "Foto 6"]
    draw_item(0, normal_color)
    draw_item(1, normal_color)
    draw_item(2, normal_color)
    draw_item(3, normal_color)
    draw_item(4, normal_color)
    draw_item(5, normal_color)
    self.index = 0
  end

  def refresh
    self.contents.clear
  end

  def draw_item(index, color)
    self.contents.font.color = color
    rect = Rect.new(40 + index * 90, 0, 84, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    self.contents.draw_text(rect, @commands[index], 1)
  end

  def update_cursor_rect
    self.cursor_rect.set(40 + index * 90, 0, 84, 32)
  end
end

class Window_Photo_Display < Window_Base
  def initialize
    super(0, 0, 640, 400)
    self.contents = Bitmap.new(width - 32, height - 32)
    #self.contents.font.name = $defaultfonttype
    #self.contents.font.size = $defaultfontsize
    refresh
  end

  def refresh
    self.contents.clear
    @frame = Sprite.new
    @frame.bitmap = RPG::Cache.picture("PictureFrame")
    @frame.x = 75
    @frame.y = 20
    @frame.z = 9999
    @frame.zoom_x = 0.75
    @frame.zoom_y = 0.75
  end

  def dispose
    @frame.dispose
    super
  end
end

class Window_New_Picture < Window_Base
  def initialize(index)
    super(0, 0, 640, 400)
    self.contents = Bitmap.new(width - 32, height - 32)
    #self.contents.font.name = $defaultfonttype
    #self.contents.font.size = $defaultfontsize
    @index = index
    @temp_picture = Sprite.new
    refresh
  end

  def refresh
    self.contents.clear
    @frame = Sprite.new
    @frame.bitmap = RPG::Cache.picture("PictureFrame")
    @frame.x = 75
    @frame.y = 20
    @frame.z = 9999
    @frame.zoom_x = 0.75
    @frame.zoom_y = 0.75
    @temp_picture.bitmap = RPG::Cache.picture("Picture" + @index.to_s)
    @temp_picture.x = 75
    @temp_picture.y = 20
    @temp_picture.z = 9998
    @temp_picture.zoom_x = 0.75
    @temp_picture.zoom_y = 0.75
  end

  def dispose
    @frame.dispose
    @temp_picture.dispose
    super
  end
end

class Window_Save_Picture < Window_Selectable
  def initialize
    super(0, 400, 640, 80)
    self.contents = Bitmap.new(width - 32, height - 32)
    #self.contents.font.name = $defaultfonttype
    #self.contents.font.size = $defaultfontsize
    refresh
    @item_max = 2
    @column_max = 2
    @commands = ["Tomar foto", "Salir"]
    draw_item(0, normal_color)
    draw_item(1, normal_color)
    self.index = 0
  end

  def refresh
    self.contents.clear
  end

  def draw_item(index, color)
    self.contents.font.color = color
    rect = Rect.new(160 + index * 160 + 4, 0, 128 - 10, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    self.contents.draw_text(rect, @commands[index], 1)
  end

  def update_cursor_rect
    self.cursor_rect.set(160 + index * 160, 0, 128, 32)
  end
end

class Scene_Map
  alias bksm_photography_update update
  def update
    if $game_switches[BigKev::CAMERA_SWITCH] == true
      if Input.trigger?(Input::F5) # Takes a new picture
        for i in 1...7
          if $game_stored.picture_database[i] == nil
            # If slot is available
            Screen::shot("Picture" + i.to_s, 2)
            $game_player.straighten
            $scene = Scene_New_Picture.new(i, 0)
            return
          end
        end
        print "No tienes espacio para otra foto" # If no slot is available
        return
      end
      if Input.trigger?(Input::F6) # Calls the Photo Menu
        $game_player.straighten
        $scene = Scene_Photo_Menu.new
        return
      end
    end
    bksm_photography_update
  end
end

class Scene_Title
  alias bksm_camera_command_new_game command_new_game
  def command_new_game
    $game_stored = Game_Stored.new
    bksm_camera_command_new_game
  end
end

class Scene_Load
  def read_save_data(file)
    characters = Marshal.load(file)
    Graphics.frame_count = Marshal.load(file)
    $game_system = Marshal.load(file)
    $game_switches = Marshal.load(file)
    $game_variables = Marshal.load(file)
    $game_self_switches = Marshal.load(file)
    $game_screen = Marshal.load(file)
    $game_actors = Marshal.load(file)
    $game_party = Marshal.load(file)
    $game_troop = Marshal.load(file)
    $game_map = Marshal.load(file)
    $game_player = Marshal.load(file)
    
    $game_stored = Marshal.load(file)
    
    if $game_system.magic_number != $data_system.magic_number
      $game_map.setup($game_map.map_id)
      $game_player.center($game_player.x, $game_player.y)
    end
    $game_party.refresh
  end
end

class Scene_Save
  def write_save_data(file)
    characters = []
    for i in 0...$game_party.actors.size
      actor = $game_party.actors[i]
      characters.push([actor.character_name, actor.character_hue])
    end
    Marshal.dump(characters, file)
    Marshal.dump(Graphics.frame_count, file)
    $game_system.save_count += 1
    $game_system.magic_number = $data_system.magic_number
    Marshal.dump($game_system, file)
    Marshal.dump($game_switches, file)
    Marshal.dump($game_variables, file)
    Marshal.dump($game_self_switches, file)
    Marshal.dump($game_screen, file)
    Marshal.dump($game_actors, file)
    Marshal.dump($game_party, file)
    Marshal.dump($game_troop, file)
    Marshal.dump($game_map, file)
    Marshal.dump($game_player, file)
    
    Marshal.dump($game_stored, file)
  end
end

class Game_Event
  attr_reader :event
end
#===============================================================================
#
# Screenshot V2
#
# Screenshot Script v1 & screenshot.dll v1 created by: Andreas21
# Screenshot Script v2 created/edit by: cybersam
# the autor is found on a german board...
# the comments are added by me...
# since the autor didnt want to add any comment...
# so thats it from here...
# have fund with it... ^-^
#
# oh yea.. the needed command line is found in "Scene_Map" in "def update"
#
#===============================================================================

module Screen

  @screen = Win32API.new 'screenshot', 'Screenshot', 'llllpll', ''
  @readini = Win32API.new 'kernel32', 'GetPrivateProfileStringA', 'pppplp', 'l'
  @findwindow = Win32API.new 'user32', 'FindWindowA', 'pp', 'l'
  
  module_function
  
  #-----------------------------------------------------------------------------
  # here comes the stuff...
  # i add here the stuff for automatic change of the number for the screenshot
  # so it wont overrite the old one...
  # if you want to change so stuff change them in this line below
  # or you can change them in your command line... like
  # Screen::shot("screenshot", 2)
  # this change the name and the type of the screenshot
  # (0 = bmp, 1 = jpg and 2 = png)
  # ----------------------------------------------------------------------------
  def shot(file = "New_Picture", typ = 2)

    # to add the right extension...
    if typ == 0
      typname = ".bmp"
    elsif typ == 1
      typname = ".jpg"
    elsif typ == 2
      typname = ".png"
    end

    file_index = 0

    dir = "Graphics/Pictures/"

    # make the filename....
    file_name = dir + file.to_s + typname.to_s

    # make the screenshot.... Attention dont change anything from here on....
    @screen.call(0,0,640,480,file_name,handel,typ)
  end
  # find the game window...
  def handel
    game_name = "\0" * 256
    @readini.call('Game','Title','',game_name,255,".\\Game.ini")
    game_name.delete!("\0")
    return @findwindow.call('RGSS Player',game_name)
  end
end

Justo al principio del script verás esto
[line]CAMERA_SWITCH = 1 # Switch ID for camera use[/line]
Cambia el número por la ID del interruptor que usarás para la cámara.
De ese modo ésta solo se puede usar cuando el interruptor esté activo.
avatar
Wecoc
Administrador
Administrador



Créditos 12208

Gracias : 632

Volver arriba Ir abajo

Re: [XP] Ayuda con Script para Screenshots.

Mensaje por Lect el 2018-04-22, 13:43

¡Fantástico! Era el único script que no sabia como hacer funcionar bien en mi proyecto ¡Muchisimas gracias! Very Happy
avatar
Lect
Iniciado
Iniciado

0/3

Créditos 221

Gracias : 5

Volver arriba Ir abajo

Re: [XP] Ayuda con Script para Screenshots.

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


Permisos de este foro:
No puedes responder a temas en este foro.