Project1

标题: 【简易坑爹系列】武器、装备及状态限制技能脚本 [打印本页]

作者: 英顺的马甲    时间: 2016-5-30 00:20
标题: 【简易坑爹系列】武器、装备及状态限制技能脚本
本帖最后由 英顺的马甲 于 2016-7-23 03:54 编辑

随手写了个脚本来回答问题
RUBY 代码复制
  1. #===============================================================================
  2. # ■ 【简易坑爹系列】武器、装备及状态限制技能脚本
  3. #-------------------------------------------------------------------------------
  4. # 使用方法:
  5. #   1. 插入Game_Actor之后,Main之前的任意位置。
  6. #   1. 在下面设置需要被视为武器种类的属性名称。
  7. #   2. 在属性列表内增加相对应的属性
  8. #   3. 利用武器属性来设置种类,每个武器只能归类到一个种类。
  9. #   4. 利用技能属性来设置发动技能需要的武器种类,可以设置多个,但只需满足其中
  10. #      一个便可发动。
  11. #   5. 没有设定条件的技能在任何武器或没有武器的情况下皆可发动。
  12. #   6. 上面所述皆可运用在装备及状态
  13. #===============================================================================
  14. module WLS
  15.   #-----------------------------------------------------------------------------
  16.   # 名称列在此的属性会被视为武器种类处理。
  17.   # 被视为武器种类的属性将不会对伤害造成任何影响。
  18.   #-----------------------------------------------------------------------------
  19.   TYPES = ["剑", "刀", "杖"]
  20.   #-----------------------------------------------------------------------------
  21.   unless defined?(ACTOR)
  22.     ACTOR  = ::Game_Actor
  23.     WEAPON = ::RPG::Weapon
  24.     SKILL  = ::RPG::Skill
  25.     ITEM   = ::RPG::Item
  26.     ARMOR  = ::RPG::Armor
  27.     ENEMY  = ::RPG::Enemy
  28.     CLASS  = ::RPG::Class
  29.     STATE  = ::RPG::State
  30.   end
  31.   module_function
  32.   def elementSetClass(claz, prefix = '')
  33.     copy_const(::Class.new(claz){
  34.       define_method(prefix.to_s + 'element_set') do
  35.         set = super.clone
  36.         temp = ::WLS::TYPES.map{|t|$data_system.elements.index(t)}
  37.         set.delete_if{|e|temp.include?(e)}
  38.         return set
  39.       end
  40.     })
  41.   end
  42.   def elementRanksClass(claz)
  43.     copy_const(::Class.new(claz) {
  44.       def element_ranks
  45.         ranks = super.clone
  46.         ::WLS::TYPES.each do |t|
  47.           ranks[$data_system.elements.index(t)] = 3
  48.         end
  49.         return ranks
  50.       end
  51.     })
  52.   end
  53.   def copy_const(claz)
  54.     claz.superclass.constants.each do |c|
  55.       claz.const_set(c, claz.superclass.const_get(c))
  56.     end
  57.     return claz
  58.   end
  59.   def define_type(claz, var)
  60.     claz.const_set(:VAR, var)
  61.     claz.class_eval do
  62.       def type
  63.         temp = WLS::TYPES.map{|t|$data_system.elements.index(t)}
  64.         return instance_variable_get(self.class::VAR).find{|e|temp.include?(e)}
  65.       end
  66.     end
  67.   end
  68. end
  69. Game_Actor = Class.new(WLS::ACTOR) do
  70.   def skill_can_use?(skill)
  71.     orig = super(skill)
  72.     skill = skill.is_a?(RPG::Skill) ? skill : $data_skills[skill]
  73.     types = [$data_weapons[self.weapon_id].type]
  74.     types |= [@armor1_id, @armor2_id, @armor3_id, @armor4_id].map{|i|$data_armors[i].type}
  75.     types |= @states.map{|s|$data_states[s].type}
  76.     return ((skill.required_types.empty? or skill.required_types.any?{|t|types.include?(t)}) and orig)
  77.   end
  78. end
  79. module RPG
  80.   Weapon = ::WLS.elementSetClass(::WLS::WEAPON)
  81.   Skill = ::WLS.elementSetClass(::WLS::SKILL)
  82.   Item = ::WLS.elementSetClass(::WLS::ITEM)
  83.   Armor = ::WLS.elementSetClass(::WLS::ARMOR, :guard_)
  84.   State = ::WLS.elementSetClass(::WLS::STATE, :guard_)
  85.   Class = ::WLS.elementRanksClass(::WLS::CLASS)
  86.   Enemy = ::WLS.elementRanksClass(::WLS::ENEMY)
  87.   ::WLS.define_type(Weapon, :@element_set)
  88.   ::WLS.define_type(Armor, :@guard_element_set)
  89.   ::WLS.define_type(State, :@guard_element_set)
  90.   class Skill
  91.     def required_types
  92.       temp = WLS::TYPES.map{|t|$data_system.elements.index(t)}
  93.       return @element_set.find_all{|e|temp.include?(e)}
  94.     end
  95.   end
  96. end

demo.zip (936.33 KB, 下载次数: 253)
测试的时候还被ruby坑得不轻
最新更新加了一些新功能,稍微调整了脚本,估计兼容VX
作者: y967    时间: 2016-6-2 19:22
非常好用...领走




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1