UltimaForum

Wsparcie [XP] - Skrypt na imiona

MomoMarcin3 - Nie 14 Mar, 2010 17:25
Temat postu: Skrypt na imiona
Potrzebuje skryptu aby wyświetlał imie wczasie rozmowy nad oknem rozmowy.
Ayene - Sro 17 Mar, 2010 20:42

Wejdź w klasę Window_Messag i znajdź fargament:
Kod:
      text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
        $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
      end

Zamień go na:
Kod:
text.gsub!(/\\[Nn]\[([0-9]+)\]/) { "\003[#{$1}]" }


Następnie znajdź:
Kod:
if c == "\n"

i przed nim wklej:
Kod:
        if c == "\003"   
          text.sub!(/\[([0-9]+)\]/, "")         
          create_name_window($game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : "")
          next
        end


Na samym końcu klasy przed ostatnim end wklej:
Spoiler:

Kod:
    def create_name_window(text = "")
    a = Bitmap.new(1, 1)
    text_size = a.text_size(text).width
    a.dispose
    close_name_window
    @name_window = Window.new
    @name_window.windowskin = RPG::Cache.windowskin(@windowskin_name)
    @name_window.height = Font.default_size + 16
    @name_window.x = self.x
    case $game_system.message_position
    when 0               
      @name_window.y = self.y + self.height
    when 1, 2
      @name_window.y = self.y - @name_window.height
    end
    @name_window.z = self.z + 1
    @name_window.width = text_size + 32
    @name_window.contents = Bitmap.new(1, 1)
    @name_window.back_opacity = 200
    @sprite = Sprite.new
    @sprite.x = @name_window.x + 5
    @sprite.y = @name_window.y + 7
    @sprite.z = @name_window.z + 1
    @sprite.bitmap = Bitmap.new(text_size + 16, Font.default_size)
    @sprite.bitmap.draw_text(@sprite.bitmap.rect, text, 1)
  end
 
  def close_name_window
    return if @name_window.nil?
    @name_window.dispose
    @name_window = nil
    @sprite.dispose
    @sprite = nil
  end 



Znajdź:
Kod:
  def dispose
    terminate_message

I po tym dodaj:
Kod:
close_name_window


Znajdź:
Kod:
def terminate_message
    self.active = false

I po tym dodaj:
Kod:
close_name_window


Wpisując w treści wiadomości \N[id bohatera] wyświetli się okienko z jego imieniem.

Czeliosss - Sro 17 Mar, 2010 21:12

Zrobiłem jak napisałaś i pokazuje mi błąd w 158 linijce.
Kod:
    if $game_temp.choice_max > 0

Ayene - Sro 17 Mar, 2010 21:35

Coś źle zrobiłeś. Wklej poniższy skrypt nad Main:

Spoiler:

Kod:
#==============================================================================
# Window_Message
#==============================================================================
# Imię w wiadomości w osobnym okienku
# by Ayene

class Window_Message < Window_Selectable
 
  def dispose
    terminate_message
    close_name_window
    $game_temp.message_window_showing = false
    if @input_number_window != nil
      @input_number_window.dispose
    end
    super
  end
 
  def terminate_message
    self.active = false
    self.pause = false
    self.index = -1
    self.contents.clear   
    @contents_showing = false   
    if $game_temp.message_proc != nil
      $game_temp.message_proc.call
    end   
    $game_temp.message_text = nil
    $game_temp.message_proc = nil
    $game_temp.choice_start = 99
    $game_temp.choice_max = 0
    $game_temp.choice_cancel_type = 0
    $game_temp.choice_proc = nil
    $game_temp.num_input_start = 99
    $game_temp.num_input_variable_id = 0
    $game_temp.num_input_digits_max = 0   
    if @gold_window != nil
      @gold_window.dispose
      @gold_window = nil
    end
    close_name_window
  end
 
  def refresh
    self.contents.clear
    self.contents.font.color = normal_color
    x = y = 0
    @cursor_width = 0   
    if $game_temp.choice_start == 0
      x = 8
    end   
    if $game_temp.message_text != nil
      text = $game_temp.message_text     
      begin
        last_text = text.clone
        text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
      end until text == last_text
      text.gsub!(/\\[Nn]\[([0-9]+)\]/) { "\003[#{$1}]" }     
      text.gsub!(/\\\\/) { "\000" }     
      text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
      text.gsub!(/\\[Gg]/) { "\002" }     
      while ((c = text.slice!(/./m)) != nil)       
        if c == "\000"         
          c = "\\"
        end       
        if c == "\001"         
          text.sub!(/\[([0-9]+)\]/, "")
          color = $1.to_i
          if color >= 0 and color <= 7
            self.contents.font.color = text_color(color)
          end         
          next
        end       
        if c == "\002"         
          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         
          next
        end   
        if c == "\003"   
          text.sub!(/\[([0-9]+)\]/, "")         
          create_name_window($game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : "")
          next
        end
        if c == "\n"         
          if y >= $game_temp.choice_start
            @cursor_width = [@cursor_width, x].max
          end         
          y += 1
          x = 0         
          if y >= $game_temp.choice_start
            x = 8
          end         
          next
        end       
        self.contents.draw_text(4 + x, 32 * y, 40, 32, c)       
        x += self.contents.text_size(c).width
      end
    end   
    if $game_temp.choice_max > 0
      @item_max = $game_temp.choice_max
      self.active = true
      self.index = 0
    end   
    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
  end
 
  def create_name_window(text = "")
    a = Bitmap.new(1, 1)
    text_size = a.text_size(text).width
    a.dispose
    close_name_window
    @name_window = Window.new
    @name_window.windowskin = RPG::Cache.windowskin(@windowskin_name)
    @name_window.height = Font.default_size + 16
    @name_window.x = self.x
    case $game_system.message_position
    when 0               
      @name_window.y = self.y + self.height
    when 1, 2 
      @name_window.y = self.y - @name_window.height
    end
    @name_window.z = self.z + 1
    @name_window.width = text_size + 32
    @name_window.contents = Bitmap.new(1, 1)
    @name_window.back_opacity = 200
    @sprite = Sprite.new
    @sprite.x = @name_window.x + 5
    @sprite.y = @name_window.y + 7
    @sprite.z = @name_window.z + 1
    @sprite.bitmap = Bitmap.new(text_size + 16, Font.default_size)
    @sprite.bitmap.draw_text(@sprite.bitmap.rect, text, 1)
  end
 
  def close_name_window
    return if @name_window.nil?
    @name_window.dispose
    @name_window = nil
    @sprite.dispose
    @sprite = nil
  end 
end


Czeliosss - Sro 17 Mar, 2010 21:47

Błąd mi nie wyskakuje, le nie pokazuje mi imienia.

Ayene - Sro 17 Mar, 2010 21:55

Wklej mi tutaj zawartość swojego domyślnego 'Window_Message'. W gruncie rzeczy nie powinnam nawet brać się za poprawianie błędów wersji polskiej.

Ewentualnie spróbuj przed:
Kod:
@sprite.bitmap.draw_text(@sprite.bitmap.rect, text, 1)

dodać:
Kod:
    @sprite.bitmap.font.name = $defaultfonttype
    @sprite.bitmap.font.size = $defaultfontsize

Czeliosss - Czw 18 Mar, 2010 07:54

Dobra wykorzystam to jak będę miał orginał, ale po zrobieniu jak mówiłaś to było imię, ale okienko się nie powiększało. Pewnie to wina programu.
Ayene - Nie 21 Mar, 2010 21:21

czeliosss, w polskiej wersji programu wszystko działa jak należy. Albo coś źle zrobiłeś, albo masz skrypt, który również podmienia klasę 'Window_Message'.
Agumon - Pon 22 Mar, 2010 19:06

A da się takie coś do VX zrobić????
adix225 - Czw 01 Kwi, 2010 19:48

Jeśli chcecie to można też w rozmowie dać cmd:
\c[id postaci]
np. \c[1] wtedy pokazuje się imie postaci 1 chyba że chodzi o coś innego

Ayene - Czw 01 Kwi, 2010 20:49

Agumon, można... jeśli będziesz zainteresowany, to załóż osobny temat w dziale VX'a.

adix225, nie wprowadzaj w błąd. \c[nr] to kod do kolorów. Domyślnie by wyświetlić imię bohatera to \n[nr], ale nie otwiera się przy tym nowe okienko.


Powered by phpBB modified by Przemo © 2003 phpBB Group