Project1

标题: 发一个在RM游戏中插入视频的VX脚本 [打印本页]

作者: xingbanruge    时间: 2010-6-20 16:37
标题: 发一个在RM游戏中插入视频的VX脚本
这是在偶汉化一个外国游戏时发现的,原先奇怪为什么游戏体积那么大,后来发现光是film视频就占了一半的体积。貌似在国内的游戏中没发现有人用过视频的,这里把脚本贡献出来啦,呵呵。
  1. #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  2. #                            -  Game_Film II - reloaded ^^
  3. #  par berka
  4. #                          www.rpgmakervx-fr.com                                          
  5. #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  6. #  Rgss 12                  v 1.0
  7. #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  8. #                          -Utilisation-
  9. # écrivez dans un event, commande insérer un script:
  10. #
  11. # #minimum requis:
  12. # [film]                # obligatoire !
  13. # film = monfilm.avi    # ou mpg... nom du fichier à lire
  14. #
  15. # #configuration optionnelle, l'ordre n'est pas important
  16. # mettre les 4 coordonnées sinon aucune !
  17. # x = 12                # position horizontale
  18. # y = 1                  # position verticale
  19. # w = 150                # redimensionnement du film: largeur
  20. # h = 150                # redimensionnement du film: hauteur
  21. #
  22. # full = true            # active (ou pas) le plein écran dans le mode fenetré
  23. # vol = 750              # entre 0 et 1000 volume sonore du film
  24. # bass = 999            # entre 0 et 1000 volume des basses: tres faible nuance
  25. # aig = 250              # entre 0 et 1000 volume des aigus: tres faible nuance
  26. # #commandes:
  27. # bouton B pour quitter, C pour interrompre/reprendre la lecture
  28. #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  29. # pourquoi un nouveau script de video ?
  30. # simplement pour ne plus avoir à répondre à toutes ces questions sur la video !
  31. # ce script est le plus simple possible: j'ai testé toutes les erreurs possibles
  32. # l'appel est personalisable
  33. # le format de la video est auto-détecté
  34. # ajout du plein écran
  35. # de la gestion du volume
  36. # Un dossier Films est automatiquement créé dans votre projet.
  37. # vous y déposez les vidéos à lire !
  38. # Il vaut mieux prendre de petites videos: parce que les démos de 200 Mo...
  39. #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

  40. class Game_Film
  41.   def initialize(hash)
  42.     hash.has_key?(:film) ? film=hash[:film] : return
  43.     hash.has_key?(:x) ? @x=hash[:x]+" " : @x="0"
  44.     hash.has_key?(:y) ? @y=hash[:y]+" " : @y="0"
  45.     hash.has_key?(:w) ? @w=hash[:w]+" " : @w=""
  46.     hash.has_key?(:h) ? @h=hash[:h]+" " : @h=""
  47.     hash.has_key?(:vol) ? @vol=hash[:vol]+" " : @vol="1000"
  48.     hash.has_key?(:bass) ? @bass=hash[:bass]+" " : @bass="1000"
  49.     hash.has_key?(:aig) ? @aig=hash[:aig]+" " : @aig="1000"
  50.     hash.has_key?(:pos) ? @pos="at pos #{hash[:pos].to_i*1000} " : @pos="at pos 0 "
  51.     @full=hash[:full] if hash.has_key?(:full)
  52.     @full&dim_ecran !=[640,480] ? @plee="fullscreen " : @plee=""
  53.     @type=" "
  54.     @type=" type mpegvideo" if File.extname(film)==(".mpg"||".mpeg")
  55.     @type=" type avivideo" if File.extname(film)==".avi"
  56.     @nom='./Films/'+film
  57.     (p "fichier #{@nom} non trouvé";return) if !FileTest.exist?(@nom)
  58.     @film=Win32API.new('winmm','mciSendString','ppll','v')
  59.     lecture
  60.   end
  61.   def handle
  62.     jeu="\0"*256
  63.     ini=Win32API.new('kernel32','GetPrivateProfileStringA','pppplp', 'l')
  64.     ini.call('Game','Title','',jeu,255,".\\Game.ini")
  65.     return Win32API.new('user32','FindWindowEx','llpp','l').call(0,0,nil,jeu.delete!("\0"))
  66.   end
  67.   def lecture
  68.     v,t,status,pause=version,Time.now," "*255,false
  69.     @film.call("open #{@nom} alias FILE#{@type} style child parent "+handle.to_s,0,0,0)
  70.     @film.call("put FILE window at #{@x}#{@y}#{@w}#{@h}",status,255,0)
  71.     @film.call("setaudio File volume to #{@vol}",status,255,0)
  72.     @film.call("setaudio File bass to #{@bass}",status,255,0)
  73.     @film.call("setaudio File trebble to #{@bass}",status,255,0)
  74.     @film.call("play FILE #{@plee} notify",status,255,handle)
  75.     loop{sleep(0.1)
  76.       Input.update
  77.       @film.call("status FILE mode notify",status,255,0)
  78.       break if status.unpack("aaaa")=="stop".split(//)||Input.trigger?(Input::B)
  79.       if Input.trigger?(Input::C)
  80.         if !pause;@film.call("pause FILE notify",status,255,handle);pause=true
  81.         else;@film.call("play FILE #{@plee} notify",status,255,handle);pause=false
  82.         end      
  83.       end
  84.       (t=maj(t))if v=='xp'}
  85.     @film.call("close FILE notify",0,0,handle)
  86.     $scene=Scene_Map.new
  87.   end
  88.   def dim_ecran
  89.     lw=Win32API.new('user32','GetSystemMetrics','i','i')
  90.     return lw.call(0),lw.call(1)
  91.   end
  92.   def maj(t)
  93.     (Graphics.update;return Time.now)if t.sec<=Time.now.sec-9||t.min !=Time.now.min
  94.     return t
  95.   end
  96.   def version;FileTest.exist?('./Data/scripts.rvdata') ? 'vx': 'xp';end
  97. end
  98. Dir.open("./Films") rescue Dir::mkdir("./Films",0777)
  99. class Game_Interpreter;def eval(script);cmd_eval(script);end;end#rmvx
  100. class Interpreter;def eval(script);cmd_eval(script);end;end#rmxp
  101. def cmd_eval(script)
  102.   if script.include?("[film]")
  103.     hash={}
  104.     script.gsub!("[film]"){}
  105.     list=script.split("\n")
  106.     list.each{|e|e.gsub!(" "){};f=e.split("=");hash[f[0].to_sym]=f[1] if !f[1].nil?}
  107.     Game_Film.new(hash)
  108.   else;return Kernel.eval(script)
  109.   end
  110. end
复制代码

作者: 淘金鸭    时间: 2010-6-20 18:02
占领
作者: sqj1982    时间: 2010-6-20 22:54
有范例吗?




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1