查看: 3198|回复: 1

[原创发布] 【简易坑爹系列】武器、装备及状态限制技能脚本

[复制链接]

路人党员

梦石
0
星屑
52
在线时间
2276 小时
注册时间
2010-12-30
回帖
3011
发表于 2016-5-30 00:20:06 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 英顺的马甲 于 2016-7-23 03:54 编辑

随手写了个脚本来回答问题[pre lang="ruby"]#===============================================================================
# ■ 【简易坑爹系列】武器、装备及状态限制技能脚本
#-------------------------------------------------------------------------------
# 使用方法:
#   1. 插入Game_Actor之后,Main之前的任意位置。
#   1. 在下面设置需要被视为武器种类的属性名称。
#   2. 在属性列表内增加相对应的属性
#   3. 利用武器属性来设置种类,每个武器只能归类到一个种类。
#   4. 利用技能属性来设置发动技能需要的武器种类,可以设置多个,但只需满足其中
#      一个便可发动。
#   5. 没有设定条件的技能在任何武器或没有武器的情况下皆可发动。
#   6. 上面所述皆可运用在装备及状态
#===============================================================================
module WLS
  #-----------------------------------------------------------------------------
  # 名称列在此的属性会被视为武器种类处理。
  # 被视为武器种类的属性将不会对伤害造成任何影响。
  #-----------------------------------------------------------------------------
  TYPES = ["剑", "刀", "杖"]
  #-----------------------------------------------------------------------------
  unless defined?(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.each do |t|
          ranks[$data_system.elements.index(t)] = 3
        end
        return ranks
      end
    })
  end
  def copy_const(claz)
    claz.superclass.constants.each do |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_eval do
      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.type}
    types |= @states.map{|s|$data_states.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[/pre]
demo.zip (936.33 KB, 下载次数: 253)
测试的时候还被ruby坑得不轻
最新更新加了一些新功能,稍微调整了脚本,估计兼容VX

评分

参与人数 1星屑 +30 收起 理由
y967 + 30 塞糖

查看全部评分

本人擅长XP,如果有脚本或者Ruby方面的问题欢迎发电邮到engshun@1ppl.me咨询,本人很少检查电邮所以不一定会及时回复,本人不会直接出手解决问题只会提供一个方向,所以谢绝伸手党
梦石
0
星屑
17561
在线时间
4249 小时
注册时间
2013-7-18
回帖
2491
发表于 2016-6-2 19:22:24 | 显示全部楼层
非常好用...领走
退隐....
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部