O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

BlackMouse

Iniciado por Nandikki, 03/02/2013 às 12:42

BlackMouse

Autor: Dax
Versão: 1.6
Plataforma: Xp, Vx e VxAce




O script, permite a introdução do Mouse. Assim, do modo funcionando com o Rpg Maker, funciona tanto no RmVx quanto no RmXp, ou seja e multi-plataforma funciona nos três makers que possuí suporte ao Rgss, basta algumas configurações sua;

Importante: Para usar o script de Mouse, você deve conter uma imagem, para o Mouse, se não, não dará para você visualizar o Mouse! Ok?! A imagem deve estar na pasta "Graphics/Pictures." É ela deve estar nomeada de "Mouse"! Mais da para mudar isto com o script.
Importante: Qualquer erro, me avise para eu tentar corrigi-lo
Importante: Para que funcione corretamente o clique (Realmente para funcionar) você deve ter um módulo Input, completo lhe recomendo o do Raizen884, postarei o dele, porem só com o básico




Input - Raizen884 Básico
Spoiler
#=============================================================================
# • INPUT -> Raizen
#=============================================================================
module Input
  module_function
  @trigger_keys = []
  @index = []
  GetKeyState    = Win32API.new('user32',    'GetAsyncKeyState', 'i',     'i')
  def press(key)
    GetKeyState.call(key) != 0
  end
  def trigger(key)
    unless  GetKeyState.call(key) == 0
     @trigger_keys.include?(key) ? (return false) : @trigger_keys.push(key)
     return true
    else
      @trigger_keys.delete(key) if @trigger_keys.include?(key)
      return false
    end
  end
  def repeat(key)
    unless  GetKeyState.call(key) == 0
      @trigger_keys.push(key) unless @trigger_keys.include?(key) 
      index = @trigger_keys.index(key)
      @index[index] = 0 unless @index[index]
      @index[index] += 1
      return true if @index[index] == 1
      @index[index] >= 30 && @index[index] % 4 == 1 ? (return true) : (return false)
    else
      index = @trigger_keys.index(key) if @trigger_keys.include?(key)
      @index[index] = nil if index
    end
  end
end
#==============================================================================
# • INPUT -> Raizen
#==============================================================================
class << Input
  alias raizen_trigger? trigger?
  alias raizen_repeat? repeat?
  alias raizen_press? press?
  def trigger?(key)
    key.is_a?(Integer) ? trigger(key) : raizen_trigger?(key)
  end
  def repeat?(key)
    key.is_a?(Integer) ? repeat(key) : raizen_repeat?(key)
  end
  def press?(key)
    key.is_a?(Integer) ? press(key) : raizen_press?(key)
  end
end
[close]

BlackMouse
Spoiler
#==============================================================================
# • BlackMouse
#==============================================================================
# Autor: Dax
# Versão: 1.6
# Plataforma: VxAce, Xp e Vx
#==============================================================================
# • Descrição:
#------------------------------------------------------------------------------
#  Permite a funcionalidade do Mouse no Maker!
#==============================================================================
# • Comandos: 
#------------------------------------------------------------------------------
# BlackMouse.start || Inicializa, o script!
# BlackMouse.update || Atualiza as posições do cursor!
# BlackMouse.x || Valor da coordenada X do cursor!
# BlackMouse.y || Valor da coordenada Y do cursor!
# BlackMouse.graphic("string") || Opção de mudar o gráfico do cursor!
# BlackMouse.show(boolean) || Opção de esconder ou manter o gráfico do cursor!
# BlackMouse.left || Valor do botão esquerdo do Mouse!
# BlackMouse.right || Valor do botão direito do Mouse!
# BlackMouse.middle || Valor do botão central do Mouse!
# BlackMouse.area(x,y,width,height) -> Verifica se o Mouse esta na área de algo!
#==============================================================================
# • Como criar:
#------------------------------------------------------------------------------
# » Como verificar se o Mouse está na área de tal "sprite":
# if nome_do_sprite.mouse_in_area?
# end
#------------------------------------------------------------------------------
# » Como verificar se o Mouse está na área de tal "coisa":
# if BlackMouse.area(x, y, width, height)
# end
#------------------------------------------------------------------------------
# » Como fazer um code, com a verificação de que o Mouse clicou em alguma coisa?
# A onde, você pegou este script, deve de ter um exemplo de código!
#------------------------------------------------------------------------------
#==============================================================================
module BlackMouse
  extend self
  #----------------------------------------------------------------------------
  # • Constantes
  #----------------------------------------------------------------------------
  RPG_MAKER = "XP" # XP ou VX
  
  if RPG_MAKER == "VXACE" or RPG_MAKER == "VX"
    WINDOW_WIDTH = 544
    WINDOW_HEIGHT = 416
  elsif RPG_MAKER == "XP"
    WINDOW_WIDTH = 640
    WINDOW_HEIGHT = 480
  end
  APPLY_BORDERS = true
  #----------------------------------------------------------------------------
  # • Api's
  #----------------------------------------------------------------------------
  MouseShowCursor = Win32API.new("user32", "ShowCursor", "i", "i")
  CursorPosition = Win32API.new('user32', 'GetCursorPos', 'p', 'i')
  ScreenToClient = Win32API.new('user32', 'ScreenToClient', %w(l p), 'i')
  ReadIni = Win32API.new('kernel32', 'GetPrivateProfileStringA', %w(p p p p l p), 'l')
  FindWindow = Win32API.new('user32', 'FindWindowA', %w(p p), 'l')
  #--------------------------------------------------------------------------
  # • start (Inicialização)
  #--------------------------------------------------------------------------
  def start
    @cursor = Sprite.new
    @cursor.z = 100000
    graphic  "Mouse"
    MouseShowCursor.call(0)
    update
  end
  #--------------------------------------------------------------------------
  # • graphic = string (Mudar gráfico do Mouse!)
  #--------------------------------------------------------------------------
  def graphic(string)
    if RPG_MAKER == "VXACE" or RPG_MAKER == "VX"
      @cursor.bitmap = Cache.picture(string.to_s)
    elsif RPG_MAKER == "XP"
      @cursor.bitmap = RPG::Cache.picture(string.to_s)
    end
  end
  #--------------------------------------------------------------------------
  # • show = boolean (Mostrar ou esconder o cursor do Mouse!)
  #--------------------------------------------------------------------------
  def show(boolean)
    @cursor.visible = boolean
  end
  #--------------------------------------------------------------------------
  # • update (Atualização das coordenadas)
  #--------------------------------------------------------------------------
  def update
    @cursor.x, @cursor.y = position
  end
  #--------------------------------------------------------------------------
  # • cursor
  #--------------------------------------------------------------------------
  def cursor
    @cursor
  end
  #--------------------------------------------------------------------------
  # • x (Coordenada X do Mouse)
  #--------------------------------------------------------------------------
  def x
    @cursor.x
  end
  #--------------------------------------------------------------------------
  # • y (Coordenada Y do Mouse)
  #--------------------------------------------------------------------------
  def y
    @cursor.y
  end
  #--------------------------------------------------------------------------
  # • position (Posição do Mouse!)
  #--------------------------------------------------------------------------
  def self.position
    x, y = get_client_position
    if APPLY_BORDERS
      if x < 0
        x = 0
      elsif x >= WINDOW_WIDTH
        x = WINDOW_WIDTH - 1
      end
      if y < 0
        y = 0
      elsif y >= WINDOW_HEIGHT
        y = WINDOW_HEIGHT - 1
      end
    end
    return x, y
  end
  #--------------------------------------------------------------------------
  # • get_client_position (Posição original do Mouse!)
  #--------------------------------------------------------------------------
  def self.get_client_position
    pos = [0, 0].pack('ll')
    CursorPosition.call(pos)
    ScreenToClient.call(WINDOW, pos)
    return pos.unpack('ll')
  end
  #--------------------------------------------------------------------------
  # • find_window (Tamanho da window)
  #--------------------------------------------------------------------------
  def self.find_window
    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
  #--------------------------------------------------------------------------
  # • Verifica se o mouse está na área 
  #--------------------------------------------------------------------------
  def self.area(x, y, width, height)
    return (self.x >= x && self.x < x + width &&
        self.y >= y && self.y < y + height) 
  end
  #--------------------------------------------------------------------------
  # • right (Valor do botão direito do Mouse)
  #--------------------------------------------------------------------------
  def right
    0x01
  end
  #--------------------------------------------------------------------------
  # • left (Valor do botão esquerdo do Mouse)
  #--------------------------------------------------------------------------
  def left
    0x02
  end
  #--------------------------------------------------------------------------
  # • center (Valor do botão central do Mouse)
  #--------------------------------------------------------------------------
  def middle
    0x04
  end
  WINDOW = find_window
end

#==============================================================================
# • Input
#==============================================================================
class << Input
  def trp?(key)
    self.trigger?(key) or self.repeat?(key) or self.press?(key)
  end
  alias dax_black_mouse_update update
  def update
    dax_black_mouse_update
    BlackMouse.update
  end
end

#==============================================================================
# • DataManager
#==============================================================================
if BlackMouse::RPG_MAKER == "VXACE"
 class << DataManager
    alias dax_black_mouse_init init
    def init
      dax_black_mouse_init
      BlackMouse.start
    end
  end
end

#==============================================================================
# • Sprite
#==============================================================================
class Sprite
  #----------------------------------------------------------------------------
  # • Verifica se o mouse está na área 
  #----------------------------------------------------------------------------
  def mouse_in_area?
    #return false if self.bitmap.nil?
    return (BlackMouse.x >= self.x && BlackMouse.x < self.x + self.src_rect.width &&
      BlackMouse.y >= self.y && BlackMouse.y < self.y + self.src_rect.height) 
  end
end
[close]

Exemplo de código:
Spoiler
  BlackMouse.start
 command = false
 sprite = [Sprite.new].each do |sprite|
  sprite.bitmap = Bitmap.new(64, 64)
  sprite.bitmap.fill_rect(0, 0, 64, 64, Color.new(255, 255, 255))
 end
 
 loop do 
  Graphics.update
  Input.update
  if sprite[0].mouse_in_area?
    sprite[0].opacity = 128
    command = true if Input.trp?(BlackMouse.right)
    msgbox("Viu?") if command && Input.trp?(BlackMouse.right)
  else
    sprite[0].opacity = 255
    command = false if Input.trp?(BlackMouse.right)
  end
 end
[close]

Exemplo de script feito por ele ou Screen:
Spoiler
[close]




Créditos:

Dax: Das-AquaticX
Raizen884: Módulo Input

Bem, esse tópico já existe, com essa mesma formatação O.o
Você pode conferir o tópico nesse link: Dax BlackMouse || v1.6
Portanto, tópico trancado.
To Die Is To Find Out If Humanity Ever Conquers Death