Project1

标题: 多种技能 [打印本页]

作者: fjm    时间: 2019-1-25 11:47
标题: 多种技能
下面这个脚本能让普通攻击变成一种技能攻击,如果随机几种技能里,随机出一种技能攻击能实现吗
例如角色1普通技能变成1号,2号,3号技能随机出一种,每次攻击都会随机出3个技能中的一个
RUBY 代码复制
  1. =begin
  2.   使用方法:
  3.     在装备/技能/角色/职业上备注 <attackskill x>或<guardskill x>
  4.  
  5.   效果:
  6.     装上装备后/学会技能后/设定的角色中/设定的职业中,普通攻击/防御变为第x号技能
  7.  
  8.   优先级:
  9.     装备 > 技能 > 角色 > 职业
  10.     装备:武器 > 武器2/盾牌 > 头盔 > 铠甲 > 饰品
  11.     技能:技能ID小的优先。
  12.  
  13.   [2014.1.17] 添加了防御技能的设置,完善了command_attack的重定义,删除了修改优先级的说明
  14. =end
  15.  
  16. class Module
  17.   #--------------------------------------------------------------------------
  18.   # ● 依次把 prefix 作为前缀定义 method1、method2 ... 的别名。
  19.   #    返回处理顺序的别名的数组。
  20.   #--------------------------------------------------------------------------
  21.   def alias_methods(prefix, *methods)
  22.     methods.each do |item|
  23.       if method_defined?("#{prefix}#{item}")
  24.         msgbox("在类 #{self} 中已经定义了方法 #{prefix}#{item}")
  25.         exit
  26.       end
  27.       alias_method("#{prefix}#{item}", item)
  28.     end
  29.     methods.collect {|item| "#{prefix}#{item}".to_sym }
  30.   end
  31. end
  32.  
  33. class RPG::BaseItem
  34.   #--------------------------------------------------------------------------
  35.   # ● 获取普通攻击的技能 ID
  36.   #--------------------------------------------------------------------------
  37.   def attack_skill
  38.     /<ATTACK\s*SKILL\s+(\d+)>/i =~ @note ? $1.to_i : nil
  39.   end
  40.   #--------------------------------------------------------------------------
  41.   # ● 获取防御的技能 ID
  42.   #--------------------------------------------------------------------------
  43.   def guard_skill
  44.     /<GUARD\s*SKILL\s+(\d+)>/i =~ @note ? $1.to_i : nil
  45.   end
  46. end
  47.  
  48. class Game_Actor < Game_Battler
  49.   alias_methods(:attack_guard_skill_, :attack_skill_id, :guard_skill_id)
  50.   #--------------------------------------------------------------------------
  51.   # ● 获取普通攻击的技能 ID
  52.   #--------------------------------------------------------------------------
  53.   def attack_skill_id
  54.     (equips.compact + skills + [actor] + [self.class]).each {|item|
  55.       return item.attack_skill if item.attack_skill }
  56.     attack_guard_skill_attack_skill_id
  57.   end
  58.   #--------------------------------------------------------------------------
  59.   # ● 获取防御的技能 ID
  60.   #--------------------------------------------------------------------------
  61.   def guard_skill_id
  62.     (equips.compact + skills + [actor] + [self.class]).each {|item|
  63.       return item.guard_skill if item.guard_skill }
  64.     attack_guard_skill_guard_skill_id
  65.   end
  66. end
  67.  
  68. class Scene_Battle < Scene_Base
  69.   alias_methods(:attack_guard_skill_, :command_attack, :command_guard)
  70.   #--------------------------------------------------------------------------
  71.   # ● 普通攻击无需选择目标的情况
  72.   #--------------------------------------------------------------------------
  73.   def command_attack
  74.     skill = $data_skills[BattleManager.actor.attack_skill_id]
  75.     if !skill.need_selection?
  76.       BattleManager.actor.input.set_attack
  77.       next_command
  78.     elsif skill.for_opponent?
  79.       attack_guard_skill_command_attack
  80.     else
  81.       BattleManager.actor.input.set_attack
  82.       select_actor_selection
  83.     end
  84.   end
  85.  
  86.   #--------------------------------------------------------------------------
  87.   # ● 防御需要选择目标的情况
  88.   #--------------------------------------------------------------------------
  89.   def command_guard
  90.     skill = $data_skills[BattleManager.actor.guard_skill_id]
  91.     if skill.need_selection?
  92.       BattleManager.actor.input.set_guard
  93.       skill.for_opponent? ? select_enemy_selection : select_actor_selection
  94.     else
  95.       attack_guard_skill_command_guard
  96.     end
  97.   end
  98. end
  99.  
  100. class Window_ActorCommand < Window_Command
  101.   #--------------------------------------------------------------------------
  102.   # ● 更改攻击指令名称
  103.   #--------------------------------------------------------------------------
  104.   def add_attack_command
  105.     name = $data_skills[@actor.attack_skill_id].name
  106.     add_command(name, :attack, @actor.attack_usable?)
  107.   end
  108.   #--------------------------------------------------------------------------
  109.   # ● 更改防御指令名称
  110.   #--------------------------------------------------------------------------
  111.   def add_guard_command
  112.     name = $data_skills[@actor.guard_skill_id].name
  113.     add_command(name, :guard, @actor.guard_usable?)
  114.   end
  115. end

作者: KB.Driver    时间: 2019-1-25 16:07
在原来的脚本后面附上这段脚本

RUBY 代码复制
  1. class RPG::BaseItem
  2.  
  3.   REG_RANDOM_ATTACK = /<ATTACK\s*SKILLS\s+(\[(?:\d,?)+\])>/i
  4.   # 例 <attackskills [1,2,3]> #注意要加s,并用数组符号括起来
  5.  
  6.   #--------------------------------------------------------------------------
  7.   # ● 获取普通攻击的技能 ID
  8.   #--------------------------------------------------------------------------
  9.   alias attack_skill_random attack_skill
  10.   def attack_skill
  11.     if self.note =~ REG_RANDOM_ATTACK
  12.       eval($1).sample
  13.     else
  14.       attack_skill_random
  15.     end
  16.   end
  17. end


之后写<attackskills [1,4,5]> 就会让普通攻击为1,4,5中随机出一个
只在角色备注上试了,新建工程可以通过。
其他的有问题再报告吧。




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