查看: 3156|回复: 2

[已经解决] 多种技能

[复制链接]
梦石
0
星屑
2245
在线时间
1015 小时
注册时间
2015-10-17
回帖
1077
发表于 2019-1-25 11:47:15 | 显示全部楼层 |阅读模式

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

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

×
下面这个脚本能让普通攻击变成一种技能攻击,如果随机几种技能里,随机出一种技能攻击能实现吗
例如角色1普通技能变成1号,2号,3号技能随机出一种,每次攻击都会随机出3个技能中的一个
[pre lang="ruby"]=begin
  使用方法:
    在装备/技能/角色/职业上备注 <attackskill x>或<guardskill x>

  效果:
    装上装备后/学会技能后/设定的角色中/设定的职业中,普通攻击/防御变为第x号技能

  优先级:
    装备 > 技能 > 角色 > 职业
    装备:武器 > 武器2/盾牌 > 头盔 > 铠甲 > 饰品
    技能:技能ID小的优先。
  
  [2014.1.17] 添加了防御技能的设置,完善了command_attack的重定义,删除了修改优先级的说明
=end

class Module
  #--------------------------------------------------------------------------
  # ● 依次把 prefix 作为前缀定义 method1、method2 ... 的别名。
  #    返回处理顺序的别名的数组。
  #--------------------------------------------------------------------------
  def alias_methods(prefix, *methods)
    methods.each do |item|
      if method_defined?("#{prefix}#{item}")
        msgbox("在类 #{self} 中已经定义了方法 #{prefix}#{item}")
        exit
      end
      alias_method("#{prefix}#{item}", item)
    end
    methods.collect {|item| "#{prefix}#{item}".to_sym }
  end
end

class RPG::BaseItem
  #--------------------------------------------------------------------------
  # ● 获取普通攻击的技能 ID
  #--------------------------------------------------------------------------
  def attack_skill
    /<ATTACK\s*SKILL\s+(\d+)>/i =~ @note ? $1.to_i : nil
  end
  #--------------------------------------------------------------------------
  # ● 获取防御的技能 ID
  #--------------------------------------------------------------------------
  def guard_skill
    /<GUARD\s*SKILL\s+(\d+)>/i =~ @note ? $1.to_i : nil
  end
end

class Game_Actor < Game_Battler
  alias_methods(:attack_guard_skill_, :attack_skill_id, :guard_skill_id)
  #--------------------------------------------------------------------------
  # ● 获取普通攻击的技能 ID
  #--------------------------------------------------------------------------
  def attack_skill_id
    (equips.compact + skills + [actor] + [self.class]).each {|item|
      return item.attack_skill if item.attack_skill }
    attack_guard_skill_attack_skill_id
  end
  #--------------------------------------------------------------------------
  # ● 获取防御的技能 ID
  #--------------------------------------------------------------------------
  def guard_skill_id
    (equips.compact + skills + [actor] + [self.class]).each {|item|
      return item.guard_skill if item.guard_skill }
    attack_guard_skill_guard_skill_id
  end
end

class Scene_Battle < Scene_Base
  alias_methods(:attack_guard_skill_, :command_attack, :command_guard)
  #--------------------------------------------------------------------------
  # ● 普通攻击无需选择目标的情况
  #--------------------------------------------------------------------------
  def command_attack
    skill = $data_skills[BattleManager.actor.attack_skill_id]
    if !skill.need_selection?
      BattleManager.actor.input.set_attack
      next_command
    elsif skill.for_opponent?
      attack_guard_skill_command_attack
    else
      BattleManager.actor.input.set_attack
      select_actor_selection
    end
  end

  #--------------------------------------------------------------------------
  # ● 防御需要选择目标的情况
  #--------------------------------------------------------------------------
  def command_guard
    skill = $data_skills[BattleManager.actor.guard_skill_id]
    if skill.need_selection?
      BattleManager.actor.input.set_guard
      skill.for_opponent? ? select_enemy_selection : select_actor_selection
    else
      attack_guard_skill_command_guard
    end
  end
end

class Window_ActorCommand < Window_Command
  #--------------------------------------------------------------------------
  # ● 更改攻击指令名称
  #--------------------------------------------------------------------------
  def add_attack_command
    name = $data_skills[@actor.attack_skill_id].name
    add_command(name, :attack, @actor.attack_usable?)
  end
  #--------------------------------------------------------------------------
  # ● 更改防御指令名称
  #--------------------------------------------------------------------------
  def add_guard_command
    name = $data_skills[@actor.guard_skill_id].name
    add_command(name, :guard, @actor.guard_usable?)
  end
end[/pre]
梦石
10
星屑
39550
在线时间
1919 小时
注册时间
2010-11-14
回帖
3214

R考场第七期纪念奖

发表于 2019-1-25 16:07:19 | 显示全部楼层
在原来的脚本后面附上这段脚本

[pre lang="ruby"]class RPG::BaseItem
  
  REG_RANDOM_ATTACK = /<ATTACK\s*SKILLS\s+(\[(?:\d,?)+\])>/i
  # 例 <attackskills [1,2,3]> #注意要加s,并用数组符号括起来
  
  #--------------------------------------------------------------------------
  # ● 获取普通攻击的技能 ID
  #--------------------------------------------------------------------------
  alias attack_skill_random attack_skill
  def attack_skill
    if self.note =~ REG_RANDOM_ATTACK
      eval($1).sample
    else
      attack_skill_random
    end
  end
end[/pre]

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

点评

fjm
非常感谢,可以用了  发表于 2019-1-25 18:39

评分

参与人数 2星屑 +30 赞 +1 收起 理由
VIPArcher + 30 认可答案
RMVXA + 1 精品文章

查看全部评分

用头画头像,用脚写脚本
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部