设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1568|回复: 2
打印 上一主题 下一主题

[已经过期] 在商店主角卖东西部分,自己右边的商品不显示信息和数量

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2767
在线时间
675 小时
注册时间
2012-1-29
帖子
89
跳转到指定楼层
1
发表于 2012-3-9 01:06:12 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 小小小蚩尤 于 2012-3-9 19:07 编辑


附上一段关于商店界面的脚本
而且显示出来的名称效果和本来的不一样
  1. #==============================================================================
  2. #本脚本来自www.66rpg.com,转载和使用请保留此信息 。
  3. #默认游戏系统大修改
  4. #  爆焰    于: 12-31-2011整合与发布
  5. #QQ:459974518
  6. #本脚本是本人一时兴起修改默认的脚本所制作完成。
  7. #如发现有bug请与作者联系或上66rpg发贴提意见。
  8. #==============================================================================
  9. # ■ Window_ShopCommand
  10. #------------------------------------------------------------------------------
  11. #  商店画面、选择要做的事的窗口
  12. #==============================================================================

  13. class Window_ShopCommand < Window_Selectable
  14.   #--------------------------------------------------------------------------
  15.   # ● 初始化对像
  16.   #--------------------------------------------------------------------------
  17.   def initialize
  18.     super(160, 64, 160, 64)
  19.     self.contents = Bitmap.new(width - 32, height - 32)
  20.     @item_max = 3
  21.     @column_max = 3
  22.     @commands = ["买", "卖", "走"]
  23.     refresh
  24.     self.index = 0
  25.   end

  26.   #--------------------------------------------------------------------------
  27.   # ● 描绘项目
  28.   #     index : 项目编号
  29.   #--------------------------------------------------------------------------
  30.   def draw_item(index)
  31.     x = 0 + index * 52
  32.     self.contents.draw_text(x, 0, 128, 32, @commands[index])
  33.   end
  34. end
  35. #==============================================================================
  36. # ■ Window_ShopBuy
  37. #------------------------------------------------------------------------------
  38. #  商店画面、浏览显示可以购买的商品的窗口。
  39. #==============================================================================

  40. class Window_ShopBuy < Window_Selectable
  41.   #--------------------------------------------------------------------------
  42.   # ● 初始化对像
  43.   #     shop_goods : 商品
  44.   #--------------------------------------------------------------------------
  45.   def initialize(shop_goods)
  46.     super(70, 128, 250, 352)
  47.     @shop_goods = shop_goods
  48.     refresh
  49.     self.index = 0
  50.   end

  51.   def draw_item(index)
  52.     item = @data[index]
  53.     # 获取物品所持数
  54.     case item
  55.     when RPG::Item
  56.       number = $game_party.item_number(item.id)
  57.     when RPG::Weapon
  58.       number = $game_party.weapon_number(item.id)
  59.     when RPG::Armor
  60.       number = $game_party.armor_number(item.id)
  61.     end
  62.     # 价格在所持金以下、并且所持数不是 99 的情况下为普通文字颜色
  63.     # 除此之外的情况设置为无效文字色
  64.     if item.price <= $game_party.gold and number < 99
  65.       self.contents.font.color = normal_color
  66.     else
  67.       self.contents.font.color = disabled_color
  68.     end
  69.     x = 4
  70.     y = index * 32
  71.     rect = Rect.new(x, y, self.width - 32, 32)
  72.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  73.     bitmap = RPG::Cache.icon(item.icon_name)
  74.     opacity = self.contents.font.color == normal_color ? 255 : 128
  75.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  76.     self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  77.     self.contents.draw_text(x + 120, y, 88, 32, item.price.to_s, 2)
  78.   end
  79. end
  80. #==============================================================================
  81. # ■ Window_ShopSell
  82. #------------------------------------------------------------------------------
  83. #  商店画面、浏览显示可以卖掉的商品的窗口。
  84. #==============================================================================

  85. class Window_ShopSell < Window_Selectable
  86.   #--------------------------------------------------------------------------
  87.   # ● 初始化对像
  88.   #--------------------------------------------------------------------------
  89.   def initialize
  90.     super(160, 128, 320, 352)
  91.     @column_max = 1
  92.     refresh
  93.     self.index = 0
  94.   end
  95.   #--------------------------------------------------------------------------
  96.   # ● 描绘项目
  97.   #     index : 项目标号
  98.   #--------------------------------------------------------------------------
  99.   def draw_item(index)
  100.     item = @data[index]
  101.     case item
  102.     when RPG::Item
  103.       number = $game_party.item_number(item.id)
  104.     when RPG::Weapon
  105.       number = $game_party.weapon_number(item.id)
  106.     when RPG::Armor
  107.       number = $game_party.armor_number(item.id)
  108.     end
  109.     # 可以卖掉的显示为普通文字颜色、除此之外设置成无效文字颜色
  110.     if item.price > 0
  111.       self.contents.font.color = normal_color
  112.     else
  113.       self.contents.font.color = disabled_color
  114.     end
  115.     x = 4 + index % 1 * (90 + 32)
  116.     y = index / 1 * 32
  117.     rect = Rect.new(x, y, self.width / @column_max - 32, 32)
  118.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  119.     bitmap = RPG::Cache.icon(item.icon_name)
  120.     opacity = self.contents.font.color == normal_color ? 255 : 128
  121.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  122.     self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  123.     self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
  124.     self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
  125.   end
  126. end
  127. #==============================================================================
  128. # ■ Window_ShopNumber
  129. #------------------------------------------------------------------------------
  130. #  商店画面、输入买卖数量的窗口。
  131. #==============================================================================

  132. class Window_ShopNumber < Window_Base
  133.   #--------------------------------------------------------------------------
  134.   # ● 初始化对像
  135.   #--------------------------------------------------------------------------
  136.   def initialize
  137.     super(70, 128, 250, 352)
  138.     self.contents = Bitmap.new(width - 32, height - 32)
  139.     @item = nil
  140.     @max = 1
  141.     @price = 0
  142.     @number = 1
  143.   end
  144.   
  145.   #--------------------------------------------------------------------------
  146.   # ● 刷新
  147.   #--------------------------------------------------------------------------
  148.   def refresh
  149.     self.contents.clear
  150.     draw_item_name(@item, 4, 96)
  151.     self.contents.font.color = normal_color
  152.     self.contents.draw_text(140, 130, 32, 32, "×")
  153.     self.contents.draw_text(180, 130, 24, 32, @number.to_s, 2)
  154.     self.cursor_rect.set(178, 130, 32, 32)
  155.     # 描绘合计价格和货币单位
  156.     domination = $data_system.words.gold
  157.     cx = contents.text_size(domination).width
  158.     total_price = @price * @number
  159.     self.contents.font.color = normal_color
  160.     self.contents.draw_text(4, 160, 200-cx-2, 32, total_price.to_s, 2)
  161.     self.contents.font.color = system_color
  162.     self.contents.draw_text(204-cx, 160, cx, 32, domination, 2)
  163.   end
  164. end
  165. #==============================================================================
  166. # ■ Window_ShopStatus
  167. #------------------------------------------------------------------------------
  168. #  商店画面、显示物品所持数与角色装备的窗口。
  169. #==============================================================================

  170. class Window_ShopStatus < Window_Base
  171.   #--------------------------------------------------------------------------
  172.   # ● 初始化对像
  173.   #--------------------------------------------------------------------------
  174.   def initialize
  175.     super(320, 128, 250, 352)
  176.     self.contents = Bitmap.new(width - 32, height - 32)
  177.     @item = nil
  178.     refresh
  179.   end
  180.   #--------------------------------------------------------------------------
  181.   # ● 刷新
  182.   #--------------------------------------------------------------------------
  183.   def refresh
  184.     self.contents.clear
  185.     if @item == nil
  186.       return
  187.     end
  188.     case @item
  189.     when RPG::Item
  190.       number = $game_party.item_number(@item.id)
  191.     when RPG::Weapon
  192.       number = $game_party.weapon_number(@item.id)
  193.     when RPG::Armor
  194.       number = $game_party.armor_number(@item.id)
  195.     end
  196.     self.contents.font.color = system_color
  197.     self.contents.draw_text(4, 0, 200, 32, "所持数")
  198.     self.contents.font.color = normal_color
  199.     self.contents.draw_text(180, 0, 32, 32, number.to_s, 2)
  200.     if @item.is_a?(RPG::Item)
  201.       return
  202.     end
  203.    
  204.     # 添加装备品信息
  205.     for i in 0...$game_party.actors.size
  206.       # 获取角色
  207.       actor = $game_party.actors[i]
  208.       # 可以装备为普通文字颜色、不能装备设置为无效文字颜色
  209.       if actor.equippable?(@item)
  210.         self.contents.font.color = normal_color
  211.       else
  212.         self.contents.font.color = disabled_color
  213.       end
  214.       
  215.       # 描绘角色名字
  216.       self.contents.draw_text(4, 64 + 64 * i, 120, 32, actor.name)
  217.       # 获取当前的装备品
  218.       if @item.is_a?(RPG::Weapon)
  219.         item1 = $data_weapons[actor.weapon_id]
  220.       elsif @item.kind == 0
  221.         item1 = $data_armors[actor.armor1_id]
  222.       elsif @item.kind == 1
  223.         item1 = $data_armors[actor.armor2_id]
  224.       elsif @item.kind == 2
  225.         item1 = $data_armors[actor.armor3_id]
  226.       else
  227.         item1 = $data_armors[actor.armor4_id]
  228.       end
  229.       # 可以装备的情况
  230.       if actor.equippable?(@item)
  231.         # 武器的情况
  232.         if @item.is_a?(RPG::Weapon)
  233.           atk1 = item1 != nil ? item1.atk : 0
  234.           atk2 = @item != nil ? @item.atk : 0
  235.           change = atk2 - atk1
  236.         end
  237.         # 防具的情况
  238.         if @item.is_a?(RPG::Armor)
  239.           pdef1 = item1 != nil ? item1.pdef : 0
  240.           mdef1 = item1 != nil ? item1.mdef : 0
  241.           pdef2 = @item != nil ? @item.pdef : 0
  242.           mdef2 = @item != nil ? @item.mdef : 0
  243.           change = pdef2 - pdef1 + mdef2 - mdef1
  244.         end
  245.         # 描绘能力值变化
  246.         self.contents.draw_text(100, 64 + 64 * i, 112, 32,
  247.           sprintf("%+d", change), 2)
  248.       end
  249.       # 描绘物品
  250.       if item1 != nil
  251.         x = 4
  252.         y = 64 + 64 * i + 32
  253.         bitmap = RPG::Cache.icon(item1.icon_name)
  254.         opacity = self.contents.font.color == normal_color ? 255 : 128
  255.         self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  256.         self.contents.draw_text(x + 28, y, 212, 32, item1.name)
  257.       end
  258.     end
  259.   end
  260.   #--------------------------------------------------------------------------
  261.   # ● 设置物品
  262.   #     item : 新的物品
  263.   #--------------------------------------------------------------------------
  264.   def item=(item)
  265.     if @item != item
  266.       @item = item
  267.       refresh
  268.     end
  269.   end
  270. end
复制代码
整段脚本
  1. #==============================================================================
  2. #本脚本来自www.66rpg.com,转载和使用请保留此信息 。
  3. #默认游戏系统大修改
  4. #  爆焰    于: 12-31-2011整合与发布
  5. #QQ:459974518
  6. #本脚本是本人一时兴起修改默认的脚本所制作完成。
  7. #如发现有bug请与作者联系或上66rpg发贴提意见。
  8. #==============================================================================
  9. #==============================================================================
  10. # ■ Window_Base
  11. #------------------------------------------------------------------------------
  12. #  游戏中全部窗口的超级类。
  13. #==============================================================================

  14. class Window_Base < Window
  15.   
  16.   def draw_actor_parameter(actor, x, y, type)
  17.     case type
  18.     when 0
  19.       parameter_name = $data_system.words.atk
  20.       parameter_value = actor.atk
  21.     when 1
  22.       parameter_name = $data_system.words.pdef
  23.       parameter_value = actor.pdef
  24.     when 2
  25.       parameter_name = $data_system.words.mdef
  26.       parameter_value = actor.mdef
  27.     when 3
  28.       parameter_name = $data_system.words.str
  29.       parameter_value = actor.str
  30.     when 4
  31.       parameter_name = $data_system.words.dex
  32.       parameter_value = actor.dex
  33.     when 5
  34.       parameter_name = $data_system.words.agi
  35.       parameter_value = actor.agi
  36.     when 6
  37.       parameter_name = $data_system.words.int
  38.       parameter_value = actor.int
  39.       ################################################   
  40.   when 7
  41.     parameter_name = "回避"
  42.     parameter_value = actor.eva
  43. ##################################################
  44.     end
  45.     self.contents.font.color = system_color
  46.     self.contents.draw_text(x, y, 120, 32, parameter_name)
  47.     self.contents.font.color = normal_color
  48.     self.contents.draw_text(x + 120, y, 36, 32, parameter_value.to_s, 2)
  49.   end
  50.   end
  51. #==============================================================================
  52. # ■ Window_Help
  53. #------------------------------------------------------------------------------
  54. #  特技及物品的说明、角色的状态显示的窗口。
  55. #==============================================================================

  56. class Window_Help < Window_Base
  57.   #--------------------------------------------------------------------------
  58.   # ● 初始化对像
  59.   #--------------------------------------------------------------------------
  60.   def initialize
  61.     super(160, 0, 320, 64)
  62.     self.contents = Bitmap.new(width - 32, height - 32)
  63.   end

  64.   #--------------------------------------------------------------------------
  65.   # ● 设置角色
  66.   #     actor : 要显示状态的角色
  67.   #--------------------------------------------------------------------------
  68.   def set_actor(actor)
  69.     if actor != @actor
  70.       self.contents.clear
  71.        self.contents.font.size = 18
  72.       self.contents.font.color = Color.new(255,255,255,255)
  73.       draw_actor_name(actor, 0, 0)
  74.       self.contents.font.size = 14
  75.       self.contents.font.color = Color.new(255,255,255,255)
  76.       draw_actor_state(actor,70, 0)
  77.       self.contents.font.size = 18
  78.       self.contents.font.color = Color.new(255,255,255,255)
  79.       draw_actor_hp(actor, 140, -8)
  80.       draw_actor_sp(actor, 140, 8)
  81.       @actor = actor
  82.       @text = nil
  83.       self.visible = true
  84.     end
  85.   end
  86.   end

  87. #==============================================================================
  88. # ■ Window_PlayTime
  89. #------------------------------------------------------------------------------
  90. #  菜单画面显示游戏时间的窗口。
  91. #==============================================================================

  92. class Window_PlayTime < Window_Base
  93.   def initialize
  94.     super(0, 0, 160, 64)
  95.     self.contents = Bitmap.new(width - 32, height - 32)
  96.     refresh
  97.   end
  98.   
  99.   def refresh
  100.     self.contents.clear
  101.     self.contents.font.size = 14
  102.       self.contents.font.color = Color.new(255,255,255,255)
  103.     self.contents.font.color = system_color
  104.     self.contents.draw_text(4, -8, 120, 32, "游戏时间")
  105.     @total_sec = Graphics.frame_count / Graphics.frame_rate
  106.     hour = @total_sec / 60 / 60
  107.     min = @total_sec / 60 % 60
  108.     sec = @total_sec % 60
  109.     text = sprintf("%02d:%02d:%02d", hour, min, sec)
  110.     self.contents.font.color = normal_color
  111.     self.contents.draw_text(4, 8, 120, 32, text, 2)
  112.   end
  113. end
  114. #==============================================================================
  115. # ■ Window_Steps
  116. #------------------------------------------------------------------------------
  117. #  菜单画面显示步数的窗口。
  118. #==============================================================================

  119. class Window_Steps < Window_Base
  120.   #--------------------------------------------------------------------------
  121.   # ● 初始化对像
  122.   #--------------------------------------------------------------------------
  123.   def initialize
  124.     super(0, 0, 160, 64)
  125.     self.contents = Bitmap.new(width - 32, height - 32)
  126.     refresh
  127.   end
  128.   #--------------------------------------------------------------------------
  129.   # ● 刷新
  130.   #--------------------------------------------------------------------------
  131.   def refresh
  132.      @id = $game_map.map_id  #获取地图编号
  133.     self.contents.clear #清除以前的东西
  134.     $mapnames = load_data("Data/MapInfos.rxdata") #读取地图名文件
  135.     map_name = $mapnames[@id].name #获得地图名
  136.     self.contents.font.size = 14
  137.     self.contents.font.color = system_color#颜色,暗蓝色
  138.     self.contents.draw_text(0, -8, 96, 32, "当前地图")
  139.      self.contents.font.color = normal_color#颜色,这里是白色~
  140.     self.contents.draw_text(0, -23, 116, 96, map_name,2)
  141.   end
  142. end
  143. #==============================================================================
  144. # ■ Window_MenuStatus
  145. #------------------------------------------------------------------------------
  146. #  显示菜单画面和同伴状态的窗口。
  147. #==============================================================================

  148. class Window_MenuStatus < Window_Selectable
  149.   #--------------------------------------------------------------------------
  150.   # ● 初始化目标
  151.   #--------------------------------------------------------------------------
  152.   def initialize
  153.     super(0, 0, 480, 224)
  154.     self.contents = Bitmap.new(width - 32, height - 32)
  155.     refresh
  156.     self.active = false
  157.     self.index = -1
  158.   end
  159.   
  160.   #--------------------------------------------------------------------------
  161.   # ● 刷新光标矩形
  162.   #--------------------------------------------------------------------------
  163.   def update_cursor_rect
  164.     if @index < 0
  165.       self.cursor_rect.empty
  166.     else
  167.       y = @index/2 * 96 + 23
  168.       self.cursor_rect.set(@index%2 * 224, y, 224, 72)
  169.       @column_max = 2
  170.     end
  171.   end
  172.   end
  173. #==============================================================================
  174. # ■ Window_Item
  175. #------------------------------------------------------------------------------
  176. #  物品画面、战斗画面、显示浏览物品的窗口。
  177. #==============================================================================

  178. class Window_Item < Window_Selectable
  179.   #--------------------------------------------------------------------------
  180.   # ● 初始化对像
  181.   #--------------------------------------------------------------------------
  182.   def initialize
  183.     super(160, 64, 320, 300)
  184.     @column_max = 1
  185.     refresh
  186.     self.index = 0
  187.     # 战斗中的情况下将窗口移至中央并将其半透明化
  188.     if $game_temp.in_battle
  189.       self.z = 999
  190.       self.y = 64
  191.       self.height = 256
  192.       self.back_opacity = 200
  193.     end
  194.   end
  195.   #--------------------------------------------------------------------------
  196.   # ● 描绘项目
  197.   #     index : 项目编号
  198.   #--------------------------------------------------------------------------
  199.   def draw_item(index)
  200.     item = @data[index]
  201.     case item
  202.     when RPG::Item
  203.       number = $game_party.item_number(item.id)
  204.     when RPG::Weapon
  205.       number = $game_party.weapon_number(item.id)
  206.     when RPG::Armor
  207.       number = $game_party.armor_number(item.id)
  208.     end
  209.     if item.is_a?(RPG::Item) and
  210.        $game_party.item_can_use?(item.id)
  211.       self.contents.font.color = normal_color
  212.     else
  213.       self.contents.font.color = disabled_color
  214.     end
  215.     x = 4 + index % 1 * (90 + 32)
  216.     y = index / 1 * 32
  217.     rect = Rect.new(x, y, self.width / @column_max - 32, 32)
  218.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  219.     bitmap = RPG::Cache.icon(item.icon_name)
  220.     opacity = self.contents.font.color == normal_color ? 255 : 128
  221.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  222.     self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  223.     self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
  224.     self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
  225.   end
  226.   end
  227. #==============================================================================
  228. # ■ Window_Skill
  229. #------------------------------------------------------------------------------
  230. #  特技画面、战斗画面、显示可以使用的特技浏览的窗口。
  231. #==============================================================================

  232. class Window_Skill < Window_Selectable
  233.   #--------------------------------------------------------------------------
  234.   # ● 初始化对像
  235.   #     actor : 角色
  236.   #--------------------------------------------------------------------------
  237.   def initialize(actor)
  238.     super(160, 128, 320, 300)
  239.     @actor = actor
  240.     @column_max = 1
  241.     refresh
  242.     self.index = 0
  243.     # 战斗中的情况下将窗口移至中央并将其半透明化
  244.     if $game_temp.in_battle
  245.       self.z = 999
  246.       self.y = 64
  247.       self.height = 256
  248.       self.back_opacity = 200
  249.     end
  250.   end
  251.   
  252.   #--------------------------------------------------------------------------
  253.   # ● 描绘项目
  254.   #     index : 项目编号
  255.   #--------------------------------------------------------------------------
  256.   def draw_item(index)
  257.     skill = @data[index]
  258.     if @actor.skill_can_use?(skill.id)
  259.       self.contents.font.color = normal_color
  260.     else
  261.       self.contents.font.color = disabled_color
  262.     end
  263.     x = 4 + index % 1 * (90 + 32)
  264.     y = index / 1 * 32
  265.     rect = Rect.new(x, y, self.width / @column_max - 32, 32)
  266.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  267.     bitmap = RPG::Cache.icon(skill.icon_name)
  268.     opacity = self.contents.font.color == normal_color ? 255 : 128
  269.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  270.     self.contents.draw_text(x + 28, y, 204, 32, skill.name, 0)
  271.     self.contents.draw_text(x + 232, y, 48, 32, skill.sp_cost.to_s, 2)
  272.   end
  273. end
  274. #==============================================================================
  275. # ■ Window_SkillStatus
  276. #------------------------------------------------------------------------------
  277. #  显示特技画面、特技使用者的窗口。
  278. #==============================================================================

  279. class Window_SkillStatus < Window_Base
  280.   #--------------------------------------------------------------------------
  281.   # ● 初始化对像
  282.   #     actor : 角色
  283.   #--------------------------------------------------------------------------
  284.   def initialize(actor)
  285.     super(160, 64, 320, 64)
  286.     self.contents = Bitmap.new(width - 32, height - 32)
  287.     @actor = actor
  288.     refresh
  289.   end
  290.   #--------------------------------------------------------------------------
  291.   # ● 刷新
  292.   #--------------------------------------------------------------------------
  293.   def refresh
  294.     self.contents.clear
  295.     self.contents.font.size = 18
  296.       self.contents.font.color = Color.new(255,255,255,255)
  297.     draw_actor_name(@actor, 0, 0)
  298.     self.contents.font.size = 14
  299.       self.contents.font.color = Color.new(255,255,255,255)
  300.     draw_actor_state(@actor, 70, 0)
  301.     self.contents.font.size = 18
  302.       self.contents.font.color = Color.new(255,255,255,255)
  303.     draw_actor_hp(@actor, 140, -8)
  304.     draw_actor_sp(@actor, 140, 8)
  305.   end
  306. end
  307. #==============================================================================
  308. # ■ Window_EquipLeft
  309. #------------------------------------------------------------------------------
  310. #  装备画面的、显示角色能力值变化的窗口。
  311. #==============================================================================

  312. class Window_EquipLeft < Window_Base
  313.   #--------------------------------------------------------------------------
  314.   # ● 初始化对像
  315.   #     actor : 角色
  316.   #--------------------------------------------------------------------------
  317.   def initialize(actor)
  318.     super(50, 64, 272, 192)
  319.     self.contents = Bitmap.new(width - 32, height - 32)
  320.     @actor = actor
  321.     refresh
  322.   end
  323.   end
  324. #==============================================================================
  325. # ■ Window_EquipRight
  326. #------------------------------------------------------------------------------
  327. #  装备画面、显示角色现在装备的物品的窗口。
  328. #==============================================================================

  329. class Window_EquipRight < Window_Selectable
  330.   #--------------------------------------------------------------------------
  331.   # ● 初始化对像
  332.   #     actor : 角色
  333.   #--------------------------------------------------------------------------
  334.   def initialize(actor)
  335.     super(50, 256, 272, 192)
  336.     self.contents = Bitmap.new(width - 32, height - 32)
  337.     @actor = actor
  338.     refresh
  339.     self.index = 0
  340.   end
  341.   end

  342. #==============================================================================
  343. # ■ Window_EquipItem
  344. #------------------------------------------------------------------------------
  345. #  装备画面、显示浏览变更装备的候补物品的窗口。
  346. #==============================================================================

  347. class Window_EquipItem < Window_Selectable
  348.   #--------------------------------------------------------------------------
  349.   # ● 初始化对像
  350.   #     actor      : 角色
  351.   #     equip_type : 装备部位 (0~3)
  352.   #--------------------------------------------------------------------------
  353.   def initialize(actor, equip_type)
  354.     super(322, 64, 272, 384)
  355.     @actor = actor
  356.     @equip_type = equip_type
  357.     @column_max = 1
  358.     refresh
  359.     self.active = false
  360.     self.index = -1
  361.   end
  362.   
  363.   #--------------------------------------------------------------------------
  364.   # ● 项目的描绘
  365.   #     index : 项目符号
  366.   #--------------------------------------------------------------------------
  367.   def draw_item(index)
  368.     item = @data[index]
  369.     x = 4 + index % 1 * (90 + 32)
  370.     y = index / 1 * 32
  371.     case item
  372.     when RPG::Weapon
  373.       number = $game_party.weapon_number(item.id)
  374.     when RPG::Armor
  375.       number = $game_party.armor_number(item.id)
  376.     end
  377.     bitmap = RPG::Cache.icon(item.icon_name)
  378.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
  379.     self.contents.font.color = normal_color
  380.     self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  381.     self.contents.draw_text(x + 180, y, 16, 32, "×", 1)
  382.     self.contents.draw_text(x + 200, y, 24, 32, number.to_s, 2)
  383.   end
  384. end
  385. #==============================================================================
  386. # ■ 全部替换 Window_Status
  387. #------------------------------------------------------------------------------
  388. #  显示状态画面、完全规格的状态窗口。
  389. #==============================================================================

  390. class Window_Status < Window_Base
  391.   #--------------------------------------------------------------------------
  392.   # ● 初始化对像
  393.   #     actor : 角色
  394.   #--------------------------------------------------------------------------
  395.   def initialize(actor)
  396.     super(80, 60, 480, 360)
  397.     self.contents = Bitmap.new(width - 32, height - 32)
  398.     @actor = actor
  399.     refresh
  400.   end
  401.   #--------------------------------------------------------------------------
  402.   # ● 刷新
  403.   #--------------------------------------------------------------------------
  404.   def refresh
  405.     self.contents.clear
  406.     #draw_actor_graphic(@actor, 40, 112)
  407.     draw_actor_name(@actor, 4, 0)
  408.     draw_actor_class(@actor, 4 + 144, 0)
  409.     draw_actor_level(@actor, 70, 0)
  410.     draw_actor_state(@actor, 0, 60)
  411.     draw_actor_hp(@actor, 4, 20, 172)
  412.     draw_actor_sp(@actor, 4, 40, 172)
  413.     draw_actor_parameter(@actor, 0, 90, 0)#攻击力
  414.     draw_actor_parameter(@actor, 0, 120, 1)#物防
  415.     draw_actor_parameter(@actor, 0, 150, 2)#魔防
  416.     draw_actor_parameter(@actor, 0, 180, 3)#力量
  417.     draw_actor_parameter(@actor, 0, 210, 4)#灵巧
  418.     draw_actor_parameter(@actor, 0, 270, 5)#速度
  419.     draw_actor_parameter(@actor, 0, 300, 6)#魔力
  420. ###########################################################   
  421.     draw_actor_parameter(@actor, 0, 240, 7)#回避

  422. ###########################################################
  423.     self.contents.font.color = system_color
  424.     self.contents.draw_text(230, 0, 80, 32, "经验")
  425.     self.contents.draw_text(230, 40, 80, 32, "下一级")
  426.     self.contents.font.color = normal_color
  427.     self.contents.draw_text(230 + 80, 0, 84, 32, @actor.exp_s, 2)
  428.     self.contents.draw_text(230 + 80, 40, 84, 32, @actor.next_rest_exp_s, 2)
  429.     self.contents.font.color = system_color
  430.     self.contents.draw_text(230, 90, 96, 32, "当前装备")
  431.     draw_item_name($data_weapons[@actor.weapon_id], 230 + 16, 124)
  432.     draw_item_name($data_armors[@actor.armor1_id], 230  + 16, 168)
  433.     draw_item_name($data_armors[@actor.armor2_id], 230 + 16, 212)
  434.     draw_item_name($data_armors[@actor.armor3_id], 230 + 16, 256)
  435.     draw_item_name($data_armors[@actor.armor4_id], 230 + 16, 300)
  436.   end
  437. end
  438. #==============================================================================
  439. # ■ Window_SaveFile
  440. #------------------------------------------------------------------------------
  441. #  显示存档以及读档画面、保存文件的窗口。
  442. #==============================================================================

  443. class Window_SaveFile < Window_Base
  444.   
  445.   def initialize(file_index, filename)
  446.     super(160, 64 + file_index % 4 * 104, 320, 104)
  447.     self.contents = Bitmap.new(width - 32, height - 32)
  448.     @file_index = file_index
  449.     @filename = "Save#{@file_index + 1}.rxdata"
  450.     @time_stamp = Time.at(0)
  451.     @file_exist = FileTest.exist?(@filename)
  452.     if @file_exist
  453.       file = File.open(@filename, "r")
  454.       @time_stamp = file.mtime
  455.       @characters = Marshal.load(file)
  456.       @frame_count = Marshal.load(file)
  457.       @game_system = Marshal.load(file)
  458.       @game_switches = Marshal.load(file)
  459.       @game_variables = Marshal.load(file)
  460.       @total_sec = @frame_count / Graphics.frame_rate
  461.       file.close
  462.     end
  463.     refresh
  464.     @selected = false
  465.   end
  466.   #--------------------------------------------------------------------------
  467.   # ● 刷新
  468.   #--------------------------------------------------------------------------
  469.   def refresh
  470.     self.contents.clear
  471.     # 描绘文件编号
  472.     self.contents.font.color = normal_color
  473.     name = "文件 #{@file_index + 1}"
  474.     self.contents.draw_text(4, 0, 600, 32, name)
  475.     @name_width = contents.text_size(name).width
  476.     # 存档文件存在的情况下
  477.     if @file_exist
  478.       # 描绘角色
  479.       for i in [email protected]
  480.         bitmap = RPG::Cache.character(@characters[i][0], @characters[i][1])
  481.         cw = bitmap.rect.width / 4
  482.         ch = bitmap.rect.height / 4
  483.         src_rect = Rect.new(0, 0, cw, ch)
  484.         x = 280 - @characters.size * 32 + i * 64 - cw / 2
  485.         self.contents.blt(x-100, 68 - ch, bitmap, src_rect)
  486.       end
  487.       # 描绘游戏时间
  488.       hour = @total_sec / 60 / 60
  489.       min = @total_sec / 60 % 60
  490.       sec = @total_sec % 60
  491.       time_string = sprintf("%02d:%02d:%02d", hour, min, sec)
  492.       self.contents.font.color = normal_color
  493.       self.contents.draw_text(4, 8, 280, 32, time_string, 2)
  494.       # 描绘时间标记
  495.       self.contents.font.color = normal_color
  496.       time_string = @time_stamp.strftime("%Y/%m/%d %H:%M")
  497.       self.contents.draw_text(4, 40, 280, 32, time_string, 2)
  498.     end
  499.   end
  500. end
  501. #==============================================================================
  502. # ■ Window_ShopCommand
  503. #------------------------------------------------------------------------------
  504. #  商店画面、选择要做的事的窗口
  505. #==============================================================================

  506. class Window_ShopCommand < Window_Selectable
  507.   #--------------------------------------------------------------------------
  508.   # ● 初始化对像
  509.   #--------------------------------------------------------------------------
  510.   def initialize
  511.     super(160, 64, 160, 64)
  512.     self.contents = Bitmap.new(width - 32, height - 32)
  513.     @item_max = 3
  514.     @column_max = 3
  515.     @commands = ["买", "卖", "走"]
  516.     refresh
  517.     self.index = 0
  518.   end

  519.   #--------------------------------------------------------------------------
  520.   # ● 描绘项目
  521.   #     index : 项目编号
  522.   #--------------------------------------------------------------------------
  523.   def draw_item(index)
  524.     x = 0 + index * 52
  525.     self.contents.draw_text(x, 0, 128, 32, @commands[index])
  526.   end
  527. end
  528. #==============================================================================
  529. # ■ Window_ShopBuy
  530. #------------------------------------------------------------------------------
  531. #  商店画面、浏览显示可以购买的商品的窗口。
  532. #==============================================================================

  533. class Window_ShopBuy < Window_Selectable
  534.   #--------------------------------------------------------------------------
  535.   # ● 初始化对像
  536.   #     shop_goods : 商品
  537.   #--------------------------------------------------------------------------
  538.   def initialize(shop_goods)
  539.     super(70, 128, 250, 352)
  540.     @shop_goods = shop_goods
  541.     refresh
  542.     self.index = 0
  543.   end

  544.   def draw_item(index)
  545.     item = @data[index]
  546.     # 获取物品所持数
  547.     case item
  548.     when RPG::Item
  549.       number = $game_party.item_number(item.id)
  550.     when RPG::Weapon
  551.       number = $game_party.weapon_number(item.id)
  552.     when RPG::Armor
  553.       number = $game_party.armor_number(item.id)
  554.     end
  555.     # 价格在所持金以下、并且所持数不是 99 的情况下为普通文字颜色
  556.     # 除此之外的情况设置为无效文字色
  557.     if item.price <= $game_party.gold and number < 99
  558.       self.contents.font.color = normal_color
  559.     else
  560.       self.contents.font.color = disabled_color
  561.     end
  562.     x = 4
  563.     y = index * 32
  564.     rect = Rect.new(x, y, self.width - 32, 32)
  565.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  566.     bitmap = RPG::Cache.icon(item.icon_name)
  567.     opacity = self.contents.font.color == normal_color ? 255 : 128
  568.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  569.     self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  570.     self.contents.draw_text(x + 120, y, 88, 32, item.price.to_s, 2)
  571.   end
  572. end
  573. #==============================================================================
  574. # ■ Window_ShopSell
  575. #------------------------------------------------------------------------------
  576. #  商店画面、浏览显示可以卖掉的商品的窗口。
  577. #==============================================================================

  578. class Window_ShopSell < Window_Selectable
  579.   #--------------------------------------------------------------------------
  580.   # ● 初始化对像
  581.   #--------------------------------------------------------------------------
  582.   def initialize
  583.     super(160, 128, 320, 352)
  584.     @column_max = 1
  585.     refresh
  586.     self.index = 0
  587.   end
  588.   #--------------------------------------------------------------------------
  589.   # ● 描绘项目
  590.   #     index : 项目标号
  591.   #--------------------------------------------------------------------------
  592.   def draw_item(index)
  593.     item = @data[index]
  594.     case item
  595.     when RPG::Item
  596.       number = $game_party.item_number(item.id)
  597.     when RPG::Weapon
  598.       number = $game_party.weapon_number(item.id)
  599.     when RPG::Armor
  600.       number = $game_party.armor_number(item.id)
  601.     end
  602.     # 可以卖掉的显示为普通文字颜色、除此之外设置成无效文字颜色
  603.     if item.price > 0
  604.       self.contents.font.color = normal_color
  605.     else
  606.       self.contents.font.color = disabled_color
  607.     end
  608.     x = 4 + index % 1 * (90 + 32)
  609.     y = index / 1 * 32
  610.     rect = Rect.new(x, y, self.width / @column_max - 32, 32)
  611.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  612.     bitmap = RPG::Cache.icon(item.icon_name)
  613.     opacity = self.contents.font.color == normal_color ? 255 : 128
  614.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  615.     self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  616.     self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
  617.     self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
  618.   end
  619. end
  620. #==============================================================================
  621. # ■ Window_ShopNumber
  622. #------------------------------------------------------------------------------
  623. #  商店画面、输入买卖数量的窗口。
  624. #==============================================================================

  625. class Window_ShopNumber < Window_Base
  626.   #--------------------------------------------------------------------------
  627.   # ● 初始化对像
  628.   #--------------------------------------------------------------------------
  629.   def initialize
  630.     super(70, 128, 250, 352)
  631.     self.contents = Bitmap.new(width - 32, height - 32)
  632.     @item = nil
  633.     @max = 1
  634.     @price = 0
  635.     @number = 1
  636.   end
  637.   
  638.   #--------------------------------------------------------------------------
  639.   # ● 刷新
  640.   #--------------------------------------------------------------------------
  641.   def refresh
  642.     self.contents.clear
  643.     draw_item_name(@item, 4, 96)
  644.     self.contents.font.color = normal_color
  645.     self.contents.draw_text(140, 130, 32, 32, "×")
  646.     self.contents.draw_text(180, 130, 24, 32, @number.to_s, 2)
  647.     self.cursor_rect.set(178, 130, 32, 32)
  648.     # 描绘合计价格和货币单位
  649.     domination = $data_system.words.gold
  650.     cx = contents.text_size(domination).width
  651.     total_price = @price * @number
  652.     self.contents.font.color = normal_color
  653.     self.contents.draw_text(4, 160, 200-cx-2, 32, total_price.to_s, 2)
  654.     self.contents.font.color = system_color
  655.     self.contents.draw_text(204-cx, 160, cx, 32, domination, 2)
  656.   end
  657. end
  658. #==============================================================================
  659. # ■ Window_ShopStatus
  660. #------------------------------------------------------------------------------
  661. #  商店画面、显示物品所持数与角色装备的窗口。
  662. #==============================================================================

  663. class Window_ShopStatus < Window_Base
  664.   #--------------------------------------------------------------------------
  665.   # ● 初始化对像
  666.   #--------------------------------------------------------------------------
  667.   def initialize
  668.     super(320, 128, 250, 352)
  669.     self.contents = Bitmap.new(width - 32, height - 32)
  670.     @item = nil
  671.     refresh
  672.   end
  673.   #--------------------------------------------------------------------------
  674.   # ● 刷新
  675.   #--------------------------------------------------------------------------
  676.   def refresh
  677.     self.contents.clear
  678.     if @item == nil
  679.       return
  680.     end
  681.     case @item
  682.     when RPG::Item
  683.       number = $game_party.item_number(@item.id)
  684.     when RPG::Weapon
  685.       number = $game_party.weapon_number(@item.id)
  686.     when RPG::Armor
  687.       number = $game_party.armor_number(@item.id)
  688.     end
  689.     self.contents.font.color = system_color
  690.     self.contents.draw_text(4, 0, 200, 32, "所持数")
  691.     self.contents.font.color = normal_color
  692.     self.contents.draw_text(180, 0, 32, 32, number.to_s, 2)
  693.     if @item.is_a?(RPG::Item)
  694.       return
  695.     end
  696.    
  697.     # 添加装备品信息
  698.     for i in 0...$game_party.actors.size
  699.       # 获取角色
  700.       actor = $game_party.actors[i]
  701.       # 可以装备为普通文字颜色、不能装备设置为无效文字颜色
  702.       if actor.equippable?(@item)
  703.         self.contents.font.color = normal_color
  704.       else
  705.         self.contents.font.color = disabled_color
  706.       end
  707.       
  708.       # 描绘角色名字
  709.       self.contents.draw_text(4, 64 + 64 * i, 120, 32, actor.name)
  710.       # 获取当前的装备品
  711.       if @item.is_a?(RPG::Weapon)
  712.         item1 = $data_weapons[actor.weapon_id]
  713.       elsif @item.kind == 0
  714.         item1 = $data_armors[actor.armor1_id]
  715.       elsif @item.kind == 1
  716.         item1 = $data_armors[actor.armor2_id]
  717.       elsif @item.kind == 2
  718.         item1 = $data_armors[actor.armor3_id]
  719.       else
  720.         item1 = $data_armors[actor.armor4_id]
  721.       end
  722.       # 可以装备的情况
  723.       if actor.equippable?(@item)
  724.         # 武器的情况
  725.         if @item.is_a?(RPG::Weapon)
  726.           atk1 = item1 != nil ? item1.atk : 0
  727.           atk2 = @item != nil ? @item.atk : 0
  728.           change = atk2 - atk1
  729.         end
  730.         # 防具的情况
  731.         if @item.is_a?(RPG::Armor)
  732.           pdef1 = item1 != nil ? item1.pdef : 0
  733.           mdef1 = item1 != nil ? item1.mdef : 0
  734.           pdef2 = @item != nil ? @item.pdef : 0
  735.           mdef2 = @item != nil ? @item.mdef : 0
  736.           change = pdef2 - pdef1 + mdef2 - mdef1
  737.         end
  738.         # 描绘能力值变化
  739.         self.contents.draw_text(100, 64 + 64 * i, 112, 32,
  740.           sprintf("%+d", change), 2)
  741.       end
  742.       # 描绘物品
  743.       if item1 != nil
  744.         x = 4
  745.         y = 64 + 64 * i + 32
  746.         bitmap = RPG::Cache.icon(item1.icon_name)
  747.         opacity = self.contents.font.color == normal_color ? 255 : 128
  748.         self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  749.         self.contents.draw_text(x + 28, y, 212, 32, item1.name)
  750.       end
  751.     end
  752.   end
  753.   #--------------------------------------------------------------------------
  754.   # ● 设置物品
  755.   #     item : 新的物品
  756.   #--------------------------------------------------------------------------
  757.   def item=(item)
  758.     if @item != item
  759.       @item = item
  760.       refresh
  761.     end
  762.   end
  763. end

  764. #==============================================================================
  765. # ■ Scene_Menu
  766. #------------------------------------------------------------------------------
  767. #  处理菜单画面的类。
  768. #==============================================================================

  769. class Scene_Menu

  770.   #--------------------------------------------------------------------------
  771.   # ● 主处理
  772.   #--------------------------------------------------------------------------
  773.   def main
  774.     # 生成命令窗口
  775.     s1 = $data_system.words.item
  776.     s2 = $data_system.words.skill
  777.     s3 = $data_system.words.equip
  778.     s4 = "状态"
  779.     s5 = "任务"
  780.     s6 = "介绍"
  781.     s7 = "存档"
  782.     s8 = "结束"
  783.     @command_window = Window_Command.new(90, [s1, s2, s3, s4, s5, s6, s7, s8])
  784.     @command_window.x = 35
  785.     @command_window.y = 90
  786.     # 同伴人数为 0 的情况下
  787.     if $game_party.actors.size == 0
  788.       # 物品、特技、装备、状态无效化
  789.       @command_window.disable_item(0)
  790.       @command_window.disable_item(1)
  791.       @command_window.disable_item(2)
  792.       @command_window.disable_item(3)
  793.     end
  794.     # 禁止存档的情况下
  795.     if $game_system.save_disabled
  796.       # 存档无效
  797.       @command_window.disable_item(6)
  798.     end
  799.     # 生成游戏时间窗口
  800.     @playtime_window = Window_PlayTime.new
  801.     @playtime_window.x = 285
  802.     @playtime_window.y = 314
  803.     # 生成步数窗口
  804.     @steps_window = Window_Steps.new
  805.     @steps_window.x = 125
  806.     @steps_window.y = 314
  807.     # 生成金钱窗口
  808.     @gold_window = Window_Gold.new
  809.     @gold_window.x = 445
  810.     @gold_window.y = 314
  811.     # 生成状态窗口
  812.     @status_window = Window_MenuStatus.new
  813.     @status_window.x = 125
  814.     @status_window.y = 90
  815.     # 执行过渡
  816.     Graphics.transition
  817.     # 主循环
  818.     loop do
  819.       # 刷新游戏画面
  820.       Graphics.update
  821.       # 刷新输入信息
  822.       Input.update
  823.       # 刷新画面
  824.       update
  825.       # 如果切换画面就中断循环
  826.       if $scene != self
  827.         break
  828.       end
  829.     end
  830.     # 准备过渡
  831.     Graphics.freeze
  832.     # 释放窗口
  833.     @command_window.dispose
  834.     @playtime_window.dispose
  835.     @steps_window.dispose
  836.     @gold_window.dispose
  837.     @status_window.dispose
  838.   end
  839.   #--------------------------------------------------------------------------
  840.   # ● 刷新画面
  841.   #--------------------------------------------------------------------------
  842.   def update
  843.     # 刷新窗口
  844.     @command_window.update
  845.     @playtime_window.update
  846.     @steps_window.update
  847.     @gold_window.update
  848.     @status_window.update
  849.     # 命令窗口被激活的情况下: 调用 update_command
  850.     if @command_window.active
  851.       update_command
  852.       return
  853.     end
  854.     # 状态窗口被激活的情况下: 调用 update_status
  855.     if @status_window.active
  856.       update_status
  857.       return
  858.     end
  859.   end
  860.   #--------------------------------------------------------------------------
  861.   # ● 刷新画面 (命令窗口被激活的情况下)
  862.   #--------------------------------------------------------------------------
  863.   def update_command
  864.     # 按下 B 键的情况下
  865.     if Input.trigger?(Input::B)
  866.       # 演奏取消 SE
  867.       $game_system.se_play($data_system.cancel_se)
  868.       # 切换的地图画面
  869.       $scene = Scene_Map.new
  870.       return
  871.     end
  872.     # 按下 C 键的情况下
  873.     if Input.trigger?(Input::C)
  874.       # 同伴人数为 0、存档、游戏结束以外的场合
  875.       if $game_party.actors.size == 0 and @command_window.index < 4
  876.         # 演奏冻结 SE
  877.         $game_system.se_play($data_system.buzzer_se)
  878.         return
  879.       end
  880.       # 命令窗口的光标位置分支
  881.       case @command_window.index
  882.       when 0  # 物品
  883.         # 演奏确定 SE
  884.         $game_system.se_play($data_system.decision_se)
  885.         # 切换到物品画面
  886.         $scene = Scene_Item.new
  887.       when 1  # 特技
  888.         # 演奏确定 SE
  889.         $game_system.se_play($data_system.decision_se)
  890.         # 激活状态窗口
  891.         @command_window.active = false
  892.         @status_window.active = true
  893.         @status_window.index = 0
  894.       when 2  # 装备
  895.         # 演奏确定 SE
  896.         $game_system.se_play($data_system.decision_se)
  897.         # 激活状态窗口
  898.         @command_window.active = false
  899.         @status_window.active = true
  900.         @status_window.index = 0
  901.       when 3  # 状态
  902.         # 演奏确定 SE
  903.         $game_system.se_play($data_system.decision_se)
  904.         # 激活状态窗口
  905.         @command_window.active = false
  906.         @status_window.active = true
  907.         @status_window.index = 0
  908.       
  909.         when 4
  910.    
  911.       # 決定 SE を演奏
  912.       $game_system.se_play($data_system.decision_se)
  913.       $scene = Scene_Task.new
  914.         when 5
  915.       # 決定 SE を演奏
  916.         $game_system.se_play($data_system.decision_se)
  917.        @command_window.active = false
  918.         @status_window.active = true
  919.         @status_window.index = 0
  920.          
  921.       when 6  # 存档
  922.         # 禁止存档的情况下
  923.         if $game_system.save_disabled
  924.           # 演奏冻结 SE
  925.           $game_system.se_play($data_system.buzzer_se)
  926.           return
  927.         end
  928.         # 演奏确定 SE
  929.         $game_system.se_play($data_system.decision_se)
  930.         # 切换到存档画面
  931.         $scene = Scene_Save.new
  932.       when 7  # 游戏结束
  933.         # 演奏确定 SE
  934.         $game_system.se_play($data_system.decision_se)
  935.         # 切换到游戏结束画面
  936.         $scene = Scene_End.new
  937.       end
  938.       return
  939.     end
  940.   end
  941.   #--------------------------------------------------------------------------
  942.   # ● 刷新画面 (状态窗口被激活的情况下)
  943.   #--------------------------------------------------------------------------
  944.   def update_status
  945.     # 按下 B 键的情况下
  946.     if Input.trigger?(Input::B)
  947.       # 演奏取消 SE
  948.       $game_system.se_play($data_system.cancel_se)
  949.       # 激活命令窗口
  950.       @command_window.active = true
  951.       @status_window.active = false
  952.       @status_window.index = -1
  953.       return
  954.     end
  955.     # 按下 C 键的情况下
  956.     if Input.trigger?(Input::C)
  957.       # 命令窗口的光标位置分支
  958.       case @command_window.index
  959.       when 1  # 特技
  960.         # 本角色的行动限制在 2 以上的情况下
  961.         if $game_party.actors[@status_window.index].restriction >= 2
  962.           # 演奏冻结 SE
  963.           $game_system.se_play($data_system.buzzer_se)
  964.           return
  965.         end
  966.         # 演奏确定 SE
  967.         $game_system.se_play($data_system.decision_se)
  968.         # 切换到特技画面
  969.         $scene = Scene_Skill.new(@status_window.index)
  970.       when 2  # 装备
  971.         # 演奏确定 SE
  972.         $game_system.se_play($data_system.decision_se)
  973.         # 切换的装备画面
  974.         $scene = Scene_Equip.new(@status_window.index)
  975.       when 3  # 状态
  976.         # 演奏确定 SE
  977.         $game_system.se_play($data_system.decision_se)
  978.         # 切换到状态画面
  979.         $scene = Scene_Status.new(@status_window.index)
  980.         when 5
  981.           # 演奏确定 SE
  982.            $game_system.se_play($data_system.decision_se)
  983.            

  984.       end
  985.       return
  986.     end
  987.     end
  988.     end
  989. #==============================================================================
  990. # ■ Scene_Shop
  991. #------------------------------------------------------------------------------
  992. #  处理商店画面的类。
  993. #==============================================================================

  994. class Scene_Shop
  995.   #--------------------------------------------------------------------------
  996.   # ● 主处理
  997.   #--------------------------------------------------------------------------
  998.   def main
  999.     # 生成帮助窗口
  1000.     @help_window = Window_Help.new
  1001.     # 生成指令窗口
  1002.     @command_window = Window_ShopCommand.new
  1003.     # 生成金钱窗口
  1004.     @gold_window = Window_Gold.new
  1005.     @gold_window.x = 320
  1006.     @gold_window.y = 64
  1007.     # 生成时间窗口
  1008.     @dummy_window = Window_Base.new(160, 128, 320, 352)
  1009.     # 生成购买窗口
  1010.     @buy_window = Window_ShopBuy.new($game_temp.shop_goods)
  1011.     @buy_window.active = false
  1012.     @buy_window.visible = false
  1013.     @buy_window.help_window = @help_window
  1014.     # 生成卖出窗口
  1015.     @sell_window = Window_ShopSell.new
  1016.     @sell_window.active = false
  1017.     @sell_window.visible = false
  1018.     @sell_window.help_window = @help_window
  1019.     # 生成数量输入窗口
  1020.     @number_window = Window_ShopNumber.new
  1021.     @number_window.active = false
  1022.     @number_window.visible = false
  1023.     # 生成状态窗口
  1024.     @status_window = Window_ShopStatus.new
  1025.     @status_window.visible = false
  1026.     # 执行过渡
  1027.     Graphics.transition
  1028.     # 主循环
  1029.     loop do
  1030.       # 刷新游戏画面
  1031.       Graphics.update
  1032.       # 刷新输入信息
  1033.       Input.update
  1034.       # 刷新画面
  1035.       update
  1036.       # 如果画面切换的话就中断循环
  1037.       if $scene != self
  1038.         break
  1039.       end
  1040.     end
  1041.     # 准备过渡
  1042.     Graphics.freeze
  1043.     # 释放窗口
  1044.     @help_window.dispose
  1045.     @command_window.dispose
  1046.     @gold_window.dispose
  1047.     @dummy_window.dispose
  1048.     @buy_window.dispose
  1049.     @sell_window.dispose
  1050.     @number_window.dispose
  1051.     @status_window.dispose
  1052.   end
  1053.   #--------------------------------------------------------------------------
  1054.   # ● 刷新画面
  1055.   #--------------------------------------------------------------------------
  1056.   def update
  1057.     # 刷新窗口
  1058.     @help_window.update
  1059.     @command_window.update
  1060.     @gold_window.update
  1061.     @dummy_window.update
  1062.     @buy_window.update
  1063.     @sell_window.update
  1064.     @number_window.update
  1065.     @status_window.update
  1066.     # 指令窗口激活的情况下: 调用 update_command
  1067.     if @command_window.active
  1068.       update_command
  1069.       return
  1070.     end
  1071.     # 购买窗口激活的情况下: 调用 update_buy
  1072.     if @buy_window.active
  1073.       update_buy
  1074.       return
  1075.     end
  1076.     # 卖出窗口激活的情况下: 调用 update_sell
  1077.     if @sell_window.active
  1078.       update_sell
  1079.       return
  1080.     end
  1081.     # 个数输入窗口激活的情况下: 调用 update_number
  1082.     if @number_window.active
  1083.       update_number
  1084.       return
  1085.     end
  1086.   end
  1087.   #--------------------------------------------------------------------------
  1088.   # ● 刷新画面 (指令窗口激活的情况下)
  1089.   #--------------------------------------------------------------------------
  1090.   def update_command
  1091.     # 按下 B 键的情况下
  1092.     if Input.trigger?(Input::B)
  1093.       # 演奏取消 SE
  1094.       $game_system.se_play($data_system.cancel_se)
  1095.       # 切换到地图画面
  1096.       $scene = Scene_Map.new
  1097.       return
  1098.     end
  1099.     # 按下 C 键的情况下
  1100.     if Input.trigger?(Input::C)
  1101.       # 命令窗口光标位置分支
  1102.       case @command_window.index
  1103.       when 0  # 购买
  1104.         # 演奏确定 SE
  1105.         $game_system.se_play($data_system.decision_se)
  1106.         # 窗口状态转向购买模式
  1107.         @command_window.active = false
  1108.         @dummy_window.visible = false
  1109.         @buy_window.active = true
  1110.         @buy_window.visible = true
  1111.         @buy_window.refresh
  1112.         @status_window.visible = true
  1113.       when 1  # 卖出
  1114.         # 演奏确定 SE
  1115.         $game_system.se_play($data_system.decision_se)
  1116.         # 窗口状态转向卖出模式
  1117.         @command_window.active = false
  1118.         @dummy_window.visible = false
  1119.         @sell_window.active = true
  1120.         @sell_window.visible = true
  1121.         @sell_window.refresh
  1122.       when 2  # 取消
  1123.         # 演奏确定 SE
  1124.         $game_system.se_play($data_system.decision_se)
  1125.         # 切换到地图画面
  1126.         $scene = Scene_Map.new
  1127.       end
  1128.       return
  1129.     end
  1130.   end
  1131.   #--------------------------------------------------------------------------
  1132.   # ● 刷新画面 (购买窗口激活的情况下)
  1133.   #--------------------------------------------------------------------------
  1134.   def update_buy
  1135.     # 设置状态窗口的物品
  1136.     @status_window.item = @buy_window.item
  1137.     # 按下 B 键的情况下
  1138.     if Input.trigger?(Input::B)
  1139.       # 演奏取消 SE
  1140.       $game_system.se_play($data_system.cancel_se)
  1141.       # 窗口状态转向初期模式
  1142.       @command_window.active = true
  1143.       @dummy_window.visible = true
  1144.       @buy_window.active = false
  1145.       @buy_window.visible = false
  1146.       @status_window.visible = false
  1147.       @status_window.item = nil
  1148.       # 删除帮助文本
  1149.       @help_window.set_text("")
  1150.       return
  1151.     end
  1152.     # 按下 C 键的情况下
  1153.     if Input.trigger?(Input::C)
  1154.       # 获取物品
  1155.       @item = @buy_window.item
  1156.       # 物品无效的情况下、或者价格在所持金以上的情况下
  1157.       if @item == nil or @item.price > $game_party.gold
  1158.         # 演奏冻结 SE
  1159.         $game_system.se_play($data_system.buzzer_se)
  1160.         return
  1161.       end
  1162.       # 获取物品所持数
  1163.       case @item
  1164.       when RPG::Item
  1165.         number = $game_party.item_number(@item.id)
  1166.       when RPG::Weapon
  1167.         number = $game_party.weapon_number(@item.id)
  1168.       when RPG::Armor
  1169.         number = $game_party.armor_number(@item.id)
  1170.       end
  1171.       # 如果已经拥有了 99 个情况下
  1172.       if number == 99
  1173.         # 演奏冻结 SE
  1174.         $game_system.se_play($data_system.buzzer_se)
  1175.         return
  1176.       end
  1177.       # 演奏确定 SE
  1178.       $game_system.se_play($data_system.decision_se)
  1179.       # 计算可以最多购买的数量
  1180.       max = @item.price == 0 ? 99 : $game_party.gold / @item.price
  1181.       max = [max, 99 - number].min
  1182.       # 窗口状态转向数值输入模式
  1183.       @buy_window.active = false
  1184.       @buy_window.visible = false
  1185.       @number_window.set(@item, max, @item.price)
  1186.       @number_window.active = true
  1187.       @number_window.visible = true
  1188.     end
  1189.   end
  1190.   #--------------------------------------------------------------------------
  1191.   # ● 画面更新 (卖出窗口激活的情况下)
  1192.   #--------------------------------------------------------------------------
  1193.   def update_sell
  1194.     # 按下 B 键的情况下
  1195.     if Input.trigger?(Input::B)
  1196.       # 演奏取消 SE
  1197.       $game_system.se_play($data_system.cancel_se)
  1198.       # 窗口状态转向初期模式
  1199.       @command_window.active = true
  1200.       @dummy_window.visible = true
  1201.       @sell_window.active = false
  1202.       @sell_window.visible = false
  1203.       @status_window.item = nil
  1204.       # 删除帮助文本
  1205.       @help_window.set_text("")
  1206.       return
  1207.     end
  1208.     # 按下 C 键的情况下
  1209.     if Input.trigger?(Input::C)
  1210.       # 获取物品
  1211.       @item = @sell_window.item
  1212.       # 设置状态窗口的物品
  1213.       @status_window.item = @item
  1214.       # 物品无效的情况下、或者价格为 0 (不能卖出) 的情况下
  1215.       if @item == nil or @item.price == 0
  1216.         # 演奏冻结 SE
  1217.         $game_system.se_play($data_system.buzzer_se)
  1218.         return
  1219.       end
  1220.       # 演奏确定 SE
  1221.       $game_system.se_play($data_system.decision_se)
  1222.       # 获取物品的所持数
  1223.       case @item
  1224.       when RPG::Item
  1225.         number = $game_party.item_number(@item.id)
  1226.       when RPG::Weapon
  1227.         number = $game_party.weapon_number(@item.id)
  1228.       when RPG::Armor
  1229.         number = $game_party.armor_number(@item.id)
  1230.       end
  1231.       # 最大卖出个数 = 物品的所持数
  1232.       max = number
  1233.       # 窗口状态转向个数输入模式
  1234.       @sell_window.active = false
  1235.       @sell_window.visible = false
  1236.       @number_window.set(@item, max, @item.price / 2)
  1237.       @number_window.active = true
  1238.       @number_window.visible = true
  1239.       @status_window.visible = true
  1240.     end
  1241.   end
  1242.   #--------------------------------------------------------------------------
  1243.   # ● 刷新画面 (个数输入窗口激活的情况下)
  1244.   #--------------------------------------------------------------------------
  1245.   def update_number
  1246.     # 按下 B 键的情况下
  1247.     if Input.trigger?(Input::B)
  1248.       # 演奏取消 SE
  1249.       $game_system.se_play($data_system.cancel_se)
  1250.       # 设置个数输入窗口为不活动·非可视状态
  1251.       @number_window.active = false
  1252.       @number_window.visible = false
  1253.       # 命令窗口光标位置分支
  1254.       case @command_window.index
  1255.       when 0  # 购买
  1256.         # 窗口状态转向购买模式
  1257.         @buy_window.active = true
  1258.         @buy_window.visible = true
  1259.       when 1  # 卖出
  1260.         # 窗口状态转向卖出模式
  1261.         @sell_window.active = true
  1262.         @sell_window.visible = true
  1263.         @status_window.visible = false
  1264.       end
  1265.       return
  1266.     end
  1267.     # 按下 C 键的情况下
  1268.     if Input.trigger?(Input::C)
  1269.       # 演奏商店 SE
  1270.       $game_system.se_play($data_system.shop_se)
  1271.       # 设置个数输入窗口为不活动·非可视状态
  1272.       @number_window.active = false
  1273.       @number_window.visible = false
  1274.       # 命令窗口光标位置分支
  1275.       case @command_window.index
  1276.       when 0  # 购买
  1277.         # 购买处理
  1278.         $game_party.lose_gold(@number_window.number * @item.price)
  1279.         case @item
  1280.         when RPG::Item
  1281.           $game_party.gain_item(@item.id, @number_window.number)
  1282.         when RPG::Weapon
  1283.           $game_party.gain_weapon(@item.id, @number_window.number)
  1284.         when RPG::Armor
  1285.           $game_party.gain_armor(@item.id, @number_window.number)
  1286.         end
  1287.         # 刷新各窗口
  1288.         @gold_window.refresh
  1289.         @buy_window.refresh
  1290.         @status_window.refresh
  1291.         # 窗口状态转向购买模式
  1292.         @buy_window.active = true
  1293.         @buy_window.visible = true
  1294.       when 1  # 卖出
  1295.         # 卖出处理
  1296.         $game_party.gain_gold(@number_window.number * (@item.price / 2))
  1297.         case @item
  1298.         when RPG::Item
  1299.           $game_party.lose_item(@item.id, @number_window.number)
  1300.         when RPG::Weapon
  1301.           $game_party.lose_weapon(@item.id, @number_window.number)
  1302.         when RPG::Armor
  1303.           $game_party.lose_armor(@item.id, @number_window.number)
  1304.         end
  1305.         # 刷新各窗口
  1306.         @gold_window.refresh
  1307.         @sell_window.refresh
  1308.         @status_window.refresh
  1309.         # 窗口状态转向卖出模式
  1310.         @sell_window.active = true
  1311.         @sell_window.visible = true
  1312.         @status_window.visible = false
  1313.       end
  1314.       return
  1315.     end
  1316.   end
  1317. end
  1318. #==============================================================================
  1319. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  1320. #==============================================================================

  1321. class Window_MenuStatus < Window_Selectable
  1322.   def refresh
  1323.     self.contents.clear
  1324.    @item_max = $game_party.actors.size
  1325.     for i in 0...$game_party.actors.size
  1326.       x = 64  + i%2 * 224
  1327.       y = i/2 *  96 + 16
  1328.       actor = $game_party.actors[i]
  1329.       if (i % 2) == 0
  1330.         draw_actor_graphic(actor, x - 40, y + 65)
  1331.          self.contents.font.size = 18
  1332.         draw_actor_name(actor, x, y)
  1333.         #draw_actor_class(actor, x + 144+50, y)
  1334.         draw_actor_level(actor, x+94, y )
  1335.         draw_actor_state(actor, x , y + 52)
  1336.         #draw_actor_exp(actor, x+50, y + 64)
  1337.         draw_actor_hp(actor, x , y + 16)
  1338.         draw_actor_sp(actor, x , y + 32)
  1339.       else
  1340.         draw_actor_graphic(actor, x - 40, y + 65)
  1341.         draw_actor_name(actor, x, y)
  1342.         #draw_actor_class(actor, x + 144+50, y)
  1343.         draw_actor_level(actor, x+94, y )
  1344.         draw_actor_state(actor, x , y + 52)
  1345.         #draw_actor_exp(actor, x+50, y + 64)
  1346.         draw_actor_hp(actor, x , y + 16)
  1347.         draw_actor_sp(actor, x , y + 32)
  1348.       end
  1349.     end
  1350.   end
  1351. end
  1352.                                           

  1353. #==============================================================================
  1354. # ■ Window_Base
  1355. #==============================================================================
  1356. class Window_Base < Window
  1357.   alias xrxs_mp7_initialize initialize
  1358.   def initialize(x, y, width, height)
  1359.     xrxs_mp7_initialize(x, y, width, height)
  1360.     if $scene.is_a?(Scene_Menu) or
  1361.        $scene.is_a?(Scene_Item) or
  1362.        $scene.is_a?(Scene_Skill) or
  1363.        $scene.is_a?(Scene_Equip) or
  1364.        $scene.is_a?(Scene_Status) or
  1365.        $scene.is_a?(Scene_Save) or
  1366.        $scene.is_a?(Scene_End) or $scene.is_a?(Scene_Shop)
  1367.       self.back_opacity = 200 #————这个数值可调,为透明程度
  1368.     end
  1369.   end
  1370. end
  1371. module XRXS_MP7_Module
  1372.   def create_spriteset
  1373.     @spriteset = Spriteset_Map.new
  1374.   end
  1375.   def dispose_spriteset
  1376.     @spriteset.dispose
  1377.   end
  1378. end
  1379. class Scene_Menu
  1380.   include XRXS_MP7_Module
  1381.   alias xrxs_mp7_main main
  1382.   def main
  1383.     create_spriteset
  1384.     xrxs_mp7_main
  1385.     dispose_spriteset
  1386.   end
  1387. end
  1388. class Scene_Item
  1389.   include XRXS_MP7_Module
  1390.   alias xrxs_mp7_main main
  1391.   def main
  1392.     create_spriteset
  1393.     xrxs_mp7_main
  1394.     dispose_spriteset
  1395.   end
  1396. end
  1397. class Scene_Skill
  1398.   include XRXS_MP7_Module
  1399.   alias xrxs_mp7_main main
  1400.   def main
  1401.     create_spriteset
  1402.     xrxs_mp7_main
  1403.     dispose_spriteset
  1404.   end
  1405. end
  1406. class Scene_Equip
  1407.   include XRXS_MP7_Module
  1408.   alias xrxs_mp7_main main
  1409.   def main
  1410.     create_spriteset
  1411.     xrxs_mp7_main
  1412.     dispose_spriteset
  1413.   end
  1414. end
  1415. class Scene_Status
  1416.   include XRXS_MP7_Module
  1417.   alias xrxs_mp7_main main
  1418.   def main
  1419.     create_spriteset
  1420.     xrxs_mp7_main
  1421.     dispose_spriteset
  1422.   end
  1423. end
  1424. class Scene_Save
  1425.   include XRXS_MP7_Module
  1426.   alias xrxs_mp7_main main
  1427.   def main
  1428.     create_spriteset
  1429.     xrxs_mp7_main
  1430.     dispose_spriteset
  1431.   end
  1432. end
  1433. class Scene_End
  1434.   include XRXS_MP7_Module
  1435.   alias xrxs_mp7_main main
  1436.   def main
  1437.     create_spriteset
  1438.     xrxs_mp7_main
  1439.     dispose_spriteset
  1440.   end
  1441. end
  1442. class Scene_Shop
  1443.   include XRXS_MP7_Module
  1444.   alias xrxs_mp7_main main
  1445.   def main
  1446.     create_spriteset
  1447.     xrxs_mp7_main
  1448.     dispose_spriteset
  1449.   end
  1450. end
  1451. #==============================================================================
  1452. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  1453. #==============================================================================
  1454. # ——————————————————————————————

  1455. # HP/SP/EXPゲージ表示スクリプト Ver 1.00
  1456. # 配布元?サポートURL
  1457. # http://members.jcom.home.ne.jp/cogwheel/

  1458. #===============================================================
  1459. # ■ Game_Actor
  1460. #--------------------------------------------------------
  1461. #  アクターを扱うクラスです。このクラスは Game_Actors クラス ($game_actors)
  1462. # の内部で使用され、Game_Party クラス ($game_party) からも参照されます。
  1463. #==============================================================

  1464. class Game_Actor < Game_Battler
  1465.   def now_exp
  1466.     return @exp - @exp_list[@level]
  1467.   end
  1468.   def next_exp
  1469.     return @exp_list[@level+1] > 0 ? @exp_list[@level+1] - @exp_list[@level] : 0
  1470.   end
  1471. end

  1472. #==========================================================
  1473. # ■ Window_Base
  1474. #------------------------------------------------------------
  1475. #  ゲーム中のすべてのウィンドウのスーパークラスです。
  1476. #============================================================

  1477. class Window_Base < Window
  1478.   #--------------------------------------------------------
  1479.   # ● HP ゲージの描画
  1480.   #--------------------------------------------------
  1481.   # オリジナルのHP描画を draw_actor_hp_original と名前変更
  1482.   alias :draw_actor_hp_original :draw_actor_hp
  1483.   def draw_actor_hp(actor, x, y, width = 144)
  1484.     # 変数rateに 現在のHP/MHPを代入
  1485.     if actor.maxhp != 0
  1486.       rate = actor.hp.to_f / actor.maxhp
  1487.     else
  1488.       rate = 0
  1489.     end
  1490.     # plus_x:X座標の位置補正 rate_x:X座標の位置補正(%) plus_y:Y座標の位置補正
  1491.     # plus_width:幅の補正 rate_width:幅の補正(%) height:縦幅
  1492.     # align1:描画タイプ1 0:左詰め 1:中央揃え 2:右詰め
  1493.     # align2:描画タイプ2 0:上詰め 1:中央揃え 2:下詰め
  1494.     # align3:ゲージタイプ 0:左詰め 1:右詰め
  1495.     plus_x = 0
  1496.     rate_x = 0
  1497.     plus_y = 25
  1498.     plus_width = 0
  1499.     rate_width = 100
  1500.     height = 10
  1501.     align1 = 1
  1502.     align2 = 2
  1503.     align3 = 0
  1504.     # グラデーション設定 grade1:空ゲージ grade2:実ゲージ
  1505.     # (0:横にグラデーション 1:縦にグラデーション 2:斜めにグラデーション(激重))
  1506.     grade1 = 1
  1507.     grade2 = 0
  1508.     # 色設定。color1:外枠,color2:中枠
  1509.     # color3:空ゲージダークカラー,color4:空ゲージライトカラー
  1510.     # color5:実ゲージダークカラー,color6:実ゲージライトカラー
  1511.     color1 = Color.new(0, 0, 0, 192)
  1512.     color2 = Color.new(255, 255, 192, 192)
  1513.     color3 = Color.new(0, 0, 0, 192)
  1514.     color4 = Color.new(64, 0, 0, 192)
  1515.     color5 = Color.new(80 - 24 * rate, 80 * rate, 14 * rate, 192)
  1516.     color6 = Color.new(240 - 72 * rate, 240 * rate, 62 * rate, 192)
  1517.     # 変数spに描画するゲージの幅を代入
  1518.     if actor.maxhp != 0
  1519.       hp = (width + plus_width) * actor.hp * rate_width / 100 / actor.maxhp
  1520.     else
  1521.       hp = 0
  1522.     end
  1523.     # ゲージの描画
  1524.     gauge_rect(x + plus_x + width * rate_x / 100, y + plus_y,
  1525.                 width, plus_width + width * rate_width / 100,
  1526.                 height, hp, align1, align2, align3,
  1527.                 color1, color2, color3, color4, color5, color6, grade1, grade2)
  1528.     # オリジナルのHP描画処理を呼び出し
  1529.     draw_actor_hp_original(actor, x, y, width)
  1530.   end
  1531.   #--------------------------------------------------------------
  1532.   # ● SP ゲージの描画
  1533.   #------------------------------------------------------------
  1534.   # オリジナルのSP描画を draw_actor_sp_original と名前変更
  1535.   alias :draw_actor_sp_original :draw_actor_sp
  1536.   def draw_actor_sp(actor, x, y, width = 144)
  1537.     # 変数rateに 現在のSP/MSPを代入
  1538.     if actor.maxsp != 0
  1539.       rate = actor.sp.to_f / actor.maxsp
  1540.     else
  1541.       rate = 1
  1542.     end
  1543.     # plus_x:X座標の位置補正 rate_x:X座標の位置補正(%) plus_y:Y座標の位置補正
  1544.     # plus_width:幅の補正 rate_width:幅の補正(%) height:縦幅
  1545.     # align1:描画タイプ1 0:左詰め 1:中央揃え 2:右詰め
  1546.     # align2:描画タイプ2 0:上詰め 1:中央揃え 2:下詰め
  1547.     # align3:ゲージタイプ 0:左詰め 1:右詰め
  1548.     plus_x = 0
  1549.     rate_x = 0
  1550.     plus_y = 25
  1551.     plus_width = 0
  1552.     rate_width = 100
  1553.     height = 10
  1554.     align1 = 1
  1555.     align2 = 2
  1556.     align3 = 0
  1557.     # グラデーション設定 grade1:空ゲージ grade2:実ゲージ
  1558.     # (0:横にグラデーション 1:縦にグラデーション 2:斜めにグラデーション(激重))
  1559.     grade1 = 1
  1560.     grade2 = 0
  1561.     # 色設定。color1:外枠,color2:中枠
  1562.     # color3:空ゲージダークカラー,color4:空ゲージライトカラー
  1563.     # color5:実ゲージダークカラー,color6:実ゲージライトカラー
  1564.     color1 = Color.new(0, 0, 0, 192)
  1565.     color2 = Color.new(255, 255, 192, 192)
  1566.     color3 = Color.new(0, 0, 0, 192)
  1567.     color4 = Color.new(0, 64, 0, 192)
  1568.     color5 = Color.new(14 * rate, 80 - 24 * rate, 80 * rate, 192)
  1569.     color6 = Color.new(62 * rate, 240 - 72 * rate, 240 * rate, 192)
  1570.     # 変数spに描画するゲージの幅を代入
  1571.     if actor.maxsp != 0
  1572.       sp = (width + plus_width) * actor.sp * rate_width / 100 / actor.maxsp
  1573.     else
  1574.       sp = (width + plus_width) * rate_width / 100
  1575.     end
  1576.     # ゲージの描画
  1577.     gauge_rect(x + plus_x + width * rate_x / 100, y + plus_y,
  1578.                 width, plus_width + width * rate_width / 100,
  1579.                 height, sp, align1, align2, align3,
  1580.                 color1, color2, color3, color4, color5, color6, grade1, grade2)
  1581.     # オリジナルのSP描画処理を呼び出し
  1582.     draw_actor_sp_original(actor, x, y, width)
  1583.   end
  1584.   #--------------------------------------------------------
  1585.   # ● EXP ゲージの描画
  1586.   #----------------------------------------------------------
  1587.   # オリジナルのEXP描画を draw_actor_sp_original と名前変更
  1588.   alias :draw_actor_exp_original :draw_actor_exp
  1589.   def draw_actor_exp(actor, x, y, width = 180)
  1590.     # 変数rateに 現在のexp/nextexpを代入
  1591.     if actor.next_exp != 0
  1592.       rate = actor.now_exp.to_f / actor.next_exp
  1593.     else
  1594.       rate = 1
  1595.     end
  1596.     # plus_x:X座標の位置補正 rate_x:X座標の位置補正(%) plus_y:Y座標の位置補正
  1597.     # plus_width:幅の補正 rate_width:幅の補正(%) height:縦幅
  1598.     # align1:描画タイプ1 0:左詰め 1:中央揃え 2:右詰め
  1599.     # align2:描画タイプ2 0:上詰め 1:中央揃え 2:下詰め
  1600.     # align3:ゲージタイプ 0:左詰め 1:右詰め
  1601.     plus_x = 0
  1602.     rate_x = 0
  1603.     plus_y = 25
  1604.     plus_width = 0
  1605.     rate_width = 100
  1606.     height = 10
  1607.     align1 = 1
  1608.     align2 = 2
  1609.     align3 = 0
  1610.     # グラデーション設定 grade1:空ゲージ grade2:実ゲージ
  1611.     # (0:横にグラデーション 1:縦にグラデーション 2:斜めにグラデーション(激重))
  1612.     grade1 = 1
  1613.     grade2 = 0
  1614.     # 色設定。color1:外枠,color2:中枠
  1615.     # color3:空ゲージダークカラー,color4:空ゲージライトカラー
  1616.     # color5:実ゲージダークカラー,color6:実ゲージライトカラー
  1617.     color1 = Color.new(0, 0, 0, 192)
  1618.     color2 = Color.new(255, 255, 192, 192)
  1619.     color3 = Color.new(0, 0, 0, 192)
  1620.     color4 = Color.new(64, 0, 0, 192)
  1621.     color5 = Color.new(80 * rate, 80 - 80 * rate ** 2, 80 - 80 * rate, 192)
  1622.     color6 = Color.new(240 * rate, 240 - 240 * rate ** 2, 240 - 240 * rate, 192)
  1623.     # 変数expに描画するゲージの幅を代入
  1624.     if actor.next_exp != 0
  1625.       exp = (width + plus_width) * actor.now_exp * rate_width /
  1626.                                                           100 / actor.next_exp
  1627.     else
  1628.       exp = (width + plus_width) * rate_width / 100
  1629.     end
  1630.     # ゲージの描画
  1631.     gauge_rect(x + plus_x + width * rate_x / 100, y + plus_y,
  1632.                 width, plus_width + width * rate_width / 100,
  1633.                 height, exp, align1, align2, align3,
  1634.                 color1, color2, color3, color4, color5, color6, grade1, grade2)
  1635.     # オリジナルのEXP描画処理を呼び出し
  1636.     draw_actor_exp_original(actor, x, y)
  1637.   end
  1638.   #---------------------------------------------------------
  1639.   # ● ゲージの描画
  1640.   #-----------------------------------------------------
  1641.   def gauge_rect(x, y, rect_width, width, height, gauge, align1, align2, align3,
  1642.                 color1, color2, color3, color4, color5, color6, grade1, grade2)
  1643.     case align1
  1644.     when 1
  1645.       x += (rect_width - width) / 2
  1646.     when 2
  1647.       x += rect_width - width
  1648.     end
  1649.     case align2
  1650.     when 1
  1651.       y -= height / 2
  1652.     when 2
  1653.       y -= height
  1654.     end
  1655.     # 枠描画
  1656.     self.contents.fill_rect(x, y, width, height, color1)
  1657.     self.contents.fill_rect(x + 1, y + 1, width - 2, height - 2, color2)
  1658.     if align3 == 0
  1659.       if grade1 == 2
  1660.         grade1 = 3
  1661.       end
  1662.       if grade2 == 2
  1663.         grade2 = 3
  1664.       end
  1665.     end
  1666.     if (align3 == 1 and grade1 == 0) or grade1 > 0
  1667.       color = color3
  1668.       color3 = color4
  1669.       color4 = color
  1670.     end
  1671.     if (align3 == 1 and grade2 == 0) or grade2 > 0
  1672.       color = color5
  1673.       color5 = color6
  1674.       color6 = color
  1675.     end
  1676.     # 空ゲージの描画
  1677.     self.contents.gradation_rect(x + 2, y + 2, width - 4, height - 4,
  1678.                                   color3, color4, grade1)
  1679.     if align3 == 1
  1680.       x += width - gauge
  1681.     end
  1682.     # 実ゲージの描画
  1683.     self.contents.gradation_rect(x + 2, y + 2, gauge - 4, height - 4,
  1684.                                   color5, color6, grade2)
  1685.   end
  1686. end

  1687. #--------------------------------------------------------------
  1688. #  Bitmapクラスに新たな機能を追加します。
  1689. #===================================================================

  1690. class Bitmap
  1691.   #------------------------------------------------------------
  1692.   # ● 矩形をグラデーション表示
  1693.   #     color1 : スタートカラー
  1694.   #     color2 : エンドカラー
  1695.   #     align  :  0:横にグラデーション
  1696.   #               1:縦にグラデーション
  1697.   #               2:斜めにグラデーション(激重につき注意)
  1698.   #--------------------------------------------------------
  1699.   def gradation_rect(x, y, width, height, color1, color2, align = 0)
  1700.     if align == 0
  1701.       for i in x...x + width
  1702.         red   = color1.red + (color2.red - color1.red) * (i - x) / (width - 1)
  1703.         green = color1.green +
  1704.                 (color2.green - color1.green) * (i - x) / (width - 1)
  1705.         blue  = color1.blue +
  1706.                 (color2.blue - color1.blue) * (i - x) / (width - 1)
  1707.         alpha = color1.alpha +
  1708.                 (color2.alpha - color1.alpha) * (i - x) / (width - 1)
  1709.         color = Color.new(red, green, blue, alpha)
  1710.         fill_rect(i, y, 1, height, color)
  1711.       end
  1712.     elsif align == 1
  1713.       for i in y...y + height
  1714.         red   = color1.red +
  1715.                 (color2.red - color1.red) * (i - y) / (height - 1)
  1716.         green = color1.green +
  1717.                 (color2.green - color1.green) * (i - y) / (height - 1)
  1718.         blue  = color1.blue +
  1719.                 (color2.blue - color1.blue) * (i - y) / (height - 1)
  1720.         alpha = color1.alpha +
  1721.                 (color2.alpha - color1.alpha) * (i - y) / (height - 1)
  1722.         color = Color.new(red, green, blue, alpha)
  1723.         fill_rect(x, i, width, 1, color)
  1724.       end
  1725.     elsif align == 2
  1726.       for i in x...x + width
  1727.         for j in y...y + height
  1728.           red   = color1.red + (color2.red - color1.red) *
  1729.                   ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
  1730.           green = color1.green + (color2.green - color1.green) *
  1731.                   ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
  1732.           blue  = color1.blue + (color2.blue - color1.blue) *
  1733.                   ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
  1734.           alpha = color1.alpha + (color2.alpha - color1.alpha) *
  1735.                   ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
  1736.           color = Color.new(red, green, blue, alpha)
  1737.           set_pixel(i, j, color)
  1738.         end
  1739.       end
  1740.     elsif align == 3
  1741.       for i in x...x + width
  1742.         for j in y...y + height
  1743.           red   = color1.red + (color2.red - color1.red) *
  1744.                 ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
  1745.           green = color1.green + (color2.green - color1.green) *
  1746.                 ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
  1747.           blue  = color1.blue + (color2.blue - color1.blue) *
  1748.                 ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
  1749.           alpha = color1.alpha + (color2.alpha - color1.alpha) *
  1750.                 ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
  1751.           color = Color.new(red, green, blue, alpha)
  1752.           set_pixel(i, j, color)
  1753.         end
  1754.       end
  1755.     end
  1756.   end
  1757. end
  1758. #==============================================================================
  1759. # ■ Spriteset_Battle
  1760. #------------------------------------------------------------------------------
  1761. #  处理战斗画面的活动块的类。本类在 Scene_Battle 类
  1762. # 的内部使用。
  1763. #==============================================================================

  1764. class Spriteset_Battle
  1765.   #--------------------------------------------------------------------------
  1766.   # ● 定义实例变量
  1767.   #--------------------------------------------------------------------------
  1768.   attr_reader   :viewport1                # 敌人方的显示端口
  1769.   attr_reader   :viewport2                # 角色方的显示端口
  1770.   #--------------------------------------------------------------------------
  1771.   # ● 初始化变量
  1772.   #--------------------------------------------------------------------------
  1773.   def initialize
  1774.     # 生成显示端口
  1775.     @viewport1 = Viewport.new(0, 0, 640, 480)
  1776.     @viewport2 = Viewport.new(0, 0, 640, 480)
  1777.     @viewport3 = Viewport.new(0, 0, 640, 480)
  1778.     @viewport4 = Viewport.new(0, 0, 640, 480)
  1779.     @viewport2.z = 101
  1780.     @viewport3.z = 200
  1781.     @viewport4.z = 5000
  1782.     # 生成战斗背景活动块
  1783.     @battleback_sprite = Sprite.new(@viewport1)
  1784.     # 生成敌人活动块
  1785.     @enemy_sprites = []
  1786.     for enemy in $game_troop.enemies.reverse
  1787.       @enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy))
  1788.     end
  1789.     # 生成敌人活动块
  1790.     @actor_sprites = []
  1791.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  1792.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  1793.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  1794.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  1795.     # 生成天候
  1796.     @weather = RPG::Weather.new(@viewport1)
  1797.     # 生成图片活动块
  1798.     @picture_sprites = []
  1799.     for i in 51..100
  1800.       @picture_sprites.push(Sprite_Picture.new(@viewport3,
  1801.         $game_screen.pictures[i]))
  1802.     end
  1803.     # 生成计时器块
  1804.     @timer_sprite = Sprite_Timer.new
  1805.     # 刷新画面
  1806.     update
  1807.   end
  1808.   #--------------------------------------------------------------------------
  1809.   # ● 释放
  1810.   #--------------------------------------------------------------------------
  1811.   def dispose
  1812.     # 如果战斗背景位图存在的情况下就释放
  1813.     if @battleback_sprite.bitmap != nil
  1814.       @battleback_sprite.bitmap.dispose
  1815.     end
  1816.     # 释放战斗背景活动块
  1817.     @battleback_sprite.dispose
  1818.     # 释放敌人活动块、角色活动块
  1819.     for sprite in @enemy_sprites + @actor_sprites
  1820.       sprite.dispose
  1821.     end
  1822.     # 释放天候
  1823.     @weather.dispose
  1824.     # 释放图片活动块
  1825.     for sprite in @picture_sprites
  1826.       sprite.dispose
  1827.     end
  1828.     # 释放计时器活动块
  1829.     @timer_sprite.dispose
  1830.     # 释放显示端口
  1831.     @viewport1.dispose
  1832.     @viewport2.dispose
  1833.     @viewport3.dispose
  1834.     @viewport4.dispose
  1835.   end
  1836.   #--------------------------------------------------------------------------
  1837.   # ● 显示效果中判定
  1838.   #--------------------------------------------------------------------------
  1839.   def effect?
  1840.     # 如果是在显示效果中的话就返回 true
  1841.     for sprite in @enemy_sprites + @actor_sprites
  1842.       return true if sprite.effect?
  1843.     end
  1844.     return false
  1845.   end
  1846.   #--------------------------------------------------------------------------
  1847.   # ● 刷新画面
  1848.   #--------------------------------------------------------------------------
  1849.   def update
  1850.     # 刷新角色的活动块 (对应角色的替换)
  1851.     @actor_sprites[0].battler = $game_party.actors[0]
  1852.     @actor_sprites[1].battler = $game_party.actors[1]
  1853.     @actor_sprites[2].battler = $game_party.actors[2]
  1854.     @actor_sprites[3].battler = $game_party.actors[3]
  1855.     # 战斗背景的文件名与现在情况有差异的情况下
  1856.     if @battleback_name != $game_temp.battleback_name
  1857.       @battleback_name = $game_temp.battleback_name
  1858.       if @battleback_sprite.bitmap != nil
  1859.         @battleback_sprite.bitmap.dispose
  1860.       end
  1861.       @battleback_sprite.bitmap = RPG::Cache.battleback(@battleback_name)
  1862.       @battleback_sprite.src_rect.set(0, 0, 640, 480)
  1863.     end
  1864.     # 刷新战斗者的活动块
  1865.     for sprite in @enemy_sprites + @actor_sprites
  1866.       sprite.update
  1867.     end
  1868.     # 刷新天气图形
  1869.     @weather.type = $game_screen.weather_type
  1870.     @weather.max = $game_screen.weather_max
  1871.     @weather.update
  1872.     # 刷新图片活动块
  1873.     for sprite in @picture_sprites
  1874.       sprite.update
  1875.     end
  1876.     # 刷新计时器活动块
  1877.     @timer_sprite.update
  1878.     # 设置画面的色调与震动位置
  1879.     @viewport1.tone = $game_screen.tone
  1880.     @viewport1.ox = $game_screen.shake
  1881.     # 设置画面的闪烁色
  1882.     @viewport4.color = $game_screen.flash_color
  1883.     # 刷新显示端口
  1884.     @viewport1.update
  1885.     @viewport2.update
  1886.     @viewport4.update
  1887.   end
  1888. end
  1889. #==============================================================================
  1890. # ■ Window_BattleStatus
  1891. #------------------------------------------------------------------------------
  1892. #  显示战斗画面同伴状态的窗口。
  1893. #==============================================================================

  1894. class Window_BattleStatus < Window_Base
  1895.   #--------------------------------------------------------------------------
  1896.   # ● 初始化对像
  1897.   #--------------------------------------------------------------------------
  1898.   def initialize
  1899.     super(0, 320, 640, 180)
  1900.     self.contents = Bitmap.new(width - 32, height - 32)
  1901.     self.opacity = 0
  1902.     @level_up_flags = [false, false, false, false]
  1903.     refresh
  1904.   end
  1905.   #--------------------------------------------------------------------------
  1906.   # ● 释放
  1907.   #--------------------------------------------------------------------------
  1908.   def dispose
  1909.     super
  1910.   end
  1911.   #--------------------------------------------------------------------------
  1912.   # ● 设置升级标志
  1913.   #     actor_index : 角色索引
  1914.   #--------------------------------------------------------------------------
  1915.   def level_up(actor_index)
  1916.     @level_up_flags[actor_index] = true
  1917.   end
  1918.   #--------------------------------------------------------------------------
  1919.   # ● 刷新
  1920.   #--------------------------------------------------------------------------
  1921.   def refresh
  1922.     self.contents.clear
  1923.     @item_max = $game_party.actors.size
  1924.     for i in 0...$game_party.actors.size
  1925.       actor = $game_party.actors[i]
  1926.       actor_x = i * 160 + 4
  1927.       self.contents.font.size = 20
  1928.        draw_actor_graphic(actor, actor_x+10, 100)
  1929.       draw_actor_name(actor, actor_x+25, 50)
  1930.       self.contents.font.size = 22
  1931.       draw_actor_hp(actor, actor_x, 70, 120)
  1932.       draw_actor_sp(actor, actor_x, 86, 120)
  1933.       if @level_up_flags[i]
  1934.         self.contents.font.color = normal_color
  1935.         self.contents.draw_text(actor_x, 96, 120, 32, "  升级了!")
  1936.       else
  1937.         self.contents.font.size = 18
  1938.         draw_actor_state(actor, actor_x, 105)
  1939.       end
  1940.     end
  1941.   end
  1942.   #--------------------------------------------------------------------------
  1943.   # ● 刷新画面
  1944.   #--------------------------------------------------------------------------
  1945.   def update
  1946.     super
  1947.     # 主界面的不透明度下降
  1948.     if $game_temp.battle_main_phase
  1949.       self.contents_opacity -= 4 if self.contents_opacity > 191
  1950.     else
  1951.       self.contents_opacity += 4 if self.contents_opacity < 255
  1952.     end
  1953.   end
  1954. end
  1955. class Scene_Battle
  1956.   #--------------------------------------------------------------------------
  1957.   # ● 主处理
  1958.   #--------------------------------------------------------------------------
  1959.   def main
  1960.     # 初始化战斗用的各种暂时数据
  1961.     $game_temp.in_battle = true
  1962.     $game_temp.battle_turn = 0
  1963.     $game_temp.battle_event_flags.clear
  1964.     $game_temp.battle_abort = false
  1965.     $game_temp.battle_main_phase = false
  1966.     $game_temp.battleback_name = $game_map.battleback_name
  1967.     $game_temp.forcing_battler = nil
  1968.     # 初始化战斗用事件解释器
  1969.     $game_system.battle_interpreter.setup(nil, 0)
  1970.     # 准备队伍
  1971.     @troop_id = $game_temp.battle_troop_id
  1972.     $game_troop.setup(@troop_id)
  1973.     # 生成角色命令窗口
  1974.     s1 = $data_system.words.attack
  1975.     s2 = $data_system.words.skill
  1976.     s3 = $data_system.words.guard
  1977.     s4 = $data_system.words.item
  1978.     s5 = "逃跑"
  1979.     @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4, s5])
  1980.      # 不能逃跑的情况下
  1981.     if $game_temp.battle_can_escape == false
  1982.       @actor_command_window.disable_item(4)
  1983.     end
  1984.     @actor_command_window.y = 160
  1985.     @actor_command_window.back_opacity = 160
  1986.     @actor_command_window.active = false
  1987.     @actor_command_window.visible = false
  1988.     # 生成其它窗口
  1989.     @party_command_window = Window_PartyCommand.new
  1990.     @help_window = Window_Help.new
  1991.     @help_window.back_opacity = 160
  1992.     @help_window.visible = false
  1993.     @status_window = Window_BattleStatus.new
  1994.     @message_window = Window_Message.new
  1995.     # 生成活动块
  1996.     @spriteset = Spriteset_Battle.new
  1997.     # 初始化等待计数
  1998.     @wait_count = 0
  1999.     # 执行过渡
  2000.     if $data_system.battle_transition == ""
  2001.       Graphics.transition(20)
  2002.     else
  2003.       Graphics.transition(40, "Graphics/Transitions/" +
  2004.         $data_system.battle_transition)
  2005.     end
  2006.     # 开始自由战斗回合
  2007.     start_phase1
  2008.     # 主循环
  2009.     loop do
  2010.       # 刷新游戏画面
  2011.       Graphics.update
  2012.       # 刷新输入信息
  2013.       Input.update
  2014.       # 刷新画面
  2015.       update
  2016.       # 如果画面切换的话就中断循环
  2017.       if $scene != self
  2018.         break
  2019.       end
  2020.     end
  2021.     # 刷新地图
  2022.     $game_map.refresh
  2023.     # 准备过渡
  2024.     Graphics.freeze
  2025.     # 释放窗口
  2026.     @actor_command_window.dispose
  2027.     @party_command_window.dispose
  2028.     @help_window.dispose
  2029.     @status_window.dispose
  2030.     @message_window.dispose
  2031.     if @skill_window != nil
  2032.       @skill_window.dispose
  2033.     end
  2034.     if @item_window != nil
  2035.       @item_window.dispose
  2036.     end
  2037.     if @result_window != nil
  2038.       @result_window.dispose
  2039.     end
  2040.     # 释放活动块
  2041.     @spriteset.dispose
  2042.     # 标题画面切换中的情况
  2043.     if $scene.is_a?(Scene_Title)
  2044.       # 淡入淡出画面
  2045.       Graphics.transition
  2046.       Graphics.freeze
  2047.     end
  2048.     # 战斗测试或者游戏结束以外的画面切换中的情况
  2049.     if $BTEST and not $scene.is_a?(Scene_Gameover)
  2050.       $scene = nil
  2051.     end
  2052.   end
  2053. end

  2054. class Scene_Battle
  2055.   def start_phase2
  2056.     # 转移到回合 2
  2057.     @phase = 2
  2058.     # 设置角色为非选择状态
  2059.     @actor_index = -1
  2060.     @active_battler = nil
  2061.     # 有效化同伴指令窗口
  2062.     #@party_command_window.active = true
  2063.     #@party_command_window.visible = true
  2064.     # 无效化角色指令窗口
  2065.     @actor_command_window.active = false
  2066.     @actor_command_window.visible = false
  2067.     # 清除主回合标志
  2068.     $game_temp.battle_main_phase = false
  2069.     # 清除全体同伴的行动
  2070.     $game_party.clear_actions
  2071.     # 不能输入命令的情况下
  2072.     unless $game_party.inputable?
  2073.       # 开始主回合
  2074.       start_phase4
  2075.     end
  2076.   end
  2077.   #--------------------------------------------------------------------------
  2078.   # ● 刷新画面 (同伴命令回合)
  2079.   #--------------------------------------------------------------------------
  2080.   def update_phase2
  2081.     # 演奏确定 SE
  2082.       $game_system.se_play($data_system.decision_se)
  2083.       # 开始角色的命令回合
  2084.       start_phase3
  2085.     end
  2086.     # 按下 C 键的情况下
  2087.     if Input.trigger?(Input::C)
  2088.       # 同伴指令窗口光标位置分支
  2089.       case @party_command_window.index
  2090.       when 0  # 战斗
  2091.         # 演奏确定 SE
  2092.         $game_system.se_play($data_system.decision_se)
  2093.         # 开始角色的命令回合
  2094.         start_phase3
  2095.       when 1  # 逃跑
  2096.         # 不能逃跑的情况下
  2097.         if $game_temp.battle_can_escape == false
  2098.           # 演奏冻结 SE
  2099.           $game_system.se_play($data_system.buzzer_se)
  2100.           return
  2101.         end
  2102.         # 演奏确定 SE
  2103.         $game_system.se_play($data_system.decision_se)
  2104.         # 逃走处理
  2105.         update_phase2_escape
  2106.       end
  2107.       return
  2108.     end
  2109.   end
  2110.   
  2111.   class Scene_Battle


  2112.   #--------------------------------------------------------------------------
  2113.   # ● 刷新画面 (角色命令回合 : 基本命令)
  2114.   #--------------------------------------------------------------------------
  2115.   def update_phase3_basic_command
  2116.     # 按下 B 键的情况下
  2117.     if Input.trigger?(Input::B)
  2118.       # 演奏取消 SE
  2119.       $game_system.se_play($data_system.cancel_se)
  2120.       # 转向前一个角色的指令输入
  2121.       phase3_prior_actor
  2122.       return
  2123.     end
  2124.     # 按下 C 键的情况下
  2125.     if Input.trigger?(Input::C)
  2126.       # 角色指令窗口光标位置分之
  2127.       case @actor_command_window.index
  2128.       when 0  # 攻击
  2129.         # 演奏确定 SE
  2130.         $game_system.se_play($data_system.decision_se)
  2131.         # 设置行动
  2132.         @active_battler.current_action.kind = 0
  2133.         @active_battler.current_action.basic = 0
  2134.         # 开始选择敌人
  2135.         start_enemy_select
  2136.       when 1  # 特技
  2137.         # 演奏确定 SE
  2138.         $game_system.se_play($data_system.decision_se)
  2139.         # 设置行动
  2140.         @active_battler.current_action.kind = 1
  2141.         # 开始选择特技
  2142.         start_skill_select
  2143.       when 2  # 防御
  2144.         # 演奏确定 SE
  2145.         $game_system.se_play($data_system.decision_se)
  2146.         # 设置行动
  2147.         @active_battler.current_action.kind = 0
  2148.         @active_battler.current_action.basic = 1
  2149.         # 转向下一位角色的指令输入
  2150.         phase3_next_actor
  2151.       when 3  # 物品
  2152.         # 演奏确定 SE
  2153.         $game_system.se_play($data_system.decision_se)
  2154.         # 设置行动
  2155.         @active_battler.current_action.kind = 2
  2156.         # 开始选择物品
  2157.         start_item_select
  2158.         when 4
  2159.      escaping

  2160.       end
  2161.       return
  2162.     end
  2163.   end

  2164.   def escaping
  2165.        # 不能逃跑的情况下
  2166.         if $game_temp.battle_can_escape == false
  2167.           # 演奏冻结 SE
  2168.           $game_system.se_play($data_system.buzzer_se)
  2169.           return
  2170.         end
  2171.         # 演奏确定 SE
  2172.         $game_system.se_play($data_system.decision_se)
  2173.         # 逃走处理
  2174.         update_phase2_escape
  2175.       end
  2176. end

  2177. module Momo_IconCommand
  2178.   # 图标名称设定
  2179.    ATTACK_ICON_NAME = "攻击" # 攻撃
  2180.   SKILL_ICON_NAME = "技能"   # 特技
  2181.   GUARD_ICON_NAME = "防御"  # 防御
  2182.   ITEM_ICON_NAME = "物品"     # 物品
  2183.   ESCAPE_ICON_NAME = "逃跑"  # 逃跑
  2184.   # X坐标修正
  2185.   X_PLUS = 30#-120
  2186.   # Y坐标修正
  2187.   Y_PLUS = -15#10
  2188.   # 选择时图标的动作
  2189.   # 0:静止 1:放大
  2190.   SELECT_TYPE = 0
  2191.   # 闪烁时光芒的颜色
  2192.   FLASH_COLOR = Color.new(255, 255, 255, 128)
  2193.   # 闪烁时间
  2194.   FLASH_DURATION = 10
  2195.   # 闪烁间隔
  2196.   FLASH_INTERVAL = 20
  2197.   # 是否写出文字的名称
  2198.   COM_NAME_DROW = true
  2199.   # 文字名称是否移动
  2200.   COM_NAME_MOVE = true
  2201.   # 文字内容
  2202.   ATTACK_NAME = "攻击"    # 攻击
  2203.   SKILL_NAME = "特技"   # 特技
  2204.   GUARD_NAME = "防御"     # 防御
  2205.   ITEM_NAME = "物品"  # 物品
  2206.   ESCAPE_NAME = "逃跑"  # 逃跑
  2207.   # 文字颜色
  2208.   COM_NAME_COLOR = Color.new(255, 255, 255, 255)
  2209.   # 文字坐标修正
  2210.   COM_NAME_X_PLUS = 0
  2211.   COM_NAME_Y_PLUS = 0
  2212. end

  2213. class Window_CommandIcon < Window_Selectable
  2214.   attr_accessor :last_index
  2215.   #--------------------------------------------------------------------------
  2216.   # ● オブジェクト初期化
  2217.   #--------------------------------------------------------------------------
  2218.   def initialize(x, y, commands)
  2219.     super(x, y, 32, 32)
  2220.     # ウィンドウスキンに空文字列を指定してウィンドウを描画しないようにする
  2221.     self.windowskin = RPG::Cache.windowskin("")
  2222.     @item_max = commands.size
  2223.     @commands = commands
  2224.     @column_max = commands.size
  2225.     @index = 0
  2226.     @last_index = nil
  2227.     @name_sprite = nil
  2228.     @sprite = []
  2229.     refresh
  2230.   end
  2231.   def dispose
  2232.     super
  2233.     for sprite in @sprite
  2234.       sprite.dispose unless sprite.nil?
  2235.     end
  2236.     @name_sprite.dispose unless @name_sprite.nil?
  2237.   end
  2238.   #--------------------------------------------------------------------------
  2239.   # ● リフレッシュ
  2240.   #--------------------------------------------------------------------------
  2241.   def refresh
  2242.     @name_sprite.dispose unless @name_sprite.nil?
  2243.     for sprite in @sprite
  2244.       sprite.dispose unless sprite.nil?
  2245.     end
  2246.     @name_sprite = nil
  2247.     draw_com_name if Momo_IconCommand::COM_NAME_DROW
  2248.     @sprite = []
  2249.     for i in 0...@item_max
  2250.       draw_item(i)
  2251.     end
  2252.   end
  2253.   #--------------------------------------------------------------------------
  2254.   # ● 項目の描画
  2255.   #--------------------------------------------------------------------------
  2256.   def draw_item(index)
  2257.     @sprite[index] = Sprite_Icon.new(nil, @commands[index])
  2258.     @sprite[index].z = self.z + 100##########################
  2259.   end
  2260.   def draw_com_name
  2261.     @name_sprite = Sprite_Comm_Name.new(nil, get_com_name)
  2262.    
  2263.   end
  2264.   
  2265.   # 更新
  2266.   def update
  2267.     super
  2268.     icon_update
  2269.     com_name_update if Momo_IconCommand::COM_NAME_DROW
  2270.     if move_index?
  2271.       @last_index = self.index
  2272.     end
  2273.   end
  2274.   # アイコンの更新
  2275.   def icon_update
  2276.     for i in [email protected]
  2277.       @sprite[i].active = (self.index == i)
  2278.       @sprite[i].x = self.x  + i * 24
  2279.       @sprite[i].y = self.y  + 0
  2280.       @sprite[i].z = (self.index == i) ? self.z + 2 : self.z + 1
  2281.       @sprite[i].visible = self.visible
  2282.       @sprite[i].update
  2283.     end
  2284.   end
  2285.   # コマンドネームの更新
  2286.   def com_name_update
  2287.     if move_index?
  2288.       @name_sprite.name = get_com_name
  2289.     end
  2290.     @name_sprite.x = self.x - 12 + Momo_IconCommand::COM_NAME_X_PLUS
  2291.     @name_sprite.y = self.y - 40 + Momo_IconCommand::COM_NAME_Y_PLUS
  2292.     @name_sprite.z = self.z + 1
  2293.     @name_sprite.active = self.active
  2294.     @name_sprite.visible = self.visible
  2295.     @name_sprite.update
  2296.   end
  2297.   def get_com_name
  2298.     make_name_set if @name_set.nil?
  2299.     name = @name_set[self.index]
  2300.     name = "" if name.nil?
  2301.     return name
  2302.   end
  2303.   def make_name_set
  2304.     @name_set = []
  2305.     @name_set[0] = Momo_IconCommand::ATTACK_NAME
  2306.     @name_set[1] = Momo_IconCommand::SKILL_NAME
  2307.     @name_set[2] = Momo_IconCommand::GUARD_NAME
  2308.     @name_set[3] = Momo_IconCommand::ITEM_NAME
  2309.     @name_set[4] = Momo_IconCommand::ESCAPE_NAME
  2310.   end
  2311.   def move_index?
  2312.     return self.index != @last_index
  2313.   end
  2314.   def need_reset
  2315.     @name_sprite.need_reset = true if Momo_IconCommand::COM_NAME_DROW
  2316.   end
  2317. end

  2318. # アイコン用スプライト
  2319. class Sprite_Icon < Sprite
  2320.   attr_accessor :active
  2321.   attr_accessor :icon_name
  2322.   #--------------------------------------------------------------------------
  2323.   # ● オブジェクト初期化
  2324.   #--------------------------------------------------------------------------
  2325.   def initialize(viewport, icon_name)
  2326.     super(viewport)
  2327.     @icon_name = icon_name
  2328.     @last_icon = @icon_name
  2329.     @count = 0
  2330.     self.bitmap = RPG::Cache.icon(@icon_name)
  2331.     self.ox = self.bitmap.width / 2
  2332.     self.oy = self.bitmap.height / 2
  2333.     @active = false
  2334.   end
  2335.   #--------------------------------------------------------------------------
  2336.   # ● 解放
  2337.   #--------------------------------------------------------------------------
  2338.   def dispose
  2339.     if self.bitmap != nil
  2340.       self.bitmap.dispose
  2341.     end
  2342.     super
  2343.   end
  2344.   #--------------------------------------------------------------------------
  2345.   # ● フレーム更新
  2346.   #--------------------------------------------------------------------------
  2347.   def update
  2348.     super
  2349.     if @icon_name != @last_icon
  2350.       @last_icon = @icon_name
  2351.       self.bitmap = RPG::Cache.icon(@icon_name)
  2352.     end
  2353.     if @active
  2354.       @count += 1
  2355.       case Momo_IconCommand::SELECT_TYPE
  2356.       when 0
  2357.         icon_flash
  2358.       when 1
  2359.         icon_zoom
  2360.       end
  2361.       @count = 0 if @count == 20
  2362.     else
  2363.       icon_reset
  2364.     end
  2365.   end
  2366.   def icon_flash
  2367.     if @count % Momo_IconCommand::FLASH_INTERVAL == 0 or @count == 1
  2368.       self.flash(Momo_IconCommand::FLASH_COLOR, Momo_IconCommand::FLASH_DURATION)
  2369.     end
  2370.   end
  2371.   def icon_zoom
  2372.     case @count
  2373.     when 1..10
  2374.       zoom = 1.0 + @count / 10.0
  2375.     when 11..20
  2376.       zoom = 2.0 - (@count - 10) / 10.0
  2377.     end
  2378.     self.zoom_x = zoom
  2379.     self.zoom_y = zoom
  2380.   end
  2381.   def icon_reset
  2382.     @count = 0
  2383.     self.zoom_x = 1.0
  2384.     self.zoom_y = 1.0
  2385.   end
  2386. end

  2387. # コマンドネーム用スプライト
  2388. class Sprite_Comm_Name < Sprite
  2389.   attr_accessor :active
  2390.   attr_accessor :name
  2391.   attr_accessor :need_reset
  2392.   #--------------------------------------------------------------------------
  2393.   # ● オブジェクト初期化
  2394.   #--------------------------------------------------------------------------
  2395.   def initialize(viewport, name)
  2396.     super(viewport)
  2397.     @name = name
  2398.     @last_name = nil
  2399.     @count = 0
  2400.     @x_plus = 0
  2401.     @opa_plus = 0
  2402.     @need_reset = false
  2403.     @active = false
  2404.     self.bitmap = Bitmap.new(160, 32)
  2405.   end
  2406.   #--------------------------------------------------------------------------
  2407.   # ● 解放
  2408.   #--------------------------------------------------------------------------
  2409.   def dispose
  2410.     if self.bitmap != nil
  2411.       self.bitmap.dispose
  2412.     end
  2413.     super
  2414.   end
  2415.   #--------------------------------------------------------------------------
  2416.   # ● フレーム更新
  2417.   #--------------------------------------------------------------------------
  2418.   def update
  2419.     super
  2420.     if @active
  2421.       if need_reset?
  2422.         @need_reset = false
  2423.         @last_name = @name
  2424.         text_reset
  2425.       end
  2426.       move_text if Momo_IconCommand::COM_NAME_MOVE
  2427.     end
  2428.   end
  2429.   def move_text
  2430.     @count += 1
  2431.     @x_plus = [@count * 8, 80].min
  2432.     self.x = self.x - 80 + @x_plus
  2433.     self.opacity = @count * 25
  2434.   end
  2435.   def text_reset
  2436.     @count = 0
  2437.     @x_plus = 0
  2438.     self.bitmap.clear
  2439.     self.bitmap.font.color = Momo_IconCommand::COM_NAME_COLOR
  2440.       if @name == Momo_IconCommand::ESCAPE_NAME and $game_temp.battle_can_escape == false
  2441.        self.bitmap.font.color = Color.new(192, 192, 192, 255)
  2442.      else
  2443.        self.bitmap.font.color = Momo_IconCommand::COM_NAME_COLOR
  2444.     end


  2445.     self.bitmap.draw_text(0, 0, 160, 32, @name)
  2446.   end
  2447.   def need_reset?
  2448.     return (@name != @last_name or @need_reset)
  2449.   end
  2450. end
  2451. class Scene_Battle
  2452.   #--------------------------------------------------------------------------
  2453.   # ● プレバトルフェーズ開始
  2454.   #--------------------------------------------------------------------------
  2455.   alias scene_battle_icon_command_start_phase1 start_phase1
  2456.   def start_phase1
  2457.     com1 = Momo_IconCommand::ATTACK_ICON_NAME
  2458.     com2 = Momo_IconCommand::SKILL_ICON_NAME
  2459.     com3 = Momo_IconCommand::GUARD_ICON_NAME
  2460.     com4 = Momo_IconCommand::ITEM_ICON_NAME
  2461.     com5 = Momo_IconCommand::ESCAPE_ICON_NAME
  2462.     @actor_command_window = Window_CommandIcon.new(0, 0, [com1, com2, com3, com4, com5])
  2463.     @actor_command_window.y = 160
  2464.     @actor_command_window.back_opacity = 160
  2465.     @actor_command_window.active = false
  2466.     @actor_command_window.visible = false
  2467.     @actor_command_window.update
  2468.     scene_battle_icon_command_start_phase1
  2469.   end
  2470.   #--------------------------------------------------------------------------
  2471.   # ● アクターコマンドウィンドウのセットアップ
  2472.   #--------------------------------------------------------------------------
  2473.   alias scene_battle_icon_command_phase3_setup_command_window phase3_setup_command_window
  2474.   def phase3_setup_command_window
  2475.     scene_battle_icon_command_phase3_setup_command_window
  2476.     # アクターコマンドウィンドウの位置を設定
  2477.     @actor_command_window.x = command_window_actor_x(@actor_index)
  2478.     @actor_command_window.y = command_window_actor_y(@actor_index)
  2479.     @actor_command_window.need_reset
  2480.   end
  2481.   def command_window_actor_x(index)
  2482.     #$game_party.actors[index].screen_x + Momo_IconCommand::X_PLUS
  2483.     index * 160 + Momo_IconCommand::X_PLUS
  2484.   end
  2485.   def command_window_actor_y(index)
  2486.     #$game_party.actors[index].screen_y + Momo_IconCommand::Y_PLUS
  2487.     390 + Momo_IconCommand::Y_PLUS
  2488.   end
  2489. end

  2490. #==============================================================================
  2491. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  2492. #==============================================================================
复制代码

Lv1.梦旅人

梦石
0
星屑
50
在线时间
61 小时
注册时间
2011-5-27
帖子
10
2
发表于 2012-3-9 12:27:43 | 只看该作者
这个是什么字体 ?? 蛮好看的、

点评

方正流行体简体  发表于 2012-3-9 19:08
回复

使用道具 举报

Lv1.梦旅人

虱子

梦石
0
星屑
121
在线时间
1782 小时
注册时间
2010-6-19
帖子
3597
3
发表于 2012-3-9 12:48:58 | 只看该作者
121行的
  1.     y = index / 1 * 32
复制代码
中的1改成2

点评

表示还是不行。 我把脚本发上来  发表于 2012-3-9 19:06

http://rpg.blue/thread-175056-1-2.html
PVZ型塔防物一个
http://rpg.blue/thread-155199-1-2.html
RMXP技术讨论区手动认可帖,得到答案请认可
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-12-1 14:42

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表