TheoAllen

Theo - Variable Window

May 21st, 2013
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 14.44 KB | None | 0 0
  1. # =============================================================================
  2. # TheoAllen - Variable Window
  3. # Version : 1.0
  4. # Contact : www.rpgmakerid.com (or) http://theolized.blogspot.com
  5. # (This script documentation is written in informal indonesian language)
  6. # =============================================================================
  7. ($imported ||= {})[:Theo_VarWindow] = true
  8. # =============================================================================
  9. # CHANGE LOGS:
  10. # -----------------------------------------------------------------------------
  11. # 2013.05.21 - Finished Script
  12. # 2013.05.20 - Started Script
  13. # =============================================================================
  14. =begin
  15.  
  16.   # -------------------------------------------------------------------------
  17.   Perkenalan :
  18.   Script ini untuk membuat sebuah HUD yang berada map yang menampilkan sebuah
  19.   atau beberapa buah variable.
  20.  
  21.   # -------------------------------------------------------------------------
  22.   Cara penggunaan :
  23.   Pasang di bawah material namun diatas main.
  24.   Dibawah ini adalah beberapa command yang bisa digunakan dalam script call
  25.  
  26.   # -------------------------------------------------------------------------
  27.   Penambahan list:
  28.   var_window_set(type,id,"name")
  29.   var_window_set(type,id,"name",icon)
  30.   var_window_set(type,id,"name",icon,max)
  31.   var_window_set(type,id,"name",icon,max,color1)
  32.   var_window_set(type,id,"name",icon,max,color1,color2)
  33.  
  34.   Tiga yang harus diisi adalah type, id, dan nama. Sisanya kek icon dan
  35.   kebelakangnya adalah optional.
  36.  
  37.   type adalah type variable yang akan kamu tampilkan.
  38.   - :variable >> menampilkan angka variable dengan id tertentu
  39.   - :item     >> menampilkan jumlah item dengan id tertentu
  40.   - :armor    >> menampilkan jumlah armor dengan id tertentu
  41.   - :weapon   >> menampilkan jumlah weapon dengan id tertentu
  42.  
  43.   Contoh pemulisan dalam script call :
  44.   var_window_set(:variable,2,"Progress :")
  45.  
  46.   max adalah nilai maksimal yang akan ditampilkan jika kamu memilih dalam HUDmu
  47.   ada nilai maksimalnya
  48.  
  49.   Color1 dan color2 adalah berupa angka warna. Angka warnanya sama seperti
  50.   angka warna dalam text.
  51.  
  52.   Catatan Warna-warna :
  53.   - Putih   = 00,05,06
  54.   - Merah   = 02,10,18,25
  55.   - Biru    = 01,04,09,12,16,22
  56.   - Kuning  = 06,14,17
  57.   - Hijau   = 03,11,24,28,29
  58.   - Abu2    = 07,08
  59.   - Ungu    = 13,26,30,31
  60.   - Hitam   = 15,19
  61.   - Orange  = 20,21
  62.   - Cyan    = 23
  63.   - Pink    = 27
  64.  
  65.   Nilai default untuk masing2 jika tidak diisi adalah
  66.   - icon    >> 0
  67.   - max     >> 100
  68.   - color1  >> 0
  69.   - color2  >> 0
  70.  
  71.   # -------------------------------------------------------------------------
  72.   Pengurangang list:
  73.   - var_window_del(type,id) >> menghapus list dengan type dan id tertentu
  74.  
  75.   # -------------------------------------------------------------------------
  76.   Penggantian title window
  77.   - var_window_title(string)
  78.  
  79.   String adalah text yang ditulis menggunakan double quote.
  80.   Contoh: var_window_title("variable window")
  81.  
  82.   # -------------------------------------------------------------------------
  83.   Penghapusan semua list
  84.   - var_window_clear >> Untuk ngehapus semua list
  85.  
  86.   # -------------------------------------------------------------------------
  87.   Mengganti posisi window
  88.   - var_window_pos(posisi)
  89.   posisi adalah berupa angka. List angka yang bisa digunain bisa dilihat di
  90.   konfigurasi
  91.  
  92.   # -------------------------------------------------------------------------
  93.   Mengganti type penampilan HUD
  94.   - var_window_type(tipe)
  95.   tipe adalah berupa angka. List angka uang bisa digunain bisa diliat di
  96.   konfigurasi
  97.  
  98.   Terms of use :
  99.   Credit gw, TheoAllen. Kalo semisal u bisa ngedit2 script gw trus jadi lebih
  100.   keren, terserah. Ane bebasin. Asal ngga ngeklaim aja. Kalo semisal mau
  101.   dipake buat komersil, jangan lupa, gw dibagi gratisannya.
  102.  
  103. =end
  104. # =============================================================================
  105. # Konfigurasi :
  106. # =============================================================================
  107. module THEO
  108.   module WINDOW
  109.     # =======================================================================
  110.     # Settingan disini adalah settingan inisial (permulaan) waktu new game.
  111.     # =======================================================================
  112.    
  113.     # =======================================================================
  114.       VAR_WINDOW_TITLE = "Window Variable"
  115.       TITLE_ALIGN      = 1
  116.     # -----------------------------------------------------------------------
  117.     # Untuk title HUD. Jika kamu menginginkan tidak ditampilkan judul, bikin
  118.     # double quote kosong ("")
  119.     #
  120.     # Title align adalah penempatan alignment title. Listnya kek gini :
  121.     # - 0 >> Rata kiri
  122.     # - 1 >> Rata tengah
  123.     # - 2 >> Rata kanan
  124.     # =======================================================================
  125.    
  126.     # =======================================================================
  127.       VAR_WINDOW_FONT_SIZE = 24   # (default : 24)
  128.       VAR_WINDOW_OPACITY   = 0    # (default : 0)
  129.       VAR_WINDOW_WIDTH     = 200  
  130.     # -----------------------------------------------------------------------
  131.     # Font size untuk mengatur besar font.
  132.     # Opacity untuk transparansi (0 - 255)
  133.     # Width adalah lebar window
  134.     # =======================================================================
  135.    
  136.     # =======================================================================
  137.       VAR_WINDOW_TYPE   = 0
  138.     # -----------------------------------------------------------------------
  139.     # Type penampilan HUD. Yang bisa kamu pilih :
  140.     # 0 = name + gauge + current/max
  141.     # 1 = name + gauge only
  142.     # 2 = name + current / max
  143.     # 3 = name + current value only
  144.     # =======================================================================
  145.    
  146.     # =======================================================================
  147.       VAR_WINDOW_POS    = 1
  148.     # -----------------------------------------------------------------------
  149.     # Posisi HUD pas di map. Yang bisa kamu pilih :
  150.     # 0 >> Pojok kiri atas
  151.     # 1 >> Pojok kanan atas
  152.     # 2 >> Pojok kiri bawah
  153.     # 3 >> Pojok kiri atas
  154.     # =======================================================================
  155.    
  156.     # =======================================================================
  157.       GAUGE_HEIGHT = 16 # (default : 16)
  158.       GAUGE_BORDER = 0  # (default : 1)
  159.     # -----------------------------------------------------------------------
  160.     # REQUIRE / MEMBUTUHKAN : Theo - Gauge Bar Modifier
  161.     # Settingan ini untuk menyeting tinggi gauge dan tebal border
  162.     # =======================================================================
  163.    
  164.     # =======================================================================
  165.       VARIABLE_ID   = {
  166.     #  [id,:type    ] => [icon , "nama"    , max, color1, color2],
  167.        [1 ,:variable] => [0    , "Var1   :", 100,     12,      0],
  168.        [2 ,:item    ] => [0    , "Item2  :", 100,     12,      0],
  169.        [3 ,:armor   ] => [0    , "Armor3 :", 100,     12,      0],
  170.     }
  171.     # -----------------------------------------------------------------------
  172.     # Ini adalah list variable yang akan ditampilin dalam game
  173.     # type adalah type variable yang akan kamu tampilkan.
  174.     # - :variable >> menampilkan angka variable dengan id tertentu
  175.     # - :item     >> menampilkan jumlah item dengan id tertentu
  176.     # - :armor    >> menampilkan jumlah armor dengan id tertentu
  177.     # - :weapon   >> menampilkan jumlah weapon dengan id tertentu
  178.     # =======================================================================
  179.    
  180.     # =======================================================================
  181.       VAR_WINDOW_SWITCH = 1
  182.     # -----------------------------------------------------------------------
  183.     # Switch id untuk menampilkan HUD. Jika ON, maka window ini akan
  184.     # ditampilkan
  185.     # =======================================================================
  186.    
  187.   end
  188. end
  189. # =============================================================================
  190. # Akhir dari konfigurasi. Setelah bagian ini ga usah diedit kecuali ente ngerti
  191. # =============================================================================
  192. class Game_System
  193.   attr_accessor :var_window_pos
  194.   attr_accessor :var_window_type
  195.   attr_accessor :var_window_width
  196.   attr_accessor :var_window_opacity
  197.   attr_accessor :var_window_title
  198.   attr_accessor :variable_ids
  199.  
  200.   alias pre_var_window_init initialize
  201.   def initialize
  202.     pre_var_window_init
  203.     init_var_window_info
  204.   end
  205.  
  206.   def init_var_window_info
  207.     @var_window_pos = [[THEO::WINDOW::VAR_WINDOW_POS,0].max,3].min
  208.     @var_window_type = [[THEO::WINDOW::VAR_WINDOW_TYPE,0].max,3].min
  209.     @var_window_width = THEO::WINDOW::VAR_WINDOW_WIDTH
  210.     @var_window_opacity = THEO::WINDOW::VAR_WINDOW_OPACITY
  211.     @var_window_title = THEO::WINDOW::VAR_WINDOW_TITLE
  212.     @variable_ids = THEO::WINDOW::VARIABLE_ID
  213.   end
  214.  
  215. end
  216.  
  217. class Window_Variable < Window_Base
  218.   attr_reader :data
  219.   attr_reader :title
  220.  
  221.   include THEO::WINDOW
  222.  
  223.   def initialize
  224.     refresh_information
  225.     width = $game_system.var_window_width
  226.     height = @data.size * VAR_WINDOW_FONT_SIZE + standard_padding * 2 +
  227.       (@title.empty? ? 0 : VAR_WINDOW_FONT_SIZE)
  228.     super(0,0,width,height)
  229.     contents.font.size = VAR_WINDOW_FONT_SIZE
  230.     self.padding = contents.font.size / 2
  231.     update_basic
  232.     refresh
  233.   end
  234.  
  235.   def update_basic
  236.     update_opacity
  237.     update_position
  238.   end
  239.  
  240.   def update_opacity
  241.     self.opacity = $game_system.var_window_opacity
  242.   end
  243.  
  244.   def refresh_information
  245.     @type = $game_system.var_window_type
  246.     @pos = $game_system.var_window_pos
  247.     @data = $game_system.variable_ids.dup
  248.     @title = $game_system.var_window_title
  249.     @variables = {}
  250.     @data.keys.each do |key|
  251.       @variables[key] = to_draw(key)
  252.     end
  253.   end
  254.  
  255.   def update_position
  256.     case @pos
  257.     when 0 # Pojok kiri atas
  258.       self.x = self.y = 0
  259.     when 1 # Pojok kanan atas
  260.       self.x = Graphics.width - self.width
  261.       self.y = 0
  262.     when 2 # Pojok kiri bawah
  263.       self.y = Graphics.height - self.height
  264.       self.x = 0
  265.     when 3 # Pojok kanan bawah
  266.       self.x = Graphics.width - self.width
  267.       self.y = Graphics.height - self.height
  268.     end
  269.   end
  270.  
  271.   def refresh
  272.     contents.clear
  273.     y_pos = draw_title
  274.     @data.each do |key,value|
  275.       x_pos = 0
  276.       if value[0] > 0
  277.         draw_icon(value[0],x_pos,y_pos)
  278.         x_pos += 24
  279.       end
  280.       draw_var_window_gauge(x_pos,y_pos,key,value)
  281.       draw_var_window_text(x_pos,y_pos,value[1])
  282.       draw_value(x_pos,y_pos,key,value)
  283.       y_pos += line_height
  284.     end
  285.   end
  286.  
  287.   def draw_title
  288.     return 0 if @title.empty?
  289.     draw_text(0,0,contents.width,line_height,@title,TITLE_ALIGN)
  290.     return line_height
  291.   end
  292.  
  293.   def draw_var_window_gauge(x,y,key,value)
  294.     return unless [0,1].any? {|type| type == @type}
  295.     rate = to_draw(key) / value[2].to_f
  296.     draw_gauge(x+GAUGE_BORDER,y,contents.width-x-(GAUGE_BORDER*2),rate,
  297.     color1(value[3]),color2(value[4]))
  298.   end
  299.  
  300.   def draw_var_window_text(x,y,text)
  301.     draw_text(x,y,contents.width-x,contents.font.size,text)
  302.   end
  303.  
  304.   def draw_value(x,y,key,value)
  305.     if [0,2].any? {|type| type == @type}
  306.       draw_current_and_max_values(x, y,contents.width-x,to_draw(key),
  307.         value[2], text_color(0), text_color(0))
  308.     elsif @type == 3
  309.       draw_text(x,y,contents.width-x,contents.font.size,to_draw(key),2)
  310.     end
  311.   end
  312.  
  313.   def to_draw(key)
  314.     case key[1]
  315.     when :variable
  316.       return $game_variables[key[0]]
  317.     when :item
  318.       return $game_party.item_number($data_items[key[0]])
  319.     when :weapon
  320.       return $game_party.item_number($data_weapons[key[0]])
  321.     when :armor
  322.       return $game_party.item_number($data_armors[key[0]])
  323.     else
  324.       return 0
  325.     end
  326.   end
  327.  
  328.   def line_height
  329.     contents.font.size
  330.   end
  331.  
  332.   def color1(source)
  333.     text_color(source)
  334.   end
  335.  
  336.   def color2(source)
  337.     text_color(source)
  338.   end
  339.  
  340.   def update
  341.     super
  342.     update_visibility
  343.     update_information
  344.   end
  345.  
  346.   def update_visibility
  347.     self.visible = $game_switches[VAR_WINDOW_SWITCH]
  348.   end
  349.  
  350.   def update_information
  351.     return unless information_change?
  352.     refresh_information
  353.     update_basic
  354.     refresh
  355.   end
  356.  
  357.   def information_change?
  358.     @type != $game_system.var_window_type ||
  359.     @pos != $game_system.var_window_pos ||
  360.     @data.keys.any? {|key| @variables[key] != to_draw(key)} ||
  361.     self.opacity != $game_system.var_window_opacity
  362.   end
  363.  
  364.   if $imported[:Theo_GaugeBar]
  365.     def draw_gauge(x, y, width, rate, color1, color2)
  366.       rate = [[rate,0].max,1.0].min
  367.       fill_w = (width * rate).to_i
  368.       height = GAUGE_HEIGHT
  369.       border = GAUGE_BORDER
  370.       gauge_y = y + line_height - height - 4
  371.       make_bg_color(x-border, gauge_y-border, width+(border*2),height+(border*2),
  372.           border_color)
  373.       make_bg_color(x,gauge_y,width,height,gauge_back_color)
  374.       make_gauge(x, gauge_y, fill_w, height, color1, color2)
  375.     end
  376.   end
  377. end
  378.  
  379. class Game_Interpreter
  380.  
  381.   def var_window_set(type,id,name,icon = 0,max = 100,color1 = 0,color2 = 0)
  382.     $game_system.variable_ids[id,type] = [icon,name,max,color1,color2]
  383.   end
  384.  
  385.   def var_window_del(id)
  386.     $game_system.variable_ids.delete([id,type])
  387.   end
  388.  
  389.   def var_window_clear
  390.     $game_system.variable_ids.clear
  391.   end
  392.  
  393.   def var_window_pos(pos)
  394.     $game_system.var_window_pos = [[pos,0].min,3].max
  395.   end
  396.  
  397.   def var_window_type(type)
  398.     $game_system.var_window_type = [[type,0].min,3].max
  399.   end
  400.  
  401.   def var_window_opacity(op)
  402.     $game_system.var_window_opacity = op
  403.   end
  404.  
  405.   def var_window_title(title)
  406.     $game_system.var_window_title = title
  407.   end
  408.  
  409. end
  410.  
  411. class Scene_Map < Scene_Base
  412.  
  413.   alias pre_var_window_create_all create_all_windows
  414.   def create_all_windows
  415.     pre_var_window_create_all
  416.     create_variable_window
  417.   end
  418.  
  419.   def create_variable_window
  420.     @var_window.dispose if @var_window
  421.     @var_window = Window_Variable.new
  422.   end
  423.  
  424.   alias pre_var_window_update update
  425.   def update
  426.     pre_var_window_update
  427.     check_var_window_existence
  428.   end
  429.  
  430.   def check_var_window_existence
  431.     create_variable_window if information_change?
  432.   end
  433.  
  434.   def information_change?
  435.     @var_window.data.size != $game_system.variable_ids.size ||
  436.     @var_window.width != $game_system.var_window_width ||
  437.     @var_window.title != $game_system.var_window_title
  438.   end
  439.  
  440. end
Advertisement
Add Comment
Please, Sign In to add comment