TheoAllen

Theo - Namebox Window

Oct 18th, 2013
425
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 6.16 KB | None | 0 0
  1. # =============================================================================
  2. # TheoAllen - Namebox Window
  3. # Version : 1.3
  4. # Contact : www.rpgmakerid.com (or) http://theolized.blogspot.com
  5. # (This script documentation is written in informal indonesian language)
  6. # =============================================================================
  7. ($imported ||= {})[:Theo_Namebox] = true
  8. # =============================================================================
  9. # CHANGE LOGS:
  10. # -----------------------------------------------------------------------------
  11. # 2013.11.26 - Showing unregistered name now wont throw error
  12. # 2013.11.25 - \C[n] code do not count as window size
  13. #            - \I[n] code do not count as window size
  14. # 2013.11.19 - Bugfix. Namebox won't disposed in scene change
  15. # 2013.10.22 - Now support show actor name using \\n[actor_id]
  16. # 2013.10.19 - Added show event name
  17. # 2013.10.18 - Finished Script
  18. # =============================================================================
  19. =begin
  20.  
  21.   Perkenalan :
  22.   Script ini ngebikin kamu bisa nampilin Namebox saat dialog berlangsung
  23.  
  24.   Cara penggunaan :
  25.   Pasang script ini dibawah material namun diatas main
  26.   Gunakan kode seperti berikut untuk nampilin namebox
  27.  
  28.   \NBR['key'] >> untuk nampilin namebox disisi kanan
  29.   \NBL['key'] >> untuk nampilin namebox disisi kiri
  30.  
  31.   Dimana key adalah hash key yang berada pada konfigurasi. Baca dibawah sana
  32.   untuk lebih jelasnya. Dan gunakan kode seperti berikut untuk nampilin nama
  33.   event kalo kamu ngga mau make catetan list yang ada dibawah.
  34.  
  35.   \NBR[n]
  36.   \NBL[n]
  37.  
  38.   Dimana n adalah angka yang menunjukkan ID sebuah event. Contoh : \NBL[1]
  39.  
  40.   Terms of use :
  41.   Credit gw, TheoAllen. Kalo semisal u bisa ngedit2 script gw trus jadi lebih
  42.   keren, terserah. Ane bebasin. Asal ngga ngeklaim aja. Kalo semisal mau
  43.   dipake buat komersil, jangan lupa, gw dibagi gratisannya.
  44.  
  45. =end
  46. # =============================================================================
  47. # Konfigurasi :
  48. # =============================================================================
  49. module Theo
  50.   module Namebox
  51.   # -------------------------------------------------------------------------
  52.   # Hash key untuk dipanggil dalam kode namebox (\NBL[''] ato \NBR['']).
  53.   # Semisal kamu mengisikan "x" => "Something", maka jika pada message, kamu
  54.   # ngetikin \NBL['x'], maka dalam namebox akan keluar "Something".
  55.   #
  56.   # Kamu juga bisa menampilkan nama actor dengan cara mengisi name dengan
  57.   # symbol "\\n[1]" misalnya. Angka 1 adalah actor dengan ID 1 dalam database
  58.   # -------------------------------------------------------------------------
  59.     List = {
  60.     # "key"   => "name",
  61.       "Nella" => "\\I[188]\\C[27]Nella Shadowind",
  62.       "Eric"  => "Eric Hakon",
  63.       "act1"  => "\\n[1]"
  64.    
  65.     # Tambahin sendiri
  66.     } # <-- Jangan disentuh
  67.   # -------------------------------------------------------------------------
  68.     Buffer_X = 10 # Jarak horizontal dari tepi samping layar
  69.     Buffer_Y = 0  # Jarak vertikal
  70.   # -------------------------------------------------------------------------
  71.   end
  72. end
  73. # =============================================================================
  74. # Akhir dari konfigurasi
  75. # =============================================================================
  76. class NameBox < Window_Base
  77.  
  78.   include Theo::Namebox
  79.  
  80.   def initialize(msg_window)
  81.     super(0,0,1,fitting_height(1))
  82.     self.z = 200
  83.     @text = ""
  84.     @msg_window = msg_window
  85.     @right_side = false
  86.     self.visible = !@text.empty?
  87.     refresh
  88.   end
  89.  
  90.   def update_placement
  91.     if @msg_window.y <= 0
  92.       self.y = @msg_window.height - Buffer_Y
  93.     else
  94.       self.y = @msg_window.y - self.height + Buffer_Y
  95.     end
  96.     if @right_side
  97.       self.x = Graphics.width - width - Buffer_X
  98.     else
  99.       self.x = Buffer_X
  100.     end
  101.   end
  102.  
  103.   def update_openness
  104.     self.openness = @msg_window.openness
  105.   end
  106.  
  107.   def refresh
  108.     resize_window
  109.     create_contents
  110.     update_placement
  111.     draw_text_ex(0,0,@text)
  112.   end
  113.  
  114.   def update
  115.     super
  116.     self.visible = !@text.empty?
  117.   end
  118.  
  119.   def resize_window
  120.     size = text_size(@text).width + (standard_padding * 2) + 4
  121.     self.width = size
  122.   end
  123.  
  124.   def set_text(text, right, from_list = true)
  125.     @right_side = right
  126.     if from_list
  127.       if List[text].nil?
  128.         result = ""
  129.         msgbox "Attention : Theo - Namebox!\nTrying to show unregistered name!"
  130.       else
  131.         result = List[text]
  132.       end
  133.       @text = convert_escape_characters(result)
  134.     else
  135.       @text = text
  136.     end
  137.     refresh
  138.   end
  139.  
  140.   def text_size(text)
  141.     subbed_text = text.dup
  142.     subbed_text.gsub!(/\eI\[\d+\]/i) {"    "}  # Delete Icon
  143.     subbed_text.gsub!(/\eC\[\d+\]/i) {""}      # Delete Color
  144.     super(subbed_text)
  145.   end
  146.  
  147. end
  148.  
  149. class Game_Event < Game_Character
  150.  
  151.   def name
  152.     @event.name
  153.   end
  154.  
  155. end
  156.  
  157. class Window_Message < Window_Base
  158.  
  159.   alias theo_namebox_init initialize
  160.   def initialize
  161.     theo_namebox_init
  162.     @namebox = NameBox.new(self)
  163.   end
  164.  
  165.   alias theo_namebox_update update
  166.   def update
  167.     theo_namebox_update
  168.     @namebox.update
  169.   end
  170.  
  171.   alias theo_namebox_convert_char convert_escape_characters
  172.   def convert_escape_characters(text)
  173.     result = theo_namebox_convert_char(text)
  174.     result = convert_namebox_char(result)
  175.     result
  176.   end
  177.  
  178.   def convert_namebox_char(text)
  179.     text.gsub!(/\eNBL\['(.*)'\]/i) { @namebox.set_text($1.to_s,false); "" }
  180.     text.gsub!(/\eNBR\['(.*)'\]/i) { @namebox.set_text($1.to_s,true); "" }
  181.     text.gsub!(/\eNBL\[(\d+)\]/i) do
  182.       ev = $game_map.events[$1.to_i]
  183.       result = (ev ? ev.name : "")
  184.       @namebox.set_text(result, false, false)
  185.       ""
  186.     end
  187.     text.gsub!(/\eNBR\[(\d+)\]/i) do
  188.       ev = $game_map.events[$1.to_i]
  189.       result = (ev ? ev.name : "")
  190.       @namebox.set_text(result, true, false)
  191.       ""
  192.     end
  193.     text
  194.   end
  195.  
  196.   alias theo_namebox_close_wait close_and_wait
  197.   def close_and_wait
  198.     @namebox.set_text("",false, false)
  199.     theo_namebox_close_wait
  200.   end
  201.  
  202.   alias theo_namebox_dispose dispose
  203.   def dispose
  204.     theo_namebox_dispose
  205.     @namebox.dispose
  206.   end
  207.  
  208. end
Advertisement
Add Comment
Please, Sign In to add comment