Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : RMXP -> Maussteuerung?



Maisaffe
22.12.2005, 20:56
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

Maisaffe
23.12.2005, 14:04
Das heißt wohl nein, oder? :/

Dennis

Der Drake
23.12.2005, 16:25
En masse, gibt's die, hier eines das ich grad zur Hand hab: (afair von Cybersam)


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

Maisaffe
23.12.2005, 17:02
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

Caine Luveno
23.12.2005, 18:18
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.

Der Drake
24.12.2005, 10:58
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. ^^°