赞 | 0 |
VIP | 8 |
好人卡 | 0 |
积分 | 28 |
经验 | 11997 |
最后登录 | 2024-9-5 |
在线时间 | 675 小时 |
Lv3.寻梦者
- 梦石
- 0
- 星屑
- 2767
- 在线时间
- 675 小时
- 注册时间
- 2012-1-29
- 帖子
- 89
|
本帖最后由 小小小蚩尤 于 2012-3-9 19:07 编辑
附上一段关于商店界面的脚本
而且显示出来的名称效果和本来的不一样- #==============================================================================
- #本脚本来自www.66rpg.com,转载和使用请保留此信息 。
- #默认游戏系统大修改
- # 爆焰 于: 12-31-2011整合与发布
- #QQ:459974518
- #本脚本是本人一时兴起修改默认的脚本所制作完成。
- #如发现有bug请与作者联系或上66rpg发贴提意见。
- #==============================================================================
- # ■ Window_ShopCommand
- #------------------------------------------------------------------------------
- # 商店画面、选择要做的事的窗口
- #==============================================================================
- class Window_ShopCommand < Window_Selectable
- #--------------------------------------------------------------------------
- # ● 初始化对像
- #--------------------------------------------------------------------------
- def initialize
- super(160, 64, 160, 64)
- self.contents = Bitmap.new(width - 32, height - 32)
- @item_max = 3
- @column_max = 3
- @commands = ["买", "卖", "走"]
- refresh
- self.index = 0
- end
-
- #--------------------------------------------------------------------------
- # ● 描绘项目
- # index : 项目编号
- #--------------------------------------------------------------------------
- def draw_item(index)
- x = 0 + index * 52
- self.contents.draw_text(x, 0, 128, 32, @commands[index])
- end
- end
- #==============================================================================
- # ■ Window_ShopBuy
- #------------------------------------------------------------------------------
- # 商店画面、浏览显示可以购买的商品的窗口。
- #==============================================================================
- class Window_ShopBuy < Window_Selectable
- #--------------------------------------------------------------------------
- # ● 初始化对像
- # shop_goods : 商品
- #--------------------------------------------------------------------------
- def initialize(shop_goods)
- super(70, 128, 250, 352)
- @shop_goods = shop_goods
- refresh
- self.index = 0
- end
- def draw_item(index)
- item = @data[index]
- # 获取物品所持数
- case item
- when RPG::Item
- number = $game_party.item_number(item.id)
- when RPG::Weapon
- number = $game_party.weapon_number(item.id)
- when RPG::Armor
- number = $game_party.armor_number(item.id)
- end
- # 价格在所持金以下、并且所持数不是 99 的情况下为普通文字颜色
- # 除此之外的情况设置为无效文字色
- if item.price <= $game_party.gold and number < 99
- self.contents.font.color = normal_color
- else
- self.contents.font.color = disabled_color
- end
- x = 4
- y = index * 32
- rect = Rect.new(x, y, self.width - 32, 32)
- self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
- bitmap = RPG::Cache.icon(item.icon_name)
- opacity = self.contents.font.color == normal_color ? 255 : 128
- self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
- self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
- self.contents.draw_text(x + 120, y, 88, 32, item.price.to_s, 2)
- end
- end
- #==============================================================================
- # ■ Window_ShopSell
- #------------------------------------------------------------------------------
- # 商店画面、浏览显示可以卖掉的商品的窗口。
- #==============================================================================
- class Window_ShopSell < Window_Selectable
- #--------------------------------------------------------------------------
- # ● 初始化对像
- #--------------------------------------------------------------------------
- def initialize
- super(160, 128, 320, 352)
- @column_max = 1
- refresh
- self.index = 0
- end
- #--------------------------------------------------------------------------
- # ● 描绘项目
- # index : 项目标号
- #--------------------------------------------------------------------------
- def draw_item(index)
- item = @data[index]
- case item
- when RPG::Item
- number = $game_party.item_number(item.id)
- when RPG::Weapon
- number = $game_party.weapon_number(item.id)
- when RPG::Armor
- number = $game_party.armor_number(item.id)
- end
- # 可以卖掉的显示为普通文字颜色、除此之外设置成无效文字颜色
- if item.price > 0
- self.contents.font.color = normal_color
- else
- self.contents.font.color = disabled_color
- end
- x = 4 + index % 1 * (90 + 32)
- y = index / 1 * 32
- rect = Rect.new(x, y, self.width / @column_max - 32, 32)
- self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
- bitmap = RPG::Cache.icon(item.icon_name)
- opacity = self.contents.font.color == normal_color ? 255 : 128
- self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
- self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
- self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
- self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
- end
- end
- #==============================================================================
- # ■ Window_ShopNumber
- #------------------------------------------------------------------------------
- # 商店画面、输入买卖数量的窗口。
- #==============================================================================
- class Window_ShopNumber < Window_Base
- #--------------------------------------------------------------------------
- # ● 初始化对像
- #--------------------------------------------------------------------------
- def initialize
- super(70, 128, 250, 352)
- self.contents = Bitmap.new(width - 32, height - 32)
- @item = nil
- @max = 1
- @price = 0
- @number = 1
- end
-
- #--------------------------------------------------------------------------
- # ● 刷新
- #--------------------------------------------------------------------------
- def refresh
- self.contents.clear
- draw_item_name(@item, 4, 96)
- self.contents.font.color = normal_color
- self.contents.draw_text(140, 130, 32, 32, "×")
- self.contents.draw_text(180, 130, 24, 32, @number.to_s, 2)
- self.cursor_rect.set(178, 130, 32, 32)
- # 描绘合计价格和货币单位
- domination = $data_system.words.gold
- cx = contents.text_size(domination).width
- total_price = @price * @number
- self.contents.font.color = normal_color
- self.contents.draw_text(4, 160, 200-cx-2, 32, total_price.to_s, 2)
- self.contents.font.color = system_color
- self.contents.draw_text(204-cx, 160, cx, 32, domination, 2)
- end
- end
- #==============================================================================
- # ■ Window_ShopStatus
- #------------------------------------------------------------------------------
- # 商店画面、显示物品所持数与角色装备的窗口。
- #==============================================================================
- class Window_ShopStatus < Window_Base
- #--------------------------------------------------------------------------
- # ● 初始化对像
- #--------------------------------------------------------------------------
- def initialize
- super(320, 128, 250, 352)
- self.contents = Bitmap.new(width - 32, height - 32)
- @item = nil
- refresh
- end
- #--------------------------------------------------------------------------
- # ● 刷新
- #--------------------------------------------------------------------------
- def refresh
- self.contents.clear
- if @item == nil
- return
- end
- case @item
- when RPG::Item
- number = $game_party.item_number(@item.id)
- when RPG::Weapon
- number = $game_party.weapon_number(@item.id)
- when RPG::Armor
- number = $game_party.armor_number(@item.id)
- end
- self.contents.font.color = system_color
- self.contents.draw_text(4, 0, 200, 32, "所持数")
- self.contents.font.color = normal_color
- self.contents.draw_text(180, 0, 32, 32, number.to_s, 2)
- if @item.is_a?(RPG::Item)
- return
- end
-
- # 添加装备品信息
- for i in 0...$game_party.actors.size
- # 获取角色
- actor = $game_party.actors[i]
- # 可以装备为普通文字颜色、不能装备设置为无效文字颜色
- if actor.equippable?(@item)
- self.contents.font.color = normal_color
- else
- self.contents.font.color = disabled_color
- end
-
- # 描绘角色名字
- self.contents.draw_text(4, 64 + 64 * i, 120, 32, actor.name)
- # 获取当前的装备品
- if @item.is_a?(RPG::Weapon)
- item1 = $data_weapons[actor.weapon_id]
- elsif @item.kind == 0
- item1 = $data_armors[actor.armor1_id]
- elsif @item.kind == 1
- item1 = $data_armors[actor.armor2_id]
- elsif @item.kind == 2
- item1 = $data_armors[actor.armor3_id]
- else
- item1 = $data_armors[actor.armor4_id]
- end
- # 可以装备的情况
- if actor.equippable?(@item)
- # 武器的情况
- if @item.is_a?(RPG::Weapon)
- atk1 = item1 != nil ? item1.atk : 0
- atk2 = @item != nil ? @item.atk : 0
- change = atk2 - atk1
- end
- # 防具的情况
- if @item.is_a?(RPG::Armor)
- pdef1 = item1 != nil ? item1.pdef : 0
- mdef1 = item1 != nil ? item1.mdef : 0
- pdef2 = @item != nil ? @item.pdef : 0
- mdef2 = @item != nil ? @item.mdef : 0
- change = pdef2 - pdef1 + mdef2 - mdef1
- end
- # 描绘能力值变化
- self.contents.draw_text(100, 64 + 64 * i, 112, 32,
- sprintf("%+d", change), 2)
- end
- # 描绘物品
- if item1 != nil
- x = 4
- y = 64 + 64 * i + 32
- bitmap = RPG::Cache.icon(item1.icon_name)
- opacity = self.contents.font.color == normal_color ? 255 : 128
- self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
- self.contents.draw_text(x + 28, y, 212, 32, item1.name)
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 设置物品
- # item : 新的物品
- #--------------------------------------------------------------------------
- def item=(item)
- if @item != item
- @item = item
- refresh
- end
- end
- end
复制代码 整段脚本- #==============================================================================
- #本脚本来自www.66rpg.com,转载和使用请保留此信息 。
- #默认游戏系统大修改
- # 爆焰 于: 12-31-2011整合与发布
- #QQ:459974518
- #本脚本是本人一时兴起修改默认的脚本所制作完成。
- #如发现有bug请与作者联系或上66rpg发贴提意见。
- #==============================================================================
- #==============================================================================
- # ■ Window_Base
- #------------------------------------------------------------------------------
- # 游戏中全部窗口的超级类。
- #==============================================================================
- class Window_Base < Window
-
- def draw_actor_parameter(actor, x, y, type)
- case type
- when 0
- parameter_name = $data_system.words.atk
- parameter_value = actor.atk
- when 1
- parameter_name = $data_system.words.pdef
- parameter_value = actor.pdef
- when 2
- parameter_name = $data_system.words.mdef
- parameter_value = actor.mdef
- when 3
- parameter_name = $data_system.words.str
- parameter_value = actor.str
- when 4
- parameter_name = $data_system.words.dex
- parameter_value = actor.dex
- when 5
- parameter_name = $data_system.words.agi
- parameter_value = actor.agi
- when 6
- parameter_name = $data_system.words.int
- parameter_value = actor.int
- ################################################
- when 7
- parameter_name = "回避"
- parameter_value = actor.eva
- ##################################################
- end
- self.contents.font.color = system_color
- self.contents.draw_text(x, y, 120, 32, parameter_name)
- self.contents.font.color = normal_color
- self.contents.draw_text(x + 120, y, 36, 32, parameter_value.to_s, 2)
- end
- end
- #==============================================================================
- # ■ Window_Help
- #------------------------------------------------------------------------------
- # 特技及物品的说明、角色的状态显示的窗口。
- #==============================================================================
- class Window_Help < Window_Base
- #--------------------------------------------------------------------------
- # ● 初始化对像
- #--------------------------------------------------------------------------
- def initialize
- super(160, 0, 320, 64)
- self.contents = Bitmap.new(width - 32, height - 32)
- end
-
- #--------------------------------------------------------------------------
- # ● 设置角色
- # actor : 要显示状态的角色
- #--------------------------------------------------------------------------
- def set_actor(actor)
- if actor != @actor
- self.contents.clear
- self.contents.font.size = 18
- self.contents.font.color = Color.new(255,255,255,255)
- draw_actor_name(actor, 0, 0)
- self.contents.font.size = 14
- self.contents.font.color = Color.new(255,255,255,255)
- draw_actor_state(actor,70, 0)
- self.contents.font.size = 18
- self.contents.font.color = Color.new(255,255,255,255)
- draw_actor_hp(actor, 140, -8)
- draw_actor_sp(actor, 140, 8)
- @actor = actor
- @text = nil
- self.visible = true
- end
- end
- end
- #==============================================================================
- # ■ Window_PlayTime
- #------------------------------------------------------------------------------
- # 菜单画面显示游戏时间的窗口。
- #==============================================================================
- class Window_PlayTime < Window_Base
- def initialize
- super(0, 0, 160, 64)
- self.contents = Bitmap.new(width - 32, height - 32)
- refresh
- end
-
- def refresh
- self.contents.clear
- self.contents.font.size = 14
- self.contents.font.color = Color.new(255,255,255,255)
- self.contents.font.color = system_color
- self.contents.draw_text(4, -8, 120, 32, "游戏时间")
- @total_sec = Graphics.frame_count / Graphics.frame_rate
- hour = @total_sec / 60 / 60
- min = @total_sec / 60 % 60
- sec = @total_sec % 60
- text = sprintf("%02d:%02d:%02d", hour, min, sec)
- self.contents.font.color = normal_color
- self.contents.draw_text(4, 8, 120, 32, text, 2)
- end
- end
- #==============================================================================
- # ■ Window_Steps
- #------------------------------------------------------------------------------
- # 菜单画面显示步数的窗口。
- #==============================================================================
- class Window_Steps < Window_Base
- #--------------------------------------------------------------------------
- # ● 初始化对像
- #--------------------------------------------------------------------------
- def initialize
- super(0, 0, 160, 64)
- self.contents = Bitmap.new(width - 32, height - 32)
- refresh
- end
- #--------------------------------------------------------------------------
- # ● 刷新
- #--------------------------------------------------------------------------
- def refresh
- @id = $game_map.map_id #获取地图编号
- self.contents.clear #清除以前的东西
- $mapnames = load_data("Data/MapInfos.rxdata") #读取地图名文件
- map_name = $mapnames[@id].name #获得地图名
- self.contents.font.size = 14
- self.contents.font.color = system_color#颜色,暗蓝色
- self.contents.draw_text(0, -8, 96, 32, "当前地图")
- self.contents.font.color = normal_color#颜色,这里是白色~
- self.contents.draw_text(0, -23, 116, 96, map_name,2)
- end
- end
- #==============================================================================
- # ■ Window_MenuStatus
- #------------------------------------------------------------------------------
- # 显示菜单画面和同伴状态的窗口。
- #==============================================================================
- class Window_MenuStatus < Window_Selectable
- #--------------------------------------------------------------------------
- # ● 初始化目标
- #--------------------------------------------------------------------------
- def initialize
- super(0, 0, 480, 224)
- self.contents = Bitmap.new(width - 32, height - 32)
- refresh
- self.active = false
- self.index = -1
- end
-
- #--------------------------------------------------------------------------
- # ● 刷新光标矩形
- #--------------------------------------------------------------------------
- def update_cursor_rect
- if @index < 0
- self.cursor_rect.empty
- else
- y = @index/2 * 96 + 23
- self.cursor_rect.set(@index%2 * 224, y, 224, 72)
- @column_max = 2
- end
- end
- end
- #==============================================================================
- # ■ Window_Item
- #------------------------------------------------------------------------------
- # 物品画面、战斗画面、显示浏览物品的窗口。
- #==============================================================================
- class Window_Item < Window_Selectable
- #--------------------------------------------------------------------------
- # ● 初始化对像
- #--------------------------------------------------------------------------
- def initialize
- super(160, 64, 320, 300)
- @column_max = 1
- refresh
- self.index = 0
- # 战斗中的情况下将窗口移至中央并将其半透明化
- if $game_temp.in_battle
- self.z = 999
- self.y = 64
- self.height = 256
- self.back_opacity = 200
- end
- end
- #--------------------------------------------------------------------------
- # ● 描绘项目
- # index : 项目编号
- #--------------------------------------------------------------------------
- def draw_item(index)
- item = @data[index]
- case item
- when RPG::Item
- number = $game_party.item_number(item.id)
- when RPG::Weapon
- number = $game_party.weapon_number(item.id)
- when RPG::Armor
- number = $game_party.armor_number(item.id)
- end
- if item.is_a?(RPG::Item) and
- $game_party.item_can_use?(item.id)
- self.contents.font.color = normal_color
- else
- self.contents.font.color = disabled_color
- end
- x = 4 + index % 1 * (90 + 32)
- y = index / 1 * 32
- rect = Rect.new(x, y, self.width / @column_max - 32, 32)
- self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
- bitmap = RPG::Cache.icon(item.icon_name)
- opacity = self.contents.font.color == normal_color ? 255 : 128
- self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
- self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
- self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
- self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
- end
- end
- #==============================================================================
- # ■ Window_Skill
- #------------------------------------------------------------------------------
- # 特技画面、战斗画面、显示可以使用的特技浏览的窗口。
- #==============================================================================
- class Window_Skill < Window_Selectable
- #--------------------------------------------------------------------------
- # ● 初始化对像
- # actor : 角色
- #--------------------------------------------------------------------------
- def initialize(actor)
- super(160, 128, 320, 300)
- @actor = actor
- @column_max = 1
- refresh
- self.index = 0
- # 战斗中的情况下将窗口移至中央并将其半透明化
- if $game_temp.in_battle
- self.z = 999
- self.y = 64
- self.height = 256
- self.back_opacity = 200
- end
- end
-
- #--------------------------------------------------------------------------
- # ● 描绘项目
- # index : 项目编号
- #--------------------------------------------------------------------------
- def draw_item(index)
- skill = @data[index]
- if @actor.skill_can_use?(skill.id)
- self.contents.font.color = normal_color
- else
- self.contents.font.color = disabled_color
- end
- x = 4 + index % 1 * (90 + 32)
- y = index / 1 * 32
- rect = Rect.new(x, y, self.width / @column_max - 32, 32)
- self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
- bitmap = RPG::Cache.icon(skill.icon_name)
- opacity = self.contents.font.color == normal_color ? 255 : 128
- self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
- self.contents.draw_text(x + 28, y, 204, 32, skill.name, 0)
- self.contents.draw_text(x + 232, y, 48, 32, skill.sp_cost.to_s, 2)
- end
- end
- #==============================================================================
- # ■ Window_SkillStatus
- #------------------------------------------------------------------------------
- # 显示特技画面、特技使用者的窗口。
- #==============================================================================
- class Window_SkillStatus < Window_Base
- #--------------------------------------------------------------------------
- # ● 初始化对像
- # actor : 角色
- #--------------------------------------------------------------------------
- def initialize(actor)
- super(160, 64, 320, 64)
- self.contents = Bitmap.new(width - 32, height - 32)
- @actor = actor
- refresh
- end
- #--------------------------------------------------------------------------
- # ● 刷新
- #--------------------------------------------------------------------------
- def refresh
- self.contents.clear
- self.contents.font.size = 18
- self.contents.font.color = Color.new(255,255,255,255)
- draw_actor_name(@actor, 0, 0)
- self.contents.font.size = 14
- self.contents.font.color = Color.new(255,255,255,255)
- draw_actor_state(@actor, 70, 0)
- self.contents.font.size = 18
- self.contents.font.color = Color.new(255,255,255,255)
- draw_actor_hp(@actor, 140, -8)
- draw_actor_sp(@actor, 140, 8)
- end
- end
- #==============================================================================
- # ■ Window_EquipLeft
- #------------------------------------------------------------------------------
- # 装备画面的、显示角色能力值变化的窗口。
- #==============================================================================
- class Window_EquipLeft < Window_Base
- #--------------------------------------------------------------------------
- # ● 初始化对像
- # actor : 角色
- #--------------------------------------------------------------------------
- def initialize(actor)
- super(50, 64, 272, 192)
- self.contents = Bitmap.new(width - 32, height - 32)
- @actor = actor
- refresh
- end
- end
- #==============================================================================
- # ■ Window_EquipRight
- #------------------------------------------------------------------------------
- # 装备画面、显示角色现在装备的物品的窗口。
- #==============================================================================
- class Window_EquipRight < Window_Selectable
- #--------------------------------------------------------------------------
- # ● 初始化对像
- # actor : 角色
- #--------------------------------------------------------------------------
- def initialize(actor)
- super(50, 256, 272, 192)
- self.contents = Bitmap.new(width - 32, height - 32)
- @actor = actor
- refresh
- self.index = 0
- end
- end
-
- #==============================================================================
- # ■ Window_EquipItem
- #------------------------------------------------------------------------------
- # 装备画面、显示浏览变更装备的候补物品的窗口。
- #==============================================================================
- class Window_EquipItem < Window_Selectable
- #--------------------------------------------------------------------------
- # ● 初始化对像
- # actor : 角色
- # equip_type : 装备部位 (0~3)
- #--------------------------------------------------------------------------
- def initialize(actor, equip_type)
- super(322, 64, 272, 384)
- @actor = actor
- @equip_type = equip_type
- @column_max = 1
- refresh
- self.active = false
- self.index = -1
- end
-
- #--------------------------------------------------------------------------
- # ● 项目的描绘
- # index : 项目符号
- #--------------------------------------------------------------------------
- def draw_item(index)
- item = @data[index]
- x = 4 + index % 1 * (90 + 32)
- y = index / 1 * 32
- case item
- when RPG::Weapon
- number = $game_party.weapon_number(item.id)
- when RPG::Armor
- number = $game_party.armor_number(item.id)
- end
- bitmap = RPG::Cache.icon(item.icon_name)
- self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
- self.contents.font.color = normal_color
- self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
- self.contents.draw_text(x + 180, y, 16, 32, "×", 1)
- self.contents.draw_text(x + 200, y, 24, 32, number.to_s, 2)
- end
- end
- #==============================================================================
- # ■ 全部替换 Window_Status
- #------------------------------------------------------------------------------
- # 显示状态画面、完全规格的状态窗口。
- #==============================================================================
- class Window_Status < Window_Base
- #--------------------------------------------------------------------------
- # ● 初始化对像
- # actor : 角色
- #--------------------------------------------------------------------------
- def initialize(actor)
- super(80, 60, 480, 360)
- self.contents = Bitmap.new(width - 32, height - 32)
- @actor = actor
- refresh
- end
- #--------------------------------------------------------------------------
- # ● 刷新
- #--------------------------------------------------------------------------
- def refresh
- self.contents.clear
- #draw_actor_graphic(@actor, 40, 112)
- draw_actor_name(@actor, 4, 0)
- draw_actor_class(@actor, 4 + 144, 0)
- draw_actor_level(@actor, 70, 0)
- draw_actor_state(@actor, 0, 60)
- draw_actor_hp(@actor, 4, 20, 172)
- draw_actor_sp(@actor, 4, 40, 172)
- draw_actor_parameter(@actor, 0, 90, 0)#攻击力
- draw_actor_parameter(@actor, 0, 120, 1)#物防
- draw_actor_parameter(@actor, 0, 150, 2)#魔防
- draw_actor_parameter(@actor, 0, 180, 3)#力量
- draw_actor_parameter(@actor, 0, 210, 4)#灵巧
- draw_actor_parameter(@actor, 0, 270, 5)#速度
- draw_actor_parameter(@actor, 0, 300, 6)#魔力
- ###########################################################
- draw_actor_parameter(@actor, 0, 240, 7)#回避
- ###########################################################
- self.contents.font.color = system_color
- self.contents.draw_text(230, 0, 80, 32, "经验")
- self.contents.draw_text(230, 40, 80, 32, "下一级")
- self.contents.font.color = normal_color
- self.contents.draw_text(230 + 80, 0, 84, 32, @actor.exp_s, 2)
- self.contents.draw_text(230 + 80, 40, 84, 32, @actor.next_rest_exp_s, 2)
- self.contents.font.color = system_color
- self.contents.draw_text(230, 90, 96, 32, "当前装备")
- draw_item_name($data_weapons[@actor.weapon_id], 230 + 16, 124)
- draw_item_name($data_armors[@actor.armor1_id], 230 + 16, 168)
- draw_item_name($data_armors[@actor.armor2_id], 230 + 16, 212)
- draw_item_name($data_armors[@actor.armor3_id], 230 + 16, 256)
- draw_item_name($data_armors[@actor.armor4_id], 230 + 16, 300)
- end
- end
- #==============================================================================
- # ■ Window_SaveFile
- #------------------------------------------------------------------------------
- # 显示存档以及读档画面、保存文件的窗口。
- #==============================================================================
- class Window_SaveFile < Window_Base
-
- def initialize(file_index, filename)
- super(160, 64 + file_index % 4 * 104, 320, 104)
- self.contents = Bitmap.new(width - 32, height - 32)
- @file_index = file_index
- @filename = "Save#{@file_index + 1}.rxdata"
- @time_stamp = Time.at(0)
- @file_exist = FileTest.exist?(@filename)
- if @file_exist
- file = File.open(@filename, "r")
- @time_stamp = file.mtime
- @characters = Marshal.load(file)
- @frame_count = Marshal.load(file)
- @game_system = Marshal.load(file)
- @game_switches = Marshal.load(file)
- @game_variables = Marshal.load(file)
- @total_sec = @frame_count / Graphics.frame_rate
- file.close
- end
- refresh
- @selected = false
- end
- #--------------------------------------------------------------------------
- # ● 刷新
- #--------------------------------------------------------------------------
- def refresh
- self.contents.clear
- # 描绘文件编号
- self.contents.font.color = normal_color
- name = "文件 #{@file_index + 1}"
- self.contents.draw_text(4, 0, 600, 32, name)
- @name_width = contents.text_size(name).width
- # 存档文件存在的情况下
- if @file_exist
- # 描绘角色
- for i in [email protected]
- bitmap = RPG::Cache.character(@characters[i][0], @characters[i][1])
- cw = bitmap.rect.width / 4
- ch = bitmap.rect.height / 4
- src_rect = Rect.new(0, 0, cw, ch)
- x = 280 - @characters.size * 32 + i * 64 - cw / 2
- self.contents.blt(x-100, 68 - ch, bitmap, src_rect)
- end
- # 描绘游戏时间
- hour = @total_sec / 60 / 60
- min = @total_sec / 60 % 60
- sec = @total_sec % 60
- time_string = sprintf("%02d:%02d:%02d", hour, min, sec)
- self.contents.font.color = normal_color
- self.contents.draw_text(4, 8, 280, 32, time_string, 2)
- # 描绘时间标记
- self.contents.font.color = normal_color
- time_string = @time_stamp.strftime("%Y/%m/%d %H:%M")
- self.contents.draw_text(4, 40, 280, 32, time_string, 2)
- end
- end
- end
- #==============================================================================
- # ■ Window_ShopCommand
- #------------------------------------------------------------------------------
- # 商店画面、选择要做的事的窗口
- #==============================================================================
- class Window_ShopCommand < Window_Selectable
- #--------------------------------------------------------------------------
- # ● 初始化对像
- #--------------------------------------------------------------------------
- def initialize
- super(160, 64, 160, 64)
- self.contents = Bitmap.new(width - 32, height - 32)
- @item_max = 3
- @column_max = 3
- @commands = ["买", "卖", "走"]
- refresh
- self.index = 0
- end
-
- #--------------------------------------------------------------------------
- # ● 描绘项目
- # index : 项目编号
- #--------------------------------------------------------------------------
- def draw_item(index)
- x = 0 + index * 52
- self.contents.draw_text(x, 0, 128, 32, @commands[index])
- end
- end
- #==============================================================================
- # ■ Window_ShopBuy
- #------------------------------------------------------------------------------
- # 商店画面、浏览显示可以购买的商品的窗口。
- #==============================================================================
- class Window_ShopBuy < Window_Selectable
- #--------------------------------------------------------------------------
- # ● 初始化对像
- # shop_goods : 商品
- #--------------------------------------------------------------------------
- def initialize(shop_goods)
- super(70, 128, 250, 352)
- @shop_goods = shop_goods
- refresh
- self.index = 0
- end
- def draw_item(index)
- item = @data[index]
- # 获取物品所持数
- case item
- when RPG::Item
- number = $game_party.item_number(item.id)
- when RPG::Weapon
- number = $game_party.weapon_number(item.id)
- when RPG::Armor
- number = $game_party.armor_number(item.id)
- end
- # 价格在所持金以下、并且所持数不是 99 的情况下为普通文字颜色
- # 除此之外的情况设置为无效文字色
- if item.price <= $game_party.gold and number < 99
- self.contents.font.color = normal_color
- else
- self.contents.font.color = disabled_color
- end
- x = 4
- y = index * 32
- rect = Rect.new(x, y, self.width - 32, 32)
- self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
- bitmap = RPG::Cache.icon(item.icon_name)
- opacity = self.contents.font.color == normal_color ? 255 : 128
- self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
- self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
- self.contents.draw_text(x + 120, y, 88, 32, item.price.to_s, 2)
- end
- end
- #==============================================================================
- # ■ Window_ShopSell
- #------------------------------------------------------------------------------
- # 商店画面、浏览显示可以卖掉的商品的窗口。
- #==============================================================================
- class Window_ShopSell < Window_Selectable
- #--------------------------------------------------------------------------
- # ● 初始化对像
- #--------------------------------------------------------------------------
- def initialize
- super(160, 128, 320, 352)
- @column_max = 1
- refresh
- self.index = 0
- end
- #--------------------------------------------------------------------------
- # ● 描绘项目
- # index : 项目标号
- #--------------------------------------------------------------------------
- def draw_item(index)
- item = @data[index]
- case item
- when RPG::Item
- number = $game_party.item_number(item.id)
- when RPG::Weapon
- number = $game_party.weapon_number(item.id)
- when RPG::Armor
- number = $game_party.armor_number(item.id)
- end
- # 可以卖掉的显示为普通文字颜色、除此之外设置成无效文字颜色
- if item.price > 0
- self.contents.font.color = normal_color
- else
- self.contents.font.color = disabled_color
- end
- x = 4 + index % 1 * (90 + 32)
- y = index / 1 * 32
- rect = Rect.new(x, y, self.width / @column_max - 32, 32)
- self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
- bitmap = RPG::Cache.icon(item.icon_name)
- opacity = self.contents.font.color == normal_color ? 255 : 128
- self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
- self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
- self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
- self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
- end
- end
- #==============================================================================
- # ■ Window_ShopNumber
- #------------------------------------------------------------------------------
- # 商店画面、输入买卖数量的窗口。
- #==============================================================================
- class Window_ShopNumber < Window_Base
- #--------------------------------------------------------------------------
- # ● 初始化对像
- #--------------------------------------------------------------------------
- def initialize
- super(70, 128, 250, 352)
- self.contents = Bitmap.new(width - 32, height - 32)
- @item = nil
- @max = 1
- @price = 0
- @number = 1
- end
-
- #--------------------------------------------------------------------------
- # ● 刷新
- #--------------------------------------------------------------------------
- def refresh
- self.contents.clear
- draw_item_name(@item, 4, 96)
- self.contents.font.color = normal_color
- self.contents.draw_text(140, 130, 32, 32, "×")
- self.contents.draw_text(180, 130, 24, 32, @number.to_s, 2)
- self.cursor_rect.set(178, 130, 32, 32)
- # 描绘合计价格和货币单位
- domination = $data_system.words.gold
- cx = contents.text_size(domination).width
- total_price = @price * @number
- self.contents.font.color = normal_color
- self.contents.draw_text(4, 160, 200-cx-2, 32, total_price.to_s, 2)
- self.contents.font.color = system_color
- self.contents.draw_text(204-cx, 160, cx, 32, domination, 2)
- end
- end
- #==============================================================================
- # ■ Window_ShopStatus
- #------------------------------------------------------------------------------
- # 商店画面、显示物品所持数与角色装备的窗口。
- #==============================================================================
- class Window_ShopStatus < Window_Base
- #--------------------------------------------------------------------------
- # ● 初始化对像
- #--------------------------------------------------------------------------
- def initialize
- super(320, 128, 250, 352)
- self.contents = Bitmap.new(width - 32, height - 32)
- @item = nil
- refresh
- end
- #--------------------------------------------------------------------------
- # ● 刷新
- #--------------------------------------------------------------------------
- def refresh
- self.contents.clear
- if @item == nil
- return
- end
- case @item
- when RPG::Item
- number = $game_party.item_number(@item.id)
- when RPG::Weapon
- number = $game_party.weapon_number(@item.id)
- when RPG::Armor
- number = $game_party.armor_number(@item.id)
- end
- self.contents.font.color = system_color
- self.contents.draw_text(4, 0, 200, 32, "所持数")
- self.contents.font.color = normal_color
- self.contents.draw_text(180, 0, 32, 32, number.to_s, 2)
- if @item.is_a?(RPG::Item)
- return
- end
-
- # 添加装备品信息
- for i in 0...$game_party.actors.size
- # 获取角色
- actor = $game_party.actors[i]
- # 可以装备为普通文字颜色、不能装备设置为无效文字颜色
- if actor.equippable?(@item)
- self.contents.font.color = normal_color
- else
- self.contents.font.color = disabled_color
- end
-
- # 描绘角色名字
- self.contents.draw_text(4, 64 + 64 * i, 120, 32, actor.name)
- # 获取当前的装备品
- if @item.is_a?(RPG::Weapon)
- item1 = $data_weapons[actor.weapon_id]
- elsif @item.kind == 0
- item1 = $data_armors[actor.armor1_id]
- elsif @item.kind == 1
- item1 = $data_armors[actor.armor2_id]
- elsif @item.kind == 2
- item1 = $data_armors[actor.armor3_id]
- else
- item1 = $data_armors[actor.armor4_id]
- end
- # 可以装备的情况
- if actor.equippable?(@item)
- # 武器的情况
- if @item.is_a?(RPG::Weapon)
- atk1 = item1 != nil ? item1.atk : 0
- atk2 = @item != nil ? @item.atk : 0
- change = atk2 - atk1
- end
- # 防具的情况
- if @item.is_a?(RPG::Armor)
- pdef1 = item1 != nil ? item1.pdef : 0
- mdef1 = item1 != nil ? item1.mdef : 0
- pdef2 = @item != nil ? @item.pdef : 0
- mdef2 = @item != nil ? @item.mdef : 0
- change = pdef2 - pdef1 + mdef2 - mdef1
- end
- # 描绘能力值变化
- self.contents.draw_text(100, 64 + 64 * i, 112, 32,
- sprintf("%+d", change), 2)
- end
- # 描绘物品
- if item1 != nil
- x = 4
- y = 64 + 64 * i + 32
- bitmap = RPG::Cache.icon(item1.icon_name)
- opacity = self.contents.font.color == normal_color ? 255 : 128
- self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
- self.contents.draw_text(x + 28, y, 212, 32, item1.name)
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 设置物品
- # item : 新的物品
- #--------------------------------------------------------------------------
- def item=(item)
- if @item != item
- @item = item
- refresh
- end
- end
- end
- #==============================================================================
- # ■ Scene_Menu
- #------------------------------------------------------------------------------
- # 处理菜单画面的类。
- #==============================================================================
- class Scene_Menu
-
- #--------------------------------------------------------------------------
- # ● 主处理
- #--------------------------------------------------------------------------
- def main
- # 生成命令窗口
- s1 = $data_system.words.item
- s2 = $data_system.words.skill
- s3 = $data_system.words.equip
- s4 = "状态"
- s5 = "任务"
- s6 = "介绍"
- s7 = "存档"
- s8 = "结束"
- @command_window = Window_Command.new(90, [s1, s2, s3, s4, s5, s6, s7, s8])
- @command_window.x = 35
- @command_window.y = 90
- # 同伴人数为 0 的情况下
- if $game_party.actors.size == 0
- # 物品、特技、装备、状态无效化
- @command_window.disable_item(0)
- @command_window.disable_item(1)
- @command_window.disable_item(2)
- @command_window.disable_item(3)
- end
- # 禁止存档的情况下
- if $game_system.save_disabled
- # 存档无效
- @command_window.disable_item(6)
- end
- # 生成游戏时间窗口
- @playtime_window = Window_PlayTime.new
- @playtime_window.x = 285
- @playtime_window.y = 314
- # 生成步数窗口
- @steps_window = Window_Steps.new
- @steps_window.x = 125
- @steps_window.y = 314
- # 生成金钱窗口
- @gold_window = Window_Gold.new
- @gold_window.x = 445
- @gold_window.y = 314
- # 生成状态窗口
- @status_window = Window_MenuStatus.new
- @status_window.x = 125
- @status_window.y = 90
- # 执行过渡
- Graphics.transition
- # 主循环
- loop do
- # 刷新游戏画面
- Graphics.update
- # 刷新输入信息
- Input.update
- # 刷新画面
- update
- # 如果切换画面就中断循环
- if $scene != self
- break
- end
- end
- # 准备过渡
- Graphics.freeze
- # 释放窗口
- @command_window.dispose
- @playtime_window.dispose
- @steps_window.dispose
- @gold_window.dispose
- @status_window.dispose
- end
- #--------------------------------------------------------------------------
- # ● 刷新画面
- #--------------------------------------------------------------------------
- def update
- # 刷新窗口
- @command_window.update
- @playtime_window.update
- @steps_window.update
- @gold_window.update
- @status_window.update
- # 命令窗口被激活的情况下: 调用 update_command
- if @command_window.active
- update_command
- return
- end
- # 状态窗口被激活的情况下: 调用 update_status
- if @status_window.active
- update_status
- return
- end
- end
- #--------------------------------------------------------------------------
- # ● 刷新画面 (命令窗口被激活的情况下)
- #--------------------------------------------------------------------------
- def update_command
- # 按下 B 键的情况下
- if Input.trigger?(Input::B)
- # 演奏取消 SE
- $game_system.se_play($data_system.cancel_se)
- # 切换的地图画面
- $scene = Scene_Map.new
- return
- end
- # 按下 C 键的情况下
- if Input.trigger?(Input::C)
- # 同伴人数为 0、存档、游戏结束以外的场合
- if $game_party.actors.size == 0 and @command_window.index < 4
- # 演奏冻结 SE
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- # 命令窗口的光标位置分支
- case @command_window.index
- when 0 # 物品
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 切换到物品画面
- $scene = Scene_Item.new
- when 1 # 特技
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 激活状态窗口
- @command_window.active = false
- @status_window.active = true
- @status_window.index = 0
- when 2 # 装备
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 激活状态窗口
- @command_window.active = false
- @status_window.active = true
- @status_window.index = 0
- when 3 # 状态
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 激活状态窗口
- @command_window.active = false
- @status_window.active = true
- @status_window.index = 0
-
- when 4
-
- # 決定 SE を演奏
- $game_system.se_play($data_system.decision_se)
- $scene = Scene_Task.new
- when 5
- # 決定 SE を演奏
- $game_system.se_play($data_system.decision_se)
- @command_window.active = false
- @status_window.active = true
- @status_window.index = 0
-
- when 6 # 存档
- # 禁止存档的情况下
- if $game_system.save_disabled
- # 演奏冻结 SE
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 切换到存档画面
- $scene = Scene_Save.new
- when 7 # 游戏结束
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 切换到游戏结束画面
- $scene = Scene_End.new
- end
- return
- end
- end
- #--------------------------------------------------------------------------
- # ● 刷新画面 (状态窗口被激活的情况下)
- #--------------------------------------------------------------------------
- def update_status
- # 按下 B 键的情况下
- if Input.trigger?(Input::B)
- # 演奏取消 SE
- $game_system.se_play($data_system.cancel_se)
- # 激活命令窗口
- @command_window.active = true
- @status_window.active = false
- @status_window.index = -1
- return
- end
- # 按下 C 键的情况下
- if Input.trigger?(Input::C)
- # 命令窗口的光标位置分支
- case @command_window.index
- when 1 # 特技
- # 本角色的行动限制在 2 以上的情况下
- if $game_party.actors[@status_window.index].restriction >= 2
- # 演奏冻结 SE
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 切换到特技画面
- $scene = Scene_Skill.new(@status_window.index)
- when 2 # 装备
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 切换的装备画面
- $scene = Scene_Equip.new(@status_window.index)
- when 3 # 状态
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 切换到状态画面
- $scene = Scene_Status.new(@status_window.index)
- when 5
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
-
-
- end
- return
- end
- end
- end
- #==============================================================================
- # ■ Scene_Shop
- #------------------------------------------------------------------------------
- # 处理商店画面的类。
- #==============================================================================
- class Scene_Shop
- #--------------------------------------------------------------------------
- # ● 主处理
- #--------------------------------------------------------------------------
- def main
- # 生成帮助窗口
- @help_window = Window_Help.new
- # 生成指令窗口
- @command_window = Window_ShopCommand.new
- # 生成金钱窗口
- @gold_window = Window_Gold.new
- @gold_window.x = 320
- @gold_window.y = 64
- # 生成时间窗口
- @dummy_window = Window_Base.new(160, 128, 320, 352)
- # 生成购买窗口
- @buy_window = Window_ShopBuy.new($game_temp.shop_goods)
- @buy_window.active = false
- @buy_window.visible = false
- @buy_window.help_window = @help_window
- # 生成卖出窗口
- @sell_window = Window_ShopSell.new
- @sell_window.active = false
- @sell_window.visible = false
- @sell_window.help_window = @help_window
- # 生成数量输入窗口
- @number_window = Window_ShopNumber.new
- @number_window.active = false
- @number_window.visible = false
- # 生成状态窗口
- @status_window = Window_ShopStatus.new
- @status_window.visible = false
- # 执行过渡
- Graphics.transition
- # 主循环
- loop do
- # 刷新游戏画面
- Graphics.update
- # 刷新输入信息
- Input.update
- # 刷新画面
- update
- # 如果画面切换的话就中断循环
- if $scene != self
- break
- end
- end
- # 准备过渡
- Graphics.freeze
- # 释放窗口
- @help_window.dispose
- @command_window.dispose
- @gold_window.dispose
- @dummy_window.dispose
- @buy_window.dispose
- @sell_window.dispose
- @number_window.dispose
- @status_window.dispose
- end
- #--------------------------------------------------------------------------
- # ● 刷新画面
- #--------------------------------------------------------------------------
- def update
- # 刷新窗口
- @help_window.update
- @command_window.update
- @gold_window.update
- @dummy_window.update
- @buy_window.update
- @sell_window.update
- @number_window.update
- @status_window.update
- # 指令窗口激活的情况下: 调用 update_command
- if @command_window.active
- update_command
- return
- end
- # 购买窗口激活的情况下: 调用 update_buy
- if @buy_window.active
- update_buy
- return
- end
- # 卖出窗口激活的情况下: 调用 update_sell
- if @sell_window.active
- update_sell
- return
- end
- # 个数输入窗口激活的情况下: 调用 update_number
- if @number_window.active
- update_number
- return
- end
- end
- #--------------------------------------------------------------------------
- # ● 刷新画面 (指令窗口激活的情况下)
- #--------------------------------------------------------------------------
- def update_command
- # 按下 B 键的情况下
- if Input.trigger?(Input::B)
- # 演奏取消 SE
- $game_system.se_play($data_system.cancel_se)
- # 切换到地图画面
- $scene = Scene_Map.new
- return
- end
- # 按下 C 键的情况下
- if Input.trigger?(Input::C)
- # 命令窗口光标位置分支
- case @command_window.index
- when 0 # 购买
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 窗口状态转向购买模式
- @command_window.active = false
- @dummy_window.visible = false
- @buy_window.active = true
- @buy_window.visible = true
- @buy_window.refresh
- @status_window.visible = true
- when 1 # 卖出
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 窗口状态转向卖出模式
- @command_window.active = false
- @dummy_window.visible = false
- @sell_window.active = true
- @sell_window.visible = true
- @sell_window.refresh
- when 2 # 取消
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 切换到地图画面
- $scene = Scene_Map.new
- end
- return
- end
- end
- #--------------------------------------------------------------------------
- # ● 刷新画面 (购买窗口激活的情况下)
- #--------------------------------------------------------------------------
- def update_buy
- # 设置状态窗口的物品
- @status_window.item = @buy_window.item
- # 按下 B 键的情况下
- if Input.trigger?(Input::B)
- # 演奏取消 SE
- $game_system.se_play($data_system.cancel_se)
- # 窗口状态转向初期模式
- @command_window.active = true
- @dummy_window.visible = true
- @buy_window.active = false
- @buy_window.visible = false
- @status_window.visible = false
- @status_window.item = nil
- # 删除帮助文本
- @help_window.set_text("")
- return
- end
- # 按下 C 键的情况下
- if Input.trigger?(Input::C)
- # 获取物品
- @item = @buy_window.item
- # 物品无效的情况下、或者价格在所持金以上的情况下
- if @item == nil or @item.price > $game_party.gold
- # 演奏冻结 SE
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- # 获取物品所持数
- case @item
- when RPG::Item
- number = $game_party.item_number(@item.id)
- when RPG::Weapon
- number = $game_party.weapon_number(@item.id)
- when RPG::Armor
- number = $game_party.armor_number(@item.id)
- end
- # 如果已经拥有了 99 个情况下
- if number == 99
- # 演奏冻结 SE
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 计算可以最多购买的数量
- max = @item.price == 0 ? 99 : $game_party.gold / @item.price
- max = [max, 99 - number].min
- # 窗口状态转向数值输入模式
- @buy_window.active = false
- @buy_window.visible = false
- @number_window.set(@item, max, @item.price)
- @number_window.active = true
- @number_window.visible = true
- end
- end
- #--------------------------------------------------------------------------
- # ● 画面更新 (卖出窗口激活的情况下)
- #--------------------------------------------------------------------------
- def update_sell
- # 按下 B 键的情况下
- if Input.trigger?(Input::B)
- # 演奏取消 SE
- $game_system.se_play($data_system.cancel_se)
- # 窗口状态转向初期模式
- @command_window.active = true
- @dummy_window.visible = true
- @sell_window.active = false
- @sell_window.visible = false
- @status_window.item = nil
- # 删除帮助文本
- @help_window.set_text("")
- return
- end
- # 按下 C 键的情况下
- if Input.trigger?(Input::C)
- # 获取物品
- @item = @sell_window.item
- # 设置状态窗口的物品
- @status_window.item = @item
- # 物品无效的情况下、或者价格为 0 (不能卖出) 的情况下
- if @item == nil or @item.price == 0
- # 演奏冻结 SE
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 获取物品的所持数
- case @item
- when RPG::Item
- number = $game_party.item_number(@item.id)
- when RPG::Weapon
- number = $game_party.weapon_number(@item.id)
- when RPG::Armor
- number = $game_party.armor_number(@item.id)
- end
- # 最大卖出个数 = 物品的所持数
- max = number
- # 窗口状态转向个数输入模式
- @sell_window.active = false
- @sell_window.visible = false
- @number_window.set(@item, max, @item.price / 2)
- @number_window.active = true
- @number_window.visible = true
- @status_window.visible = true
- end
- end
- #--------------------------------------------------------------------------
- # ● 刷新画面 (个数输入窗口激活的情况下)
- #--------------------------------------------------------------------------
- def update_number
- # 按下 B 键的情况下
- if Input.trigger?(Input::B)
- # 演奏取消 SE
- $game_system.se_play($data_system.cancel_se)
- # 设置个数输入窗口为不活动·非可视状态
- @number_window.active = false
- @number_window.visible = false
- # 命令窗口光标位置分支
- case @command_window.index
- when 0 # 购买
- # 窗口状态转向购买模式
- @buy_window.active = true
- @buy_window.visible = true
- when 1 # 卖出
- # 窗口状态转向卖出模式
- @sell_window.active = true
- @sell_window.visible = true
- @status_window.visible = false
- end
- return
- end
- # 按下 C 键的情况下
- if Input.trigger?(Input::C)
- # 演奏商店 SE
- $game_system.se_play($data_system.shop_se)
- # 设置个数输入窗口为不活动·非可视状态
- @number_window.active = false
- @number_window.visible = false
- # 命令窗口光标位置分支
- case @command_window.index
- when 0 # 购买
- # 购买处理
- $game_party.lose_gold(@number_window.number * @item.price)
- case @item
- when RPG::Item
- $game_party.gain_item(@item.id, @number_window.number)
- when RPG::Weapon
- $game_party.gain_weapon(@item.id, @number_window.number)
- when RPG::Armor
- $game_party.gain_armor(@item.id, @number_window.number)
- end
- # 刷新各窗口
- @gold_window.refresh
- @buy_window.refresh
- @status_window.refresh
- # 窗口状态转向购买模式
- @buy_window.active = true
- @buy_window.visible = true
- when 1 # 卖出
- # 卖出处理
- $game_party.gain_gold(@number_window.number * (@item.price / 2))
- case @item
- when RPG::Item
- $game_party.lose_item(@item.id, @number_window.number)
- when RPG::Weapon
- $game_party.lose_weapon(@item.id, @number_window.number)
- when RPG::Armor
- $game_party.lose_armor(@item.id, @number_window.number)
- end
- # 刷新各窗口
- @gold_window.refresh
- @sell_window.refresh
- @status_window.refresh
- # 窗口状态转向卖出模式
- @sell_window.active = true
- @sell_window.visible = true
- @status_window.visible = false
- end
- return
- end
- end
- end
- #==============================================================================
- # 本脚本来自www.66RPG.com,使用和转载请保留此信息
- #==============================================================================
- class Window_MenuStatus < Window_Selectable
- def refresh
- self.contents.clear
- @item_max = $game_party.actors.size
- for i in 0...$game_party.actors.size
- x = 64 + i%2 * 224
- y = i/2 * 96 + 16
- actor = $game_party.actors[i]
- if (i % 2) == 0
- draw_actor_graphic(actor, x - 40, y + 65)
- self.contents.font.size = 18
- draw_actor_name(actor, x, y)
- #draw_actor_class(actor, x + 144+50, y)
- draw_actor_level(actor, x+94, y )
- draw_actor_state(actor, x , y + 52)
- #draw_actor_exp(actor, x+50, y + 64)
- draw_actor_hp(actor, x , y + 16)
- draw_actor_sp(actor, x , y + 32)
- else
- draw_actor_graphic(actor, x - 40, y + 65)
- draw_actor_name(actor, x, y)
- #draw_actor_class(actor, x + 144+50, y)
- draw_actor_level(actor, x+94, y )
- draw_actor_state(actor, x , y + 52)
- #draw_actor_exp(actor, x+50, y + 64)
- draw_actor_hp(actor, x , y + 16)
- draw_actor_sp(actor, x , y + 32)
- end
- end
- end
- end
-
- #==============================================================================
- # ■ Window_Base
- #==============================================================================
- class Window_Base < Window
- alias xrxs_mp7_initialize initialize
- def initialize(x, y, width, height)
- xrxs_mp7_initialize(x, y, width, height)
- if $scene.is_a?(Scene_Menu) or
- $scene.is_a?(Scene_Item) or
- $scene.is_a?(Scene_Skill) or
- $scene.is_a?(Scene_Equip) or
- $scene.is_a?(Scene_Status) or
- $scene.is_a?(Scene_Save) or
- $scene.is_a?(Scene_End) or $scene.is_a?(Scene_Shop)
- self.back_opacity = 200 #————这个数值可调,为透明程度
- end
- end
- end
- module XRXS_MP7_Module
- def create_spriteset
- @spriteset = Spriteset_Map.new
- end
- def dispose_spriteset
- @spriteset.dispose
- end
- end
- class Scene_Menu
- include XRXS_MP7_Module
- alias xrxs_mp7_main main
- def main
- create_spriteset
- xrxs_mp7_main
- dispose_spriteset
- end
- end
- class Scene_Item
- include XRXS_MP7_Module
- alias xrxs_mp7_main main
- def main
- create_spriteset
- xrxs_mp7_main
- dispose_spriteset
- end
- end
- class Scene_Skill
- include XRXS_MP7_Module
- alias xrxs_mp7_main main
- def main
- create_spriteset
- xrxs_mp7_main
- dispose_spriteset
- end
- end
- class Scene_Equip
- include XRXS_MP7_Module
- alias xrxs_mp7_main main
- def main
- create_spriteset
- xrxs_mp7_main
- dispose_spriteset
- end
- end
- class Scene_Status
- include XRXS_MP7_Module
- alias xrxs_mp7_main main
- def main
- create_spriteset
- xrxs_mp7_main
- dispose_spriteset
- end
- end
- class Scene_Save
- include XRXS_MP7_Module
- alias xrxs_mp7_main main
- def main
- create_spriteset
- xrxs_mp7_main
- dispose_spriteset
- end
- end
- class Scene_End
- include XRXS_MP7_Module
- alias xrxs_mp7_main main
- def main
- create_spriteset
- xrxs_mp7_main
- dispose_spriteset
- end
- end
- class Scene_Shop
- include XRXS_MP7_Module
- alias xrxs_mp7_main main
- def main
- create_spriteset
- xrxs_mp7_main
- dispose_spriteset
- end
- end
- #==============================================================================
- # 本脚本来自www.66RPG.com,使用和转载请保留此信息
- #==============================================================================
- # ——————————————————————————————
- # HP/SP/EXPゲージ表示スクリプト Ver 1.00
- # 配布元?サポートURL
- # http://members.jcom.home.ne.jp/cogwheel/
- #===============================================================
- # ■ Game_Actor
- #--------------------------------------------------------
- # アクターを扱うクラスです。このクラスは Game_Actors クラス ($game_actors)
- # の内部で使用され、Game_Party クラス ($game_party) からも参照されます。
- #==============================================================
- class Game_Actor < Game_Battler
- def now_exp
- return @exp - @exp_list[@level]
- end
- def next_exp
- return @exp_list[@level+1] > 0 ? @exp_list[@level+1] - @exp_list[@level] : 0
- end
- end
- #==========================================================
- # ■ Window_Base
- #------------------------------------------------------------
- # ゲーム中のすべてのウィンドウのスーパークラスです。
- #============================================================
- class Window_Base < Window
- #--------------------------------------------------------
- # ● HP ゲージの描画
- #--------------------------------------------------
- # オリジナルのHP描画を draw_actor_hp_original と名前変更
- alias :draw_actor_hp_original :draw_actor_hp
- def draw_actor_hp(actor, x, y, width = 144)
- # 変数rateに 現在のHP/MHPを代入
- if actor.maxhp != 0
- rate = actor.hp.to_f / actor.maxhp
- else
- rate = 0
- end
- # plus_x:X座標の位置補正 rate_x:X座標の位置補正(%) plus_y:Y座標の位置補正
- # plus_width:幅の補正 rate_width:幅の補正(%) height:縦幅
- # align1:描画タイプ1 0:左詰め 1:中央揃え 2:右詰め
- # align2:描画タイプ2 0:上詰め 1:中央揃え 2:下詰め
- # align3:ゲージタイプ 0:左詰め 1:右詰め
- plus_x = 0
- rate_x = 0
- plus_y = 25
- plus_width = 0
- rate_width = 100
- height = 10
- align1 = 1
- align2 = 2
- align3 = 0
- # グラデーション設定 grade1:空ゲージ grade2:実ゲージ
- # (0:横にグラデーション 1:縦にグラデーション 2:斜めにグラデーション(激重))
- grade1 = 1
- grade2 = 0
- # 色設定。color1:外枠,color2:中枠
- # color3:空ゲージダークカラー,color4:空ゲージライトカラー
- # color5:実ゲージダークカラー,color6:実ゲージライトカラー
- color1 = Color.new(0, 0, 0, 192)
- color2 = Color.new(255, 255, 192, 192)
- color3 = Color.new(0, 0, 0, 192)
- color4 = Color.new(64, 0, 0, 192)
- color5 = Color.new(80 - 24 * rate, 80 * rate, 14 * rate, 192)
- color6 = Color.new(240 - 72 * rate, 240 * rate, 62 * rate, 192)
- # 変数spに描画するゲージの幅を代入
- if actor.maxhp != 0
- hp = (width + plus_width) * actor.hp * rate_width / 100 / actor.maxhp
- else
- hp = 0
- end
- # ゲージの描画
- gauge_rect(x + plus_x + width * rate_x / 100, y + plus_y,
- width, plus_width + width * rate_width / 100,
- height, hp, align1, align2, align3,
- color1, color2, color3, color4, color5, color6, grade1, grade2)
- # オリジナルのHP描画処理を呼び出し
- draw_actor_hp_original(actor, x, y, width)
- end
- #--------------------------------------------------------------
- # ● SP ゲージの描画
- #------------------------------------------------------------
- # オリジナルのSP描画を draw_actor_sp_original と名前変更
- alias :draw_actor_sp_original :draw_actor_sp
- def draw_actor_sp(actor, x, y, width = 144)
- # 変数rateに 現在のSP/MSPを代入
- if actor.maxsp != 0
- rate = actor.sp.to_f / actor.maxsp
- else
- rate = 1
- end
- # plus_x:X座標の位置補正 rate_x:X座標の位置補正(%) plus_y:Y座標の位置補正
- # plus_width:幅の補正 rate_width:幅の補正(%) height:縦幅
- # align1:描画タイプ1 0:左詰め 1:中央揃え 2:右詰め
- # align2:描画タイプ2 0:上詰め 1:中央揃え 2:下詰め
- # align3:ゲージタイプ 0:左詰め 1:右詰め
- plus_x = 0
- rate_x = 0
- plus_y = 25
- plus_width = 0
- rate_width = 100
- height = 10
- align1 = 1
- align2 = 2
- align3 = 0
- # グラデーション設定 grade1:空ゲージ grade2:実ゲージ
- # (0:横にグラデーション 1:縦にグラデーション 2:斜めにグラデーション(激重))
- grade1 = 1
- grade2 = 0
- # 色設定。color1:外枠,color2:中枠
- # color3:空ゲージダークカラー,color4:空ゲージライトカラー
- # color5:実ゲージダークカラー,color6:実ゲージライトカラー
- color1 = Color.new(0, 0, 0, 192)
- color2 = Color.new(255, 255, 192, 192)
- color3 = Color.new(0, 0, 0, 192)
- color4 = Color.new(0, 64, 0, 192)
- color5 = Color.new(14 * rate, 80 - 24 * rate, 80 * rate, 192)
- color6 = Color.new(62 * rate, 240 - 72 * rate, 240 * rate, 192)
- # 変数spに描画するゲージの幅を代入
- if actor.maxsp != 0
- sp = (width + plus_width) * actor.sp * rate_width / 100 / actor.maxsp
- else
- sp = (width + plus_width) * rate_width / 100
- end
- # ゲージの描画
- gauge_rect(x + plus_x + width * rate_x / 100, y + plus_y,
- width, plus_width + width * rate_width / 100,
- height, sp, align1, align2, align3,
- color1, color2, color3, color4, color5, color6, grade1, grade2)
- # オリジナルのSP描画処理を呼び出し
- draw_actor_sp_original(actor, x, y, width)
- end
- #--------------------------------------------------------
- # ● EXP ゲージの描画
- #----------------------------------------------------------
- # オリジナルのEXP描画を draw_actor_sp_original と名前変更
- alias :draw_actor_exp_original :draw_actor_exp
- def draw_actor_exp(actor, x, y, width = 180)
- # 変数rateに 現在のexp/nextexpを代入
- if actor.next_exp != 0
- rate = actor.now_exp.to_f / actor.next_exp
- else
- rate = 1
- end
- # plus_x:X座標の位置補正 rate_x:X座標の位置補正(%) plus_y:Y座標の位置補正
- # plus_width:幅の補正 rate_width:幅の補正(%) height:縦幅
- # align1:描画タイプ1 0:左詰め 1:中央揃え 2:右詰め
- # align2:描画タイプ2 0:上詰め 1:中央揃え 2:下詰め
- # align3:ゲージタイプ 0:左詰め 1:右詰め
- plus_x = 0
- rate_x = 0
- plus_y = 25
- plus_width = 0
- rate_width = 100
- height = 10
- align1 = 1
- align2 = 2
- align3 = 0
- # グラデーション設定 grade1:空ゲージ grade2:実ゲージ
- # (0:横にグラデーション 1:縦にグラデーション 2:斜めにグラデーション(激重))
- grade1 = 1
- grade2 = 0
- # 色設定。color1:外枠,color2:中枠
- # color3:空ゲージダークカラー,color4:空ゲージライトカラー
- # color5:実ゲージダークカラー,color6:実ゲージライトカラー
- color1 = Color.new(0, 0, 0, 192)
- color2 = Color.new(255, 255, 192, 192)
- color3 = Color.new(0, 0, 0, 192)
- color4 = Color.new(64, 0, 0, 192)
- color5 = Color.new(80 * rate, 80 - 80 * rate ** 2, 80 - 80 * rate, 192)
- color6 = Color.new(240 * rate, 240 - 240 * rate ** 2, 240 - 240 * rate, 192)
- # 変数expに描画するゲージの幅を代入
- if actor.next_exp != 0
- exp = (width + plus_width) * actor.now_exp * rate_width /
- 100 / actor.next_exp
- else
- exp = (width + plus_width) * rate_width / 100
- end
- # ゲージの描画
- gauge_rect(x + plus_x + width * rate_x / 100, y + plus_y,
- width, plus_width + width * rate_width / 100,
- height, exp, align1, align2, align3,
- color1, color2, color3, color4, color5, color6, grade1, grade2)
- # オリジナルのEXP描画処理を呼び出し
- draw_actor_exp_original(actor, x, y)
- end
- #---------------------------------------------------------
- # ● ゲージの描画
- #-----------------------------------------------------
- def gauge_rect(x, y, rect_width, width, height, gauge, align1, align2, align3,
- color1, color2, color3, color4, color5, color6, grade1, grade2)
- case align1
- when 1
- x += (rect_width - width) / 2
- when 2
- x += rect_width - width
- end
- case align2
- when 1
- y -= height / 2
- when 2
- y -= height
- end
- # 枠描画
- self.contents.fill_rect(x, y, width, height, color1)
- self.contents.fill_rect(x + 1, y + 1, width - 2, height - 2, color2)
- if align3 == 0
- if grade1 == 2
- grade1 = 3
- end
- if grade2 == 2
- grade2 = 3
- end
- end
- if (align3 == 1 and grade1 == 0) or grade1 > 0
- color = color3
- color3 = color4
- color4 = color
- end
- if (align3 == 1 and grade2 == 0) or grade2 > 0
- color = color5
- color5 = color6
- color6 = color
- end
- # 空ゲージの描画
- self.contents.gradation_rect(x + 2, y + 2, width - 4, height - 4,
- color3, color4, grade1)
- if align3 == 1
- x += width - gauge
- end
- # 実ゲージの描画
- self.contents.gradation_rect(x + 2, y + 2, gauge - 4, height - 4,
- color5, color6, grade2)
- end
- end
- #--------------------------------------------------------------
- # Bitmapクラスに新たな機能を追加します。
- #===================================================================
- class Bitmap
- #------------------------------------------------------------
- # ● 矩形をグラデーション表示
- # color1 : スタートカラー
- # color2 : エンドカラー
- # align : 0:横にグラデーション
- # 1:縦にグラデーション
- # 2:斜めにグラデーション(激重につき注意)
- #--------------------------------------------------------
- def gradation_rect(x, y, width, height, color1, color2, align = 0)
- if align == 0
- for i in x...x + width
- red = color1.red + (color2.red - color1.red) * (i - x) / (width - 1)
- green = color1.green +
- (color2.green - color1.green) * (i - x) / (width - 1)
- blue = color1.blue +
- (color2.blue - color1.blue) * (i - x) / (width - 1)
- alpha = color1.alpha +
- (color2.alpha - color1.alpha) * (i - x) / (width - 1)
- color = Color.new(red, green, blue, alpha)
- fill_rect(i, y, 1, height, color)
- end
- elsif align == 1
- for i in y...y + height
- red = color1.red +
- (color2.red - color1.red) * (i - y) / (height - 1)
- green = color1.green +
- (color2.green - color1.green) * (i - y) / (height - 1)
- blue = color1.blue +
- (color2.blue - color1.blue) * (i - y) / (height - 1)
- alpha = color1.alpha +
- (color2.alpha - color1.alpha) * (i - y) / (height - 1)
- color = Color.new(red, green, blue, alpha)
- fill_rect(x, i, width, 1, color)
- end
- elsif align == 2
- for i in x...x + width
- for j in y...y + height
- red = color1.red + (color2.red - color1.red) *
- ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
- green = color1.green + (color2.green - color1.green) *
- ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
- blue = color1.blue + (color2.blue - color1.blue) *
- ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
- alpha = color1.alpha + (color2.alpha - color1.alpha) *
- ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
- color = Color.new(red, green, blue, alpha)
- set_pixel(i, j, color)
- end
- end
- elsif align == 3
- for i in x...x + width
- for j in y...y + height
- red = color1.red + (color2.red - color1.red) *
- ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
- green = color1.green + (color2.green - color1.green) *
- ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
- blue = color1.blue + (color2.blue - color1.blue) *
- ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
- alpha = color1.alpha + (color2.alpha - color1.alpha) *
- ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
- color = Color.new(red, green, blue, alpha)
- set_pixel(i, j, color)
- end
- end
- end
- end
- end
- #==============================================================================
- # ■ Spriteset_Battle
- #------------------------------------------------------------------------------
- # 处理战斗画面的活动块的类。本类在 Scene_Battle 类
- # 的内部使用。
- #==============================================================================
- class Spriteset_Battle
- #--------------------------------------------------------------------------
- # ● 定义实例变量
- #--------------------------------------------------------------------------
- attr_reader :viewport1 # 敌人方的显示端口
- attr_reader :viewport2 # 角色方的显示端口
- #--------------------------------------------------------------------------
- # ● 初始化变量
- #--------------------------------------------------------------------------
- def initialize
- # 生成显示端口
- @viewport1 = Viewport.new(0, 0, 640, 480)
- @viewport2 = Viewport.new(0, 0, 640, 480)
- @viewport3 = Viewport.new(0, 0, 640, 480)
- @viewport4 = Viewport.new(0, 0, 640, 480)
- @viewport2.z = 101
- @viewport3.z = 200
- @viewport4.z = 5000
- # 生成战斗背景活动块
- @battleback_sprite = Sprite.new(@viewport1)
- # 生成敌人活动块
- @enemy_sprites = []
- for enemy in $game_troop.enemies.reverse
- @enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy))
- end
- # 生成敌人活动块
- @actor_sprites = []
- @actor_sprites.push(Sprite_Battler.new(@viewport2))
- @actor_sprites.push(Sprite_Battler.new(@viewport2))
- @actor_sprites.push(Sprite_Battler.new(@viewport2))
- @actor_sprites.push(Sprite_Battler.new(@viewport2))
- # 生成天候
- @weather = RPG::Weather.new(@viewport1)
- # 生成图片活动块
- @picture_sprites = []
- for i in 51..100
- @picture_sprites.push(Sprite_Picture.new(@viewport3,
- $game_screen.pictures[i]))
- end
- # 生成计时器块
- @timer_sprite = Sprite_Timer.new
- # 刷新画面
- update
- end
- #--------------------------------------------------------------------------
- # ● 释放
- #--------------------------------------------------------------------------
- def dispose
- # 如果战斗背景位图存在的情况下就释放
- if @battleback_sprite.bitmap != nil
- @battleback_sprite.bitmap.dispose
- end
- # 释放战斗背景活动块
- @battleback_sprite.dispose
- # 释放敌人活动块、角色活动块
- for sprite in @enemy_sprites + @actor_sprites
- sprite.dispose
- end
- # 释放天候
- @weather.dispose
- # 释放图片活动块
- for sprite in @picture_sprites
- sprite.dispose
- end
- # 释放计时器活动块
- @timer_sprite.dispose
- # 释放显示端口
- @viewport1.dispose
- @viewport2.dispose
- @viewport3.dispose
- @viewport4.dispose
- end
- #--------------------------------------------------------------------------
- # ● 显示效果中判定
- #--------------------------------------------------------------------------
- def effect?
- # 如果是在显示效果中的话就返回 true
- for sprite in @enemy_sprites + @actor_sprites
- return true if sprite.effect?
- end
- return false
- end
- #--------------------------------------------------------------------------
- # ● 刷新画面
- #--------------------------------------------------------------------------
- def update
- # 刷新角色的活动块 (对应角色的替换)
- @actor_sprites[0].battler = $game_party.actors[0]
- @actor_sprites[1].battler = $game_party.actors[1]
- @actor_sprites[2].battler = $game_party.actors[2]
- @actor_sprites[3].battler = $game_party.actors[3]
- # 战斗背景的文件名与现在情况有差异的情况下
- if @battleback_name != $game_temp.battleback_name
- @battleback_name = $game_temp.battleback_name
- if @battleback_sprite.bitmap != nil
- @battleback_sprite.bitmap.dispose
- end
- @battleback_sprite.bitmap = RPG::Cache.battleback(@battleback_name)
- @battleback_sprite.src_rect.set(0, 0, 640, 480)
- end
- # 刷新战斗者的活动块
- for sprite in @enemy_sprites + @actor_sprites
- sprite.update
- end
- # 刷新天气图形
- @weather.type = $game_screen.weather_type
- @weather.max = $game_screen.weather_max
- @weather.update
- # 刷新图片活动块
- for sprite in @picture_sprites
- sprite.update
- end
- # 刷新计时器活动块
- @timer_sprite.update
- # 设置画面的色调与震动位置
- @viewport1.tone = $game_screen.tone
- @viewport1.ox = $game_screen.shake
- # 设置画面的闪烁色
- @viewport4.color = $game_screen.flash_color
- # 刷新显示端口
- @viewport1.update
- @viewport2.update
- @viewport4.update
- end
- end
- #==============================================================================
- # ■ Window_BattleStatus
- #------------------------------------------------------------------------------
- # 显示战斗画面同伴状态的窗口。
- #==============================================================================
- class Window_BattleStatus < Window_Base
- #--------------------------------------------------------------------------
- # ● 初始化对像
- #--------------------------------------------------------------------------
- def initialize
- super(0, 320, 640, 180)
- self.contents = Bitmap.new(width - 32, height - 32)
- self.opacity = 0
- @level_up_flags = [false, false, false, false]
- refresh
- end
- #--------------------------------------------------------------------------
- # ● 释放
- #--------------------------------------------------------------------------
- def dispose
- super
- end
- #--------------------------------------------------------------------------
- # ● 设置升级标志
- # actor_index : 角色索引
- #--------------------------------------------------------------------------
- def level_up(actor_index)
- @level_up_flags[actor_index] = true
- end
- #--------------------------------------------------------------------------
- # ● 刷新
- #--------------------------------------------------------------------------
- def refresh
- self.contents.clear
- @item_max = $game_party.actors.size
- for i in 0...$game_party.actors.size
- actor = $game_party.actors[i]
- actor_x = i * 160 + 4
- self.contents.font.size = 20
- draw_actor_graphic(actor, actor_x+10, 100)
- draw_actor_name(actor, actor_x+25, 50)
- self.contents.font.size = 22
- draw_actor_hp(actor, actor_x, 70, 120)
- draw_actor_sp(actor, actor_x, 86, 120)
- if @level_up_flags[i]
- self.contents.font.color = normal_color
- self.contents.draw_text(actor_x, 96, 120, 32, " 升级了!")
- else
- self.contents.font.size = 18
- draw_actor_state(actor, actor_x, 105)
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 刷新画面
- #--------------------------------------------------------------------------
- def update
- super
- # 主界面的不透明度下降
- if $game_temp.battle_main_phase
- self.contents_opacity -= 4 if self.contents_opacity > 191
- else
- self.contents_opacity += 4 if self.contents_opacity < 255
- end
- end
- end
- class Scene_Battle
- #--------------------------------------------------------------------------
- # ● 主处理
- #--------------------------------------------------------------------------
- def main
- # 初始化战斗用的各种暂时数据
- $game_temp.in_battle = true
- $game_temp.battle_turn = 0
- $game_temp.battle_event_flags.clear
- $game_temp.battle_abort = false
- $game_temp.battle_main_phase = false
- $game_temp.battleback_name = $game_map.battleback_name
- $game_temp.forcing_battler = nil
- # 初始化战斗用事件解释器
- $game_system.battle_interpreter.setup(nil, 0)
- # 准备队伍
- @troop_id = $game_temp.battle_troop_id
- $game_troop.setup(@troop_id)
- # 生成角色命令窗口
- s1 = $data_system.words.attack
- s2 = $data_system.words.skill
- s3 = $data_system.words.guard
- s4 = $data_system.words.item
- s5 = "逃跑"
- @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4, s5])
- # 不能逃跑的情况下
- if $game_temp.battle_can_escape == false
- @actor_command_window.disable_item(4)
- end
- @actor_command_window.y = 160
- @actor_command_window.back_opacity = 160
- @actor_command_window.active = false
- @actor_command_window.visible = false
- # 生成其它窗口
- @party_command_window = Window_PartyCommand.new
- @help_window = Window_Help.new
- @help_window.back_opacity = 160
- @help_window.visible = false
- @status_window = Window_BattleStatus.new
- @message_window = Window_Message.new
- # 生成活动块
- @spriteset = Spriteset_Battle.new
- # 初始化等待计数
- @wait_count = 0
- # 执行过渡
- if $data_system.battle_transition == ""
- Graphics.transition(20)
- else
- Graphics.transition(40, "Graphics/Transitions/" +
- $data_system.battle_transition)
- end
- # 开始自由战斗回合
- start_phase1
- # 主循环
- loop do
- # 刷新游戏画面
- Graphics.update
- # 刷新输入信息
- Input.update
- # 刷新画面
- update
- # 如果画面切换的话就中断循环
- if $scene != self
- break
- end
- end
- # 刷新地图
- $game_map.refresh
- # 准备过渡
- Graphics.freeze
- # 释放窗口
- @actor_command_window.dispose
- @party_command_window.dispose
- @help_window.dispose
- @status_window.dispose
- @message_window.dispose
- if @skill_window != nil
- @skill_window.dispose
- end
- if @item_window != nil
- @item_window.dispose
- end
- if @result_window != nil
- @result_window.dispose
- end
- # 释放活动块
- @spriteset.dispose
- # 标题画面切换中的情况
- if $scene.is_a?(Scene_Title)
- # 淡入淡出画面
- Graphics.transition
- Graphics.freeze
- end
- # 战斗测试或者游戏结束以外的画面切换中的情况
- if $BTEST and not $scene.is_a?(Scene_Gameover)
- $scene = nil
- end
- end
- end
- class Scene_Battle
- def start_phase2
- # 转移到回合 2
- @phase = 2
- # 设置角色为非选择状态
- @actor_index = -1
- @active_battler = nil
- # 有效化同伴指令窗口
- #@party_command_window.active = true
- #@party_command_window.visible = true
- # 无效化角色指令窗口
- @actor_command_window.active = false
- @actor_command_window.visible = false
- # 清除主回合标志
- $game_temp.battle_main_phase = false
- # 清除全体同伴的行动
- $game_party.clear_actions
- # 不能输入命令的情况下
- unless $game_party.inputable?
- # 开始主回合
- start_phase4
- end
- end
- #--------------------------------------------------------------------------
- # ● 刷新画面 (同伴命令回合)
- #--------------------------------------------------------------------------
- def update_phase2
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 开始角色的命令回合
- start_phase3
- end
- # 按下 C 键的情况下
- if Input.trigger?(Input::C)
- # 同伴指令窗口光标位置分支
- case @party_command_window.index
- when 0 # 战斗
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 开始角色的命令回合
- start_phase3
- when 1 # 逃跑
- # 不能逃跑的情况下
- if $game_temp.battle_can_escape == false
- # 演奏冻结 SE
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 逃走处理
- update_phase2_escape
- end
- return
- end
- end
-
- class Scene_Battle
- #--------------------------------------------------------------------------
- # ● 刷新画面 (角色命令回合 : 基本命令)
- #--------------------------------------------------------------------------
- def update_phase3_basic_command
- # 按下 B 键的情况下
- if Input.trigger?(Input::B)
- # 演奏取消 SE
- $game_system.se_play($data_system.cancel_se)
- # 转向前一个角色的指令输入
- phase3_prior_actor
- return
- end
- # 按下 C 键的情况下
- if Input.trigger?(Input::C)
- # 角色指令窗口光标位置分之
- case @actor_command_window.index
- when 0 # 攻击
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 设置行动
- @active_battler.current_action.kind = 0
- @active_battler.current_action.basic = 0
- # 开始选择敌人
- start_enemy_select
- when 1 # 特技
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 设置行动
- @active_battler.current_action.kind = 1
- # 开始选择特技
- start_skill_select
- when 2 # 防御
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 设置行动
- @active_battler.current_action.kind = 0
- @active_battler.current_action.basic = 1
- # 转向下一位角色的指令输入
- phase3_next_actor
- when 3 # 物品
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 设置行动
- @active_battler.current_action.kind = 2
- # 开始选择物品
- start_item_select
- when 4
- escaping
- end
- return
- end
- end
- def escaping
- # 不能逃跑的情况下
- if $game_temp.battle_can_escape == false
- # 演奏冻结 SE
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 逃走处理
- update_phase2_escape
- end
- end
- module Momo_IconCommand
- # 图标名称设定
- ATTACK_ICON_NAME = "攻击" # 攻撃
- SKILL_ICON_NAME = "技能" # 特技
- GUARD_ICON_NAME = "防御" # 防御
- ITEM_ICON_NAME = "物品" # 物品
- ESCAPE_ICON_NAME = "逃跑" # 逃跑
- # X坐标修正
- X_PLUS = 30#-120
- # Y坐标修正
- Y_PLUS = -15#10
- # 选择时图标的动作
- # 0:静止 1:放大
- SELECT_TYPE = 0
- # 闪烁时光芒的颜色
- FLASH_COLOR = Color.new(255, 255, 255, 128)
- # 闪烁时间
- FLASH_DURATION = 10
- # 闪烁间隔
- FLASH_INTERVAL = 20
- # 是否写出文字的名称
- COM_NAME_DROW = true
- # 文字名称是否移动
- COM_NAME_MOVE = true
- # 文字内容
- ATTACK_NAME = "攻击" # 攻击
- SKILL_NAME = "特技" # 特技
- GUARD_NAME = "防御" # 防御
- ITEM_NAME = "物品" # 物品
- ESCAPE_NAME = "逃跑" # 逃跑
- # 文字颜色
- COM_NAME_COLOR = Color.new(255, 255, 255, 255)
- # 文字坐标修正
- COM_NAME_X_PLUS = 0
- COM_NAME_Y_PLUS = 0
- end
- class Window_CommandIcon < Window_Selectable
- attr_accessor :last_index
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize(x, y, commands)
- super(x, y, 32, 32)
- # ウィンドウスキンに空文字列を指定してウィンドウを描画しないようにする
- self.windowskin = RPG::Cache.windowskin("")
- @item_max = commands.size
- @commands = commands
- @column_max = commands.size
- @index = 0
- @last_index = nil
- @name_sprite = nil
- @sprite = []
- refresh
- end
- def dispose
- super
- for sprite in @sprite
- sprite.dispose unless sprite.nil?
- end
- @name_sprite.dispose unless @name_sprite.nil?
- end
- #--------------------------------------------------------------------------
- # ● リフレッシュ
- #--------------------------------------------------------------------------
- def refresh
- @name_sprite.dispose unless @name_sprite.nil?
- for sprite in @sprite
- sprite.dispose unless sprite.nil?
- end
- @name_sprite = nil
- draw_com_name if Momo_IconCommand::COM_NAME_DROW
- @sprite = []
- for i in 0...@item_max
- draw_item(i)
- end
- end
- #--------------------------------------------------------------------------
- # ● 項目の描画
- #--------------------------------------------------------------------------
- def draw_item(index)
- @sprite[index] = Sprite_Icon.new(nil, @commands[index])
- @sprite[index].z = self.z + 100##########################
- end
- def draw_com_name
- @name_sprite = Sprite_Comm_Name.new(nil, get_com_name)
-
- end
-
- # 更新
- def update
- super
- icon_update
- com_name_update if Momo_IconCommand::COM_NAME_DROW
- if move_index?
- @last_index = self.index
- end
- end
- # アイコンの更新
- def icon_update
- for i in [email protected]
- @sprite[i].active = (self.index == i)
- @sprite[i].x = self.x + i * 24
- @sprite[i].y = self.y + 0
- @sprite[i].z = (self.index == i) ? self.z + 2 : self.z + 1
- @sprite[i].visible = self.visible
- @sprite[i].update
- end
- end
- # コマンドネームの更新
- def com_name_update
- if move_index?
- @name_sprite.name = get_com_name
- end
- @name_sprite.x = self.x - 12 + Momo_IconCommand::COM_NAME_X_PLUS
- @name_sprite.y = self.y - 40 + Momo_IconCommand::COM_NAME_Y_PLUS
- @name_sprite.z = self.z + 1
- @name_sprite.active = self.active
- @name_sprite.visible = self.visible
- @name_sprite.update
- end
- def get_com_name
- make_name_set if @name_set.nil?
- name = @name_set[self.index]
- name = "" if name.nil?
- return name
- end
- def make_name_set
- @name_set = []
- @name_set[0] = Momo_IconCommand::ATTACK_NAME
- @name_set[1] = Momo_IconCommand::SKILL_NAME
- @name_set[2] = Momo_IconCommand::GUARD_NAME
- @name_set[3] = Momo_IconCommand::ITEM_NAME
- @name_set[4] = Momo_IconCommand::ESCAPE_NAME
- end
- def move_index?
- return self.index != @last_index
- end
- def need_reset
- @name_sprite.need_reset = true if Momo_IconCommand::COM_NAME_DROW
- end
- end
- # アイコン用スプライト
- class Sprite_Icon < Sprite
- attr_accessor :active
- attr_accessor :icon_name
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize(viewport, icon_name)
- super(viewport)
- @icon_name = icon_name
- @last_icon = @icon_name
- @count = 0
- self.bitmap = RPG::Cache.icon(@icon_name)
- self.ox = self.bitmap.width / 2
- self.oy = self.bitmap.height / 2
- @active = false
- end
- #--------------------------------------------------------------------------
- # ● 解放
- #--------------------------------------------------------------------------
- def dispose
- if self.bitmap != nil
- self.bitmap.dispose
- end
- super
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- def update
- super
- if @icon_name != @last_icon
- @last_icon = @icon_name
- self.bitmap = RPG::Cache.icon(@icon_name)
- end
- if @active
- @count += 1
- case Momo_IconCommand::SELECT_TYPE
- when 0
- icon_flash
- when 1
- icon_zoom
- end
- @count = 0 if @count == 20
- else
- icon_reset
- end
- end
- def icon_flash
- if @count % Momo_IconCommand::FLASH_INTERVAL == 0 or @count == 1
- self.flash(Momo_IconCommand::FLASH_COLOR, Momo_IconCommand::FLASH_DURATION)
- end
- end
- def icon_zoom
- case @count
- when 1..10
- zoom = 1.0 + @count / 10.0
- when 11..20
- zoom = 2.0 - (@count - 10) / 10.0
- end
- self.zoom_x = zoom
- self.zoom_y = zoom
- end
- def icon_reset
- @count = 0
- self.zoom_x = 1.0
- self.zoom_y = 1.0
- end
- end
- # コマンドネーム用スプライト
- class Sprite_Comm_Name < Sprite
- attr_accessor :active
- attr_accessor :name
- attr_accessor :need_reset
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize(viewport, name)
- super(viewport)
- @name = name
- @last_name = nil
- @count = 0
- @x_plus = 0
- @opa_plus = 0
- @need_reset = false
- @active = false
- self.bitmap = Bitmap.new(160, 32)
- end
- #--------------------------------------------------------------------------
- # ● 解放
- #--------------------------------------------------------------------------
- def dispose
- if self.bitmap != nil
- self.bitmap.dispose
- end
- super
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- def update
- super
- if @active
- if need_reset?
- @need_reset = false
- @last_name = @name
- text_reset
- end
- move_text if Momo_IconCommand::COM_NAME_MOVE
- end
- end
- def move_text
- @count += 1
- @x_plus = [@count * 8, 80].min
- self.x = self.x - 80 + @x_plus
- self.opacity = @count * 25
- end
- def text_reset
- @count = 0
- @x_plus = 0
- self.bitmap.clear
- self.bitmap.font.color = Momo_IconCommand::COM_NAME_COLOR
- if @name == Momo_IconCommand::ESCAPE_NAME and $game_temp.battle_can_escape == false
- self.bitmap.font.color = Color.new(192, 192, 192, 255)
- else
- self.bitmap.font.color = Momo_IconCommand::COM_NAME_COLOR
- end
- self.bitmap.draw_text(0, 0, 160, 32, @name)
- end
- def need_reset?
- return (@name != @last_name or @need_reset)
- end
- end
- class Scene_Battle
- #--------------------------------------------------------------------------
- # ● プレバトルフェーズ開始
- #--------------------------------------------------------------------------
- alias scene_battle_icon_command_start_phase1 start_phase1
- def start_phase1
- com1 = Momo_IconCommand::ATTACK_ICON_NAME
- com2 = Momo_IconCommand::SKILL_ICON_NAME
- com3 = Momo_IconCommand::GUARD_ICON_NAME
- com4 = Momo_IconCommand::ITEM_ICON_NAME
- com5 = Momo_IconCommand::ESCAPE_ICON_NAME
- @actor_command_window = Window_CommandIcon.new(0, 0, [com1, com2, com3, com4, com5])
- @actor_command_window.y = 160
- @actor_command_window.back_opacity = 160
- @actor_command_window.active = false
- @actor_command_window.visible = false
- @actor_command_window.update
- scene_battle_icon_command_start_phase1
- end
- #--------------------------------------------------------------------------
- # ● アクターコマンドウィンドウのセットアップ
- #--------------------------------------------------------------------------
- alias scene_battle_icon_command_phase3_setup_command_window phase3_setup_command_window
- def phase3_setup_command_window
- scene_battle_icon_command_phase3_setup_command_window
- # アクターコマンドウィンドウの位置を設定
- @actor_command_window.x = command_window_actor_x(@actor_index)
- @actor_command_window.y = command_window_actor_y(@actor_index)
- @actor_command_window.need_reset
- end
- def command_window_actor_x(index)
- #$game_party.actors[index].screen_x + Momo_IconCommand::X_PLUS
- index * 160 + Momo_IconCommand::X_PLUS
- end
- def command_window_actor_y(index)
- #$game_party.actors[index].screen_y + Momo_IconCommand::Y_PLUS
- 390 + Momo_IconCommand::Y_PLUS
- end
- end
- #==============================================================================
- # 本脚本来自www.66RPG.com,使用和转载请保留此信息
- #==============================================================================
复制代码 |
|