随手写了个脚本来回答问题RUBY 代码
- #===============================================================================
- # ■ 【简易坑爹系列】武器、装备及状态限制技能脚本
- #-------------------------------------------------------------------------------
- # 使用方法:
- # 1. 插入Game_Actor之后,Main之前的任意位置。
- # 1. 在下面设置需要被视为武器种类的属性名称。
- # 2. 在属性列表内增加相对应的属性
- # 3. 利用武器属性来设置种类,每个武器只能归类到一个种类。
- # 4. 利用技能属性来设置发动技能需要的武器种类,可以设置多个,但只需满足其中
- # 一个便可发动。
- # 5. 没有设定条件的技能在任何武器或没有武器的情况下皆可发动。
- # 6. 上面所述皆可运用在装备及状态
- #===============================================================================
- module WLS
- #-----------------------------------------------------------------------------
- # 名称列在此的属性会被视为武器种类处理。
- # 被视为武器种类的属性将不会对伤害造成任何影响。
- #-----------------------------------------------------------------------------
- TYPES = ["剑", "刀", "杖"]
- #-----------------------------------------------------------------------------
- unlessdefined?(ACTOR)
- ACTOR = ::Game_Actor
- WEAPON = ::RPG::Weapon
- SKILL = ::RPG::Skill
- ITEM = ::RPG::Item
- ARMOR = ::RPG::Armor
- ENEMY = ::RPG::Enemy
- CLASS = ::RPG::Class
- STATE = ::RPG::State
- end
- module_function
- def elementSetClass(claz, prefix = '')
- copy_const(::Class.new(claz){
- define_method(prefix.to_s + 'element_set')do
- set = super.clone
- temp = ::WLS::TYPES.map{|t|$data_system.elements.index(t)}
- set.delete_if{|e|temp.include?(e)}
- return set
- end
- })
- end
- def elementRanksClass(claz)
- copy_const(::Class.new(claz){
- def element_ranks
- ranks = super.clone
- ::WLS::TYPES.eachdo |t|
- ranks[$data_system.elements.index(t)] = 3
- end
- return ranks
- end
- })
- end
- def copy_const(claz)
- claz.superclass.constants.eachdo |c|
- claz.const_set(c, claz.superclass.const_get(c))
- end
- return claz
- end
- def define_type(claz, var)
- claz.const_set(:VAR, var)
- claz.class_evaldo
- def type
- temp = WLS::TYPES.map{|t|$data_system.elements.index(t)}
- return instance_variable_get(self.class::VAR).find{|e|temp.include?(e)}
- end
- end
- end
- end
- Game_Actor = Class.new(WLS::ACTOR)do
- def skill_can_use?(skill)
- orig = super(skill)
- skill = skill.is_a?(RPG::Skill) ? skill : $data_skills[skill]
- types = [$data_weapons[self.weapon_id].type]
- types |= [@armor1_id, @armor2_id, @armor3_id, @armor4_id].map{|i|$data_armors[i].type}
- types |= @states.map{|s|$data_states[s].type}
- return((skill.required_types.empty? or skill.required_types.any?{|t|types.include?(t)})and orig)
- end
- end
- module RPG
- Weapon = ::WLS.elementSetClass(::WLS::WEAPON)
- Skill = ::WLS.elementSetClass(::WLS::SKILL)
- Item = ::WLS.elementSetClass(::WLS::ITEM)
- Armor = ::WLS.elementSetClass(::WLS::ARMOR, :guard_)
- State = ::WLS.elementSetClass(::WLS::STATE, :guard_)
- Class = ::WLS.elementRanksClass(::WLS::CLASS)
- Enemy = ::WLS.elementRanksClass(::WLS::ENEMY)
- ::WLS.define_type(Weapon, :@element_set)
- ::WLS.define_type(Armor, :@guard_element_set)
- ::WLS.define_type(State, :@guard_element_set)
- class Skill
- def required_types
- temp = WLS::TYPES.map{|t|$data_system.elements.index(t)}
- return@element_set.find_all{|e|temp.include?(e)}
- end
- end
- end
复制代码
测试的时候还被ruby坑得不轻
最新更新加了一些新功能,稍微调整了脚本,估计兼容VX
本帖来自P1论坛作者英顺的马甲,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:
https://rpg.blue/forum.php?mod=viewthread&tid=393783 若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。