Sujet: [VX] Coder en ruby en cours de jeu Jeu 4 Déc 2008 - 21:31
pas mal de recherches...
et voici le résultat
Permet de coder en ruby en cours de jeu... via une popup windows... ce qui laisse présager plein d'autres possibilités ! extraction et réédition des messages... affichage de commandes d'events en cours...
touche F5 pour masquer/afficher la popup
a placer au dessus de main:
Code:
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # Editeur Ruby pour RMVX v.2.2 # berka http://www.rpgmakervx-fr.com #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # touche F5 pour afficher ou masquer la console #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Getkeystate=Win32API.new("user32","GetAsyncKeyState",'i','i') class Editeur def initialize @text=[] @getprivatestring=Win32API.new('kernel32','GetPrivateProfileString','pppplp','l') @findwindow=Win32API.new('user32','FindWindow',%w(p p),'i') @createwindow=Win32API.new("user32","CreateWindowEx",'lpplllllllll','l') @showwindow=Win32API.new('user32','ShowWindow',%w(l l),'l') @destroywindow=Win32API.new('user32','DestroyWindow','p','l') @iswindow=Win32API.new('user32','IsWindow','p','l') @getwindowtext=Win32API.new('user32','GetWindowText',%w(n p n ),'l') @dim_ecran=Win32API.new('user32','GetSystemMetrics','i','i') @getwindowrect=Win32API.new('user32','GetWindowRect',%w(l p),'i') @updatewindow=Win32API.new('user32','UpdateWindow','p','i') @setwindowtext=Win32API.new('user32','SetWindowText',%w(p p),'i') end def handle title="\0"*256 @getprivatestring.call("Game","Title","",title,256,".//Game.ini") title.delete!("\0") return @findwindow.call("RGSS Player",title) end def start (fermer_fen;return) if !@fen.nil? fenetre loop do Graphics.update update break if Getkeystate.call(0x0D)&0x01==1 return if Getkeystate.call(0x74)&0x01==1 end if !@fen.nil? eval(recup_text) rescue ( Exception msg="Type d'Erreur:\n\t#{$!.class}\n\n" line=$!.message[7,1].to_i msg+="Numéro de ligne de l'Erreur:\n\t#{line}\n\n" lines=recup_text.split(/\n/) msg+="Ligne de l'Erreur:\n\t#{lines[(line-1)]}\n\n" msg+="Script exécuté:\n\t#{recup_text}" print(msg)) end fermer_fen end def fenetre(t="",x=dim[0],y=dim[3],w=dim[2]-x,h=24) @fen=@createwindow.call((0x00000100|0x00000200),"edit",t,( (0x4000000|0x80000000|0)|0x02000000),x,y,w,h,handle,0,0,0) aff_fen end def aff_fen(bool=true);bool ? @showwindow.call(@fen,1) : @showwindow.call(@fen,0);end def dims_ecran;return @dim_ecran.call(0),@dim_ecran.call(1);end def update;@updatewindow.call(@fen);end def fermer_fen;@destroywindow.call(@fen);@fen=nil;end def ajouter_text;@setwindowtext.call(@fen,@text.to_s);end def fenetre? (return false) if @fen.nil? @iswindow.call(@fen)==0 ? (return false):(return true) end def recup_text res=" "*255 @getwindowtext.call(@fen,res,0x3e80) rescue nil return res end def dim rect=[0,0,0,0].pack('l4') @getwindowrect.call(handle,rect) x,y,w,h=rect.unpack('l4') return x,y,w,h end end $editeur=Editeur.new module Input class << self if @update_aliased.nil? alias :update_alias :update def update $editeur.start if Getkeystate.call(0x74)&0x01==1 update_alias if !$editeur.fenetre? rescue update_alias end @update_aliased = true end end end
Dernière édition par berka le Lun 8 Déc 2008 - 19:41, édité 3 fois
Matsuo Kaito
Age : 33 Inscrit le : 27/06/2008 Messages : 10881
Sujet: Re: [VX] Coder en ruby en cours de jeu Ven 5 Déc 2008 - 6:37
C'est la version 2 ?
Merci Berka ^^"
{ bien qu'en tant que maudit des scripts je ne m'en servirai jamais xD }
MirainoHikari
Ex-Admin-Script
Age : 42 Inscrit le : 26/05/2008 Messages : 2360
Sujet: Re: [VX] Coder en ruby en cours de jeu Ven 5 Déc 2008 - 12:46
Oh quel domage que je ne sois pas sur mon ordi présentement! Je teste ça dès aujourd'hui... Berka? aurais-tu réussit à faire un inputbox sans m'avertir? Vilain Berka...
berka
Maire Lv.9
Age : 34 Inscrit le : 15/10/2008 Messages : 351
Sujet: Re: [VX] Coder en ruby en cours de jeu Ven 5 Déc 2008 - 14:39
désolé de te ne pas t'avoir prévenu... oui, c'est une sorte de console... le seul probleme c'est que je suis obligé de désactiver la maj input de rmvx pendant l'affichage de la popup
MirainoHikari
Ex-Admin-Script
Age : 42 Inscrit le : 26/05/2008 Messages : 2360
Sujet: Re: [VX] Coder en ruby en cours de jeu Ven 5 Déc 2008 - 15:29
Je viens de tester. Tout simplement GÉNIAL!!!! Un grand merci.
edit: presque génial j'ai eu quelques problèmes. Premièrement, ton script a capter une erreur et m'a afficher ton message d'erreur. Ok, jusque là ça va, mais par la suite, peu importe ce que j'écris, il n'exécute plus. Même F5 affiche la fenêtre, mais ne la masque pas. J'ai eu beau fermer et redémarrer VX, il ne veut plus rien savoir. T'as une idée de ce qui a pu se produire??
berka
Maire Lv.9
Age : 34 Inscrit le : 15/10/2008 Messages : 351
Sujet: Re: [VX] Coder en ruby en cours de jeu Ven 5 Déc 2008 - 15:44
je sais pas trop... j'vais essayer de liberer la fenetre dans la fermeture du player
La Meche
Flibustier Lv.21
Age : 30 Inscrit le : 24/05/2008 Messages : 3234
Sujet: Re: [VX] Coder en ruby en cours de jeu Ven 5 Déc 2008 - 16:05
Est ce que on peut utiliser une sorte
Code:
scanf
Pour RPG VX ? (scanf = Entrer de donnée dans une variable en C/C++)
MirainoHikari
Ex-Admin-Script
Age : 42 Inscrit le : 26/05/2008 Messages : 2360
Sujet: Re: [VX] Coder en ruby en cours de jeu Ven 5 Déc 2008 - 16:25
En ruby, c'est gets. Comme de raison, gets n'est pas implémenter dans VX. Mais avec ce code, le gets risque de pouvoir être possible (enfin). À suivre.
berka
Maire Lv.9
Age : 34 Inscrit le : 15/10/2008 Messages : 351
Sujet: Re: [VX] Coder en ruby en cours de jeu Ven 5 Déc 2008 - 17:15
voila, les principaux bugs sont corrigés !
berka
Maire Lv.9
Age : 34 Inscrit le : 15/10/2008 Messages : 351
Sujet: Re: [VX] Coder en ruby en cours de jeu Lun 8 Déc 2008 - 20:02
@miraino: pour activer gets:
Code:
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # Fonction gets Rgss2 # par berka #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Getkeystate=Win32API.new("user32","GetAsyncKeyState",'i','i') Getprivatestring=Win32API.new('kernel32','GetPrivateProfileString','pppplp','l') Findwindow=Win32API.new('user32','FindWindow','pp','i') Createwindow=Win32API.new("user32","CreateWindowEx",'lpplllllllll','l') Destroywindow=Win32API.new('user32','DestroyWindow','p','l') Getwindowtext=Win32API.new('user32','GetWindowText','npn','l') Getwindowrect=Win32API.new('user32','GetWindowRect','lp','i') Updatewindow=Win32API.new('user32','UpdateWindow','p','i') Setwindowtext=Win32API.new('user32','SetWindowText','pp','i') Showwindow=Win32API.new('user32','ShowWindow','ll','l') def handle title="\0"*256 Getprivatestring.call("Game","Title","",title,256,".//Game.ini") title.delete!("\0") return Findwindow.call("RGSS Player",title) end def gets (Destroywindow.call(@fen);@fen=nil;return) if !@fen.nil? @fen=Createwindow.call((0x00000100|0x00000200),'edit','',( (0x4000000|0x80000000|0)|0x02000000),dim[0],dim[3],dim[2]-dim[0],24,handle,0,0,0) Showwindow.call(@fen,1) res=" "*0x100 loop{Graphics.update;Updatewindow.call(@fen) break if Getkeystate.call(0x0D)&0x01==1 return if Getkeystate.call(0x74)&0x01==1} Getwindowtext.call(@fen,res,0x100) Destroywindow.call(@fen);@fen=nil return res.delete!("\0").gsub!(" "){""} end def dim rect=[0,0,0,0].pack('l4') Getwindowrect.call(handle,rect) x,y,w,h=rect.unpack('l4') return x,y,w,h end
et voila:
Code:
print gets
MirainoHikari
Ex-Admin-Script
Age : 42 Inscrit le : 26/05/2008 Messages : 2360
Sujet: Re: [VX] Coder en ruby en cours de jeu Mer 14 Jan 2009 - 19:33
Merci berka. Ce gets sera apprécié de plusieurs. (principalement dans le cadre du cours).
La Meche
Flibustier Lv.21
Age : 30 Inscrit le : 24/05/2008 Messages : 3234
Sujet: Re: [VX] Coder en ruby en cours de jeu Mer 14 Jan 2009 - 19:35
QUOI ?! Enfin une fonction gets !!! Merci berka ! Je vais pouvoir faire des jeux super ! Merci beaucoup