Project1

标题: 物品栏显示修改 [打印本页]

作者: 彭格列第XI代    时间: 2012-12-9 16:27
标题: 物品栏显示修改

想改成不显示物品名只显示图标一个个那样的0 0
使用的是P叔某整合系统
作者: 彭格列第XI代    时间: 2012-12-9 16:28
@protosssonny
P叔招来0 0
作者: 超级D梦    时间: 2012-12-9 17:20
  1. #==============================================================================
  2. # ■ Window_Help
  3. #------------------------------------------------------------------------------
  4. # 原作:xuelong
  5. # 修正:水迭澜
  6. # 移植:禾西
  7. #==============================================================================
  8. class Window_Help < Window_Base
  9.   #--------------------------------------------------------------------------
  10.   # ● 定義
  11.   #--------------------------------------------------------------------------
  12.   def set
  13.     @phrase,@y= {}, 0
  14.     @scope, @parameter_type = [], []
  15.    #@name_size = 名字文字大小
  16.    #@size = 描述文字大小
  17.    #[url=home.php?mod=space&uid=79957]@WORD[/url] = 每行的描述文字數
  18.     @name_size = 17
  19.     @size = 14
  20.     @word = 11
  21.    
  22.     # 不顯示的 屬性 與 狀態 ID
  23.     @unshow_elements = []
  24.     @unshow_states = [17,29,31,37,38,39,40]
  25.    
  26.     # 基本文字設定
  27.     @phrase[:price]          = "价格"
  28.     @phrase[:elements]       = "攻击属性"
  29.     @phrase[:states]         = "附加状态"
  30.     @phrase[:guard_elements] = "减半属性"
  31.     @phrase[:guard_states]   = "无效化状态"
  32.     #------------------#
  33.     #   物品效果語句   #
  34.     #------------------#
  35.     @phrase[:recover]      = "恢复"
  36.     @phrase[:hp]           = "HP"
  37.     @phrase[:mp]           = "MP"
  38.     @phrase[:plus_states]  = "状态附加"
  39.     @phrase[:minus_states] = "状态解除"
  40.     @phrase[:speed]        = "速度修正"
  41.     @phrase[:consumable]   = "消耗品"
  42.     @phrase[:base_damage]  = "基本伤害"
  43.     #------------------#
  44.     #   特殊效果語句   #
  45.     #------------------#
  46.     @phrase[:special]          = "附带属性"
  47.     @phrase[:two_handed]       = "双手武器"
  48.     @phrase[:fast_attack]      = "回合内先制"
  49.     @phrase[:dual_attack]      = "连续攻击"
  50.     @phrase[:critical_bonus]   = "频繁暴击"
  51.     @phrase[:prevent_critical] = "防止暴击"
  52.     @phrase[:half_mp_cost]     = "消耗MP减半"
  53.     @phrase[:double_exp_gain]  = "取得经验值2倍"
  54.     @phrase[:auto_hp_recover]  = "HP自动恢复"
  55.     @phrase[:physical_attack]  = "物理攻击"
  56.     @phrase[:damage_to_mp]     = "MP伤害"
  57.     @phrase[:absorb_damage]    = "伤害吸收"
  58.     @phrase[:ignore_defense]   = "不可出售"
  59.     #------------------#
  60.     #   技能描述語句   #
  61.     #------------------#
  62.     @phrase[:recovery] = "恢复力"
  63.     @phrase[:mp_cost]  = "消耗MP"
  64.     @phrase[:hit]      = "命中率"
  65.     #------------------#
  66.     #   效果範圍語句   #
  67.     #------------------#
  68.     @phrase[:scope]    = "效果范围"
  69.     @scope[0]  = "无"
  70.     @scope[1]  = "敌人"
  71.     @scope[2]  = "敌全体"
  72.     @scope[3]  = "敌单体 连续"
  73.     @scope[4]  = "一至二人"
  74.     @scope[5]  = "二至四人"
  75.     @scope[6]  = "四至十人"
  76.     @scope[7]  = "我方单体"
  77.     @scope[8]  = "我方全体"
  78.     @scope[9]  = "我方单个死亡者"
  79.     @scope[10] = "我方所有死亡者"
  80.     @scope[11] = "自己"
  81.     #------------------#
  82.     #   效果範圍語句   #
  83.     #------------------#
  84.     @parameter_type[1] = "MaxHP"
  85.     @parameter_type[2] = "MaxMP"
  86.     @parameter_type[3] = $data_system.terms.atk
  87.     @parameter_type[4] = $data_system.terms.def
  88.     @parameter_type[5] = $data_system.terms.spi
  89.     @parameter_type[6] = $data_system.terms.agi
  90.   end
  91.   
  92.   #--------------------------------------------------------------------------
  93.   # ● 初始化對象
  94.   #--------------------------------------------------------------------------
  95.   def initialize
  96.     super(240,0,544,WLH + 32)
  97.     self.opacity = 255
  98.     self.z = 150
  99.     self.visible = false
  100.   end
  101.   #--------------------------------------------------------------------------
  102.   # ● 設置文本
  103.   #     data  : 窗口顯示的字符串/物品資料
  104.   #     align : 對齊方式 (0..左對齊、1..中間對齊、2..右對齊)
  105.   #--------------------------------------------------------------------------
  106.   def set_text(data, align=0)
  107.     #------------------------------------------------------------------------
  108.     # ● 當資料爲文字時候
  109.     #------------------------------------------------------------------------
  110.     if data != @text or align != @align
  111.       if data.is_a?(String)
  112.         draw_string(data,align)
  113.       end
  114.     end
  115.     return if data.is_a?(String)
  116.     #------------------------------------------------------------------------
  117.     # ● 當沒有資料時候
  118.     #------------------------------------------------------------------------
  119.     if data.nil?
  120.       self.visible=false
  121.     else
  122.       self.visible=true
  123.     end
  124.     #------------------------------------------------------------------------
  125.     # ● 當資料爲物品/技能時候
  126.     #------------------------------------------------------------------------
  127.     if data != nil && @data != data
  128.       self.width = 210
  129.       self.height = 430
  130.       self.x=0
  131.       self.y=200
  132.       set
  133.       draw_data(data)
  134.     else
  135.       return
  136.     end
  137.   end
  138.   #--------------------------------------------------------------------------
  139.   # ● 更新帮助窗口
  140.   #--------------------------------------------------------------------------
  141.   def draw_string(data,align)
  142.     self.width = 544        #修正寬度
  143.     self.height = WLH + 32  #修正高度
  144.     self.x = 240            #修正 x 坐標
  145.     self.y = 0              #修正 y 坐標
  146.     @text = data            #記錄文本資料
  147.     @align = align          #記錄對齊方式
  148.     [url=home.php?mod=space&uid=95897]@actor[/url] = nil            #清空角色資料
  149.     self.contents = Bitmap.new(width - 32, height - 32) if self.contents.nil?
  150.     self.contents.clear
  151.     self.contents.font.color = normal_color
  152.     self.contents.font.size = 20
  153.     self.contents.draw_text(4 , 0, self.width - 40, 28, data, align)
  154.     self.visible = true
  155.   end
  156.   #--------------------------------------------------------------------------
  157.   # ● 更新帮助窗口
  158.   #--------------------------------------------------------------------------
  159.   def draw_data(data=@data)
  160.     self.width = 186       #修正寬度
  161.     self.height = 430       #修正高度
  162.     self.x=0                #修正 x 坐標
  163.     self.y=150              #修正 y 坐標
  164.     @data = data            #記錄 data 資料
  165.     case @data
  166.     when RPG::Item
  167.       set_item_text(@data)
  168.     when RPG::Weapon, RPG::Armor
  169.       set_equipment_text(@data)
  170.     when RPG::Skill
  171.       set_skill_text(@data)
  172.     end
  173.   end
  174.   #--------------------------------------------------------------------------
  175.   # ● 修正窗口位置
  176.   #--------------------------------------------------------------------------
  177.   def set_pos(x,y,width,oy,index,column_max)
  178.     cursor_width = width / column_max - 32
  179.     xx = index % column_max * (cursor_width + WLH)
  180.     yy = index / column_max * WLH - oy
  181.     self.x=xx+x+140
  182.     self.y=yy+y+35
  183.     if self.x+self.width>S_WIDTH
  184.       self.x=S_WIDTH-self.width
  185.     end
  186.     if self.y+self.height>S_HEIGHT
  187.       self.y=S_HEIGHT-self.height
  188.     end  
  189.   end

  190.   #------------------------------------------------------------------------
  191.   # ● 文字描繪
  192.   #------------------------------------------------------------------------
  193.   def draw_text(text, increase, move=0)
  194.     @y += increase
  195.     self.contents.font.size = @size
  196.     $special_size = 0 if $special_size == nil
  197.     $first_line = 0 if $first_line == nil
  198.     if $special_size > 0 and not @data.is_a?(RPG::Item)
  199.       if @y >= increase * $first_line
  200.         case $special_size
  201.         when 0
  202.           self.contents.font.color = normal_color
  203.         when 1
  204.           self.contents.font.color = text_color(12)
  205.         when 2
  206.           self.contents.font.color = text_color(29)
  207.         when 3
  208.           self.contents.font.color = text_color(17)
  209.         when 4
  210.           self.contents.font.color = text_color(20)
  211.         when 5
  212.           self.contents.font.color = text_color(26)
  213.         when 6
  214.           self.contents.font.color = text_color(31)
  215.         end
  216.       end
  217.       self.contents.draw_text(0+move, @y*@size+10, text.size*6, @size, text, 0)
  218.     else
  219.       self.contents.font.color = normal_color
  220.       self.contents.draw_text(0+move, @y*@size+10, text.size*6, @size, text, 0)
  221.     end
  222.   end

  223. #-------------------------------------#
  224. # 子方法
  225. #-------------------------------------#
  226.   #--------------------------------------------------------------------------
  227.   # ● 裝備幫助窗口
  228.   #--------------------------------------------------------------------------
  229.   def set_equipment_text(equipment)
  230.     #------------------------------------------------------------------------
  231.     # ● 取得基本質料
  232.     #------------------------------------------------------------------------
  233.    
  234.     #----------------------------#
  235.     # 取得屬性、狀態、說明之副本 #
  236.     #----------------------------#
  237.     element_set = equipment.element_set.clone
  238.     state_set   = equipment.state_set.clone
  239.     description = equipment.description.clone
  240.     phrase      = @phrase
  241.     #----------------------------#
  242.     # 過濾不顯示的屬性與狀態描述 #
  243.     #----------------------------#
  244.     element_set -= @unshow_elements
  245.     state_set   -= @unshow_states
  246.     #----------------#
  247.     # 初始化數據設定 #
  248.     #----------------#
  249.     x, h, move = 0, 0, 0
  250.     #------------------#
  251.     # 取得特殊效果數據 #
  252.     #------------------#
  253.     special = []
  254.     gifts = equipment.gifts
  255.     gifts = [] if gifts.nil?
  256.     s = [
  257.     "攻击 + [s]",   "攻击 + [s]%",
  258.     "防御 + [s]",   "防御 + [s]%",
  259.     "魔力 + [s]",   "魔力 + [s]%",
  260.     "速度 + [s]",   "速度 + [s]%",
  261.     "最大HP + [s]", "最大HP + [s]%",
  262.     "最大MP + [s]", "最大MP + [s]%",
  263.     "命中率 + [s]",
  264.     "闪避率 + [s]",
  265.     "暴击率 + [s]",
  266.     "所有主要属性 + [s]",
  267.     "抗魔性 + [s]"
  268.     ]
  269.     for g in gifts
  270.       special << s[g.type].sub(/\[s\]/) {g.value}
  271.     end
  272.     #------------------------------------------------------------------------
  273.     # ● 確定背景圖片的高度
  274.     #------------------------------------------------------------------------
  275.     h += (description.size/3/@word)
  276.     h += 1 if (description.size/3%@word) >= 0
  277.     now_h = h
  278.    
  279.     h += 1                               #價格
  280.     h += 1                               #装备等级
  281.    
  282.     h += 1 unless equipment.base_atk.zero?    #攻擊力
  283.     h += 1 unless equipment.base_def.zero?    #防禦力
  284.     h += 1 unless equipment.base_spi.zero?    #精神力
  285.     h += 1 unless equipment.base_agi.zero?    #敏捷力
  286.    
  287.     h += element_set.size + 1 if element_set.size > 0  #屬性
  288.     h += state_set.size   + 1 if state_set.size   > 0  #狀態
  289.     h += special.size     + 2 if special.size     > 0  #特殊效果
  290.     if special.size > 0
  291.     case special.size
  292.     when 1
  293.       $first_line = h-1
  294.     when 2
  295.       $first_line = h-2
  296.     when 3
  297.       $first_line = h-3
  298.     when 4
  299.       $first_line = h-4
  300.     when 5
  301.       $first_line = h-5
  302.     when 6
  303.       $first_line = h-6
  304.     end
  305.     end
  306.     $special_size = special.size
  307.    
  308.    
  309.     #------------------------------------------------------------------------
  310.     # ● 圖片顯示保證高度
  311.     #------------------------------------------------------------------------
  312.     #h = 6 + now_h if (h - now_h) < 6
  313.     #------------------------------------------------------------------------
  314.     # ● 換算高度
  315.     #------------------------------------------------------------------------
  316.     self.height = h * @size + @name_size + 40
  317.     #------------------------------------------------------------------------
  318.     # ● 生成背景
  319.     #------------------------------------------------------------------------
  320.     self.contents = Bitmap.new(self.width - 32, self.height - 32)
  321.     self.contents.clear
  322.     #------------------------------------------------------------------------
  323.     # ● 名字描繪
  324.     #------------------------------------------------------------------------
  325.     text = equipment.name
  326.     #self.contents.font.color = normal_color#我删除的,用case判断颜色
  327.     self.contents.font.size = @name_size
  328.     if text.nil?
  329.       self.visible = false
  330.     else
  331.       self.visible = true
  332.       ###self.contents.draw_text(0, 0, text.size*7, @name_size, text, 0)
  333.       #我加的,用case判断颜色
  334.       unless equipment.is_a?(RPG::Item)
  335.         case gifts.size
  336.         when 1
  337.           self.contents.font.color = text_color(12)
  338.         when 2
  339.           self.contents.font.color = text_color(29)
  340.         when 3
  341.           self.contents.font.color = text_color(17)
  342.         when 4
  343.           self.contents.font.color = text_color(20)
  344.         when 5
  345.           self.contents.font.color = text_color(26)
  346.         when 6
  347.           self.contents.font.color = text_color(31)
  348.         end
  349.       else
  350.         self.contents.font.color = text_color(0)
  351.       end  
  352.       self.contents.draw_text(0, 0, contents.width-4, @name_size, text)
  353.     end
  354.     #------------------------------------------------------------------------
  355.     # ● 說明描繪
  356.     #------------------------------------------------------------------------
  357.     x = 0
  358.     @y += 1
  359.     while ((text = description.slice!(/./m)) != nil)
  360.       self.contents.font.size = @size
  361.       self.contents.font.color = normal_color
  362.       self.contents.draw_text(x*@size, @y*@size+5, @size, @size, text, 0)
  363.       if words_judge(text) == true
  364.         x+=1
  365.       else
  366.         x+=0.5
  367.       end  
  368.       if x == @word or x == @word - 0.5
  369.         x = 0
  370.         @y += 1
  371.       end
  372.     end
  373.     #------------------------------------------------------------------------
  374.     # ● 圖標描繪
  375.     #------------------------------------------------------------------------
  376.     #bitmap = Cache.system("Iconset")
  377.     #rect = Rect.new(equipment.icon_index % 16 * 24, equipment.icon_index / 16 * 24, 24, 24)
  378.     #self.contents.blt(0, y*size + 20, bitmap, rect, 255)
  379.     #------------------------------------------------------------------------
  380.     # ● 價格描繪
  381.     #------------------------------------------------------------------------
  382.     unless equipment.price.zero?
  383.       text = phrase[:price] + ":" + equipment.price.to_s
  384.       draw_text(text, 1, move)
  385.     end
  386.     #------------------------------------------------------------------------
  387.     # ● 装备等级描繪
  388.     #------------------------------------------------------------------------
  389.     unless equipment.read_note('装备等级') == nil
  390.       text = "角色等级要求:" + equipment.read_note('装备等级').to_s
  391.       draw_text(text, 1, move)
  392.     end
  393.     #------------------------------------------------------------------------
  394.     # ● 攻擊力
  395.     #------------------------------------------------------------------------
  396.     unless equipment.base_atk.zero?
  397.       text = $data_system.terms.atk + ":" + equipment.base_atk.to_s
  398.       draw_text(text, 1, move)
  399.     end
  400.     #------------------------------------------------------------------------
  401.     # ● 防禦力
  402.     #------------------------------------------------------------------------
  403.     unless equipment.base_def.zero?
  404.       text = $data_system.terms.def + ":" + equipment.base_def.to_s
  405.       draw_text(text, 1, move)
  406.     end
  407.     #------------------------------------------------------------------------
  408.     # ● 精神力
  409.     #------------------------------------------------------------------------
  410.     unless equipment.base_spi.zero?
  411.       text = $data_system.terms.spi + ":" + equipment.base_spi.to_s
  412.       draw_text(text, 1, move)
  413.     end
  414.     #------------------------------------------------------------------------
  415.     # ● 敏捷力
  416.     #------------------------------------------------------------------------
  417.     unless equipment.base_agi.zero?
  418.       text = $data_system.terms.agi + ":" + equipment.base_agi.to_s
  419.       draw_text(text, 1, move)
  420.     end
  421.     #------------------------------------------------------------------------
  422.     # ● 屬性
  423.     #------------------------------------------------------------------------
  424.     if element_set.size > 0
  425.       case equipment
  426.       when RPG::Weapon
  427.         text=phrase[:elements]+":"
  428.       when RPG::Armor
  429.         text=phrase[:guard_elements]+":"
  430.       end
  431.       draw_text(text, 1, move)
  432.       element_set.each do |i|
  433.         text = $data_system.elements[i]
  434.         draw_text(text, 1, move + @size)
  435.       end
  436.     end
  437.     #------------------------------------------------------------------------
  438.     # ● 狀態
  439.     #------------------------------------------------------------------------
  440.     if state_set.size > 0
  441.       case equipment
  442.       when RPG::Weapon
  443.         text=phrase[:states]+":"
  444.       when RPG::Armor
  445.         text=phrase[:guard_states]+":"
  446.       end
  447.       draw_text(text, 1, move)
  448.       state_set.each do |i|
  449.         text = $data_states[i].name
  450.         draw_text(text, 1, move + @size)
  451.       end
  452.     end
  453.     #------------------------------------------------------------------------
  454.     # ● 特殊效果
  455.     #------------------------------------------------------------------------
  456.     if special.size > 0
  457.       kind_text = ["","","",""]
  458.       weapon_gifts = [0,1,4,5,12,14,15]
  459.       armor0_gifts = [2,3,4,5,10,11,15,16]
  460.       armor1_gifts = [2,3,8,9,15,16]
  461.       armor2_gifts = [2,3,6,7,13,15,16]
  462.       kind_text[0] = " 武器" if  weapon_gifts.include?(equipment.gifts[0].type)
  463.       kind_text[1] = " 盔" if  armor0_gifts.include?(equipment.gifts[0].type)
  464.       kind_text[2] = " 甲" if  armor1_gifts.include?(equipment.gifts[0].type)
  465.       kind_text[3] = " 鞋" if  armor2_gifts.include?(equipment.gifts[0].type)
  466.       if equipment.is_a?(RPG::Armor) and equipment.base_id == 101
  467.         text = "可注入" + kind_text[0] + kind_text[1] + kind_text[2] + kind_text[3]
  468.         draw_text(text, 1, move)
  469.         special.each {|text| draw_text(text, 1, move + @size)}
  470.       else
  471.         text = phrase[:special]+":"
  472.         draw_text(text, 1, move)
  473.         special.each {|text| draw_text(text, 1, move + @size)}
  474.       end
  475.       
  476.     end
  477.   end
  478. #////////////////////////////////////////////////////////////////////////////
  479.   #--------------------------------------------------------------------------
  480.   # ● 物品幫助窗口
  481.   #--------------------------------------------------------------------------
  482.   def set_item_text(item)
  483.     #----------------------------#
  484.     # 取得屬性、狀態、說明之副本 #
  485.     #----------------------------#
  486.     description = item.description.clone
  487.     element_set = item.element_set.clone
  488.     plus_state_set = item.plus_state_set.clone
  489.     minus_state_set = item.minus_state_set.clone
  490.     # 過濾不顯示的描述
  491.     element_set -= @unshow_elements
  492.     plus_state_set -= @unshow_states
  493.     minus_state_set -= @unshow_states
  494.     # 初始化數據設定
  495.     x, h, move = 0, 0, 0
  496.     phrase = @phrase
  497.     scope = @scope
  498.     parameter_type = @parameter_type
  499.     occasion = @occasion
  500.     # 基本文字設定

  501.    
  502.     #------------------#
  503.     # 取得特殊效果數據 #
  504.     #------------------#
  505.     special = []
  506.     special << phrase[:physical_attack] if item.physical_attack #物理攻撃
  507.     special << phrase[:damage_to_mp]    if item.damage_to_mp    #MPにダメージ
  508.     special << phrase[:absorb_damage]   if item.absorb_damage   #ダメージを吸収
  509.     special << phrase[:ignore_defense]  if item.ignore_defense  #防御力無視
  510.    
  511.     #------------------------------------------------------------------------
  512.     # ● 確定背景圖片的高度
  513.     #------------------------------------------------------------------------
  514.     h += (description.size/3/@word)
  515.     h += 1 if (description.size/3%@word) >= 0
  516.     now_h = h
  517.    
  518.     h += 2 unless scope[item.scope] == "无" #効果範囲
  519.     h += 1 unless item.price == 0           #價格
  520.     h += 1 if item.consumable               #消耗品
  521.     h += 1 unless item.speed.zero?          #速度補正値
  522.     h += 1                                  #预留一行
  523.    
  524.     h += 1 unless item.hp_recovery_rate==0 and item.hp_recovery==0 #HP 回復
  525.     h += 1 unless item.mp_recovery_rate==0 and item.mp_recovery==0 #MP 回復
  526.    
  527.     h += 1 unless item.parameter_type.zero? #能力値
  528.     h += 1 unless item.base_damage.zero?    #基本ダメージ
  529.    
  530.     h += element_set.size     + 1 if element_set.size     > 0  #屬性
  531.     h += plus_state_set.size  + 1 if plus_state_set.size  > 0  #附加狀態
  532.     h += minus_state_set.size + 2 if minus_state_set.size > 0  #解除狀態
  533.     h += special.size         + 1 if special.size         > 0  #特殊效果
  534.    
  535.     #------------------------------------------------------------------------
  536.     # ● 圖片顯示保證高度
  537.     #------------------------------------------------------------------------
  538.     #h = 6 + now_h if (h - now_h) < 6
  539.     #------------------------------------------------------------------------
  540.     # ● 換算高度
  541.     #------------------------------------------------------------------------
  542.     self.height = h * @size + @name_size + 40
  543.     #------------------------------------------------------------------------
  544.     # ● 生成背景
  545.     #------------------------------------------------------------------------
  546.     self.contents = Bitmap.new(self.width - 32, self.height - 32)
  547.     self.contents.clear
  548.     #------------------------------------------------------------------------
  549.     # ● 名字描繪
  550.     #------------------------------------------------------------------------
  551.     text = item.name
  552.     self.contents.font.color = normal_color#顔色腳本
  553.     self.contents.font.size = @name_size
  554.     if text.nil?
  555.       self.visible = false
  556.     else
  557.       self.visible = true
  558.       self.contents.draw_text(0,0, text.size*7, 20, text, 0)
  559.     end
  560.     #------------------------------------------------------------------------
  561.     # ● 說明描繪
  562.     #------------------------------------------------------------------------
  563.      x = 0
  564.     @y += 1
  565.     while ((text = description.slice!(/./m)) != nil)
  566.       self.contents.font.size = @size
  567.       self.contents.font.color = normal_color
  568.       self.contents.draw_text(x*@size, @y*@size+5, @size, @size, text, 0)
  569.       if words_judge(text) == true
  570.         x+=1
  571.       else
  572.         x+=0.5
  573.       end  
  574.       if x == @word or x == @word - 0.5
  575.         x = 0
  576.         @y += 1
  577.       end
  578.     end
  579.     #------------------------------------------------------------------------
  580.     # ● 圖標描繪
  581.     #------------------------------------------------------------------------
  582.     #bitmap = Cache.system("Iconset")
  583.     #rect = Rect.new(item.icon_index % 16 * 24, equipment.icon_index / 16 * 24, 24, 24)
  584.     #self.contents.blt(0, y*size + 20, bitmap, rect, 255)
  585.     #------------------------------------------------------------------------
  586.     # ● 效果範圍
  587.     #------------------------------------------------------------------------
  588.     unless scope[item.scope] == "无"
  589.       text = phrase[:scope] +":"
  590.       draw_text(text, 1, move)
  591.       text = scope[item.scope]
  592.       draw_text(text, 1, move + @size)
  593.     end
  594.     #------------------------------------------------------------------------
  595.     # ● 價格
  596.     #------------------------------------------------------------------------
  597.     unless item.price == 0
  598.       text = phrase[:price] + ":" + item.price.to_s
  599.       draw_text(text, 1, move)
  600.     end
  601.     #------------------------------------------------------------------------
  602.     # ● 消耗品
  603.     #------------------------------------------------------------------------
  604.     if item.consumable
  605.       text = phrase[:consumable]
  606.       draw_text(text, 1, move)
  607.     end
  608.     #------------------------------------------------------------------------
  609.     # ● 速度補正値
  610.     #------------------------------------------------------------------------
  611.     unless item.speed.zero?
  612.       text = phrase[:speed]
  613.       draw_text(text, 1, move)
  614.     end
  615.     #------------------------------------------------------------------------
  616.     # ● HP回復
  617.     #------------------------------------------------------------------------
  618.     unless item.hp_recovery_rate.zero? and item.hp_recovery.zero?
  619.       if item.hp_recovery_rate > 0 and item.hp_recovery > 0
  620.         text = " + "
  621.       else
  622.         text = ""
  623.       end
  624.       
  625.       unless item.hp_recovery_rate.zero?
  626.         text = item.hp_recovery_rate.to_s + "%" + text
  627.       end
  628.       unless item.hp_recovery.zero?
  629.         text += item.hp_recovery.to_s
  630.       end
  631.       text = phrase[:recover] +":"  + text + phrase[:hp]
  632.       draw_text(text, 1, move)
  633.     end
  634.     #------------------------------------------------------------------------
  635.     # ● SP回復
  636.     #------------------------------------------------------------------------
  637.     unless item.mp_recovery_rate.zero? and item.mp_recovery.zero?
  638.       if item.mp_recovery_rate > 0 and item.mp_recovery > 0
  639.         text = " + "
  640.       else
  641.         text = ""
  642.       end
  643.       
  644.       unless item.mp_recovery_rate.zero?
  645.         text = item.mp_recovery_rate.to_s + "%" + text
  646.       end
  647.       unless item.mp_recovery.zero?
  648.         text += item.mp_recovery.to_s
  649.       end
  650.       text = phrase[:recover] +":" + text + phrase[:mp]
  651.       draw_text(text, 1, move)
  652.     end
  653.     #------------------------------------------------------------------------
  654.     # ● 能力值增加
  655.     #------------------------------------------------------------------------
  656.     unless item.parameter_type.zero?
  657.       text = parameter_type[item.parameter_type]+" +"+item.parameter_points.to_s
  658.       draw_text(text, 1, move)
  659.     end
  660.     #------------------------------------------------------------------------
  661.     # ● 基本ダメージ
  662.     #------------------------------------------------------------------------
  663.     unless item.base_damage.zero?
  664.       #text = phrase[:base_damage] +":" + item.base_damage.to_s
  665.       text = item.base_damage > 0 ? phrase[:base_damage] +":" + item.base_damage.to_s: phrase[:recovery] +":" + (-item.base_damage).to_s
  666.       draw_text(text, 1, move)
  667.     end
  668.     #------------------------------------------------------------------------
  669.     # ● 屬性
  670.     #------------------------------------------------------------------------
  671.     if element_set.size > 0
  672.       text = phrase[:elements]+":"
  673.       draw_text(text, 1, move)
  674.       element_set.each do |i|
  675.         text = $data_system.elements[i]
  676.         draw_text(text, 1, move + @size)
  677.       end
  678.     end
  679.     #------------------------------------------------------------------------
  680.     # ● 添加狀態
  681.     #------------------------------------------------------------------------
  682.     unless plus_state_set.empty?
  683.       text = phrase[:plus_states]+":"
  684.       draw_text(text, 1, move)
  685.       plus_state_set.each do |i|
  686.         text = $data_states[i].name
  687.         draw_text(text, 1, move + @size)
  688.       end
  689.     end
  690.     #------------------------------------------------------------------------
  691.     # ● 解除狀態
  692.     #------------------------------------------------------------------------
  693.     unless minus_state_set.empty?
  694.       text = phrase[:minus_states]+":"
  695.       draw_text(text, 1, move)
  696.       minus_state_set.each do |i|
  697.         text = $data_states[i].name
  698.         draw_text(text, 1, move + @size)
  699.       end
  700.     end
  701.     #------------------------------------------------------------------------
  702.     # ● 特殊效果
  703.     #------------------------------------------------------------------------
  704.     if special.size > 0
  705.       text = phrase[:special]+":"
  706.       draw_text(text, 1, move)
  707.       special.each {|text| draw_text(text, 1, move + @size)}
  708.     end
  709.   end
  710. #////////////////////////////////////////////////////////////////////////////
  711.   #--------------------------------------------------------------------------
  712.   # ● 技能帮助窗口
  713.   #--------------------------------------------------------------------------
  714.   def set_skill_text(skill)
  715.     #----------------------------#
  716.     # 取得屬性、狀態、說明之副本 #
  717.     #----------------------------#
  718.     description = skill.description.clone
  719.     element_set = skill.element_set.clone
  720.     plus_state_set = skill.plus_state_set.clone
  721.     minus_state_set = skill.minus_state_set.clone
  722.     # 過濾不顯示的描述
  723.     element_set -= @unshow_elements
  724.     plus_state_set -= @unshow_states
  725.     minus_state_set -= @unshow_states
  726.     # 初始化設定
  727.     x ,h, move = 0, 0, 0
  728.     phrase = @phrase
  729.     scope = @scope
  730.     #------------------#
  731.     # 取得特殊效果數據 #
  732.     #------------------#
  733.     special = []
  734.     special << phrase[:physical_attack] if skill.physical_attack #物理攻撃
  735.     special << phrase[:damage_to_mp]    if skill.damage_to_mp    #MPにダメージ
  736.     special << phrase[:absorb_damage]   if skill.absorb_damage   #ダメージを吸収
  737.     special << phrase[:ignore_defense]  if skill.ignore_defense  #防御力無視
  738.     #------------------------------------------------------------------------
  739.     # ● 確定背景圖片的高度
  740.     #------------------------------------------------------------------------
  741.     h += (description.size/3/@word)
  742.     h += 1 if (description.size/3%@word) >= 0
  743.     now_h = h
  744.    
  745.     h += 4                                  #効果範囲,消費MP,预留一行
  746.     h += 1 unless skill.speed.zero?         #速度補正値
  747.     h += 1 unless skill.base_damage.zero?   #基本ダメージ
  748.    
  749.    
  750.    
  751.     h += element_set.size     + 1 if element_set.size     > 0  #屬性
  752.     h += plus_state_set.size  + 1 if plus_state_set.size  > 0  #附加狀態
  753.     h += minus_state_set.size + 1 if minus_state_set.size > 0  #解除狀態
  754.     h += special.size         + 1 if special.size         > 0  #特殊效果
  755.     $special_size = nil
  756.     $first_line = nil
  757.     #------------------------------------------------------------------------
  758.     # ● 換算高度
  759.     #------------------------------------------------------------------------
  760.     self.height=h * @size + @name_size + 40  
  761.     self.contents = Bitmap.new(self.width - 32,self.height - 32)
  762.     self.contents.clear
  763.    
  764.     #------------------------------------------------------------------------
  765.     # ● 名字描述
  766.     #------------------------------------------------------------------------
  767.     text = skill.name
  768.     self.contents.font.color = Color.new(255, 255, 128, 255)
  769.     self.contents.font.size = @name_size
  770.     if text!=nil
  771.       self.visible = true
  772.       self.contents.draw_text(0,0, text.size*7, @name_size, text, 0)
  773.     else
  774.       self.visible = false
  775.     end
  776.    
  777.     #------------------------------------------------------------------------
  778.     # ● 說明描述
  779.     #------------------------------------------------------------------------
  780.     x = 0
  781.     @y += 1
  782.     text = description
  783.     text.gsub!(/\\V\[([0-9]+)\]/i) { $game_variables[$1.to_i] }
  784.     while ((text = description.slice!(/./m)) != nil)
  785.       self.contents.font.size = @size
  786.       self.contents.font.color = normal_color
  787.       self.contents.draw_text(x*@size, @y*@size+5, @size, @size, text, 0)
  788.       if words_judge(text) == true
  789.         x+=1
  790.       else
  791.         x+=0.5
  792.       end  
  793.       if x == @word or x == @word - 0.5
  794.         x = 0
  795.         @y += 1
  796.       end
  797.     end
  798.    
  799.     #------------------------------------------------------------------------
  800.     # ● 攻擊範圍
  801.     #------------------------------------------------------------------------
  802.     text = phrase[:scope] +":"
  803.     draw_text(text, 1, move)
  804.     text = scope[skill.scope]
  805.     text = "我方或敌方单体" if scope[skill.scope] == nil#圣疗术调用
  806.     text = "敌方随机单体" if skill.id == 113            #夺命枷锁
  807.     draw_text(text, 1, move + @size)
  808.     #------------------------------------------------------------------------
  809.     # ● 基本ダメージ
  810.     #------------------------------------------------------------------------
  811.     unless skill.base_damage.zero?
  812.       text = skill.base_damage > 0 ? phrase[:base_damage] : phrase[:recovery]
  813.       text += ":" + skill.base_damage.abs.to_s
  814.       draw_text(text, 1, move)
  815.     end
  816.     #------------------------------------------------------------------------
  817.     # ● 消費SP描述
  818.     #------------------------------------------------------------------------
  819.     if $data_skills[skill.id].read_note('MP增量') == ""
  820.       text = phrase[:mp_cost] +":"+ skill.mp_cost.to_s
  821.     else
  822.       text = phrase[:mp_cost] +":"+ (skill.mp_cost + $data_skills[skill.id].read_note('MP增量').to_i * ($game_variables[113][skill.id] - 1)).to_s
  823.     end
  824.     if skill.mp_cost == 0 and skill.base_damage .zero? #被动技能调用
  825.       text = phrase[:mp_cost] +":"+ "被动技能"
  826.     end
  827.     draw_text(text, 1, move)
  828.     #------------------------------------------------------------------------
  829.     # ● 屬性
  830.     #------------------------------------------------------------------------
  831.     if element_set.size > 0
  832.       text = phrase[:elements]+":"
  833.       draw_text(text, 1, move)
  834.       element_set.each do |i|
  835.         text = $data_system.elements[i]
  836.         draw_text(text, 1, move + @size)
  837.       end
  838.     end
  839.     #------------------------------------------------------------------------
  840.     # ● 添加狀態
  841.     #------------------------------------------------------------------------
  842.     unless plus_state_set.empty?
  843.       text = phrase[:plus_states]+":"
  844.       draw_text(text, 1, move)
  845.       plus_state_set.each do |i|
  846.         text = $data_states[i].name
  847.         draw_text(text, 1, move + @size)
  848.       end
  849.     end
  850.     #------------------------------------------------------------------------
  851.     # ● 解除狀態
  852.     #------------------------------------------------------------------------
  853.     unless minus_state_set.empty?
  854.       text = phrase[:minus_states]+":"
  855.       draw_text(text, 1, move)
  856.       minus_state_set.each do |i|
  857.         text = $data_states[i].name
  858.         draw_text(text, 1, move + @size)
  859.       end
  860.     end
  861.     #------------------------------------------------------------------------
  862.     # ● 特殊效果
  863.     #------------------------------------------------------------------------
  864.     if special.size > 0
  865.       text = phrase[:special]+":"
  866.       draw_text(text, 1, move)
  867.       special.each {|text| draw_text(text, 1, move + @size)}
  868.     end  
  869.   end
  870.   #------------------------------------------------------------------------
  871.   # ● 文字数字判定
  872.   #------------------------------------------------------------------------
  873.   def words_judge(word)
  874.     case word
  875.     when "0","1","2","3","4","5","6","7","8","9","%",".","A","B","C","D","E",\
  876.       "F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W",\
  877.       "X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o",\
  878.       "p","q","r","s","t","u","v","w","x","y","z"
  879.       return false
  880.     end
  881.     return true
  882.   end  
  883. end
  884. =begin
  885. #==============================================================================
  886. # ■ Window_Item
  887. #------------------------------------------------------------------------------
  888. #  アイテム画面などで、所持アイテムの一覧を表示するウィンドウです。
  889. #==============================================================================

  890. class Window_Item < Window_Selectable
  891.   #--------------------------------------------------------------------------
  892.   # ● ヘルプテキスト更新
  893.   #--------------------------------------------------------------------------
  894.   def update_help
  895.     if $game_switches[1] == false
  896.     @help_window.set_text(item == nil ? "" : item.description)
  897.     else
  898.     @help_window.set_text(item)
  899.     #修正窗口位置
  900.     @help_window.set_pos(self.x,self.y,self.width,self.oy,self.index,@column_max)
  901.     end
  902.   end
  903. end
  904. #==============================================================================
  905. # ■ Window_Skill^
  906. #------------------------------------------------------------------------------
  907. #  スキル画面などで、使用できるスキルの一覧を表示するウィンドウです。
  908. #==============================================================================

  909. class Window_Skill < Window_Selectable
  910.   #--------------------------------------------------------------------------
  911.   # ● ヘルプテキスト更新
  912.   #--------------------------------------------------------------------------
  913.   def update_help
  914.     if $game_switches[1] == false
  915.     @help_window.set_text(skill == nil ? "" : skill.description)
  916.     else
  917.     @help_window.set_text(skill)
  918.     #修正窗口位置
  919.     @help_window.set_pos(self.x,self.y,self.width,self.oy,self.index,@column_max)
  920.     end
  921.   end
  922. end
  923. #==============================================================================
  924. # ■ Window_Equip^
  925. #------------------------------------------------------------------------------
  926. #  装備画面で、アクターが現在装備しているアイテムを表示するウィンドウです。
  927. #==============================================================================

  928. class Window_Equip < Window_Selectable
  929.   #--------------------------------------------------------------------------
  930.   # ● ヘルプテキスト更新
  931.   #--------------------------------------------------------------------------
  932.   def update_help
  933.     if $game_switches[1] == false
  934.     @help_window.set_text(item == nil ? "" : item.description)
  935.     else
  936.     @help_window.set_text(item)
  937.     #修正窗口位置
  938.     @help_window.set_pos(self.x,self.y,self.width,self.oy,self.index,@column_max)
  939.     end
  940.   end
  941. end
  942. #==============================================================================
  943. # ■ Window_ShopBuy^
  944. #------------------------------------------------------------------------------
  945. #  ショップ画面で、購入できる商品の一覧を表示するウィンドウです。
  946. #==============================================================================
  947. class Window_ShopBuy < Window_Selectable
  948.   #--------------------------------------------------------------------------
  949.   # ● ヘルプテキスト更新
  950.   #--------------------------------------------------------------------------
  951.   def update_help
  952.     if $game_switches[1] == false
  953.     @help_window.set_text(item == nil ? "" : item.description)
  954.     else
  955.     @help_window.set_text(item)
  956.     #修正窗口位置
  957.     @help_window.set_pos(self.x,self.y,self.width,self.oy,self.index,@column_max)
  958.     end
  959.   end
  960. end
  961. =end

  962. #==============================================================================
  963. # ■ Window_Item
  964. #------------------------------------------------------------------------------
  965. #  アイテム画面などで、所持アイテムの一覧を表示するウィンドウです。
  966. #==============================================================================

  967. class Window_Item < Window_Selectable
  968.   #--------------------------------------------------------------------------
  969.   # ● ヘルプテキスト更新
  970.   #--------------------------------------------------------------------------
  971.   def update_help
  972.     @help_window.set_text(item)
  973.     #修正窗口位置
  974.     @help_window.set_pos(self.x,self.y,self.width,self.oy,self.index,@column_max)
  975.   end
  976. end
  977. #==============================================================================
  978. # ■ Window_Skill
  979. #------------------------------------------------------------------------------
  980. #  スキル画面などで、使用できるスキルの一覧を表示するウィンドウです。
  981. #==============================================================================

  982. class Window_Skill < Window_Selectable
  983.   #--------------------------------------------------------------------------
  984.   # ● ヘルプテキスト更新
  985.   #--------------------------------------------------------------------------
  986.   def update_help
  987.     @help_window.set_text(skill)
  988.     #修正窗口位置
  989.     @help_window.set_pos(self.x,self.y,self.width,self.oy,self.index,@column_max)
  990.   end
  991. end
  992. #==============================================================================
  993. # ■ Window_Equip
  994. #------------------------------------------------------------------------------
  995. #  装備画面で、アクターが現在装備しているアイテムを表示するウィンドウです。
  996. #==============================================================================

  997. class Window_Equip < Window_Selectable
  998.   #--------------------------------------------------------------------------
  999.   # ● ヘルプテキスト更新
  1000.   #--------------------------------------------------------------------------
  1001.   def update_help
  1002.     @help_window.set_text(item)
  1003.     #修正窗口位置
  1004.     @help_window.set_pos(self.x,self.y,self.width,self.oy,self.index,@column_max)
  1005.   end
  1006. end
  1007. #==============================================================================
  1008. # ■ Window_ShopBuy
  1009. #------------------------------------------------------------------------------
  1010. #  ショップ画面で、購入できる商品の一覧を表示するウィンドウです。
  1011. #==============================================================================
  1012. class Window_ShopBuy < Window_Selectable
  1013.   #--------------------------------------------------------------------------
  1014.   # ● ヘルプテキスト更新
  1015.   #--------------------------------------------------------------------------
  1016.   def update_help
  1017.     @help_window.set_text(item)
  1018.     #修正窗口位置
  1019.     @help_window.set_pos(self.x,self.y,self.width,self.oy,self.index,@column_max)
  1020.   end
  1021. end
复制代码
这个脚本。。。。。。。。
作者: 彭格列第XI代    时间: 2012-12-9 17:58
超级D梦 发表于 2012-12-9 17:20
这个脚本。。。。。。。。


作者: 超级D梦    时间: 2012-12-9 18:09
对不起,我把你的题目搞错了
作者: 超级D梦    时间: 2012-12-9 18:12
你把这个Window_Item改一下就OK了
作者: 彭格列第XI代    时间: 2012-12-9 20:48
@八宝粥先生 不要在意那些细节啦
作者: 怪蜀黍    时间: 2012-12-10 14:32
这样??

作者: a886qqsd    时间: 2012-12-10 16:42
LZ.你在看刀剑神域
作者: 怪蜀黍    时间: 2012-12-10 19:32
那把光变由长形变成方形,分15列显示应该就差不多了,稍微改改脚本技能实现,不就调个光标宽度和显示列数吗。
作者: a364774426    时间: 2012-12-10 19:53
我脚得这样做会很坑爹,本来图标就很难看出很大的差异,当玩家需要找某件物品时会非常痛苦。不如显示名称那么明显
作者: 超级D梦    时间: 2012-12-10 20:23
不打显示名就OK了,只弄物品图标,把显示名空掉
作者: 球球猫    时间: 2012-12-10 21:58
其实记得刀剑原作里,道具栏就是一个列表形式的,甚至连图片都没有,只有一个名字的,只是点击了才会出现一个3D影像...
作者: 怪蜀黍    时间: 2012-12-11 14:27

时间太紧了,凑合一下,帮助窗口的坐标你自己调了,不要伸手过长。把以下脚本替换原来的整合物品分类脚本。
  1. #==============================================================================
  2. # 作者:NaturalBlue
  3. # 说明:此脚本实现菜单与战斗时的物品分类。
  4. # protosssonny修改版
  5. #==============================================================================

  6. module RPG
  7.    class Weapon
  8.      def note
  9.        note = @note.split(/@/)[0]
  10.        return note != nil ? note : ''
  11.      end
  12.      def nt#在没有备注的情况下,物品被放在此处
  13.        nt = @note.split(/@/)[1]
  14.        return nt != nil ? nt : "普通物品"
  15.      end
  16.    end
  17.    class Item
  18.      def note
  19.        note = @note.split(/@/)[0]
  20.        return note != nil ? note : ''
  21.      end
  22.      def nt
  23.        nt = @note.split(/@/)[1]
  24.        return nt != nil ? nt : "普通物品"
  25.      end
  26.    end
  27.    class Armor
  28.      def note
  29.        note = @note.split(/@/)[0]
  30.        return note != nil ? note : ''
  31.      end
  32.      def nt
  33.        nt = @note.split(/@/)[1]
  34.        return nt != nil ? nt : "普通物品"
  35.      end
  36.    end
  37. end
  38. #========================================================================
  39. class NaturalBlue_Window_ItemTitle < Window_Base
  40.    def initialize
  41.      super(0, 0, 160, 56)
  42.      self.contents = Bitmap.new(width - 32, height - 32)
  43.      self.contents.clear
  44.      self.contents.font.color = normal_color
  45.      self.contents.draw_text(4, 0, 120, 24, Vocab::item, 1)
  46.    end
  47. end
  48. #========================================================================
  49. class NaturalBlue_Window_ItemCommand < Window_Selectable
  50.    attr_accessor :commands
  51.    def initialize
  52.      super(0, 56, 160, 360)
  53.      self.index = 0
  54.      refresh
  55.    end
  56.    
  57.   def addcommand
  58.     @commands = []
  59.     for i in 1..$data_items.size
  60.       if $game_party.item_number($data_items[i]) > 0
  61.         push = true
  62.         for com in @commands
  63.           if com == $data_items[i].nt
  64.             push = false
  65.           end
  66.         end
  67.         if push == true
  68.           @commands.push($data_items[i].nt)
  69.         end
  70.       end
  71.     end
  72.     for i in 1..$data_weapons.size
  73.       if $game_party.item_number($data_weapons[i]) > 0
  74.         push = true
  75.         for com in @commands
  76.           if com == $data_weapons[i].nt
  77.             push = false
  78.           end
  79.         end
  80.           if push == true
  81.             @commands.push($data_weapons[i].nt)
  82.           end
  83.         end
  84.       end
  85.       for i in 1..$data_armors.size
  86.         if $game_party.item_number($data_armors[i]) > 0
  87.           push = true
  88.           for com in @commands
  89.             if com == $data_armors[i].nt
  90.               push = false
  91.             end
  92.           end
  93.           if push == true
  94.             @commands.push($data_armors[i].nt)
  95.           end
  96.         end
  97.       end
  98.       if @commands == []
  99.         @commands.push("普通物品")
  100.       end      
  101.       @item_max = @commands.size
  102.    end
  103.    
  104.   def refresh
  105.      addcommand
  106.      create_contents
  107.      for i in 0...@item_max
  108.        draw_item(i, normal_color)
  109.      end
  110.    end
  111.    
  112.    def draw_item(index, color)
  113.      y = index * WLH
  114.      self.contents.font.color = color
  115.      if @commands[index] != nil
  116.        self.contents.draw_text(4,y, 172, WLH, @commands[index])
  117.      end
  118.    end

  119.    def update_help
  120.      @help_window.set_text(@commands[self.index])
  121.      @help_window.visible = false
  122.    end
  123. end
  124. #========================================================================
  125. class NaturalBlue_Window_ItemList < Window_Selectable
  126.    
  127.    def initialize
  128.      super(160, 56, 384, 360)
  129.      self.index = 0
  130.      refresh
  131.      @column_max = 10
  132.      @index = -1
  133.      @spacing = 4
  134.    end
  135.    
  136.    def item
  137.      return @data[self.index]
  138.    end
  139.    
  140.    def refresh
  141.      @data = []
  142.    end
  143.    
  144.    def set_item(command)
  145.      refresh
  146.      for i in 1..$data_items.size
  147.        if $game_party.item_number($data_items[i]) > 0 and $data_items[i].nt == command
  148.          @data.push($data_items[i])
  149.        end
  150.      end
  151.      for i in 1..$data_weapons.size
  152.        if $game_party.item_number($data_weapons[i]) > 0 and $data_weapons[i].nt == command
  153.          @data.push($data_weapons[i])
  154.        end
  155.      end
  156.      for i in 1..$data_armors.size
  157.        if $game_party.item_number($data_armors[i]) > 0 and $data_armors[i].nt == command
  158.          @data.push($data_armors[i])
  159.        end
  160.      end
  161.      @item_max = @data.size
  162.      r = row_max
  163.      r = 1 if r == 0
  164.      if @item_max > 0
  165.        self.contents = Bitmap.new(384 - 32, r * 32)
  166.        self.contents.clear
  167.        for i in 0...@item_max
  168.          draw_item(i)
  169.        end
  170.      end
  171.    end
  172.    
  173.    def set_item_sell(command)
  174.      refresh
  175.      for i in 1..$data_items.size
  176.        if $game_party.item_number($data_items[i]) > 0 and $data_items[i].nt == command
  177.          @data.push($data_items[i])
  178.        end
  179.      end
  180.      for i in 1..$data_weapons.size
  181.        if $game_party.item_number($data_weapons[i]) > 0 and $data_weapons[i].nt == command
  182.          @data.push($data_weapons[i])
  183.        end
  184.      end
  185.      for i in 1..$data_armors.size
  186.        if $game_party.item_number($data_armors[i]) > 0 and $data_armors[i].nt == command
  187.          @data.push($data_armors[i])
  188.        end
  189.      end
  190.      @item_max = @data.size
  191.      r = row_max
  192.      r = 1 if r == 0
  193.      if @item_max > 0
  194.        self.contents = Bitmap.new(384 - 32, r * 32)
  195.        self.contents.clear
  196.        for i in 0...@item_max
  197.          draw_item_sell(i)
  198.        end
  199.      end
  200.    end
  201.    
  202.    def item_number
  203.      return @item_max
  204.    end
  205.    
  206.    def draw_item(index)
  207.      rect = item_rect(index)
  208.      self.contents.clear_rect(rect)
  209.      item = @data[index]
  210.      if item != nil
  211.        number = $game_party.item_number(item)
  212.        enabled = $game_party.item_can_use?(item)
  213.        rect.width -= 4
  214.        draw_icon(item.icon_index, rect.x, rect.y, enabled)
  215.        self.contents.font.size = 12
  216.        self.contents.draw_text(rect.x, rect.y + 4, rect.width, rect.height, sprintf("%2d", number), 2)
  217.        self.contents.font.size = 20
  218.      end
  219.    end
  220.    
  221.    def draw_item_sell(index)
  222.      rect = item_rect(index)
  223.      self.contents.clear_rect(rect)
  224.      item = @data[index]
  225.      if item != nil
  226.        number = $game_party.item_number(item)
  227.        enabled = jugde_enable(item)
  228.        rect.width -= 4
  229.        draw_icon(item.icon_index, rect.x, rect.y, enabled)
  230.        self.contents.font.size = 12
  231.        self.contents.draw_text(rect.x, rect.y + 4, rect.width, rect.height, sprintf("%2d", number), 2)
  232.        self.contents.font.size = 20
  233.      end
  234.    end
  235.    
  236.    def jugde_enable(item)
  237.      return item.price > 0
  238.    end
  239.    
  240.   #--------------------------------------------------------------------------
  241.   # ● 光标下移
  242.   #     wrap : 允许循环
  243.   #--------------------------------------------------------------------------
  244.   def cursor_down(wrap = false)
  245.     if (@index < @item_max - @column_max) or (wrap and @column_max == 1)
  246.       @index += 10
  247.     end
  248.   end
  249.   #--------------------------------------------------------------------------
  250.   # ● 光标上移
  251.   #     wrap : 允许循环
  252.   #--------------------------------------------------------------------------
  253.   def cursor_up(wrap = false)
  254.     if (@index >= @column_max) or (wrap and @column_max == 1)
  255.       @index -= 10
  256.     end
  257.   end
  258.   
  259. #==============================================================================
  260. # ■ Window_ShopSell
  261. #------------------------------------------------------------------------------
  262. #  商店画面、浏览显示可以卖掉的商品的窗口。
  263. #==============================================================================
  264.    def update_help   
  265.       @help_window.set_text(item)
  266.       if item != nil
  267.         @help_window.set_pos(self.x,self.y,self.width,self.oy,self.index,@column_max)
  268.       else
  269.         @help_window.x = 1000  #没有物品时,让帮助窗口出界而看不见
  270.       end
  271.     end  
  272. end
  273. #========================================================================
  274. class NaturalBlue_Window_MenuStatus < Window_Selectable

  275.    def initialize(x, y)
  276.      super(x, y, 288, 416)
  277.      refresh
  278.      self.active = false
  279.      self.index = -1
  280.    end

  281.    def refresh
  282.      self.contents.clear
  283.      @item_max = $game_party.members.size
  284.      for actor in $game_party.members
  285.        x = 8
  286.        y = actor.index * 96 + WLH / 2
  287.        draw_actor_name(actor, x, y)
  288.        draw_actor_class(actor, x + 120, y)
  289.        draw_actor_level(actor, x, y + WLH * 1)
  290.        draw_actor_state(actor, x, y + WLH * 2)
  291.        draw_actor_hp(actor, x + 120, y + WLH * 1)
  292.        draw_actor_mp(actor, x + 120, y + WLH * 2)
  293.      end
  294.    end

  295.    def update_cursor
  296.      if @index < 0               
  297.        self.cursor_rect.empty
  298.      elsif @index < @item_max  
  299.        self.cursor_rect.set(0, @index * 96, contents.width, 96)
  300.      elsif @index >= 100        
  301.        self.cursor_rect.set(0, (@index - 100) * 96, contents.width, 96)
  302.      else                       
  303.        self.cursor_rect.set(0, 0, contents.width, @item_max * 96)
  304.      end
  305.    end
  306. end

  307. class Scene_Item < Scene_Base
  308.    def start
  309.      super
  310.      $item_self = 0 if $item_self == nil  #例如声望之书,使用后$item_self == 0,if $item_self == 0,光标就仍然停留在原物品上面
  311.      @item_self = 0 if @item_self == nil  #例如声望之书,使用后它会记录此时光标的index
  312.      @command_self = 0 if @command_self == nil #例如声望之书,使用后它会记录物品分类此时光标的index
  313.      create_menu_background
  314.      @viewport = Viewport.new(0, 0, 544, 416)
  315.      @itemtitle_window = NaturalBlue_Window_ItemTitle.new
  316.      @itemcommand_window = NaturalBlue_Window_ItemCommand.new
  317.      @command_index = @itemcommand_window.index
  318.      @itemcommand_window.refresh
  319.      @itemlist_window = NaturalBlue_Window_ItemList.new
  320.      @itemlist_window.y = 0
  321.      @itemlist_window.height = 416
  322.      @itemlist_window.active = false
  323.      @help_window = Window_Help.new                          
  324.      @target_window = Window_MenuStatus.new(100, 0)
  325.      @itemcommand_window.help_window = @help_window
  326.      @itemlist_window.help_window = @help_window
  327.      @itemlist_window.help_window.x = 1000                    #让它初始化时出界不显示
  328.      @itemlist_window.set_item(@itemcommand_window.commands[@command_index])
  329.      hide_target_window
  330.    end

  331.    def terminate
  332.      super
  333.      dispose_menu_background
  334.      @viewport.dispose
  335.      @itemtitle_window.dispose
  336.      @itemcommand_window.dispose
  337.      @itemlist_window.dispose
  338.      @help_window.dispose
  339.      @target_window.dispose
  340.    end

  341.    def return_scene
  342.      $scene = Scene_Menu.new(0)
  343.    end
  344.    def update
  345.      super
  346.      update_menu_background
  347.      @help_window.update
  348.      @itemlist_window.update
  349.      @itemcommand_window.update
  350.      @target_window.update
  351.      @itemcommand_window.refresh
  352.      if $item_self == 1
  353.        @itemcommand_window.active = false
  354.        @itemcommand_window.index = @command_self
  355.        @itemlist_window.active = true
  356.        @itemlist_window.index = @item_self
  357.      end
  358.      if @command_index != @itemcommand_window.index
  359.        if $item_self == 0
  360.          @itemlist_window.index = 0
  361.        else
  362.          $item_self = 0
  363.        end  
  364.        @command_index = @itemcommand_window.index
  365.        @itemcommand_window.update_help
  366.        @itemlist_window.set_item(@itemcommand_window.commands[@command_index])
  367.      end
  368.      if @itemcommand_window.active
  369.        @itemcommand_window.update_help
  370.        update_itemcommand
  371.      elsif @itemlist_window.active
  372.        update_itemlist
  373.      elsif @target_window.active
  374.        update_target_selection
  375.      end
  376.    end

  377.    def update_itemcommand
  378.      if Input.trigger?(Input::B)
  379.        Sound.play_cancel
  380.        return_scene
  381.        return
  382.      end
  383.      if Input.trigger?(Input::C)
  384.        if @itemlist_window.item_number == 0
  385.          Sound.play_buzzer
  386.          return
  387.        end
  388.        Sound.play_decision
  389.        @itemcommand_window.active = false
  390.        @itemlist_window.index = 0
  391.        @itemlist_window.active = true
  392.        return
  393.      end
  394.    end

  395.    def update_itemlist
  396.      if Input.trigger?(Input::B)
  397.        Sound.play_cancel
  398.        @itemcommand_window.active = true
  399.        @itemlist_window.active = false
  400.        @help_window.visible = false              #我加
  401.        @itemcommand_window.index = @command_index
  402.      elsif Input.trigger?(Input::C)
  403.        @item = @itemlist_window.item
  404.        if @item != nil
  405.          $game_party.last_item_id = @item.id
  406.        end
  407.        if $game_party.item_can_use?(@item)
  408.          Sound.play_decision
  409.          determine_item
  410.        else
  411.          Sound.play_buzzer
  412.        end
  413.      end
  414.    end

  415.    def determine_item
  416.      if @item.for_friend?
  417.        show_target_window(@itemlist_window.index % 2 == 0)
  418.        if @item.for_all?
  419.          @target_window.index = 99
  420.        else
  421.          if $game_party.last_target_index < @target_window.item_max
  422.            @target_window.index = $game_party.last_target_index
  423.          else
  424.            @target_window.index = 0
  425.          end
  426.        end
  427.      else
  428.        use_item_nontarget
  429.      end
  430.    end

  431.    def update_target_selection
  432.      if Input.trigger?(Input::B)
  433.        Sound.play_cancel
  434.        if $game_party.item_number(@item) == 0
  435.          @itemlist_window.refresh                 
  436.        end
  437.        @itemlist_window.active = true
  438.        @itemlist_window.set_item(@itemcommand_window.commands[@command_index])
  439.        hide_target_window
  440.        @itemlist_window.active = true
  441.      elsif Input.trigger?(Input::C)
  442.        if not $game_party.item_can_use?(@item)
  443.          Sound.play_buzzer
  444.        else
  445.          determine_target
  446.        end
  447.      end
  448.    end

  449.    def determine_target
  450.      used = false
  451.      if @item.for_all?
  452.        for target in $game_party.members
  453.          target.item_effect(target, @item)
  454.          used = true unless target.skipped
  455.        end
  456.      else
  457.        $game_party.last_target_index = @target_window.index
  458.        target = $game_party.members[@target_window.index]
  459.        target.item_effect(target, @item)
  460.        used = true unless target.skipped
  461.      end
  462.      if used
  463.        use_item_nontarget
  464.      else
  465.        Sound.play_buzzer
  466.      end
  467.    end

  468.    def show_target_window(right)
  469.      @help_window.visible = false
  470.      @itemlist_window.active = false
  471.      width_remain = 544 - @target_window.width
  472.      @target_window.x = right ? width_remain : 0
  473.      @target_window.visible = true
  474.      @target_window.active = true
  475.      if right
  476.        @viewport.rect.set(0, 0, width_remain, 416)
  477.        @viewport.ox = 0
  478.      else
  479.        @viewport.rect.set(@target_window.width, 0, width_remain, 416)
  480.        @viewport.ox = @target_window.width
  481.      end
  482.    end

  483.    def hide_target_window
  484.      @help_window.visible = true
  485.      @target_window.visible = false
  486.      @target_window.active = false
  487.      @itemlist_window.set_item(@itemcommand_window.commands[@command_index])
  488.      @viewport.rect.set(0, 0, 544, 416)
  489.      @viewport.ox = 0
  490.    end

  491.    def use_item_nontarget
  492.      Sound.play_use_item
  493.      $game_party.consume_item(@item)
  494.      @itemlist_window.draw_item(@itemlist_window.index)
  495.      @itemlist_window.set_item(@itemcommand_window.commands[@command_index])
  496.      @target_window.refresh
  497.      if $game_party.all_dead?
  498.        $scene = Scene_Gameover.new
  499.      elsif @item.common_event_id > 0
  500.        @command_self = @command_index
  501.        @item_self = @itemlist_window.index
  502.        $game_temp.common_event_id = @item.common_event_id
  503.        $last_scene = $scene            #声望之书等会还原物品选择的scene
  504.        $scene = Scene_Map.new
  505.      end
  506.    end
  507. end

  508. #==============================================================================

  509. #==============================================================================
  510. # ■ Scene_Battle 补充定义 ★★★★★★
  511. #------------------------------------------------------------------------------
  512. #  实现战斗时物品选择的分类。
  513. #   作者:NaturalBlue
  514. #   说明:此脚本参考了柳柳的“战斗技能脚本”。
  515. #==============================================================================
  516. class Scene_Battle < Scene_Base
  517.    #--------------------------------------------------------------------------
  518.    # ● 开始物品选择
  519.    #--------------------------------------------------------------------------
  520.    def start_item_selection
  521.      @help_window = Window_Help.new
  522.      @item_window = NaturalBlue_Window_ItemList.new
  523.      @item_window.help_window = @help_window
  524.      @item_window.y = 0
  525.      @item_window.height = 288
  526.      @itemcommand_window = NaturalBlue_Window_ItemCommand.new
  527.      @itemcommand_window.y = 0
  528.      @itemcommand_window.height = 288
  529.      @itemcommand_window.active = true
  530.      @itemcommand_window.back_opacity = 200
  531.      @itemcommand_window.help_window = @help_window
  532.      @command_index = @itemcommand_window.index
  533.      @item_window.set_item(@itemcommand_window.commands[@command_index])
  534.      @actor_command_window.active = false
  535.      @item_window.active = false
  536.    end
  537.    #--------------------------------------------------------------------------
  538.    # ● 结束物品选择
  539.    #--------------------------------------------------------------------------
  540.    def end_item_selection
  541.      if @item_window != nil
  542.        @item_window.dispose
  543.        @item_window = nil
  544.        @help_window.dispose
  545.        @help_window = nil
  546.        @itemcommand_window.dispose
  547.        @itemcommand_window = nil
  548.      end
  549.      @actor_command_window.active = true
  550.    end
  551.    #--------------------------------------------------------------------------
  552.    # ● 更新物品选择
  553.    #--------------------------------------------------------------------------
  554.    def update_item_selection
  555.      @item_window.visible = true
  556.      @itemcommand_window.visible = true
  557.      @itemcommand_window.update
  558.      if @command_index != @itemcommand_window.index
  559.        @command_index = @itemcommand_window.index
  560.        @item_window.set_item(@itemcommand_window.commands[@command_index])
  561.        @item_window.index = 0
  562.      end
  563.      @item_window.update
  564.      @help_window.update
  565.      if Input.trigger?(Input::B)
  566.        Sound.play_cancel
  567.        if @item_window.active == true
  568.          @itemcommand_window.active = true
  569.          @item_window.active = false
  570.        else
  571.          end_item_selection
  572.        end
  573.      elsif Input.trigger?(Input::C)
  574.        if @item_window.active == false
  575.          @item_window.active = true
  576.          @itemcommand_window.active = false
  577.          Sound.play_decision
  578.          return
  579.        end
  580.        @item = @item_window.item
  581.        if @item != nil
  582.          $game_party.last_item_id  = @item.id
  583.        end
  584.        if $game_party.item_can_use?(@item)
  585.          Sound.play_decision
  586.          determine_item
  587.        else
  588.          Sound.play_buzzer
  589.        end
  590.      end
  591.    end
  592.    #--------------------------------------------------------------------------
  593.    # ● 确认物品
  594.    #--------------------------------------------------------------------------
  595.    def determine_item
  596.      @active_battler.action.set_item(@item.id)
  597.      @item_window.active = false
  598.      @itemcommand_window.visible = false
  599.      if @item.need_selection?
  600.        if @item.for_opponent?
  601.          start_target_enemy_selection
  602.        else
  603.          start_target_actor_selection
  604.        end
  605.      else
  606.        end_item_selection
  607.        next_actor
  608.      end
  609.    end
  610.    #--------------------------------------------------------------------------
  611.    # ● 更新同伴目标选择
  612.    #--------------------------------------------------------------------------
  613.    def update_target_actor_selection
  614.      @target_actor_window.update
  615.      if Input.trigger?(Input::B)
  616.        Sound.play_cancel
  617.        @item_window.active = true if @item_window != nil
  618.        end_target_actor_selection
  619.      elsif Input.trigger?(Input::C)
  620.        Sound.play_decision
  621.        @active_battler.action.target_index = @target_actor_window.index
  622.        end_target_actor_selection
  623.        end_skill_selection
  624.        end_item_selection
  625.        next_actor
  626.      end
  627.    end
  628.   #--------------------------------------------------------------------------
  629.   # ● 更新敌人目标选择
  630.   #--------------------------------------------------------------------------
  631.   def update_target_enemy_selection
  632.      @target_enemy_window.update
  633.      if Input.trigger?(Input::B)
  634.        Sound.play_cancel
  635.        @item_window.active = true if @item_window != nil
  636.        end_target_enemy_selection
  637.      elsif Input.trigger?(Input::C)
  638.        Sound.play_decision
  639.        @active_battler.action.target_index = @target_enemy_window.enemy.index
  640.        end_target_enemy_selection
  641.        end_skill_selection
  642.        end_item_selection
  643.        next_actor
  644.      end
  645.   end
  646. end
复制代码

作者: 965426480    时间: 2012-12-11 19:44
protosssonny 发表于 2012-12-10 19:32
那把光变由长形变成方形,分15列显示应该就差不多了,稍微改改脚本技能实现,不就调个光标宽度和显示列数吗 ...

p叔p叔i love you!




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1