Project1

标题: 跟随光标移动的帮助窗口插件版(更新) [打印本页]

作者: 水迭澜    时间: 2008-1-28 05:31
标题: 跟随光标移动的帮助窗口插件版(更新)
原帖地址:http://rpg.blue/web/htm/news652.htm
原作者:xuelong

说明:
这个帮助效果还满华丽的,配合上好的WINDOWSKIN的话绝对使画面增分……可惜原工程改的地方比较多,而且速度有点慢……嗯,做成插件版的同时修改了一些地方,大家也不要追究改的在哪里了||||嗯……
因为我没有改任何SCENE,排版上可能会空出一块……可以配合半透明菜单使用,或者直接用一个空的窗口填满那个位置OJZ|||
由于6R鄙视我的网速……范例工程就不带了-V-|||截图见原帖……
另,仍有BUG请告知我,我尽量修复……

版本已经更新了
还有一点问题可能要到scene里去解决了……OJZ
在Scene_File的开头把
    @help_window.set_text(@help_text)
改成
    @help_window.set_text(@help_text,0)
就可以
另外,在商店里会出现窗口不会自动消失的问题,请参考以下方式更改:
Scene_Shop里在update里(原版工程79行)插入
    @help_window.visible = !@number_window.active && !@dummy_window.visible
即可~

  1. #==============================================================================
  2. # ■ Window_Help
  3. #------------------------------------------------------------------------------
  4. #  特技及物品的说明、角色的状态显示的窗口。
  5. #   若要更改属性,请搜索element_set={1=>"火",2=>"冰",3=>"光",4=>"暗"} 改成对应属性即可
  6. #==============================================================================

  7. UNSHOW_STATE=[1,2,3,4,5]#记录不显示的状态数组
  8. UNSHOW_ELEMENT=[1,2,3,4,5]#记录不显示的属性数组

  9. class Window_Help < Window_Base
  10.   #--------------------------------------------------------------------------
  11.   # ● 初始化对像
  12.   #--------------------------------------------------------------------------
  13.   def initialize
  14.     super(150,200, 180, 430)
  15.     self.opacity = 150
  16.     self.z=150
  17.     self.visible = false
  18.     self.contents = Bitmap.new(width - 32, height - 32)
  19.     description=""
  20.     @item=nil
  21.     @armor=nil
  22.     @weapon=nil
  23.   end
  24.   #--------------------------------------------------------------------------
  25.   # ● 设置文本
  26.   #     text  : 窗口显示的字符串
  27.   #     align : 对齐方式 (0..左对齐、1..中间对齐、2..右对齐)
  28.   #--------------------------------------------------------------------------
  29.   def set_text(data, align=nil)
  30.     # 如果文本和对齐方式的至少一方与上次的不同
  31.     if align != nil
  32.         # 再描绘窗口和文本
  33.       self.width = 640
  34.       self.height = 64
  35.       self.x=0
  36.       self.y=0
  37.       self.contents = Bitmap.new(width - 32, height - 32)
  38.       self.contents.clear
  39.       self.contents.font.color = normal_color
  40.       self.contents.font.size = 20
  41.       self.contents.draw_text(4, 0, self.width - 48, 32, data, align)
  42.       self.visible = true
  43.       return
  44.     end
  45.     if data == nil
  46.       self.visible=false
  47.       @data = nil
  48.     end
  49.     if data != nil && @data != data
  50.       @data=data
  51.       self.visible=true
  52.       self.width = 180
  53.       self.height = 200
  54.       self.x=180
  55.       self.y=430
  56.       self.contents = Bitmap.new(width - 32, height - 32)
  57.       case @data
  58.       when RPG::Item
  59.         set_item_text(@data)
  60.       when RPG::Weapon
  61.         set_weapon_text(@data)
  62.       when RPG::Armor
  63.         set_armor_text(@data)
  64.       when RPG::Skill
  65.         set_skill_text(@data)
  66.       end
  67.     else
  68.       return
  69.     end
  70.   end
  71.   #--------------------------------------------------------------------------
  72.   # ● 设置敌人
  73.   #     enemy : 要显示名字和状态的敌人
  74.   #--------------------------------------------------------------------------
  75.   def set_enemy(enemy)
  76.     text = enemy.name
  77.     state_text = make_battler_state_text(enemy, 0, false)
  78.     if state_text != ""
  79.       text += "  " + state_text
  80.     end
  81.     set_text(text, 1)
  82.     @data=nil
  83.   end
  84.   #--------------------------------------------------------------------------
  85.   # ● 设置角色
  86.   #     actor : 要显示状态的角色
  87.   #--------------------------------------------------------------------------
  88.   def set_actor(actor)
  89.     if actor != @actor
  90.         self.width = 640
  91.         self.height = 64
  92.         self.x=0
  93.         self.y=0
  94.         self.contents = Bitmap.new(width - 32, height - 32)
  95.         self.contents.clear
  96.         self.contents.font.size=20
  97.         self.contents.font.color = normal_color
  98.       draw_actor_name(actor, 4, 0)
  99.       draw_actor_state(actor, 140, 0)
  100.       draw_actor_hp(actor, 284, 0)
  101.       draw_actor_sp(actor, 460, 0)
  102.       @actor = actor
  103.       @text = nil
  104.       self.visible = true
  105.     end
  106.   end
  107.   #--------------------------------------------------------------------------
  108.   # ● 校正帮助窗口位置
  109.   #--------------------------------------------------------------------------
  110.   def set_pos(x,y,width,oy,index,column_max)
  111.     #光标坐标
  112.     cursor_width = width / column_max - 32
  113.     xx = index % column_max * (cursor_width + 32)
  114.     yy = index / column_max * 32 - oy
  115.     self.x=xx+x+150
  116.     self.y=yy+y+30
  117.     if self.x+self.width>640
  118.       self.x=640-self.width
  119.     end
  120.     if self.y+self.height>480
  121.       self.y=480-self.height
  122.     end  
  123.   end
  124. end
复制代码

  1. class Window_Help < Window_Base
  2.   #--------------------------------------------------------------------------
  3.   # ● 物品帮助窗口
  4.   #--------------------------------------------------------------------------
  5.   def set_item_text(item)
  6.     @item=item
  7.     description=""
  8.     [email protected]
  9.     x=0
  10.     y=0
  11.        # 取得屬性、附加狀態、解除狀態之副本
  12.    element_set = @item.element_set.clone
  13.    plus_state_set = @item.plus_state_set.clone
  14.    minus_state_set = @item.minus_state_set.clone
  15.    # 過濾不顯示的描述
  16.    element_set -= UNSHOW_ELEMENT
  17.    plus_state_set -= UNSHOW_STATE
  18.    minus_state_set -= UNSHOW_STATE
  19.     height=1     #依要显示的内容确定高
  20.     #由描叙确定高
  21.     height+=description.size/3/10
  22.     if description.size%10!=0
  23.       height+=1
  24.     end
  25.     height+=3  #空行,效果范围,价格
  26.     if @item.recover_hp_rate!=0 #HP 回复率。
  27.       height+=1
  28.     end   
  29.     if @item.recover_hp!=0 #HP 回复量。
  30.       height+=1
  31.     end
  32.     if @item.recover_sp_rate!=0 #SP 回复率。
  33.       height+=1
  34.     end
  35.     if @item.recover_sp!=0 #SP 回复量。
  36.       height+=1
  37.     end
  38.     if @item.parameter_type!=0 #增加能力值
  39.       height+=1
  40.     end      
  41.     if element_set.empty?!=true  #属性。为属性 ID 的数组
  42.       height+=1
  43.     end
  44.     if plus_state_set.empty?!=true  #附加状态。为状态 ID 的数组
  45.       height+=plus_state_set.size  
  46.     end
  47.     if minus_state_set.empty?!=true  #解除状态。为状态 ID 的数组
  48.       height+=minus_state_set.size   
  49.     end     
  50.     self.height=height*15+40+15   
  51.     self.contents = Bitmap.new(self.width - 32,self.height - 32)
  52.     self.contents.clear
  53.     #描绘名字
  54.     [email protected]
  55.     self.contents.font.color =text_color(6)
  56.     self.contents.font.size=18
  57.     if text!=nil
  58.       self.visible = true
  59.       self.contents.draw_text(0,0, @item.name.size*7, 20, text, 0)
  60.     else
  61.       self.visible = false
  62.     end
  63.     x=0
  64.     y+=1
  65.     text=description
  66.     #描绘描叙
  67.     while ((text = description.slice!(/./m)) != nil)
  68.       self.contents.font.color = normal_color
  69.       self.contents.font.size=14
  70.       self.contents.draw_text(x*15, y*15+5, 14, 14, text, 0)
  71.       x+=1
  72.       if x==10#每行10个字
  73.         x=0
  74.         y+=1      
  75.       end
  76.     end
  77.     #由特技属性确定高
  78.     #效果范围
  79.     scope = {0=>"特殊物品",1=>"敌单体",2=>"敌全体",3=>"己方单体",4=>"己方全体",5=>"己方昏死单体",6=>"己方昏死全体",7=>"使用者"}#HASH表
  80.     text="范围:"+scope[@item.scope]
  81.     x=0
  82.     y+=2  #空一行
  83.     self.contents.font.color = normal_color
  84.     self.contents.font.size=14
  85.     self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)
  86.     #价格
  87.       x=0
  88.       y+=1      
  89.       text="价格:"[email protected]_s
  90.       self.contents.font.color = normal_color
  91.       self.contents.font.size=14   
  92.       self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)
  93.    
  94.     #HP 回复率   
  95.     if @item.recover_hp_rate!=0
  96.       x=0
  97.       y+=1      
  98.       text="回复HP:"[email protected]_hp_rate.to_s+"%"
  99.       self.contents.font.color = normal_color
  100.       self.contents.font.size=14   
  101.       self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)      
  102.     end
  103.     #HP回复量
  104.     if @item.recover_hp!=0
  105.       x=0
  106.       y+=1      
  107.       text="回复HP:"[email protected]_hp.to_s
  108.       self.contents.font.color = normal_color
  109.       self.contents.font.size=14   
  110.       self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)
  111.     end
  112.      #SP 回复率
  113.     if @item.recover_sp_rate!=0
  114.       x=0
  115.       y+=1      
  116.       text="回复SP:"[email protected]_sp_rate.to_s+"%"
  117.       self.contents.font.color = normal_color
  118.       self.contents.font.size=14   
  119.       self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)
  120.     end
  121.     #SP 回复量
  122.     if @item.recover_sp!=0
  123.       x=0
  124.       y+=1      
  125.       text="回复SP:"[email protected]_sp.to_s
  126.       self.contents.font.color = normal_color
  127.       self.contents.font.size=14   
  128.       self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)
  129.     end
  130.     #增加能力值
  131.     if @item.parameter_type!=0
  132.       parameter_type={1=>"MaxHP",2=>"MaxSP",3=>$data_system.words.str,4=>$data_system.words.dex,5=>$data_system.words.agi,6=>$data_system.words.int}
  133.       x=0
  134.       y+=1
  135.       if @item.parameter_points>0
  136.         text="增益:"+parameter_type[@item.parameter_type]+" +"[email protected]_points.to_s
  137.       else
  138.         text="减少:"+parameter_type[@item.parameter_type][email protected]_points.to_s
  139.       end
  140.       self.contents.font.color = normal_color
  141.       self.contents.font.size=14   
  142.       self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)
  143.     end      
  144.    
  145.     #物品属性   
  146.     if element_set.empty?!=true  #属性。为属性 ID 的数组
  147.       text="属性:"
  148.       for i in 0...element_set.size
  149.         text+=$data_system.elements[element_set[i]]+" "
  150.       end
  151.       x=0
  152.       y+=1
  153.       self.contents.font.color = normal_color
  154.       self.contents.font.size=14
  155.       self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)
  156.     end
  157.     #附加状态
  158.     if plus_state_set.empty?!=true  #附加状态。为状态 ID 的数组
  159.       text="附加状态:"
  160.       x=0
  161.       y+=1
  162.       self.contents.font.color = normal_color
  163.       self.contents.font.size=14
  164.       self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)
  165.       y-=1
  166.       x+=text.size*5      
  167.       for i in 0...plus_state_set.size
  168.         y+=1
  169.         text=$data_states[plus_state_set[i]].name        
  170.         self.contents.font.color = normal_color
  171.         self.contents.font.size=14
  172.         self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)        
  173.       end  
  174.     end
  175.     #解除状态
  176.     if minus_state_set.empty?!=true  #解除状态。为状态 ID 的数组
  177.       text="解除状态:"
  178.       x=0
  179.       y+=1
  180.       self.contents.font.color = normal_color
  181.       self.contents.font.size=14
  182.       self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)
  183.       y-=1
  184.       x+=text.size*5      
  185.       for i in 0...minus_state_set.size
  186.         y+=1
  187.         text=$data_states[minus_state_set[i]].name        
  188.         self.contents.font.color = normal_color
  189.         self.contents.font.size=14
  190.         self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)        
  191.       end  
  192.     end     
  193.   end
  194. end
复制代码

  1. class Window_Help < Window_Base
  2.     #--------------------------------------------------------------------------
  3.   # ● 武器帮助窗口
  4.   #--------------------------------------------------------------------------
  5.   
  6.   def set_weapon_text(weapon)
  7.     @weapon=weapon
  8.     description=""
  9.     [email protected]
  10.    # 取得屬性、附加狀態、解除狀態之副本
  11.    element_set = @weapon.element_set.clone
  12.    plus_state_set = @weapon.plus_state_set.clone
  13.    minus_state_set = @weapon.minus_state_set.clone
  14.    # 過濾不顯示的描述
  15.    element_set -= UNSHOW_ELEMENT
  16.    plus_state_set -= UNSHOW_STATE
  17.    minus_state_set -= UNSHOW_STATE

  18.     x=0
  19.     y=0
  20.     height=1     #依要显示的内容确定高
  21.     #由描叙确定高
  22.     height+=description.size/3/10
  23.     if description.size%10!=0
  24.       height+=1
  25.     end
  26.     height+=4  #2个空行,攻击,价格
  27.     if @weapon.pdef!=0 #物理防御
  28.       height+=1
  29.     end      
  30.     if @weapon.mdef!=0 #魔法防御
  31.       height+=1
  32.     end
  33.     if @weapon.str_plus!=0 #力量
  34.       height+=1
  35.     end
  36.     if @weapon.dex_plus!=0#体质
  37.       height+=1
  38.     end
  39.     if @weapon.agi_plus!=0#敏捷
  40.       height+=1
  41.     end
  42.     if @weapon.int_plus!=0 #智力
  43.       height+=1
  44.     end      
  45.     if element_set.empty?!=true  #属性。为属性 ID 的数组
  46.       height+=1
  47.     end  
  48.     if plus_state_set.empty?!=true  #附加状态。为状态 ID 的数组
  49.       height+=plus_state_set.size  
  50.     end
  51.     if minus_state_set.empty?!=true  #解除状态。为状态 ID 的数组
  52.       height+=minus_state_set.size   
  53.     end     
  54.     self.height=height*15+40+15   
  55.     self.contents = Bitmap.new(self.width - 32,self.height - 32)
  56.     self.contents.clear
  57.     #描绘名字
  58.     [email protected]
  59.     self.contents.font.color = text_color(6)#颜色脚本
  60.     self.contents.font.size=18
  61.     if text!=nil
  62.       self.visible = true
  63.       self.contents.draw_text(0,0, @weapon.name.size*7, 20, text, 0)
  64.     else
  65.       self.visible = false
  66.     end
  67.     x=0
  68.     y+=1
  69.     text=description
  70.     #描绘描叙
  71.     while ((text = description.slice!(/./m)) != nil)
  72.       self.contents.font.color = normal_color
  73.       self.contents.font.size=14
  74.       self.contents.draw_text(x*15, y*15+5, 14, 14, text, 0)
  75.       x+=1
  76.       if x==10#每行10个字
  77.         x=0
  78.         y+=1      
  79.       end
  80.     end
  81.     #由特技属性确定高
  82.     #攻击
  83.       x=0
  84.       y+=2 #空行     
  85.       text="攻击:"[email protected]_s
  86.       self.contents.font.color = text_color(6)#颜色脚本
  87.       self.contents.font.size=14   
  88.       self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)      
  89.     #价格
  90.       x=0
  91.       y+=1      
  92.       text="价格:"[email protected]_s
  93.       self.contents.font.color = normal_color
  94.       self.contents.font.size=14   
  95.       self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)
  96.     if @weapon.pdef!=0 #物理防御
  97.       x=0
  98.       y+=1      
  99.       text="物理防御:"[email protected]_s
  100.       self.contents.font.color = text_color(6)#颜色脚本
  101.       self.contents.font.size=14   
  102.       self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)
  103.     end      
  104.     if @weapon.mdef!=0 #魔法防御
  105.       x=0
  106.       y+=1      
  107.       text="魔法防御:"[email protected]_s
  108.       self.contents.font.color = text_color(6)#颜色脚本
  109.       self.contents.font.size=14   
  110.       self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)
  111.     end

  112.     #武器属性   
  113.     if element_set.empty? != true  #属性。为属性 ID 的数组
  114.       text="属性:"
  115.       for i in 0...element_set.size
  116.         text+=$data_system.elements[element_set[i]]+" "
  117.       end
  118.       x=0
  119.       y+=1
  120.       self.contents.font.color = normal_color
  121.       self.contents.font.size=14
  122.       self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)
  123.     end
  124.     #附加状态
  125.     if plus_state_set.empty? != true  #附加状态。为状态 ID 的数组
  126.       text="附加状态:"
  127.       x=0
  128.       y+=1
  129.       self.contents.font.color = normal_color
  130.       self.contents.font.size=14
  131.       self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)
  132.       y-=1
  133.       x+=text.size*5      
  134.       for i in 0...plus_state_set.size
  135.         y+=1
  136.         text=$data_states[plus_state_set[i]].name        
  137.         self.contents.font.color = normal_color
  138.         self.contents.font.size=14
  139.         self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)        
  140.       end  
  141.     end
  142.     #解除状态
  143.     if minus_state_set.empty? != true  #解除状态。为状态 ID 的数组
  144.       text="解除状态:"
  145.       x=0
  146.       y+=1
  147.       self.contents.font.color = normal_color
  148.       self.contents.font.size=14
  149.       self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)
  150.       y-=1
  151.       x+=text.size*5      
  152.       for i in 0...minus_state_set.size
  153.         y+=1
  154.         text=$data_states[minus_state_set[i]].name        
  155.         self.contents.font.color = normal_color
  156.         self.contents.font.size=14
  157.         self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)        
  158.       end  
  159.     end
  160.     y+=1 #空行
  161.     if @weapon.str_plus!=0 #力量
  162.       x=0
  163.       y+=1
  164.       if @weapon.str_plus > 0
  165.         text=$data_system.words.str+"  + "[email protected]_plus.to_s
  166.       else
  167.         [email protected]_plus
  168.         text=$data_system.words.str+"  - "+str_minus.to_s
  169.       end
  170.       self.contents.font.color = text_color(6)#颜色脚本
  171.       self.contents.font.size=14   
  172.       self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)
  173.     end
  174.     if @weapon.dex_plus!=0#体质
  175.       x=0
  176.       y+=1      
  177.       if @weapon.dex_plus > 0
  178.         text=$data_system.words.dex+"  + "[email protected]_plus.to_s
  179.       else
  180.         [email protected]_plus
  181.         text=$data_system.words.dex+"  - "+dex_minus.to_s
  182.       end
  183.       self.contents.font.color = text_color(6)#颜色脚本
  184.       self.contents.font.size=14   
  185.       self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)
  186.     end
  187.     if @weapon.agi_plus!=0#敏捷
  188.       x=0
  189.       y+=1      
  190.       if @weapon.agi_plus > 0
  191.         text=$data_system.words.agi+"  + "[email protected]_plus.to_s
  192.       else
  193.         [email protected]_plus
  194.         text=$data_system.words.agi+"  - "+agi_minus.to_s
  195.       end
  196.       self.contents.font.color = text_color(6)#颜色脚本
  197.       self.contents.font.size=14   
  198.       self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)
  199.     end
  200.     if @weapon.int_plus!=0 #智力
  201.       x=0
  202.       y+=1      
  203.       if @weapon.int_plus > 0
  204.         text=$data_system.words.int+"  + "[email protected]_plus.to_s
  205.       else
  206.         [email protected]_plus
  207.         text=$data_system.words.int+"  - "+int_minus.to_s
  208.       end
  209.       self.contents.font.color = text_color(6)#颜色脚本
  210.       self.contents.font.size=14   
  211.       self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)
  212.     end
  213.   end
  214. end
复制代码

  1. class Window_Help < Window_Base
  2.     #--------------------------------------------------------------------------
  3.   # ● 防具帮助窗口
  4.   #--------------------------------------------------------------------------
  5.     def set_armor_text(armor)
  6.     @armor=armor
  7.     description=""
  8.     [email protected]
  9.    # 取得屬性、附加狀態、解除狀態之副本
  10.    element_set = @armor.guard_element_set.clone
  11.    guard_state_set = @armor.guard_state_set.clone
  12.    # 過濾不顯示的描述
  13.    element_set -= UNSHOW_ELEMENT
  14.    guard_state_set -= UNSHOW_STATE
  15.     x=0
  16.     y=0
  17.     height=1     #依要显示的内容确定高
  18.     #由描叙确定高
  19.     height+=description.size/3/10
  20.     if description.size%10 !=0
  21.       height+=1
  22.     end
  23.     height+=2  #2个空行,价格
  24.     if @armor.pdef !=0 #物理防御
  25.       height+=1
  26.     end      
  27.     if @armor.mdef !=0 #魔法防御
  28.       height+=1
  29.     end
  30.     if @armor.str_plus !=0 #力量
  31.       height+=1
  32.     end
  33.     if @armor.dex_plus !=0#体质
  34.       height+=1
  35.     end
  36.     if @armor.agi_plus !=0#敏捷
  37.       height+=1
  38.     end
  39.     if @armor.int_plus !=0 #智力
  40.       height+=1
  41.     end      
  42.     if element_set.empty? != true  #属性防御。为属性 ID 的数组
  43.       height+=1
  44.     end  
  45.     if guard_state_set.empty? != true  #状态防御。为状态 ID 的数组
  46.       height+=guard_state_set.size  
  47.     end   
  48.     self.height=height*16+70  
  49.     self.contents = Bitmap.new(self.width - 32,self.height - 32)
  50.     self.contents.clear
  51.     #描绘名字
  52.     [email protected]
  53.     self.contents.font.color = text_color(6)#颜色脚本
  54.     self.contents.font.size=18
  55.     if text!=nil
  56.       self.visible = true
  57.       self.contents.draw_text(0,0, @armor.name.size*7, 20, text, 0)
  58.     else
  59.       self.visible = false
  60.     end
  61.     x=0
  62.     y+=1
  63.     text=description
  64.     #描绘描叙
  65.     while ((text = description.slice!(/./m)) != nil)
  66.       self.contents.font.color = normal_color
  67.       self.contents.font.size=14
  68.       self.contents.draw_text(x*15, y*15+5, 14, 14, text, 0)
  69.       x+=1
  70.       if x==10#每行10个字
  71.         x=0
  72.         y+=1      
  73.       end
  74.     end
  75.     #由特技属性确定高
  76.       x=0
  77.       y+=2#空行      
  78.       text="价格:"[email protected]_s
  79.       self.contents.font.color = normal_color
  80.       self.contents.font.size=14   
  81.       self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)
  82.       x=0
  83.       y+=1      
  84.     if @armor.pdef!=0 #物理防御
  85.       text="物理防御:"[email protected]_s
  86.       self.contents.font.color = text_color(6)#颜色脚本
  87.       self.contents.font.size=14   
  88.       self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)
  89.       x=0
  90.       y+=1      
  91.     end      
  92.     if @armor.mdef!=0 #魔法防御
  93.       text="魔法防御:"[email protected]_s
  94.       self.contents.font.color = text_color(6)#颜色脚本
  95.       self.contents.font.size=14   
  96.       self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)
  97.       x=0
  98.       y+=1      
  99.     end

  100.     #属性防御   
  101.     if element_set.empty? !=true  #属性。为属性 ID 的数组
  102.       text="属性防御:"
  103.       for i in 0...element_set.size
  104.         text+=$data_system.elements[element_set[i]]+" "
  105.       end
  106.       x=0
  107.       y+=1
  108.       self.contents.font.color = normal_color
  109.       self.contents.font.size=14
  110.       self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)
  111.     end
  112.     #状态防御
  113.     if guard_state_set.empty?!=true  #附加状态。为状态 ID 的数组
  114.       text="状态防御:"
  115.       x=0
  116.       y+=1
  117.       self.contents.font.color = normal_color
  118.       self.contents.font.size=14
  119.       self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)
  120.       y-=1
  121.       x+=text.size*5      
  122.       for i in 0...guard_state_set.size
  123.         y+=1
  124.         text=$data_states[guard_state_set[i]].name        
  125.         self.contents.font.color = normal_color
  126.         self.contents.font.size=14
  127.         self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)        
  128.       end  
  129.     end

  130. #    y+=1 #空行
  131.     if @armor.str_plus!=0 #力量
  132.       x=0
  133.       y+=1
  134.       if @armor.str_plus > 0
  135.         text=$data_system.words.str+"  + "[email protected]_plus.to_s
  136.       else
  137.         [email protected]_plus
  138.         text=$data_system.words.str+"  - "+str_minus.to_s
  139.       end
  140.       self.contents.font.color = text_color(6)#颜色脚本
  141.       self.contents.font.size=14   
  142.       self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)
  143.     end
  144.     if @armor.dex_plus!=0#体质
  145.       x=0
  146.       y+=1      
  147.       if @armor.dex_plus > 0
  148.         text=$data_system.words.dex+"  + "[email protected]_plus.to_s
  149.       else
  150.         [email protected]_plus
  151.         text=$data_system.words.dex+"  - "+dex_minus.to_s
  152.       end
  153.       self.contents.font.color = text_color(6)#颜色脚本
  154.       self.contents.font.size=14   
  155.       self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)
  156.     end
  157.     if @armor.agi_plus!=0#敏捷
  158.       x=0
  159.       y+=1      
  160.       if @armor.agi_plus > 0
  161.         text=$data_system.words.agi+"  + "[email protected]_plus.to_s
  162.       else
  163.         [email protected]_plus
  164.         text=$data_system.words.agi+"  - "+agi_minus.to_s
  165.       end
  166.       self.contents.font.color = text_color(6)#颜色脚本
  167.       self.contents.font.size=14   
  168.       self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)
  169.     end
  170.     if @armor.int_plus!=0 #智力
  171.       x=0
  172.       y+=1      
  173.       if @armor.int_plus > 0
  174.         text=$data_system.words.int+"  + "[email protected]_plus.to_s
  175.       else
  176.         [email protected]_plus
  177.         text=$data_system.words.int+"  - "+int_minus.to_s
  178.       end
  179.       self.contents.font.color = text_color(6)#颜色脚本
  180.       self.contents.font.size=14   
  181.       self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)
  182.     end
  183.   end
  184. end
复制代码
  1. class Window_Help < Window_Base
  2.     #--------------------------------------------------------------------------
  3.   # ● 技能帮助窗口
  4.   #--------------------------------------------------------------------------
  5.   def set_skill_text(skill)
  6.     @skill=skill
  7.     description=""
  8.     [email protected]
  9.    # 取得屬性、附加狀態、解除狀態之副本
  10.    element_set = @skill.element_set.clone
  11.    plus_state_set = @skill.plus_state_set.clone
  12.    minus_state_set = @skill.minus_state_set.clone
  13.    # 過濾不顯示的描述
  14.    element_set -= UNSHOW_ELEMENT
  15.    plus_state_set -= UNSHOW_STATE
  16.    minus_state_set -= UNSHOW_STATE
  17.     x=0
  18.     y=0
  19.     height=1     #依要显示的内容确定高
  20.     #由描叙确定高
  21.     height+=description.size/3/10
  22.     if description.size%10!=0
  23.       height+=1
  24.     end
  25.     height+=4  #空行,效果范围,消费SP,命中率
  26.     if @skill.power!=0  #威力,威力为0,则可能为状态魔法
  27.       height+=1
  28.     end
  29.     if element_set.empty?!=true  #属性。为属性 ID 的数组
  30.       height+=1
  31.     end  
  32.     if plus_state_set.empty?!=true  #附加状态。为状态 ID 的数组
  33.       height+=plus_state_set.size  
  34.     end
  35.     if minus_state_set.empty?!=true  #解除状态。为状态 ID 的数组
  36.       height+=minus_state_set.size   
  37.     end     
  38.     self.height=height*15+40+15   
  39.     self.contents = Bitmap.new(self.width - 32,self.height - 32)
  40.     self.contents.clear
  41.     #描绘名字
  42.     [email protected]
  43.     self.contents.font.color =text_color(6)
  44.     self.contents.font.size=18
  45.     if text!=nil
  46.       self.visible = true
  47.       self.contents.draw_text(0,0, @skill.name.size*7, 20, text, 0)
  48.     else
  49.       self.visible = false
  50.     end
  51.     x=0
  52.     y+=1
  53.     text=description
  54.     #描绘描叙
  55.     while ((text = description.slice!(/./m)) != nil)
  56.       self.contents.font.color = normal_color
  57.       self.contents.font.size=14
  58.       self.contents.draw_text(x*15, y*15+5, 14, 14, text, 0)
  59.       x+=1
  60.       text
  61.       if x==10#每行10个字
  62.         x=0
  63.         y+=1      
  64.       end
  65.     end
  66.     #由特技属性确定高
  67.     #效果范围
  68.    
  69.     scope = {0=>"特殊技能",1=>"敌单体",2=>"敌全体",3=>"己方单体",4=>"己方全体",5=>"己方昏死单体",6=>"己方昏死全体",7=>"使用者"}#HASH表
  70.     text="范围:"+scope[@skill.scope]
  71.     x=0
  72.     y+=2  #空一行
  73.     self.contents.font.color = normal_color
  74.     self.contents.font.size=14
  75.     self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)
  76.    
  77.     #威力
  78.     if @skill.power!=0
  79.       x=0
  80.       y+=1
  81.       [email protected] > 0 ? @skill.power : -1* @skill.power
  82.       text="威力:"+c.to_s
  83.       self.contents.font.color = normal_color
  84.       self.contents.font.size=14   
  85.       self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)
  86.     end  
  87.     #描绘消费SP
  88.     x=0
  89.     y+=1
  90.     text="消耗SP:"[email protected]_cost.to_s
  91.     self.contents.font.color = normal_color
  92.     self.contents.font.size=14   
  93.     self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)
  94.     #命中率
  95.     x=0
  96.     y+=1
  97.     text="命中率:"[email protected]_s+"%"
  98.     self.contents.font.color = normal_color
  99.     self.contents.font.size=14
  100.     self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)
  101.     #攻击属性
  102.    
  103.     if element_set.empty? != true  #属性。为属性 ID 的数组
  104.       text="属性:"
  105.       for i in 0...element_set.size
  106.         text+=$data_system.elements[element_set[i]]+" "
  107.       end
  108.       x=0
  109.       y+=1
  110.       self.contents.font.color = normal_color
  111.       self.contents.font.size=14
  112.       self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)
  113.     end
  114.     #附加状态
  115.     if plus_state_set.empty? != true  #附加状态。为状态 ID 的数组
  116.       text="附加状态:"
  117.       x=0
  118.       y+=1
  119.       self.contents.font.color = normal_color
  120.       self.contents.font.size=14
  121.       self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)
  122.       y-=1
  123.       x+=text.size*5      
  124.       for i in 0...plus_state_set.size
  125.         y+=1
  126.         text=$data_states[plus_state_set[i]].name        
  127.         self.contents.font.color = normal_color
  128.         self.contents.font.size=14
  129.         self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)        
  130.       end  
  131.     end
  132.     #解除状态
  133.     if minus_state_set.empty? != true  #解除状态。为状态 ID 的数组
  134.       text="解除状态:"
  135.       x=0
  136.       y+=1
  137.       self.contents.font.color = normal_color
  138.       self.contents.font.size=14
  139.       self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)
  140.       y-=1
  141.       x+=text.size*5      
  142.       for i in 0...minus_state_set.size
  143.         y+=1
  144.         text=$data_states[minus_state_set[i]].name        
  145.         self.contents.font.color = normal_color
  146.         self.contents.font.size=14
  147.         self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)        
  148.       end  
  149.     end     
  150.   end
  151. end
复制代码

  1. class Window_Item < Window_Selectable
  2.   #--------------------------------------------------------------------------
  3.   # ● 刷新帮助文本
  4.   #--------------------------------------------------------------------------
  5.   def update_help
  6. #    @help_window.set_text(self.item == nil ? "" : self.item.description)
  7.     @help_window.set_text(item)
  8.     #校正帮助窗口位置
  9.     @help_window.set_pos(self.x,self.y,self.width,self.oy,self.index,@column_max)
  10.   end
  11. end
  12. class Window_Skill < Window_Selectable
  13.   #--------------------------------------------------------------------------
  14.   # ● 刷新帮助文本
  15.   #--------------------------------------------------------------------------
  16.   def update_help
  17. #    @help_window.set_text(self.skill == nil ? "" : self.skill.description)
  18.     @help_window.set_text(skill)
  19.     #校正帮助窗口位置
  20.     @help_window.set_pos(self.x,self.y,self.width,self.oy,self.index,@column_max)
  21.   end
  22. end
  23. class Window_EquipRight < Window_Selectable
  24.   def update_help
  25. #    @help_window.set_text(self.item == nil ? "" : self.item.description)
  26.     @help_window.set_text(item)
  27.     #校正帮助窗口位置
  28.     @help_window.set_pos(self.x,self.y,self.width,self.oy,self.index,@column_max)
  29.   end
  30. end
  31. class Window_EquipItem < Window_Selectable
  32.   def update_help
  33. #    @help_window.set_text(self.item == nil ? "" : self.item.description)
  34.     @help_window.set_text(item)
  35.     #校正帮助窗口位置
  36.     @help_window.set_pos(self.x,self.y,self.width,self.oy,self.index,@column_max)
  37.   end
  38. end
  39. class Window_ShopBuy < Window_Selectable
  40.   def update_help
  41.     @help_window.set_text(item)
  42.     #校正帮助窗口位置
  43.     @help_window.set_pos(self.x,self.y,self.width,self.oy,self.index,@column_max)
  44.   end
  45. end
  46. class Window_ShopSell < Window_Selectable
  47.   def update_help
  48.     @help_window.set_text(item)
  49.     #校正帮助窗口位置
  50.     @help_window.set_pos(self.x,self.y,self.width,self.oy,self.index,@column_max)
  51.   end
  52. end
复制代码

作者: 逐月    时间: 2008-1-28 15:51
提示: 作者被禁止或删除 内容自动屏蔽
作者: 水迭澜    时间: 2008-1-28 21:08
哦,那就说清楚吧:
改了属性element_set那里如果没有设置属性会弹出的问题
改了set_text,可以兼容原版的set_text功能和新版本的功能。这样就不用更改scene了。
增加了自留数据的运用,就是说不用每次调用都刷新只是在改变的时候刷新。优化速度
把discription初始化的方法改了,否则的话就显示不出描述文字。
去掉了原工程里设置颜色的功能。

大概就是这么多了……{/hx}
作者: 秋弦月    时间: 2008-1-29 06:52
用了感觉还不错,来支持一个
另外 看LZ的签名,是准备做AVG么{/hx}
作者: 水迭澜    时间: 2008-1-29 07:17
是的哦-v-扑一下LS
话说乃应该看过预告了咩~
作者: 禾西    时间: 2008-1-29 21:16
呣,有不少地方值得参考.
话说这个脚本我也有在使用,因此在主体部分跟LZ以及原作者有点出入.主要是这个脚本对于"状态法"的支持不是很好而且属性element_set那里如果没有设置属性会弹出.设置text文字上也不太方便.LZ在这方面还是没有修改到很多.

取得描述有种更简单的方法就是:

    # 取得描述
    description = @weapon.description.clone
作者: Eclair    时间: 2008-1-29 23:21
提示: 作者被禁止或删除 内容自动屏蔽
作者: 水迭澜    时间: 2008-1-30 02:00
elements_set那里我已经改过了,没设置属性不会跳出,不过没有改它的方法= =bbb因为懒
discription那里可以直接用clone么OJZ……因为对RUBY的CLASS类不是很了解,现在看起来很多地方都和JAVA很相似XD
至于状态法= =我没怎么改过战斗系统……请问…………………………
…………状态法是什么东西=v=|||||||
作者: 禾西    时间: 2008-1-30 17:55
我的意思是说,如果某种属性只是用作特别用途,比如:附加某个不显示的状态而提高攻击力(被动技能,光环),或者依靠某种技能而选择人物(讽刺,技能书制作)等等,这样子这个脚本就会露出你的马脚,把不想显示的附加状态都表露出来了。

另外,虽然elements_set那里有修改,但是,万一,这样子呢?
weapon.element_set == [7] #
element_set={1=>"火",2=>"冰",3=>"光",4=>"暗"}

因为 weapon.element_set.empty?!=true
所以text="属性:"
但是因为element_set[@item.element_set] = nil
所以不会显示属性名字

结果:
#--------------------


因此这几句是必要的:

    # 不顯示的屬性以及狀態
    @w_unshow = [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
    @w_unshow_state = []
    # 取得屬性、附加狀態、解除狀態之副本
    element_set = @weapon.element_set.clone
    plus_state_set = @weapon.plus_state_set.clone
    minus_state_set = @weapon.minus_state_set.clone
    # 過濾不顯示的描述
    element_set -= @w_unshow
    plus_state_set -= @w_unshow_state
    minus_state_set -= @w_unshow_state

当然,这里不只是一种方法。只是提出让LZ参考而已
作者: 水迭澜    时间: 2008-1-31 03:29
感谢LS的解说.
我有空回来升级...
爬去赶作业,啦啦啦...
作者: 禾西    时间: 2008-1-31 16:10
Bug再+1

作者: 水迭澜    时间: 2008-1-31 21:23
可能是跟你自己的脚本产生了冲突
你用过什么脚本?
作者: 禾西    时间: 2008-1-31 21:41
不,這是腳本本來就有的bug,你的version還沒有fixed。我只是指出來而已。因爲腳本沒有對正負附加值作出判斷,所有的附加值都當作附加值處理。請看:
    if @armor.agi_plus!=0#敏捷
      x=0
      y+=1      
      text=$data_system.words.agi+" + "[email protected]_plus.to_s
      self.contents.font.color = text_color(6)#颜色脚本
      self.contents.font.size=14   
      self.contents.draw_text(x, y*15+5, text.size*6, 14, text, 0)
    end


這是我的version:
    if @armor.agi_plus!=0#敏捷
      x=0
      y+=1      
      anti_agi_plus = [email protected]_plus
      if @armor.agi_plus>0#敏捷
         text=$data_system.words.agi+" +"[email protected]_plus.to_s
      end
      if @armor.agi_plus<0#敏捷
         text=$data_system.words.agi+" -"+anti_agi_plus.to_s
      end
      self.contents.font.color = normal_color
      self.contents.font.size=@d_s   
      self.contents.draw_text(x, y*@d_s+5, text.size*6, 14, text, 0)
    end

作者: 水迭澜    时间: 2008-1-31 21:45
{/qiang}
感谢LS,自己果然没有多做测试=v=
很多地方都没想到
其实还有没什么问题?今天晚上回去一起修了-v-

作者: 禾西    时间: 2008-1-31 21:50
不記得有沒有了,本來這個腳本就超多bug的。修改起來很麻煩,當初看了原理以後就自己模仿寫了一個。可是因爲速度的問題一直沒有完成。直到得到樓主的啓發才解决。
作者: 水迭澜    时间: 2008-1-31 21:58
我也是获得了66老大在某个帖的启发-v-
其实关键就是速度~速度问题我也一直OJZ了好久-v-然后看到66某帖忽然醒悟了

作者: 水迭澜    时间: 2008-2-2 00:11
感谢禾西和Eclair
版本已经更新了
还有一点问题可能要到scene里去解决了……OJZ

在Scene_File里把
    @help_window.set_text(@help_text)
改成
    @help_window.set_text(@help_text,0)
就可以
另外,在商店里会出现窗口不会自动消失的问题,请参考以下方式更改:
Scene_Shop里在79行插入
    @help_window.visible = !@number_window.active && !@dummy_window.visible
即可~

P。S 如果发布的话,有VIP请给禾西同学一半,谢谢
作者: Eclair    时间: 2008-2-8 20:36
提示: 作者被禁止或删除 内容自动屏蔽
作者: 狗在监狱    时间: 2008-2-8 22:45
提示: 作者被禁止或删除 内容自动屏蔽
作者: 無聊啲尐柒    时间: 2008-2-10 18:39
提示: 作者被禁止或删除 内容自动屏蔽
作者: 舞舞    时间: 2008-2-14 23:25
排版上可能会空出一块,,,,能不能修复这个问题啊,请作者继续更新一下吧{/wx}
作者: 幻の飞鱼    时间: 2008-2-19 07:55
这个东西……残念啊

若干个月前花了好几个晚上的精力做过一个

等到想提取出来单独做个插件版的时候,因为还使用了鼠标系统,发现这个HELP系统和已有系统水乳交融的太密切了,想要提取出来非常之痛苦=。=于是作罢

看到LZ不辞辛苦弄出来了真是不易=。=
作者: 水迭澜    时间: 2008-2-20 02:41
以下引用舞舞于2008-2-14 15:25:59的发言:
排版上可能会空出一块,,,,能不能修复这个问题啊,请作者继续更新一下吧

这个可能没办法帮你=v=
因为各人想要的效果不一,而且要改的地方也很繁琐
你在一个scene里直接插入@dummy_window=Window_Base(0,0,640,64)一类的东西,然后等在main的末尾把它dispose掉……就可以了(逃)




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