赞 | 13 |
VIP | 118 |
好人卡 | 28 |
积分 | 12 |
经验 | 35779 |
最后登录 | 2017-7-6 |
在线时间 | 1564 小时 |
Lv3.寻梦者
- 梦石
- 0
- 星屑
- 1195
- 在线时间
- 1564 小时
- 注册时间
- 2008-7-30
- 帖子
- 4418
|
回复 六祈 的帖子
{:nm_4:} 很好,FSL协议正是需要大家一起来找BUG,然后去修正他,这样的快速开发模式。下面我已经将你提出来的BUG修补好了,请你在上面把判定的部分更新上,并写上更新内容:
Game_Actor#skill_can_use?方法的问题是纯粹忘记了要用alias,{:nm_2:}- #===============================================================================
- # ■ FSL 技能消耗物品
- # FSL Skill Need Item
- #-------------------------------------------------------------------------------
- # 设定一些值,当拥有制定物品的制定个数及以上时才可发动特技。发动特技会
- # 消耗掉这些物品。
- #
- # 在技能的“注释”中如下书写(请确保使用的是西文半角而不是全角):
- # <need_item 物品id,对应数量 物品id,对应数量 …… >
- # <need_item 1,1 2,2 3,3>
- #
- #-------------------------------------------------------------------------------
- # 更新作者: DeathKing 六祈
- # 许可协议: FSL -NOS ADK
- # 项目分类: VX \ 数据工程
- # 衍生关系:
- # 项目版本: 1.4.0725
- # 建立日期: 2010年05月29日
- # 最后更新: 2010年07月25日
- # 引用网址:
- #-------------------------------------------------------------------------------
- # - 1.1.0725 (2010.07.25) By 六祈
- # * 修正了Game_Actor#skill_can_use?方法的错误;
- # * 修正了Window_SNItem.skill_can_use?方法的错误;
- #
- # - 1.1.0719 (2010.07.19) By DeathKing
- # * ADK的升级,可兼容沉影不器的读取装备注释脚本;
- #
- # - 1.1.0714 (2010.07.14) By DeathKing
- # * 修改了消耗物品的算法;
- #
- # - 1.1.0607 (2010.06.07) By DeathKing
- # * 改变了设置方法;
- #
- # - 1.0.0529 (2010.05.29) By DeathKing
- # * 初始版本完成;
- #
- #===============================================================================
- #-------------------------------------------------------------------------------
- # ▼ 登记FSL
- #-------------------------------------------------------------------------------
- $fscript = {} if $fscript == nil
- $fscript["SkillNeedItem"] = "1.4.0725"
- #-------------------------------------------------------------------------------
- # ▼ 通用配置模块
- #-------------------------------------------------------------------------------
- module FSL
- module Conf
- module SNItem
-
- # 技能消耗物品存在着一些不是十分完美的地方,由于战斗系统并不是即时的,
- # 我们不能随时对物品进行检查,事实上,我们尝试过很多方法,最后都没有成
- # 功。因此我们放弃了对玩家的提示,这个脚本只有在技能实际上被使用时才会
- # 扣除物品,因此如果技能发动时,条件不满足,技能将会丢失。
- # ~~~~~~~~~~~~~~~~~~~~~~~~~
-
- # 窗口的相关配置,一般不修改
- WINDOW_X = 272 # X 544 / 2
- WINDOW_Y = 112 # Y 56 * 2
- WINDOW_W = 274 # 宽
- WINDOW_H = 640 # 高
- BACK_OPACITY = 200 # 透明度,255为不透明
-
-
- TEXT_NEED = "需要:" # “需要:”一词的字符
- TEXT_NEED_X = WINDOW_X - 104 # “需要:”字符的 X 坐标
- TEXT_ITEM_NUM_X = WINDOW_X - 52 # 物品数量的 X 坐标
-
- end
- end
- end
- #==============================================================================
- # ■ Window_SNItem
- #------------------------------------------------------------------------------
- # 需要的物品的窗口。
- #==============================================================================
- class Window_SNItem < Window_Base
-
- include FSL::Conf::SNItem
-
- #--------------------------------------------------------------------------
- # ● 初始化对像
- # x : 窗口 X 座标
- # y : 窗口 Y 座标
- # width : 窗口宽度
- # height : 窗口高度
- #--------------------------------------------------------------------------
- def initialize(x=WINDOW_X, y=WINDOW_Y, width=WINDOW_W, height=WINDOW_H)
- super(x, y, width, height)
- self.back_opacity = BACK_OPACITY
- self.visible = false
- end
- #--------------------------------------------------------------------------
- # ● 判定技能可否使用(需要的物品是否满足)
- # skill : 技能
- #--------------------------------------------------------------------------
- def self.skill_can_use?(skill)
- # 如果传递过来的skill为空
- return false if skill == nil
- # 读取need_item项的参数
- need_item = skill.read_notes["need_item"]
- # need_item参数为空的话返回true
- return true if need_item == nil
- # 重新生成参数列表
- need_item_clone = []
- need_item.each do |e|
- need_item_clone << [ e.split(",")[0].to_i , e.split(",")[1].to_i ]
- end
- need_item = need_item_clone
- # 遍历
- need_item.each_index do |i|
- # 生成物品id
- item_id = need_item[i][0]
- # 生成物品数量
- item_num = need_item[i][1]
- # 是否拥有物品,是的话返回物品的索引,不是的话返回nil
- item_exist = $game_party.items.index($data_items[item_id])
- # 不存在就返回false
- return false if item_exist == nil
- # 返回物品
- test_item = $game_party.items[item_exist]
- # 如果不可用就返回
- return false if ($game_party.item_number(test_item) < item_num)
- end
- return true
- end
- #--------------------------------------------------------------------------
- # ● 刷新窗口
- # skill : 技能
- # index : 技能在技能窗口的索引,用来判定本
- # 窗口应该显示在左边还是右边
- #--------------------------------------------------------------------------
- def refresh( skill, index = 0)
- # 清除之前产生的位图
- self.contents.clear
- # 如果skill为空就返回false
- return false if skill == nil
- # 先让需要窗口不可见
- self.visible = false
- # 读取参数
- need_item = skill.read_notes["need_item"]
- # 如果参数不是个数组就将需要窗口隐藏并返回false
- return false unless need_item.is_a? Array
- # 重新生成参数列表
- need_item_clone = []
- need_item.each do |e|
- need_item_clone << [ e.split(",")[0].to_i , e.split(",")[1].to_i ]
- end
- need_item = need_item_clone
- # 如果参数列表为空就返回
- return false unless need_item.size >= 1
- # 判定索引以决定窗口位置
- self.x = index % 2 == 0 ? WINDOW_X : 0
- # 改变窗口大小
- self.height = need_item.size * 24 + 32
- # 将窗口置为可见
- self.visible = true
- create_contents
- # 遍历参数列表
- need_item.each_index do |i|
- # 生成物品id
- item_id = need_item[i][0]
- # 生成物品数量
- item_num = need_item[i][1]
- # 生成物品
- item = $data_items[item_id]
- # 判定物品是否足够
- enabled = $game_party.item_number(item) >= item_num ? true : false
- # 绘制文字
- draw_item_name(item, 0, WLH * i, enabled)
- self.contents.font.color.alpha = enabled ? 255 : 128
- self.contents.draw_text(TEXT_NEED_X, WLH * i, 96, WLH, TEXT_NEED) #
- self.contents.draw_text(TEXT_ITEM_NUM_X, WLH * i, 32, WLH, item_num) #
- end # need_item.each_index
- end
- #--------------------------------------------------------------------------
- # ● 执行对物品消耗
- # skill : 技能
- #--------------------------------------------------------------------------
- def self.exec_cost( skill )
- # 传递错误就直接返回false
- return false if skill == nil
- # 读取need_item项的参数
- need_item = skill.read_notes["need_item"]
- # 如果参数不是个数组就将需要窗口隐藏并返回false
- return true unless need_item.is_a? Array
- need_item.each do |e|
- id = e.split(",")[0].to_i
- num = e.split(",")[1].to_i
- $game_party.gain_item($data_items[id], -num)
- end
- end
-
- end # Window_SNItem
- #==============================================================================
- # ■ Game_Actor
- #------------------------------------------------------------------------------
- # 处理角色的类。本类在 Game_Actors 类 ($game_actors) 的内部使用、
- # Game_Party 类请参考 ($game_party) 。
- #==============================================================================
- class Game_Actor
-
- alias snitem_skill_can_use? skill_can_use?
-
- #--------------------------------------------------------------------------
- # ● 可用技能判断
- # skill : 技能
- #--------------------------------------------------------------------------
- def skill_can_use?(skill)
- return false unless Window_SNItem.skill_can_use?(skill)
- snitem_skill_can_use?(skill)
- end
- end
- #==============================================================================
- # ■ Scene_Skill
- #------------------------------------------------------------------------------
- # 处理特技画面的类。
- #==============================================================================
- class Scene_Skill < Scene_Base
- alias snitem_initialize initialize
- alias snitem_terminate terminate
- alias snitem_update update
- alias snitem_use_skill_nontarget use_skill_nontarget
- #--------------------------------------------------------------------------
- # ● 初始化对像
- # actor_index : 角色位置
- #--------------------------------------------------------------------------
- def initialize( actor_index = 0, equip_index = 0 )
- snitem_initialize
- @snitem_window = Window_SNItem.new
- end
- #--------------------------------------------------------------------------
- # ● 结束处理
- #--------------------------------------------------------------------------
- def terminate
- snitem_terminate
- @snitem_window.dispose
- end
- #--------------------------------------------------------------------------
- # ● 更新画面
- #--------------------------------------------------------------------------
- def update
- snitem_update
- @snitem_window.refresh( @skill_window.skill, @skill_window.index )
- end
-
- #--------------------------------------------------------------------------
- # ● 非同伴目标使用物品
- #--------------------------------------------------------------------------
- def use_skill_nontarget
- # 执行对物品的消耗
- Window_SNItem.exec_cost(@skill)
- # 调用原方法
- snitem_use_skill_nontarget
- end
-
- end # Scene_Skill
- #==============================================================================
- # ■ Scene_Battle
- #------------------------------------------------------------------------------
- # 处理战斗画面的类。
- #=============================================================================
- class Scene_Battle < Scene_Base
-
- include FSL::Conf::SNItem
-
- alias snitem_update_skill_selection update_skill_selection
- alias snitem_start_skill_selection start_skill_selection
- alias snitem_end_skill_selection end_skill_selection
- alias snitem_execute_action_skill execute_action_skill
-
- #--------------------------------------------------------------------------
- # ● 开始技能选择
- #--------------------------------------------------------------------------
- def start_skill_selection
- snitem_start_skill_selection
- # 创建需要道具窗口,并把y坐标上移
- @snitem_window = Window_SNItem.new(270,56)
- end
- #--------------------------------------------------------------------------
- # ● 结束技能选择
- #--------------------------------------------------------------------------
- def end_skill_selection
- if @skill_window != nil
- @snitem_window.dispose
- @snitem_window = nil
- end
- snitem_end_skill_selection
- end
- #--------------------------------------------------------------------------
- # ● 更新技能选择
- #--------------------------------------------------------------------------
- def update_skill_selection
- # 刷新技能
- @snitem_window.refresh( @skill_window.skill, @skill_window.index )
- # 调用原方法内容
- snitem_update_skill_selection
- end
- #--------------------------------------------------------------------------
- # ● 执行战斗行动:使用技能
- #--------------------------------------------------------------------------
- def execute_action_skill
- # 执行原内容
- snitem_execute_action_skill
- # 生成skill
- skill = @active_battler.action.skill
- Window_SNItem.exec_cost( skill )
- end
-
- end # Scene_Battle
复制代码 |
|