赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 1 |
经验 | 29377 |
最后登录 | 2013-8-7 |
在线时间 | 1 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 1 小时
- 注册时间
- 2008-8-3
- 帖子
- 976
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
最新动态:
08.10.12
增加了商店里也能显示限制的插件,感谢 龍狼 提出!见本楼最后插件区
08.10.5
在Kissye姐的帮助下终于找到与装备扩张冲突的解决办法!(见下面兼容性说明)感谢Kissye姐!
08.9.9
增加一个状态栏显示裸体无状态能力值的插件,见本楼最后插件区
--------------------------------------------------------------------
脚本的功能就是 ,可以在数据库里面自定义装备需要 人物的等级、攻击力、防御力、精神、敏捷达到一定值以上才可以使用
新更新的补充脚本,连装备以外的普通物品都可以限制
例如,可以和superufo的 升级手动加点系统 一起使用,根据加点方向决定你能穿起什么装备,使用什么物品
---------------------------------------------------------------------
如果发现BUG请一定指出,谢谢,大概差不多是最终版了
------------------------------------------------------------------------
原来发的这个脚本只有达到一定等级才能装备的功能,貌似火星了,
应回帖同志们要求,做了一些改动,增加了能力限制。
普通物品限制写得好辛苦。。。尤其是战斗中的部分
(下面仅发下牢骚,不想看的略过)
- 主要就是战斗中2个难点,第一个是使用物品失败,物品如何不消耗,经过沉影大哥等人的指点加上自己的努力,达成了
- 然后是最难的,到底限制的是使用者还是使用目标的问题。限制使用者吧,明显不合实际,战斗中一瓶药能否被喝下去,不是看谁拿出来的,而是看丢给谁喝的。。。所以要限制使用目标才对。但是限制使用目标,又有问题了,你丢个炸弹,难道炸弹还要判断敌人等级够不够才爆炸?再说默认敌人无等级,系统直接报错给你看= =最后折腾了半天,最终还是用了兼顾的办法,让用户自定义该限制那一种,具体见下面第3部分的说明。
复制代码
------------------------------------------------------------------------
使用说明:
1.首先是装备需要一定等级能力才能使用的脚本
将下面脚本插入到MAIN前面:
-------------------------------------------------------
2.然后是数据库设定:
在数据库想要限制装备等级的装备(武器或者防具都行)的备注栏里写上[LV n] ,LV后有空格,n为等级,比如[LV 5]则5级以上(包括5级)才可以装备。不写的话,任何等级都能装备
同理也可以写上限制的攻击力、防御力、精神、敏捷,
特别注意的是这里的攻击力、防御力、精神、敏捷 指的是人物本身的能力,考虑事件改变的量,但是不考虑装备、状态提升的量,即裸体无状态值,superufo的加点脚本加的能力值也算在内
----------------------------------------------------------------------
3.新增的普通物品也限制的功能:
- =begin
- 本脚本作为装备要求等级能力值的补充,使用方法与之类似:
- 在数据库物品备注里写上[ATK n][DEF n][SPI n][AGI n] 。
- 特别地,为了确定战斗中物品等级能力限制的对象,还可以写上[LMTP n] ,
- 意为LimitType(限制类型) ,对己物品默认为1,对敌物品强制为0。
- n = 0,表示限制当前使用物品的人,根据使用者等级能力判断可否使用成功,例如要
- 对敌人扔飞刀,不是看敌人够不够强,而是看扔的人会不会(对敌物品均为0)
- 默认n = 1,表示限制物品使用目标,例如一瓶药水能否使用成功不是看是谁从包里拿出来
- 的而是看喝的人够不够格;
- n = 2,表示以上两者都限制,例如一个加全体战斗力的高级卷轴,使用的人要有足够的法
- 力,接受效果的人也要有足够的领悟力。
- n 设为大于2的值,则调整为2
- 战斗中对敌物品均限制使用者,菜单中的物品均限制使用目标,所以这两者无需限制类型。
- 删去本脚本也不会影响装备要求等级能力值的功能,
- 但是删去装备要求等级能力值脚本,本脚本将无法独立运行
- =end
- #==============================================================================
- # ■ RPG::BaseItem
- #==============================================================================
- class RPG::BaseItem
- def LimitType #物品限制类型
- n = 1
- self.note.split(/[\r\n]+/).each { |line|
- n = $1.to_i if line =~ /\[LMTP (\d+)\]/
- }
- #数值修正
- n = 0 if !self.is_a?(RPG::Weapon) and !self.is_a?(RPG::Armor) and self.for_opponent?
- n = 2 if n > 2
- return n
- end
- end
- #==============================================================================
- # ■ Window_Item
- #------------------------------------------------------------------------------
- # 物品画面、战斗画面、显示浏览物品的窗口。
- #==============================================================================
- class Window_Item < Window_Selectable
- #--------------------------------------------------------------------------
- # ● 更新帮助文本(自动显示使用物品的等级能力限制)
- #--------------------------------------------------------------------------
- def update_help
- if item != nil
- newdes = item.description
- if(item.LVlimit !=0 or item.ATKlimit !=0 or item.DEFlimit != 0 or item.SPIlimit != 0 or item.AGIlimit != 0)
- newdes += " 要求"
- case item.LimitType
- when 0
- newdes += "使用者:"
- when 1
- newdes += "使用目标:"
- when 2
- newdes += "使用者和目标:"
- end
- newdes += " LV" + item.LVlimit.to_s if item.LVlimit != 0
- newdes += " 攻" + item.ATKlimit.to_s if item.ATKlimit != 0
- newdes += " 防" + item.DEFlimit.to_s if item.DEFlimit != 0
- newdes += " 精" + item.SPIlimit.to_s if item.SPIlimit != 0
- newdes += " 敏" + item.AGIlimit.to_s if item.AGIlimit != 0
- end
- @help_window.set_text(newdes)
- else
- @help_window.set_text("")
- end
- end
- end
- #==============================================================================
- # ■ Game_Actor
- #------------------------------------------------------------------------------
- # 处理角色的类。本类在 Game_Actors 类 ($game_actors)
- # 的内部使用、Game_Party 类请参考 ($game_party) 。
- #==============================================================================
- class Game_Actor < Game_Battler
- #--------------------------------------------------------------------------
- # ● 判断是否可以使用
- # item : 物品
- #--------------------------------------------------------------------------
-
- def item_useable?(item)
- return false if self.level < item.LVlimit #等级限制
- return false if actor.parameters[2, @level] + @atk_plus < item.ATKlimit #攻击力限制
- return false if actor.parameters[3, @level] + @def_plus < item.DEFlimit #防御力限制
- return false if actor.parameters[4, @level] + @spi_plus < item.SPIlimit #精神力限制
- return false if actor.parameters[5, @level] + @agi_plus < item.AGIlimit #敏捷性限制
- return true
- end
- end
- #==============================================================================
- # ■ Scene_Item
- #------------------------------------------------------------------------------
- # 处理物品画面的类。
- #==============================================================================
- class Scene_Item < Scene_Base
- #--------------------------------------------------------------------------
- # ● 确定目标
- # 无效的情况下 (能力不足或者在不能战斗的情况下使用恢复剂) 播放 buzzer 的 SE。
- #--------------------------------------------------------------------------
- def determine_target
- used = false
- if @item.for_all?
- for target in $game_party.members
- target.item_effect(target, @item) if target.item_useable?(@item)
- used = true if ( !target.skipped and target.item_useable?(@item) )
- end
- else
- $game_party.last_target_index = @target_window.index
- target = $game_party.members[@target_window.index]
- target.item_effect(target, @item) if target.item_useable?(@item)
- used = true if ( !target.skipped and target.item_useable?(@item) )
- end
- if used
- use_item_nontarget
- else
- Sound.play_buzzer
- end
- end
- end
- #==============================================================================
- # ■ Scene_Battle
- #------------------------------------------------------------------------------
- # 处理战斗画面的类。
- #==============================================================================
- class Scene_Battle < Scene_Base
- #--------------------------------------------------------------------------
- # ● 执行战斗行动 : 物品
- #--------------------------------------------------------------------------
- def execute_action_item
- item = @active_battler.action.item
- text = sprintf(Vocab::UseItem, @active_battler.name, item.name)
- @message_window.add_instant_text(text)
- targets = @active_battler.action.make_targets
- $game_temp.common_event_id = item.common_event_id
- used = false #是否已使用
- for target in targets
- if item.LimitType == 0
- if @active_battler.item_useable?(item)
- display_animation(targets, item.animation_id) if !used #保证动画最多播一次
- target.item_effect(@active_battler, item)
- display_action_effects(target, item)
- used = true
- else
- Sound.play_buzzer
- Sound.play_buzzer
- Sound.play_buzzer
- # $game_message.texts.push("使用者不合要求,物品使用无效!")
- end
- elsif item.LimitType == 1
- if target.item_useable?(item)
- display_animation(targets, item.animation_id) if !used #保证动画最多播一次
- target.item_effect(@active_battler, item)
- display_action_effects(target, item)
- used = true
- else
- Sound.play_buzzer
- # $game_message.texts.push("目标不合要求,物品使用无效!")
- end
- elsif item.LimitType == 2
- if (target.item_useable?(item) and @active_battler.item_useable?(item))
- display_animation(targets, item.animation_id) if !used #保证动画最多播一次
- target.item_effect(@active_battler, item)
- display_action_effects(target, item)
- used = true
- else
- Sound.play_buzzer
- # $game_message.texts.push("使用者或目标不合要求,物品使用无效!")
- end
- else
- Sound.play_buzzer
- # $game_message.texts.push("物品使用无效!")
- end
- end
- if used
- $game_party.consume_item(item)
- end
- end
- end
复制代码
本脚本作为装备要求等级能力值的补充,使用方法与之类似:
在数据库物品备注里写上[ATK n][DEF n][SPI n][AGI n] 。
特别地,为了确定战斗中物品等级能力限制的对象,还可以写上[LMTP n] ,
意为LimitType(限制类型) ,对己物品默认为1,对敌物品强制为0。
n = 0,表示限制当前使用物品的人,根据使用者等级能力判断可否使用成功,例如要
对敌人扔飞刀,不是看敌人够不够强,而是看扔的人会不会(对敌物品均为0)
默认n = 1,表示限制物品使用目标,例如一瓶药水能否使用成功不是看是谁从包里拿出来
的而是看喝的人够不够格;
n = 2,表示以上两者都限制,例如一个加全体战斗力的高级卷轴,使用的人要有足够的法
力,接受效果的人也要有足够的领悟力。
n 设为大于2的值,则调整为2
战斗中对敌物品均限制使用者,菜单中的物品均限制使用目标,所以这两者无需限制类型。
删去本脚本不会影响装备要求等级能力值的功能,如果觉得用不到物品限制或者担心这个脚本降低兼容性,可以舍弃。
删去装备要求等级能力值脚本,本脚本将无法独立运行
-------------------------------------------------------------------------
4.兼容性:
(1)装备脚本、物品脚本 与 superufo的 升级手动加点1.0 (从RMXP移植来) 兼容,加点增加的能力值算在人物裸体无状态值里。
(2)装备脚本、物品脚本 与 沉影不器 的 《VX新菜单样式》可兼容
(3)装备脚本、物品脚本 与 superufo 的 《VX版物品分类1.8版》 要达成完全兼容,可以将下面的补丁脚本置于《VX版物品分类1.8版》下方(在范例工程中此补丁也可以在MAIN下面找到,要使用时移动到MAIN上面,《VX版物品分类1.8版》下方即可)
(只使用了装备限制脚本的,请用补丁1,装备和物品脚本都使用了的,请用补丁2)
补丁1:
- #=====================================================================
- # 装备限制 兼容 物品分类 补丁 by DRG
- #=====================================================================
- class Harts_Window_ItemList < Window_Selectable
- def update_help
-
- if item != nil
- newdes = item.description
- newdes += " 要求:" if(item.LVlimit !=0 or item.ATKlimit !=0 or item.DEFlimit != 0 or item.SPIlimit != 0 or item.AGIlimit != 0)
- newdes += " LV" + item.LVlimit.to_s if item.LVlimit != 0
- newdes += " 攻" + item.ATKlimit.to_s if item.ATKlimit != 0
- newdes += " 防" + item.DEFlimit.to_s if item.DEFlimit != 0
- newdes += " 精" + item.SPIlimit.to_s if item.SPIlimit != 0
- newdes += " 敏" + item.AGIlimit.to_s if item.AGIlimit != 0
- @help_window.set_text(newdes)
- end
- end
-
- end
复制代码
补丁2:
- #=====================================================================
- # 装备物品限制 兼容 物品分类 补丁 by DRG
- #=====================================================================
- class Harts_Window_ItemList < Window_Selectable
- def update_help
- if item != nil
- newdes = item.description
- if(item.LVlimit !=0 or item.ATKlimit !=0 or item.DEFlimit != 0 or item.SPIlimit != 0 or item.AGIlimit != 0)
- newdes += " 要求"
- case item.LimitType
- when 0
- newdes += "使用者:"
- when 1
- newdes += "使用目标:"
- when 2
- newdes += "使用者和目标:"
- end
- newdes += " LV" + item.LVlimit.to_s if item.LVlimit != 0
- newdes += " 攻" + item.ATKlimit.to_s if item.ATKlimit != 0
- newdes += " 防" + item.DEFlimit.to_s if item.DEFlimit != 0
- newdes += " 精" + item.SPIlimit.to_s if item.SPIlimit != 0
- newdes += " 敏" + item.AGIlimit.to_s if item.AGIlimit != 0
- end
- @help_window.set_text(newdes)
- else
- @help_window.set_text("")
- end
- end
-
- end
复制代码
PS:(与本人的脚本无关)《VX新菜单样式》与《VX版物品分类1.8版》要兼容,必须以删去VX新菜单样式中的◎ Scene_Item 部分为代价。。。。
(4)已知与某个装备扩充脚本冲突……
解决方法:
装备等级能力限制脚本请换用这个(其实也就在70行加了一句话)
Kissye姐找到的冲突原因,感谢!!
(5)修改过的类一览:
装备限制部分:
- class RPG::BaseItem
- 新增函数:LVlimit ,ATKlimit ,DEFlimit ,SPIlimit ,AGIlimit
- class Game_Actor < Game_Battler
- 修改函数:equippable?(item)
- class Window_Item < Window_Selectable
- 修改函数:update_help
复制代码
物品限制部分:
- class RPG::BaseItem
- 新增函数:LimitType
- class Window_Item < Window_Selectable
- 修改函数:update_help
- class Game_Actor < Game_Battler
- 新增函数:item_useable?(item)
- class Scene_Item < Scene_Base
- 修改函数:determine_target
- class Scene_Battle < Scene_Base
- 修改函数:execute_action_item
复制代码
可以看出,普通物品限制脚本修改涉及面稍微大一些(5个类),如果担心影响兼容性,制作游戏时没用到这个功能的话可以舍弃这部分脚本
范例下载:
(貌似有点儿童不宜- -)
http://rpg.blue/upload_program/f ... DRG)_101089404.rar
希望大家有空给这个脚本做极端情况下的测试看看有没有隐藏BUG。。。
---------------------------------------------------------------
新增插件区
===============================================================
9.9新增插件:
随便插在素材区
不用脱光也能在状态栏查看自己的原始能力值了,或许有用吧……
- =begin
- 随便插在素材区
- 不用脱光也能在状态栏查看自己的原始能力值了,或许有用吧……
- =end
- #==============================================================================
- # ■ Game_Battler
- #------------------------------------------------------------------------------
- # 处理战斗者的类。这个类作为 Game_Actor 类与 Game_Enemy 类的
- # 超级类来使用。
- #==============================================================================
- class Game_Battler
- #--------------------------------------------------------------------------
- # ● 原始能力值
- # actor : 角色
- #--------------------------------------------------------------------------
- def ori_atk
- n = actor.parameters[2, @level] + @atk_plus
- n = [[Integer(n), 1].max, 999].min
- return n
- end
- #--------------------------------------------------------------------------
- # ● 原始能力值
- # actor : 角色
- #--------------------------------------------------------------------------
- def ori_def
- n = actor.parameters[3, @level] + @def_plus
- n = [[Integer(n), 1].max, 999].min
- return n
- end
- #--------------------------------------------------------------------------
- # ● 原始能力值
- # actor : 角色
- #--------------------------------------------------------------------------
- def ori_spi
- n = actor.parameters[4, @level] + @spi_plus
- n = [[Integer(n), 1].max, 999].min
- return n
- end
- #--------------------------------------------------------------------------
- # ● 原始能力值
- # actor : 角色
- #--------------------------------------------------------------------------
- def ori_agi
- n = actor.parameters[5, @level] + @agi_plus
- n = [[Integer(n), 1].max, 999].min
- return n
- end
- end
- #==============================================================================
- # ■ Window_Base
- #------------------------------------------------------------------------------
- # 游戏中全部窗口的超级类。
- #==============================================================================
- class Window_Base < Window
- #--------------------------------------------------------------------------
- # ● 描绘能力值
- # actor : 角色
- # x : 描绘目标 X 坐标
- # y : 描绘目标 Y 坐标
- # type : 能力值种类 (0~3)
- #--------------------------------------------------------------------------
- def draw_actor_parameter(actor, x, y, type)
- case type
- when 0
- parameter_name = Vocab::atk
- ovalue = actor.ori_atk
- parameter_value = actor.atk
- when 1
- parameter_name = Vocab::def
- ovalue = actor.ori_def
- parameter_value = actor.def
- when 2
- parameter_name = Vocab::spi
- ovalue = actor.ori_spi
- parameter_value = actor.spi
- when 3
- parameter_name = Vocab::agi
- ovalue = actor.ori_agi
- parameter_value = actor.agi
- end
- self.contents.font.color = system_color
- self.contents.draw_text(x, y, 120, WLH, parameter_name)
- self.contents.font.color = normal_color
- self.contents.draw_text(x + 65, y, 36, WLH, ovalue, 2)
- self.contents.draw_text(x + 80, y, 36, WLH, "/",2)
- self.contents.font.color = text_color(24) if parameter_value > ovalue
- self.contents.font.color = text_color(25) if parameter_value < ovalue
- self.contents.draw_text(x + 120, y, 36, WLH, parameter_value, 2)
- end
- end
复制代码
10.12新增插件:
作用:商店里也能显示限制
仅使用了装备限制脚本的话,用这个
- #商店显示限制插件—for仅使用了装备限制脚本的用户
- class Window_ShopBuy < Window_Selectable
- def update_help
- if item != nil
- newdes = item.description
- newdes += " 要求:" if(item.LVlimit !=0 or item.ATKlimit !=0 or item.DEFlimit != 0 or item.SPIlimit != 0 or item.AGIlimit != 0)
- newdes += " LV" + item.LVlimit.to_s if item.LVlimit != 0
- newdes += " 攻" + item.ATKlimit.to_s if item.ATKlimit != 0
- newdes += " 防" + item.DEFlimit.to_s if item.DEFlimit != 0
- newdes += " 精" + item.SPIlimit.to_s if item.SPIlimit != 0
- newdes += " 敏" + item.AGIlimit.to_s if item.AGIlimit != 0
- @help_window.set_text(newdes)
- else
- @help_window.set_text("")
- end
- end
- end
复制代码
连物品限制也都使用了的话,用这个
- #商店显示限制插件—for装备物品限制脚本都使用了的用户
- class Window_ShopBuy < Window_Selectable
- def update_help
- if item != nil
- newdes = item.description
- if(item.LVlimit !=0 or item.ATKlimit !=0 or item.DEFlimit != 0 or item.SPIlimit != 0 or item.AGIlimit != 0)
- newdes += " 要求"
- case item.LimitType
- when 0
- newdes += "使用者:"
- when 1
- newdes += "使用目标:"
- when 2
- newdes += "使用者和目标:"
- end
- newdes += " LV" + item.LVlimit.to_s if item.LVlimit != 0
- newdes += " 攻" + item.ATKlimit.to_s if item.ATKlimit != 0
- newdes += " 防" + item.DEFlimit.to_s if item.DEFlimit != 0
- newdes += " 精" + item.SPIlimit.to_s if item.SPIlimit != 0
- newdes += " 敏" + item.AGIlimit.to_s if item.AGIlimit != 0
- end
- @help_window.set_text(newdes)
- else
- @help_window.set_text("")
- end
- end
- end
复制代码
谢谢浏览
|
|