Ogłoszenie 

Uwaga! To forum jest w trybie offline.
Wszelką pomoc uzyskasz pod adresem
forum.ultimateam.pl


Administracja Forum


Poprzedni temat «» Następny temat
System Wiadomości by Sabikku.
Autor Wiadomość
Sabikku 




Nagrody:
UF i UFT2 Winner

Ranga RM:
4 gry

Pomógł: 73 razy
Dołączył: 04 Kwi 2010
Posty: 428
Wysłany: Pon 29 Lis, 2010 21:11
System Wiadomości by Sabikku.
~ System Wiadomości by Sabikku [XP] ~

Krótki opis.
Skrypt rozbudowuje opcje związane z wyświetlaniem wiadomości.

Autor skryptu.
Sabikku.

Kompatybilność.
Tylko XP.

Skrypt.
Spoiler:

Kod:
# ================================================================
# Sabikku AMS.
# ----------------------------------------------------------------
# * by Sabikku
# * zamthir.net/forum
# * ultimateam.pl
# ================================================================

=begin

 I.Ustawienia dostępne z poziomu komendy 'script' w zdarzeniach:
  * ustawienia związane z czionką
    ams.default_color = Color.new(r, g, b) <-- domyślny kolor czcionki w wiadomościach, gdzie r, g i b to liczby z przedziału 0-255 oznaczające wartości kolorów czerwonego, zielonego i niebieskiego;
    ams.font_name = "Nazwa Czcionki" <-- zmiana czcionki;
    ams.font_size = liczba <-- zmiana wielkości czcionki;
    ams.bold = true / false <-- pogrubienie tekstu;
    ams.italic = true / false <-- kursywa tekstu;
  * inne ustawienia związane z tekstem
    ams.letter_by_letter = true / false <-- tryb wyświetlania liter, true - po jednej, false - wszystkie na raz;
    ams.beep_sound = "tekst" <-- nazwa dźwięku z folderu SE odtwarzanego przy każdej wypisanej literze, "" - brak;
    ams.text_speed = liczba <-- szybkosc wyswietlania tekstu, im większa liczba, tym wolniej wyswietlane są literki;
    ams.text_skipping = true / false <-- zezwolenie 'przyspieszania' wyświetlania tekstu z pomocą spacji, true - można przyspieszać, false - nie można;
    ams.center = true / false <-- wycentrowanie tekstu do środka okienka, w poziomie;
    ams.automatic_interpunction_waiting = true / false <-- automatyczne dodawanie pauz po każdym znaku interpunkcyjnym;
  * ustawienia związane z oknem wiadomości
    ams.event_nr = liczba <-- wskazanie, czy okienko ma być wyśrodkowane nad głową postaci, -2 - wyłączone, -1 - gracz, 0 - to zdarzenie, 1+ - zdarzenie o takim id;
    ams.tail = true / false <-- wyświetlanie komiksowego 'ogonka' pod wiadomościami, do którego potrzeba dodatkowej grafiki w folderze Windowskins, true - wyświetlanie, false - brak;
    ams.default_position = liczba <-- umiejscowienie okienka względem postaci, 0 - nad postacią, 1 - pod postacią;
    ams.opacity = liczba <-- przezroczystość okna wiadomości, 0-255;
    ams.back_opacity = liczba <-- przezroczystość tła okna wiadomości, 0-255;
    ams.resizable = true / false <-- dostosowywanie wymiarów okna do ilości tekstu, true - dopasowywanie, false - brak;
    ams.multipler = liczba <-- zaokrąglenie wymiarów okna (przydatne przy zapętlających się windowskinach), jeśli nie wiesz co to jest - ustaw 1;
    ams.xy_modifiers = [x,y] <-- liczby oznaczające modyfikatory współrzędnych okna wiadomości, x - modyfikator x, y - modyfikator y;
  * ustawienia związane z dodatkowym okienkiem imienia
    ams.name = "tekst" <-- tekst, który będzie wyświetlany w okienku z imieniem, "" - brak okienka;
    ams.name_config_same_as_message = true / false <-- przekopiowanie ustawień czcionki z okienka wiadomości do okienka z imieniem, true - przekopiowanie, false - ustawienie wartości z poniższych ustawień;
    ams.name_default_color = Color.new(r, g, b) <-- domyślny kolor czcionki w okienku z imieniem, gdzie r, g i b to liczby z przedziału 0-255 oznaczające wartości kolorów czerwonego, zielonego i niebieskiego;
    ams.name_font_name = "Nazwa Czcionki" <-- zmiana czcionki w okienku z imieniem;
    ams.name_font_size = liczba <-- zmiana wielkości czcionki w okienku z imieniem;
    ams.name_bold = true <-- pogrubienie tekstu w okienku z imieniem;
    ams.name_italic = false <-- kursywa tekstu w okienku z imieniem;
    ams.name_opacity = liczba <-- przezroczystość okna z imieniem, 0-255;
    ams.name_back_opacity = liczba <-- przezroczystość tła okna z imieniem, 0-255;
    ams.name_xy_modifiers = [x, y] <-- liczby oznaczające modyfikatory współrzędnych okna z imieniem, x - modyfikator x, y - modyfikator y;
  * ustawienia związane ze wstrząsem ekranem (wstrząs wywoływany w wiadomości z pomocą \q)
    ams.quake_sound = "tekst" <-- nazwa pliku dźwiękowego z folderu SE, który będzie odtwarzany przy rozpoczęciu wstrząsu;
    ams.quake_power = liczba <-- moc wstrząsu, 1-10;
    ams.quake_speed = liczba <-- szybkość wstrząsu, 1-10.

 II.Ustawienia dostępne z poziomu komendy 'pokaż wiadomość' ('Show Message') w zdarzeniach:
  * standardowe ustawienia
    \c[n] <-- zmiana koloru tekstu, n - numer 0-7;
    \v[n] <-- wstawienie wartości zmiennej o id n;
    \n[n] <-- wstawienie imienia bohatera o id n;
    \g <-- pokazanie okienka z ilością złota;
  * ustawienia z amsa
    \p[n] <-- odczekanie n klatek, zanim pojawią się kolejne litery (pauza);
    \w[n] <-- zmiana szybkości wyświetlania tekstu na n;
    \b <-- włączenie/wyłączenie pogrubienia;
    \i <-- włączenie/wyłączenie kursywy;
    \s[tekst] <-- odtworzenie dźwięku SE o nazwie podanej w nawiasie;
    \bs <-- zmiana nazwy dźwięku SE odtwarzanego przy każdej wypisywanej literze;
    \e[n] <-- umiejscowienie okna nad postacią, -2 - żadną, -1 - graczem, 0 - tym zdarzeniem, 1+ - zdarzeniem o takim id;
    \q[n] <-- uruchomienie wstrząsu o długości równej n;
    \oa[n] <-- pokazanie ikony pancerza o id n;
    \ow[n] <-- pokazanie ikony broni o id n;
    \oi[n] <-- pokazanie ikony przedmiotu o id n;
    \nm[tekst] <-- zmiana tekstu w okienku z imieniem (brak tekstu - brak okienka);
    \ts <-- włączenie / wyłączenie 'przyspieszania' wyświetlania tekstu z pomocą spacji.   
=end

# ================================================================
#  Początkowe, startowe ustawienia.
# ================================================================
class Message_Options
  attr_accessor :default_color, :font_name, :font_size, :bold, :italic
  attr_accessor :letter_by_letter, :beep_sound, :text_speed, :text_skipping, :center, :automatic_interpunction_waiting
  attr_accessor :event_nr, :tail, :default_position, :opacity, :back_opacity, :resizable, :multipler, :xy_modifiers
  attr_accessor :name, :name_config_same_as_message, :name_height, :name_default_color, :name_font_name, :name_font_size, :name_bold, :name_italic, :name_xy_modifiers, :name_opacity, :name_back_opacity
  attr_accessor :quake_sound, :quake_power, :quake_speed
  def initialize
    # Czcionka. ------
    @default_color = Color.new(255, 255, 255)
    @font_name = "Sylfaen"
    @font_size = 27
    @bold = false
    @italic = false
    # Inne ustawienia tekstu. ------
    @letter_by_letter = true
    @beep_sound = ""
    @text_speed = 0
    @text_skipping = true
    @center = true
    @automatic_interpunction_waiting = true
    # Okno wiadomości. ------
    @event_nr = -1
    @tail = false
    @default_position = 0
    @opacity = 255
    @back_opacity = 255
    @resizable = true
    @multipler = 1 
    @xy_modifiers = [+0, +0]
    # Ustawienia okienka z imieniem.    ------
    @name = ""
    @name_config_same_as_message = false
    @name_default_color = Color.new(255, 255, 220)
    @name_font_name = "Sylfaen"
    @name_font_size = 24
    @name_bold = true
    @name_italic = false
    @name_xy_modifiers = [+0, +16]
    @name_opacity = 255
    @name_back_opacity = 255
    # Wstrząs. (\q) -------
    @quake_sound = "052-Cannon01"
    @quake_power = 6
    @quake_speed = 3
  end
end
# ================================================================

# ================================================================
class Interpreter
  # Message.
  def ams
    return $game_system.message
  end
  # Command 101.
  alias sabams_command_101 command_101
  def command_101
    sabams_command_101
    if $game_system.message.automatic_interpunction_waiting
        $game_temp.message_text.gsub!('\'', '\'\p[1]')
        $game_temp.message_text.gsub!('\"', '\"\p[2]')
        $game_temp.message_text.gsub!(',', ',\p[5]')
        $game_temp.message_text.gsub!(';', ';\p[7]')
        $game_temp.message_text.gsub!('.', '.\p[11]')
        $game_temp.message_text.gsub!('!', '!\p[15]')
        $game_temp.message_text.gsub!('?', '?\p[13]')
    end
  end
  # Script command fix.
  def command_355
    script = @list[@index].parameters[0] + "\n"
    loop do
      if @list[@index+1].code == 655
        script += @list[@index+1].parameters[0] + "\n"
      else
        break
      end
      @index += 1
    end
    result = eval(script)
    return true
  end
end
# ================================================================

# ================================================================
class Window_Base < Window
end
# ================================================================

# ================================================================
class Spriteset_Map
  attr_reader :character_sprites
end
class Scene_Map
  attr_reader :spriteset
end
# ================================================================

# ================================================================
class Game_System
  attr_accessor :message
  alias sabams_initialize initialize
  def initialize
    sabams_initialize
    @message = Message_Options.new
  end
end
# ================================================================

# ================================================================
class Window_Message < Window_Selectable 
  # Initialize. --------------------------------------------------
  alias sabams_initialize initialize
  def initialize
    sabams_initialize
    # Ustawienia.
    @text_skipping = false
    @wait_count = 0
    @tail_sprite = nil
    @name_window = nil
    @lines_sizes = []
  end
 
  # Normal color. ------------------------------------------------
  alias sabams_normal_color normal_color
  def normal_color
    return $game_system.message.default_color
  end
 
  # Obliczanie szerokosci poszczegolnych lini. -------------------
  def calculate_lines_sizes
    result = [1]
    text = $game_temp.message_text.dup
    gsubbing_text(text, true)
    x = 0; y = 0
    if text == text.gsub("\n",'')
      text += "\n"
    end
    while ((c = text.slice!(/./m)) != nil)
      if c == "\001" # Ikona.
        x += 24
        next
      end
      if c == "\n" # Nowa linia.
        result[y] = x
        x = 0; y += 1
      end
      x += self.contents.text_size(c).width # Zwykly znak.
    end
    @lines_sizes = result
  end
 
  # Reset window. ------------------------------------------------
  def reset_window   
    self.contents.font.name = $game_system.message.font_name
    self.contents.font.size = $game_system.message.font_size
    self.contents.font.bold = $game_system.message.bold
    calculate_lines_sizes
    # Sprawdzenie tagu \e[n].
    if $game_temp.message_text.gsub!(/\\[Ee]\[(\-*[0-9]+)\]/) {""} != nil
      $game_system.message.event_nr = $1.to_i
    end   
    # Sprawdzenie tagu \nm[n].
    if $game_temp.message_text.gsub!(/\\[Nn][Mm]\[((\\n\[[0-9]+\]| |[a-zżźA-ZŻŹ0-9])+)\]/) {""} != nil
      s = $1.to_s
      s.gsub!(/\\[Nn]\[([0-9]+)\]/) do
        $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
      end
      $game_system.message.name = s
    end   
    # Zmiana szerokosci / wysokosci okna.
    if $game_system.message.resizable
      # Resize.
      self.width = 32 + 8 + @lines_sizes.max
      self.height = 32 + 8 + @lines_sizes.size * 32
      self.contents = Bitmap.new(width - 32, height - 32)
    else     
      self.width = 480
      self.height = 160
      self.contents = Bitmap.new(width - 32, height - 32)
    end
    # Dostosowanie do zaokrąglenia.
    if self.width % $game_system.message.multipler != 0
      self.width += $game_system.message.multipler-(self.width%$game_system.message.multipler)
    end
    if self.height % $game_system.message.multipler != 0
      self.height += $game_system.message.multipler-(self.height%$game_system.message.multipler)
    end
    # Współrzędne.
    if $game_system.message.event_nr >= -1
      # Wycentrowanie.
      event = $game_system.map_interpreter.get_character($game_system.message.event_nr)
      char_height = RPG::Cache.character(event.character_name,0).height / 4
      char_width = RPG::Cache.character(event.character_name,0).width / 4
      x = event.screen_x - self.width / 2
      x = [[x,0].max, 640-self.width].min
      y = [[y,0].max, 640-self.height].min
      y1 = event.screen_y - char_height - self.height - ($game_system.message.tail ? 16 : 0)
      y2 = event.screen_y + ($game_system.message.tail ? 16 : 0)
      if $game_system.message.default_position == 0
        y = y1 >= 0 ? y1 : y2
      else
        y = y2 <= 580-self.height ? y2 : y1
      end
      self.x = x
      self.y = y
    else
      # Normalne.
      self.x = 320 - self.width / 2
      if $game_temp.in_battle
        self.y = 16
      else
        case $game_system.message_position
        when 0  # up
          self.y = 16
        when 1  # middle
          self.y = 160
        when 2  # down
          self.y = 304
        end
      end
    end
    # Przezroczystość.
    if $game_system.message_frame == 0
      self.opacity = $game_system.message.opacity
    else
      self.opacity = 0
    end
    self.back_opacity = $game_system.message.back_opacity
    # Modyfikatory.
    self.x += $game_system.message.xy_modifiers[0]
    self.y += $game_system.message.xy_modifiers[1]
  end
 
  # Text update. --------------------------------------------------
  def text_update
    if @text == "" then @text = nil end
    if @wait_count > 0
      @wait_count -=1
    elsif @text != nil
      # -->
      @wait_count = 0
      # <--
      # Get 1 text character in c (loop until unable to get text)
      c = @text.slice!(/./m)
      # \\
      if c == "\000"
        # Return to original text
        c = "\\"
      end
      # Kolor. \c[n]
      if c == "\001"
       # Change text color
       @text.sub!(/\[([0-9]+)\]/, "")
       color = $1.to_i
        if color >= 0 and color <= 7
          self.contents.font.color = text_color(color)
        end
        return
      end
      # Złoto. \g
      if c == "\002"
        # Make gold window
        if @gold_window == nil
          @gold_window = Window_Gold.new
          @gold_window.x = 560 - @gold_window.width
          if $game_temp.in_battle
            @gold_window.y = 192
          else
            @gold_window.y = self.y >= 128 ? 32 : 384
          end
          @gold_window.opacity = self.opacity
          @gold_window.back_opacity = self.back_opacity
        end
        return
      end
      # Czekanie. \p[n]
      if c == "\003"
        @text.sub!(/\[([0-9]+)\]/, "")
        delay = $1.to_i
        @wait_count += delay if (delay > 0) and (!@text_skipping)
        return
      end
      # Pogrubienie/kursywa. \b \i
      if c == "\004"
        $game_system.message.bold = !$game_system.message.bold       
        return
      end     
      if c == "\005"
        $game_system.message.italic = !$game_system.message.italic
        return
      end 
      # Dźwięk. \s[tekst]
      if c == "\006"
        @text.sub!(/\[([a-zA-Z]+)\]/, "")
        Audio.se_play("Audio/SE/" + $1.to_s, 100, 100)
        return
      end     
      # Zmiana szybkosci. \w[n]
      if c == "\010"
        @text.sub!(/\[([0-9]+)\]/, "")       
        $game_system.message.text_speed = $1.to_i
        return
      end
      # Ikony broni, przedmiotów, pancerzy. \oa[n] \oi[n] \ow[i]
      if c == "\011"
        @text.sub!(/\[([0-9]+)\]/, "")
        item = $data_items[$1.to_i];
        if item != nil
          icon = RPG::Cache.icon(item.icon_name)
          unless $game_system.message.center
            self.contents.blt(@x + 4, @y * 32, icon, Rect.new(0, 0, 24, 24))
          else
            self.contents.blt(self.contents.width/2 + @x - @lines_sizes[@y].to_i/2, 32 * @y, icon, Rect.new(0, 0, 24, 24))
          end
          @x += 24
          Audio.se_play("Audio/SE/" + $game_system.message.beep_sound.to_s, 100, 100) if $game_system.message.beep_sound != ""
          # Czekanie, jeśli tak ustawiono i nie naciśnięto spacji. -->
          if ($game_system.message.letter_by_letter) and (!@text_skipping)
            @wait_count += $game_system.message.text_speed
          else
            text_update # Szybkie pisanie, rekurencja.
          end
        end
        return
      end
      if c == "\013"
        @text.sub!(/\[([0-9]+)\]/, "")
        item = $data_armors[$1.to_i];
        if item != nil
          icon = RPG::Cache.icon(item.icon_name)
          unless $game_system.message.center
            self.contents.blt(@x + 4, @y * 32, icon, Rect.new(0, 0, 24, 24))
          else
            self.contents.blt(self.contents.width/2 + @x - @lines_sizes[@y].to_i/2, 32 * @y, icon, Rect.new(0, 0, 24, 24))
          end
          @x += 24
          # Dźwięk.
          Audio.se_play("Audio/SE/" + $game_system.message.beep_sound.to_s, 100, 100) if $game_system.message.beep_sound != ""
          # Czekanie, jeśli tak ustawiono i nie naciśnięto spacji. -->
          if ($game_system.message.letter_by_letter) and (!@text_skipping)
            @wait_count += $game_system.message.text_speed
          else
            text_update # Szybkie pisanie, rekurencja.
          end
        end
        return
      end
      if c == "\014"
        @text.sub!(/\[([0-9]+)\]/, "")
        item = $data_weapons[$1.to_i];
        if item != nil
          icon = RPG::Cache.icon(item.icon_name)
          unless $game_system.message.center
            self.contents.blt(@x + 4, @y * 32, icon, Rect.new(0, 0, 24, 24))
          else
            self.contents.blt(self.contents.width/2 + @x - @lines_sizes[@y].to_i/2, 32 * @y, icon, Rect.new(0, 0, 24, 24))
          end
          @x += 24
          # Dźwięk.
          Audio.se_play("Audio/SE/" + $game_system.message.beep_sound.to_s, 100, 100) if $game_system.message.beep_sound != ""
          # Czekanie, jeśli tak ustawiono i nie naciśnięto spacji. -->
          if ($game_system.message.letter_by_letter) and (!@text_skipping)
            @wait_count += $game_system.message.text_speed
          else
            text_update # Szybkie pisanie, rekurencja.
          end
        end
        return
      end   
      # Beep sound. \bs[tekst]
      if c == "\015"
        @text.sub!(/\[((\-|[a-zA-Z0-9])+)\]/, "")
        $game_system.message.beep_sound = $1.to_s
        return
      end
      # Wstrząs. \q[n]
      if c == "\016"
        @text.sub!(/\[([0-9]+)\]/, "")       
        if $game_system.message.quake_sound != ""
          Audio.se_play("Audio/SE/" + $game_system.message.quake_sound.to_s, 100, 100)
        end
        $game_screen.start_shake($game_system.message.quake_power, $game_system.message.quake_speed, $1.to_i)
        return
      end
      # Text skipping. \ts
      if c == "\017"
        $game_system.message.text_skipping = !$game_system.message.text_skipping
        return
      end 
      # Nowa linia. \n
      if c == "\n"
        # Update cursor width if choice
        @cursor_width = self.contents.width-16
        # Add 1 to y
        @y += 1
        @x = 0
        unless ($game_system.message.letter_by_letter)  # Szybkie pisanie, rekurencja.
          text_update
        end
        return
      end
      # Draw text
      self.contents.font.name = $game_system.message.font_name
      self.contents.font.size = $game_system.message.font_size
      self.contents.font.bold = $game_system.message.bold
      self.contents.font.italic = $game_system.message.italic
      unless $game_system.message.center
        self.contents.draw_text(4 + @x, 32 * @y, 40, 32, c)
      else
        self.contents.draw_text(self.contents.width/2 + @x - @lines_sizes[@y].to_i/2, 32 * @y, 40, 32, c)
      end
      # Add x to drawn text width
      @x += self.contents.text_size(c).width
      # Dźwięk.
      Audio.se_play("Audio/SE/" + $game_system.message.beep_sound.to_s, 100, 100) if $game_system.message.beep_sound != ""
      # Czekanie, jeśli tak ustawiono i nie naciśnięto spacji. -->
      if ($game_system.message.letter_by_letter) and (!@text_skipping)
        @wait_count += $game_system.message.text_speed
      else
        text_update # Szybkie pisanie, rekurencja.
      end
    end
  end
 
  # Gsubbing text. -----------------------------------------------
  def gsubbing_text(text, all=false)
    if all
      text.gsub!(/\\[VvNnCcGgPpBbIiSsEeQqWwTt](|[MmSs])\[\-*(((\\n\[[0-9]+\]|\-| |[a-zżźA-ZŻŹ0-9\*\!\\\#\$\^\&\(\)\[\:]))+)\]/) {""}
      text.gsub!(/\\[Oo][IiWwAa]\[([0-9]+)\]/) { "\001" } # Znacznik ikonki.
      return text
    end
    # Control text processing
    begin
      last_text = text.clone
      text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
    end until text == last_text   
    # Name window.
    text.gsub!(/\\[Nn][Mm]\[((\\n\[[0-9]+\]| |[a-zŻŻŹA-ZŻŹ0-9])+)\]/) { "" }
    # Actor name.
    text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
      $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
    end
    # Change "\\\\" to "\000" for convenience
    text.gsub!(/\\\\/) { "\000" }
    # Change "\\C" to "\001" and "\\G" to "\002"
    text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
    text.gsub!(/\\[Gg]/) { "\002" }
    # -->
    # Czekanie.
    text.gsub!(/\\[Pp]\[([0-9]+)\]/) { "\003[#{$1}]" }
    # Beep sound.
    text.gsub!(/\\[Bb][Ss]\[((\-|[a-zA-Z0-9])+)\]/) { "\015[#{$1}]" }
    # Pogrubienie / kursywa.
    text.gsub!(/\\[Bb]/) { "\004" }
    text.gsub!(/\\[Ii]/) { "\005" }
    # Dźwięk.
    text.gsub!(/\\[Ss]\[([a-zA-Z]+)\]/) { "\006[#{$1}]" }
    # Event nr.
    text.gsub!(/\\[Ee]\[\-*([0-9]+)\]/) { "" }
    # Zmiana szybkosci.
    text.gsub!(/\\[Ww]\[([0-9]+)\]/) { "\010[#{$1}]" }   
    # Ikonka pancerzy, broni lub przedmiotu.
    text.gsub!(/\\[Oo][Ii]\[([0-9]+)\]/) { "\011[#{$1}]" }
    text.gsub!(/\\[Oo][Aa]\[([0-9]+)\]/) { "\013[#{$1}]" }
    text.gsub!(/\\[Oo][Ww]\[([0-9]+)\]/) { "\014[#{$1}]" }
    # Wstrząs ekranem.
    text.gsub!(/\\[Qq]\[([0-9]+)\]/) { "\016[#{$1}]" }
    # Text skipping.
    text.gsub!(/\\[Tt][Ss]/) { "\017" }
    # <--
    return text
  end
 
  # Refresh. ------------------------------------------------------
  def refresh
    self.contents.clear
    self.contents.font.color = normal_color
    @x = @y = 0
    @cursor_width = 0
    # If waiting for a message to be displayed
    if $game_temp.message_text != nil
      @text = $game_temp.message_text
      gsubbing_text(@text)
    end
    # If choice
    if $game_temp.choice_max > 0
      @item_max = $game_temp.choice_max
      self.active = true
      self.index = 0
    end
    # If number input
    if $game_temp.num_input_variable_id > 0
      digits_max = $game_temp.num_input_digits_max
      number = $game_variables[$game_temp.num_input_variable_id]
      @input_number_window = Window_InputNumber.new(digits_max)
      @input_number_window.number = number
      @input_number_window.x = self.x + 8
      @input_number_window.y = self.y + $game_temp.num_input_start * 32
    end
    # Okienko z imieniem.
    if $game_system.message.name != ""
      refresh_name
    end
    # Ogonek.
    if $game_system.message.tail and $game_system.message.event_nr >= -1
      refresh_tail
    end
    # Szybkie pisanie liter.
    unless $game_system.message.letter_by_letter
      @text_skipping = true
    end
  end
 
  # Update. ------------------------------------------------------ 
  def update
    super
    # Wypisywanie kolejnych liter.
    text_update
    # Okienko z imieniem i ogonek.
    if $game_system.message.name != "" and @name_window.is_a?(Window_AmsName)
      @name_window.update
    end
    if $game_system.message.tail and $game_system.message.event_nr >= -1 and @tail_sprite
      @tail_sprite.update
    end
    # If fade in
    if @fade_in
      if Input.trigger?(Input::C)
        @text_skipping = true if $game_system.message.text_skipping
      end
      self.contents_opacity += 96
      if @input_number_window != nil
        @input_number_window.contents_opacity += 96
      end
      if self.contents_opacity == 255
        @fade_in = false
      end
      return
    end
    # If inputting number
    if @input_number_window != nil
      @input_number_window.update
      # Confirm
      if Input.trigger?(Input::C)
        $game_system.se_play($data_system.decision_se)
        $game_variables[$game_temp.num_input_variable_id] = @input_number_window.number
        $game_map.need_refresh = true
        # Dispose of number input window
        @input_number_window.dispose
        @input_number_window = nil
        terminate_message
      end
      return
    end
    # If message is being displayed
    if @contents_showing
      # If choice isn't being displayed, show pause sign
      if $game_temp.choice_max == 0
        # -->
        self.pause = false # :D
        # <--
      end
      # Cancel
      if Input.trigger?(Input::B)
        if $game_temp.choice_max > 0 and $game_temp.choice_cancel_type > 0
          $game_system.se_play($data_system.cancel_se)
          $game_temp.choice_proc.call($game_temp.choice_cancel_type - 1)
          terminate_message
        end
      end
      # Confirm
      if Input.trigger?(Input::C)
        # Przyspieszenie tekstu.
        if @text != nil
          @text_skipping = true if $game_system.message.text_skipping
        else
          if $game_temp.choice_max > 0
            $game_system.se_play($data_system.decision_se)
            $game_temp.choice_proc.call(self.index)
          end
          terminate_message
        end
      end
      return
    end
    # If display wait message or choice exists when not fading out
    if @fade_out == false and $game_temp.message_text != nil
      @contents_showing = true
      $game_temp.message_window_showing = true
      # <--
      @text_skipping = false
      # <--
      reset_window
      refresh
      Graphics.frame_reset
      self.visible = true
      self.contents_opacity = 0
      if @input_number_window != nil
        @input_number_window.contents_opacity = 0
      end
      @fade_in = true
      return
    end
    # If message which should be displayed is not shown, but window is visible
    if self.visible
      @fade_out = true
      self.opacity -= 96
      if self.opacity == 0
        self.visible = false
        @fade_out = false
        $game_temp.message_window_showing = false
      end
      return
    end
  end
 
  # Terminate message. -------------------------------------------
  alias sabams_terminate_message terminate_message
  def terminate_message
    sabams_terminate_message
    @tail_sprite.visible = false if @tail_sprite
    if @name_window
      @name_window.dispose
      @name_window = nil
    end
  end
 
  # Refresh tail. ------------------------------------------------
  def refresh_tail
    @tail_sprite.dispose if @tail_sprite.is_a?(Sprite)
    bit = RPG::Cache.windowskin($game_system.windowskin_name+' tail')
    @tail_sprite = Sprite.new
    @tail_sprite.bitmap = bit
    @tail_sprite.ox = @tail_sprite.bitmap.width/2
    @tail_sprite.oy = @tail_sprite.bitmap.height/2
    @tail_sprite.z = 9998
    @tail_sprite.opacity = $game_system.message.opacity
    event = $game_system.map_interpreter.get_character($game_system.message.event_nr)
    if (self.y+self.height) <= event.screen_y
      y = self.y + self.height
    else
      y = self.y
      @tail_sprite.angle = 180
    end
    x = event.screen_x
    if (self.x+self.width/2) > x   
      @tail_sprite.mirror = true unless @tail_sprite.angle == 180
    end
    @tail_sprite.x = x
    @tail_sprite.y = y
    @tail_sprite.visible = true
    @tail_sprite.opacity = self.opacity
  end
 
  # Refresh name window. -----------------------------------------
  def refresh_name
    @name_window.dispose if @name_window.is_a?(Window_AmsName)
    @name_window = Window_AmsName.new(self.x+$game_system.message.name_xy_modifiers[0], self.y+$game_system.message.name_xy_modifiers[1], $game_system.message.name)
  end
end
# ================================================================

# ================================================================
class Window_AmsName < Window_Base
  # Initialize. --------------------------------------------------
  def initialize(x, y, text)
    @text = text
    b=Bitmap.new(1,1)
    if $game_system.message.name_config_same_as_message
      b.font.name = $game_system.message.font_name
      b.font.size = $game_system.message.font_size
      b.font.bold = $game_system.message.bold
      b.font.italic = $game_system.message.italic
    else
      b.font.name = $game_system.message.name_font_name
      b.font.size = $game_system.message.name_font_size
      b.font.bold = $game_system.message.name_bold
      b.font.italic = $game_system.message.name_italic   
    end
    h = b.text_size("dj").height+16
    if h % $game_system.message.multipler != 0
      h += $game_system.message.multipler-(h%$game_system.message.multipler)
    end
    super(x, y-h, b.text_size(@text).width+20, h)
    self.contents = Bitmap.new(width-32, height-32)
    self.z = 9999 # o 1 więcej, niż Window_Message
    self.opacity = $game_system.message.name_back_opacity
    self.back_opacity = $game_system.message.name_back_opacity
    # Dostosowanie do zaokrąglenia.
    if self.width % $game_system.message.multipler != 0
      self.width += $game_system.message.multipler-(self.width%$game_system.message.multipler)
    end
    if self.height % $game_system.message.multipler != 0
      self.height += $game_system.message.multipler-(self.height%$game_system.message.multipler)
    end
    # Bitmapa do wypisywania tekstu.
    @spr = Sprite.new(self.viewport)
    @spr.x = self.x+10
    @spr.y = self.y
    @spr.z = 9999
    @spr.bitmap = Bitmap.new(self.width,self.height)
    @spr.bitmap.font.name = b.font.name
    @spr.bitmap.font.size = b.font.size
    @spr.bitmap.font.bold = b.font.bold
    @spr.bitmap.font.italic = b.font.italic
    refresh
  end
 
  # Refresh. -----------------------------------------------------
  def refresh
    @spr.bitmap.clear
    @spr.bitmap.font.color = normal_color
    @spr.bitmap.draw_text(0,0,@spr.bitmap.width,@spr.bitmap.height, @text) 
  end
 
  # Normal color. ------------------------------------------------
  alias sabams_normal_color normal_color
  def normal_color
    return ($game_system.message.name_config_same_as_message ? $game_system.message.default_color : $game_system.message.name_default_color)
  end
 
  alias sabams_dispose dispose
  def dispose
    @spr.dispose
    sabams_dispose
  end
end
# ================================================================



Demo.


Zrzuty.
Spoiler:



Instrukcja.
Demo nie prezentuje wszystkich opcji - pełną listę wraz z opisami znajdziesz w komentarzach na początku skryptu. Pod nimi rozpisane są też ustawienia początkowe (które można dowolnie modyfikować).

Spoiler:


Poza tym porównam z innymi AMSami:
* skrypt nie posiada tyle opcji co UMS i jest mniej skomplikowany, dzięki czemu działa o wiele szybciej;
* skrypt nie wymaga SDK, w przeciwieństwie do Multiple Message Windows - to też znacząco przyspiesza działanie;
* skrypt nie posiada błędów znanych z AMSa r4.



W razie problemów - pisać ;-) .
 
 
 
Czeliosss 



Ranga RM:
1 gra

Pomógł: 49 razy
Dołączył: 02 Lis 2009
Posty: 661
Skąd: Wa-wa
Wysłany: Pon 29 Lis, 2010 21:35
Super AMS. Gdyby robił na Xp to bym go na 100% użył.
________________________
...Amelanduil & FireBlade words will be remembered...
...Amelanduil & FireBlade acts will be remembered...
...Amelanduil & FireBlade never gonna die...

Nie pisać, bo nie odpiszę.
 
 
premek 



Preferowany:
RPG Maker VX

Dołączył: 30 Sty 2011
Posty: 13
Wysłany: Pon 31 Sty, 2011 15:48
A da się napisać tak jak na 2 obrazku :?: Bo nie znalazłem nic o tym
 
 
Czeliosss 



Ranga RM:
1 gra

Pomógł: 49 razy
Dołączył: 02 Lis 2009
Posty: 661
Skąd: Wa-wa
Wysłany: Pon 31 Sty, 2011 16:14
Cytat:
ams.tail = true / false <-- wyświetlanie komiksowego 'ogonka' pod wiadomościami, do którego potrzeba dodatkowej grafiki w folderze Windowskins, true - wyświetlanie, false - brak;

Czy to nie to?
________________________
...Amelanduil & FireBlade words will be remembered...
...Amelanduil & FireBlade acts will be remembered...
...Amelanduil & FireBlade never gonna die...

Nie pisać, bo nie odpiszę.
 
 
chRobal 




Preferowany:
RPG Maker VX

Pomógł: 5 razy
Dołączył: 10 Lip 2010
Posty: 150
Skąd: się biorą dzieci ?
Wysłany: Czw 17 Lut, 2011 19:17
Mam pytanko jak zrobić żeby wiadomość była w takim dymku ja na ss'sie bo nie mogę znaleźć
________________________

 
 
Ayene 




Ranga RM:
4 gry

Pomogła: 232 razy
Dołączyła: 18 Wrz 2007
Posty: 2424
Wysłany: Czw 17 Lut, 2011 20:01
Z tym komiksowym dymku? Ściągnij demo, wrzuć do folderu Windowskins plik 'comic.png' i 'comic tail.png'. W treści zdarzenia przed wyświetleniem tekstu zmień okno za pomocą polecenia "Change Window", wybierz owe okno i korzystając z polecenia 'script' wpisz:
Kod:
ams.tail = true

Ewentualnie zajrzyj do dema, wszystko jest w nim wyjaśnione.
________________________


 
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group | Template Klam by Ayene