Ergebnis 1 bis 6 von 6

Thema: RMXP -> Maussteuerung?

  1. #1

    RMXP -> Maussteuerung?

    Tach.
    Habe vor nem Jahr von ner Gruppe RMXP Übersetzern (Jap-> Deutsch) erfahren, das es möglich wär per Ruby ein Mausskript zu schreiben. Gibt es schon eines?

    Dennis

  2. #2
    Das heißt wohl nein, oder? :/

    Dennis

  3. #3
    En masse, gibt's die, hier eines das ich grad zur Hand hab: (afair von Cybersam)
    Code:
    module Mouse
      gsm = Win32API.new('user32', 'GetSystemMetrics', 'i', 'i')
      #--------------------------------------------------------------------------
      @cursor_pos = Win32API.new('user32', 'GetCursorPos', 'p', 'i')
      #--------------------------------------------------------------------------
      $RMouse_BUTTON_L = 0x01        # left mouse button
      $RMouse_BUTTON_R = 0x02        # right mouse button
      $RMouse_BUTTON_M = 0x04        # middle mouse button
      $RMouse_BUTTON_4 = 0x05        # 4th mouse button
      $RMouse_BUTTON_5 = 0x06        # 5th mouse button
      #--------------------------------------------------------------------------
      GetKeyState = Win32API.new("user32","GetAsyncKeyState",['i'],'i')
      GetKeyboardState = Win32API.new("user32","GetKeyState",['i'],'i')
      GetSetKeyState = Win32API.new("user32","SetKeyboardState",['i'],'i')
      #--------------------------------------------------------------------------
      module_function
      #--------------------------------------------------------------------------
      def mouse_global_pos
        pos = [0, 0].pack('ll')
        if @cursor_pos.call(pos) != 0
          return pos.unpack('ll')
        else
          return nil
        end
      end
      #--------------------------------------------------------------------------
      def mouse_pos(catch_anywhere = false)
        x, y = screen_to_client(*mouse_global_pos)
        width, height = client_size
        if catch_anywhere or (x >= 0 and y >= 0 and x < width and y < height)
          return x, y
        else
          return $m.x, $m.y
        end
      end
      #--------------------------------------------------------------------------
      def del
        if @oldcursor == nil
          return
        else
          @SetClassLong.call(handel ,-12, @oldcursor)
          @oldcursor = nil
        end
      end
      #--------------------------------------------------------------------------
      def keyb(rkey)
         if GetKeyState.call(rkey) != 0
           return 1
         end
         return 0
      end
      #--------------------------------------------------------------------------
      def keyboard(rkey)
        GetKeyState.call(rkey) & 0x01 == 1  #
      end
      #--------------------------------------------------------------------------
      def key(rkey, key = 0)
        GetKeyboardState.call(rkey) & 0x01 == key #
      end
    end
    
    $scr2cli = Win32API.new('user32', 'ScreenToClient', %w(l p), 'i')
    $client_rect = Win32API.new('user32', 'GetClientRect', %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')
    
    def screen_to_client(x, y)
      return nil unless x and y
      pos = [x, y].pack('ll')
      if $scr2cli.call(hwnd, pos) != 0
        return pos.unpack('ll')
      else
        return nil
      end
    end
    
    def hwnd
      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
    
    def client_size
      rect = [0, 0, 0, 0].pack('l4')
      $client_rect.call(hwnd, rect)
      right, bottom = rect.unpack('l4')[2..3]
      return right, bottom
    end

  4. #4
    Hm, okay Danke.
    Jetzt musst Du mir nur noch sagen, wie ich im Spiel damit umgehe kann und wo ich den Code einfügen sollte.

    Ansonsten: Kann man mit dem XP keine Videos mehr abspielen? :shocked:

    Dennis

  5. #5
    Zitat Zitat von dennis_meckel
    Hm, okay Danke.
    Jetzt musst Du mir nur noch sagen, wie ich im Spiel damit umgehe kann und wo ich den Code einfügen sollte.

    Ansonsten: Kann man mit dem XP keine Videos mehr abspielen? :shocked:

    Dennis
    Dazu gibts auch massig Scripte.

    Ich meine hier im Technikforum ist irgendwo n Thread gepinnt wo massig Links drin stehen.

    Da gibts alles mögliche.... von Maussteuerung, zum SideViewKS, geänderter Titelscreen etc. da wirst du sicher fündig.

  6. #6
    Zitat Zitat von dennis_meckel
    Hm, okay Danke.
    Jetzt musst Du mir nur noch sagen, wie ich im Spiel damit umgehe kann und wo ich den Code einfügen sollte.

    Ansonsten: Kann man mit dem XP keine Videos mehr abspielen? :shocked:

    Dennis
    Ich würde es mal in ein neues Skript über alle anderen Skripte kopieren (falls du es in den darunterliegenden Skripten benutzt) und ansonsten brauchst du halt Ruby Kenntnisse um das ganze anständig zu verwenden.

    Es wäre möglich passende Interpreter Methoden zu schreiben, sodass du das ganze auch von Events aus benutzen kannst... aber wozu die Mühe, mit Ruby gehts eh einfacher und schneller, imo.

    Ansonsten... Mouse.mouse_pos gibt dir die Maus Position innerhalb des Fensters zurück, Mouse.keyboard($RMouse_BUTTON_L) gibt dir ein true zurück falls die linke Maustaste gedrückt ist und ein false falls nichts. (sprich, du kannst es in einem if benutzen)
    Genauso gehts mit den anderen globalen Variablen. Eigentlich ziemlich selbsterklärend und einfach zu benutzen. ^^°

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •