Skrypt
Aktualny czas: 26-05-26, 06:31 Witaj! Przejdź do zakładki Logowanie lub Rejestracja


Wątek zamknięty 
[XP] Skrypt
WestGames Offline


Liczba postów: 49
Dołączył: 17-04-14

Pomógł: 0



Post: #1
Skrypt

Szukam skryptu na wyświetlanie filmów .avi do RMXP, pamiętam że było takie coś na starej ultimie ale jakoś nie mogę znaleść :/
07-06-14 16:29
Znajdź wszystkie posty użytkownika
"Pomógł" przyznał(a):
Yoroiookami Offline
*


Liczba postów: 985
Dołączył: 01-05-13

Pomógł: 137



Post: #2
RE: Skrypt

(07-06-14 16:29)WestGames napisał(a):  Szukam skryptu na wyświetlanie filmów .avi do RMXP, pamiętam że było takie coś na starej ultimie ale jakoś nie mogę znaleść :/

Znalazłem jeden skrypt, a że tłumaczenia dużo nie było - to też zrobiłem. Wygląda na dosyć prosty w użyciu. mrgreen

# Zeus Video Player v2.1.2 for XP, VX and VXace by Zeus81  / Translated by Yoroiookami
# Wolne do użytku komercyjnego
# Licencja : http://creativecommons.org/licenses/by/4.0/
# Kontakt : zeusex81@gmail.com
#
# Jak używać :
#   Graphics.play_movie( filename, cancellable, fit_to_screen )
#   - filename = ścieżka do pliku
#   - cancellable = true jeśli gracz ma mieć możliwość zatrzymania filmiku klikając
#                   Enter lub Escape, w przeciwnym wypadku false
#                   Ta opcja może zostać pominięta jeśli domyślna wartość wynosi true.
#   - fit_to_screen = true jeśli chcesz by wideo dopasowywało wielkość do ekranu
#                     w przypadku, gdy się nie mieści. False jeśli ma być wyśrodkowane.
#                     Jeżeli używasz skryptów typu "Fullscreen", true jest rekomendowane.
#                     Ta opcja może zostać pominięta jeśli domyślna wartość wynosi true.
#   np. : Graphics.play_movie( "Movies/prout.avi", true, true )
#   lub   Graphics.play_movie( "Movies/prout.avi" )
#
# Wybór kodeków :
#  Nie testowałem wszystkich, ale zdaje się wmv9 (standardowe) jest dobrym wyborem.
#   Możesz znaleźć nazwy dostępnych kodeków na tej stronie:
#   http://support.microsoft.com/kb/899113
#
# Obrazek w Tle :
#   Możesz wybrać obrazek tła gracza (w przypadku gdy wideo nie wypełnia całego okienka).
#   Domyślnie załadowany zostanie filmik "ZeusVideoPlayer" jeśli znaleziony jest w folderze Pictures (format nie ma znaczenia.
#   Jeżeli nie zostanie znaleziony, obraz będzie czarny.
#
# Znane błędy :
#  - Niektóre kodeki przy pełnym ekranie nie działają, gdy obraz ma być dopasowany.
#  - Jeżeli pełny ekran zostanie włączony przy pokazywaniu filmiku, wideo może się zawiesić.
#  - Czasami niemożliwe jest pokazanie tego samego filmiku.
#  - Dziwne zachowanie w pełnym ekranie.
#
# ZVP_OldAviMode :
#   Poniżej możecie zmienić wartość na "true", aby włączyć ten tryb.
#   Zalety:
#     - Bardziej stabilne, bez błędów.
#   Wady :
#     - Może pokazywać tylko filmiki typu '.avi'.
#     - Musisz użyć kodeków vfw dla wideo, a domyślne kodeki windowsa są ograniczone.
#       Lista niedziałających kodeków: MS RLE, MS Video 1, Cinepak, iyuv.  I wszystkie są do niczego.
#       Każdy inny kodek będzie musiał być instalowany ręcznie, przez gracza.
#       Jeśli to nie jest prolemem, znajdź dobre kodeki, typu vfw w internecie, np. x264vfw.
#     - Musisz użyć kodeków acm dla dźwięku.
#       Domyślne kodeki windowsa : mp3, pcm.
#       Możesz także znaleźć lepsze kodeki, jak aac acm.
  
module Graphics
  ZVP_OldAviMode = false
end
  
$imported ||= {}
$imported[:Zeus_Video_Player] = __FILE__
  
def xp?() false end ; def vx?() false end ; def vxace?() false end
RUBY_VERSION == '1.8.1' ? defined?(Hangup) ?
def xp?() true  end : def vx?() true  end : def vxace?() true  end
  
Cache = RPG::Cache if xp?
  
class String
  alias getbyte  []
  alias setbyte  []=
  alias bytesize size
end unless vxace?
  
module Zeus
  module Encode # 1.1
    MultiByteToWideChar = Win32API.new('kernel32', 'MultiByteToWideChar', 'iipipi'  , 'i')
    WideCharToMultiByte = Win32API.new('kernel32', 'WideCharToMultiByte', 'iipipipp', 'i')
    CodePages = {
      'ANSI'=>0, 'OEM'=>1, 'MAC'=>2, 'THREAD_ANSI'=>3, 'SYMBOL'=>42,
      'WINDOWS874'=>874, 'SHIFT_JIS'=>932, 'BIG5'=>950, 'WINDOWS1250'=>1250,
      'WINDOWS1251'=>1251, 'WINDOWS1252'=>1252, 'WINDOWS1253'=>1253,
      'WINDOWS1254'=>1254, 'WINDOWS1255'=>1255, 'WINDOWS1256'=>1256,
      'WINDOWS1257'=>1257, 'WINDOWS1258'=>1258, 'US_ASCII'=>20127,
      'ISO8859_1'=>28591, 'ISO8859_2'=>28592, 'ISO8859_3'=>28593,
      'ISO8859_4'=>28594, 'ISO8859_5'=>28595, 'ISO8859_6'=>28596,
      'ISO8859_7'=>28597, 'ISO8859_8'=>28598, 'ISO8859_9'=>28599,
      'ISO8859_13'=>28603, 'ISO8859_15'=>28605, 'ISO8859_8I'=>38598,
      'ISO2022_JP'=>50220, 'ISO2022_KR'=>50225, 'ISO2022_CN'=>50227,
      'EUC_JP'=>51932, 'EUC_CN'=>51936, 'EUC_KR'=>51949, 'GB2312'=>52936,
      'UTF7'=>65000, 'UTF8'=>65001, 'UTF16'=>-1
    }
    def self.encode(str, from, to, dchar=nil, dflag=nil)
      if from != -1
        l = MultiByteToWideChar.call(from, 0, str, str.bytesize, nil, 0)
        utf16 = [].pack('x') * (l*2)
        MultiByteToWideChar.call(from, 0, str, str.bytesize, utf16, l)
      else utf16 = str
      end
      if to != -1
        l = WideCharToMultiByte.call(to, 0, utf16, utf16.bytesize/2, nil, 0, dchar, dflag)
        str = [].pack('x') * l
        WideCharToMultiByte.call(to, 0, utf16, utf16.bytesize/2, str, l, dchar, dflag)
      else str = utf16
      end
      case to
      when 20127; str.force_encoding('US-ASCII')
      when 65001; str.force_encoding('UTF-8')
      when    -1; str.force_encoding('UTF-16LE')
      end if vxace?
      str
    rescue raise($!, $!.message, caller(vxace? ? 2 : 1))
    end
    def self.method_missing(method, str, *options)
      from, to = *method.to_s.upcase.split('_TO_', 2).map! {|s| CodePages[s]}
      super unless from and to
      encode(str, from, to, *options)
    rescue raise($!, $!.message, caller(vxace? ? 2 : 1))
    end
  end
end
  
module Graphics
  DefWindowProc       = Win32API.new('user32', 'DefWindowProc'      , 'iiii', 'i')
  DestroyWindow       = Win32API.new('user32', 'DestroyWindow'      , 'i'   , 'i')
  EnableWindow        = Win32API.new('user32', 'EnableWindow'       , 'ii'  , 'i')
  FindWindow          = Win32API.new('user32', 'FindWindow'         , 'pp'  , 'i')
  GetClientRect       = Win32API.new('user32', 'GetClientRect'      , 'ip'  , 'i')
  GetForegroundWindow = Win32API.new('user32', 'GetForegroundWindow', ''    , 'i')
  GetMessage          = Win32API.new('user32', 'GetMessage'         , 'piii', 'i')
  GetWindowLong       = Win32API.new('user32', 'GetWindowLong'      , 'ii'  , 'i')
  PostMessage         = Win32API.new('user32', 'PostMessage'        , 'iiii', 'i')
  RedrawWindow        = Win32API.new('user32', 'RedrawWindow'       , 'ipii', 'i')
  SetWindowLong       = Win32API.new('user32', 'SetWindowLong'      , 'iii' , 'i')
  MciGetErrorString   = Win32API.new('winmm' , 'mciGetErrorStringW' , 'ipi' , 'i')
  MciSendString       = Win32API.new('winmm' , 'mciSendStringW'     , 'ppii', 'i')
    
  HWND = FindWindow.call('RGSS Player', nil)
    
  class << self
    def play_movie(filename, cancellable = true, fit_to_screen = true)
      @zvp ||= {:buffer => [].pack('x') * 256}
      @zvp[:filename] = Dir["#{filename}.*"][0] || filename
      @zvp[:cancellable] = cancellable
      @zvp[:fit_to_screen] = fit_to_screen
      return unless open_video_player
      back_sprite = Sprite.new
      back_sprite.z = 0x7FFF_FFFF
      begin
        cached = true
        back_sprite.bitmap = Cache.picture('ZeusVideoPlayer')
        back_sprite.zoom_x = width  / back_sprite.bitmap.width.to_f
        back_sprite.zoom_y = height / back_sprite.bitmap.height.to_f
      rescue
        cached = false
        back_sprite.bitmap = Bitmap.new(1, 1)
        back_sprite.bitmap.set_pixel(0, 0, Color.new(0,0,0))
        back_sprite.zoom_x = width
        back_sprite.zoom_y = height
      end
      frame_reset
      update
      update_video_player
      back_sprite.bitmap.dispose unless cached
      back_sprite.dispose
    ensure
      close_video_player
    end
    def width()  640 end unless method_defined?(:width)
    def height() 480 end unless method_defined?(:height)
  private
    def mci(command)
      error = mci_silent(command)
      return true if error == 0
      MciGetErrorString.call(error, @zvp[:buffer], @zvp[:buffer].bytesize/2)
      print(mci_result, "\nCommand : ", command)
      return false
    end
    def mci_silent(command)
      command = Zeus::Encode.utf8_to_utf16("#{command}\0")
      MciSendString.call(command, @zvp[:buffer], @zvp[:buffer].bytesize/2, HWND)
    end
    def mci_result
      str = Zeus::Encode.utf16_to_utf8(@zvp[:buffer])
      str[0, str.index("\0")]
    end
    def open_video_player(position=0)
      if ZVP_OldAviMode
        return false unless mci("open \"#{@zvp[:filename]}\" type AVIVideo alias ZeusVideoPlayer")
        return false unless mci("window ZeusVideoPlayer handle #{HWND}")
        return false unless mci("play ZeusVideoPlayer from #{position} notify")
      else
        return false unless mci("open \"#{@zvp[:filename]}\" type MPEGVideo style Child parent #{HWND} alias ZeusVideoPlayer")
        return false unless mci("play ZeusVideoPlayer from #{position} notify")
        return false unless mci('status ZeusVideoPlayer window handle')
        @zvp[:hwnd] = mci_result.to_i
        EnableWindow.call(@zvp[:hwnd], 0)
        style = GetWindowLong.call(HWND, -16) #GWL_STYLE
        SetWindowLong.call(HWND, -16, style | 0x02000000) #WS_CLIPCHILDREN
      end
      return true
    end
    def close_video_player
      if !ZVP_OldAviMode and @zvp[:hwnd]
        DestroyWindow.call(@zvp[:hwnd])
        @zvp[:hwnd] = nil
      end
      mci_silent('stop ZeusVideoPlayer')
      mci_silent('close ZeusVideoPlayer')
    end
    def resize_video_player
      if mci_silent('where ZeusVideoPlayer source') == 0
        x, y, w, h = *mci_result.split(' ', 4).map! {|s| s.to_i}
        GetClientRect.call(HWND, @zvp[:buffer])
        client_w, client_h = *@zvp[:buffer].unpack('x8L2')
        if @zvp[:fit_to_screen]
          ratio = w / h.to_f
          w, h = client_w, (client_w / ratio).round
          h, w = client_h, (client_h * ratio).round if h > client_h
        end
        x, y = (client_w-w)/2, (client_h-h)/2
        window = ZVP_OldAviMode ? 'destination' : 'window'
        mci_silent("put ZeusVideoPlayer #{window} at #{x} #{y} #{w} #{h}")
      end
      RedrawWindow.call(@zvp[:hwnd] || HWND, nil, 0, 0)
    end
    def update_video_player
      focus = false
      loop do
        GetMessage.call(@zvp[:buffer], 0, 0, 0)
        DefWindowProc.call(*msg = @zvp[:buffer].unpack('L4'))
        if focus != (HWND == GetForegroundWindow.call)
          focus = !focus
          mci_silent("#{focus ? 'resume' : 'pause'} ZeusVideoPlayer")
          resize_video_player
        end
        next unless focus
        Input.update
        case msg[1]
        when 0x0012; exit #WM_QUIT
        when 0x0100 #WM_KEYDOWN
          next if msg[3][30] == 1
          case msg[2]
          when 0x70, 0x7B #VK_F1, VK_F12
            focus = false
            mci_silent('pause ZeusVideoPlayer')
            PostMessage.call(*msg)
            update
          when 0x74, 0x75 #VK_F5, VK_F6
            next if !$imported[:Zeus_Fullscreen] or vx_fullscreen?
            update
            resize_video_player
          when 0x0D, 0x1B #VK_RETURN, VK_ESCAPE
            mci_silent('stop ZeusVideoPlayer') if @zvp[:cancellable]
          end
        when 0x0104 #WM_SYSKEYDOWN
          next if msg[2] != 0x0D or msg[3][30] == 1
          next if $imported[:Zeus_Fullscreen] and Disable_VX_Fullscreen
          if ZVP_OldAviMode
            PostMessage.call(*msg)
            update
            resize_video_player
          else
            next if mci_silent('status ZeusVideoPlayer position') != 0
            position = mci_result.to_i
            close_video_player
            PostMessage.call(*msg)
            update
            break unless open_video_player(position)
            resize_video_player
          end
        else
          mci_silent('status ZeusVideoPlayer mode')
          break if mci_result == 'stopped'
        end
      end
    end
    if xp?
      alias anti_hangup_update_video_player update_video_player
      def update_video_player
        anti_hangup_update_video_player
      rescue Hangup
        retry
      end
    end
  end
end

[Obrazek: mt4dzY7.png]
[Obrazek: k5KQGOe.png]
07-06-14 17:03
Znajdź wszystkie posty użytkownika
"Pomógł" przyznał(a):
WestGames Offline


Liczba postów: 49
Dołączył: 17-04-14

Pomógł: 0



Post: #3
RE: Skrypt

Dzięki wielkie :D
07-06-14 17:05
Znajdź wszystkie posty użytkownika
"Pomógł" przyznał(a):
Wątek zamknięty 


Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości

Kontakt | Ultima Forum | Wróć do góry | Wróć do forów | Wersja bez grafiki | RSS
Powered By MyBB. © 2013 MyBB Group. All Rights Reserved.
Skórka by Ayene.