Project1

标题: 如何制作需装备装备和持有物品才能使用技能 [打印本页]

作者: 越前リョーマ    时间: 2008-7-1 05:57
标题: 如何制作需装备装备和持有物品才能使用技能
比如[射击]这个技能,
需要装备枪、箭之类的武器,还需要持有[箭桶]这个道具才能使用。

如何实现? [LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: 诡异の猫    时间: 2008-7-1 06:20
我决定尝试这个温习下ruby- -
作者: 雪流星    时间: 2008-7-1 07:07
重新定义这段
  #--------------------------------------------------------------------------
  # ● 可以使用技能的判定
  #     skill : 技能
  #--------------------------------------------------------------------------
  def skill_can_use?(skill)
    return false unless skill.is_a?(RPG::Skill)
    return false unless movable?
    return false if silent? and skill.spi_f > 0
    return false if calc_mp_cost(skill) > mp
#======================================================================
#    下面所讲的条件插在这里
#======================================================================
    if $game_temp.in_battle
      return skill.battle_ok?
    else
      return skill.menu_ok?
    end
  end
#==========================流星赶月分割线==============================

判断是否持有某物:
if $game_party.item_number($data_items[N]) > 0
     N 为物品编号

判断是否装备某物
$game_party.members[N].equips.include?(item)
    N 是队员号
    item 可以是武器或防具
    N号武器:$data_weapons[N]
    N号防具:$data_armors[N]

例如:
2号队员装备 3 号武器 并 持有 6 号物品 才能使用 7 号技能
则条件为:
if skill.id == 7
  if $game_party.members[2].equips.include?($data_weapons[3]) and
     $game_party.item_number($data_items[6]) > 0
    if $game_temp.in_battle
      return skill.battle_ok?
    else
      return skill.menu_ok?
    end
  end
end
作者: 诡异の猫    时间: 2008-7-1 07:36
这样要一个一个技能写脚本挺麻烦的- -
睡觉先,.
明天继续,.- -
作者: 雪流星    时间: 2008-7-1 13:21
以下引用诡异の猫于2008-6-30 23:36:45的发言:
这样要一个一个技能写脚本挺麻烦的- -
睡觉先,.
明天继续,.- -


要不就是用備註啦
作者: westbugs    时间: 2008-7-1 15:28
测试过, 没问题
迟些上载范例

  1. #==============================================================================
  2. #westbugs 制作,
  3. #用法:
  4. #把1号装备装上
  5. #拥有一号道具
  6. #拥有一号技能
  7. #
  8. #使用一号技能时, 一号道具会消失。
  9. #需一号道具才能启动一号技能
  10. #注:无限恐怖-轮回篇里附带脚本
  11. #==============================================================================

  12. class Game_Actor < Game_Battler
  13. #--------------------------------------------------------------------------
  14.   # ● 可以使用特技判定
  15.   #     skill_id : 特技 ID
  16.   #--------------------------------------------------------------------------
  17. def skill_can_use?(skill)   
  18.   return false unless skill_learn?(skill)
  19.    
  20.      #使用一号技能时, 检查一号道具和检查一号技能
  21.      if skill.id == 1
  22.       return false if $game_party.item_no(1) == 0
  23.       return false if equips.include?(1)
  24.     end
  25.     #使用一号技能时, 检查一号道具和检查一号技能
  26.    
  27.     return super
  28.   end
  29. end


  30. class Game_Party < Game_Unit
  31.   def item_no(n)
  32.     return item_number($data_items[n])
  33.   end
  34.   def weapon_no(n)
  35.     return item_number($data_weapons[n])
  36.   end
  37. end

  38. class Scene_Battle < Scene_Base
  39.   
  40.   
  41.   #--------------------------------------------------------------------------
  42.   # ● 执行战斗行动 : 技能
  43.   #--------------------------------------------------------------------------
  44.   def execute_action_skill
  45.     skill = @active_battler.action.skill
  46.     text = @active_battler.name + skill.message1
  47.     @message_window.add_instant_text(text)
  48.     unless skill.message2.empty?
  49.       wait(10)
  50.       @message_window.add_instant_text(skill.message2)
  51.     end
  52.     targets = @active_battler.action.make_targets
  53.     display_animation(targets, skill.animation_id)
  54.     @active_battler.mp -= @active_battler.calc_mp_cost(skill)
  55.    
  56.     #使用一号技能时, 消耗一号技能
  57.     if @skill.id == 1
  58.       $game_party.lose_item($data_items[1], 1)
  59.     end
  60.     #使用一号技能时, 消耗一号技能
  61.    
  62.     $game_temp.common_event_id = skill.common_event_id
  63.     for target in targets
  64.       target.skill_effect(@active_battler, skill)
  65.       display_action_effects(target, skill)
  66.     end
  67.   end
  68. end
复制代码

作者: 亿万星辰    时间: 2008-7-1 15:38
我记得以前写过一个类似的,远程武器弹药消耗系统……
作者: 越前リョーマ    时间: 2008-7-1 20:07
以下引用snstar2006于2008-7-1 5:21:18的发言:


以下引用诡异の猫于2008-6-30 23:36:45的发言:
这样要一个一个技能写脚本挺麻烦的- -
睡觉先,.
明天继续,.- -



要不就是用備註啦

本来我就希望这样……
以下引用westbugs于2008-7-1 7:28:08的发言:

测试过, 没问题
迟些上载范例

#==============================================================================
#westbugs 制作,
#用法:
#把1号装备装上
#拥有一号道具
#拥有一号技能
#
#使用一号技能时, 一号道具会消失。
#需一号道具才能启动一号技能
#注:无限恐怖-轮回篇里附带脚本
#==============================================================================

class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
  # ● 可以使用特技判定
  #     skill_id : 特技 ID
  #--------------------------------------------------------------------------
def skill_can_use?(skill)   
  return false unless skill_learn?(skill)
   
     #使用一号技能时, 检查一号道具和检查一号技能
     if skill.id == 1
      return false if $game_party.item_no(1) == 0
      return false if equips.include?(1)
    end
    #使用一号技能时, 检查一号道具和检查一号技能
   
    return super
  end
end


class Game_Party < Game_Unit
  def item_no(n)
    return item_number($data_items[n])
  end
  def weapon_no(n)
    return item_number($data_weapons[n])
  end
end

class Scene_Battle < Scene_Base
  
  
  #--------------------------------------------------------------------------
  # ● 执行战斗行动 : 技能
  #--------------------------------------------------------------------------
  def execute_action_skill
    skill = @active_battler.action.skill
    text = @active_battler.name + skill.message1
    @message_window.add_instant_text(text)
    unless skill.message2.empty?
      wait(10)
      @message_window.add_instant_text(skill.message2)
    end
    targets = @active_battler.action.make_targets
    display_animation(targets, skill.animation_id)
    @active_battler.mp -= @active_battler.calc_mp_cost(skill)
   
    #使用一号技能时, 消耗一号技能
    if @skill.id == 1
      $game_party.lose_item($data_items[1], 1)
    end
    #使用一号技能时, 消耗一号技能
   
    $game_temp.common_event_id = skill.common_event_id
    for target in targets
      target.skill_effect(@active_battler, skill)
      display_action_effects(target, skill)
    end
  end
end



[本贴由作者于 2008-7-1 7:44:52 最后编辑]

感觉对使用不大明白……
作者: 诡异の猫    时间: 2008-7-1 20:27
希望什么- -
现在有一个思路.
只是不晓得符不符合你的要求
作者: 越前リョーマ    时间: 2008-7-1 21:10
以下引用诡异の猫于2008-7-1 12:27:12的发言:

希望什么- -
现在有一个思路.
只是不晓得符不符合你的要求

就是在备注里设计需要持有的物品和装备之类的啊。
作者: 诡异の猫    时间: 2008-7-2 02:52
  1. class Game_Actor < Game_Battler
  2.   
  3.   def skill_can_use?(skill)
  4.     super
  5.     if skill.element_set.include?(5)
  6.       for item in $game_party.items
  7.         return true if item.element_set.include?(5)
  8.       end
  9.       return false
  10.     end
  11.   end
  12.   
  13.   def attackable?
  14.     for weapon in self.weapons
  15.       if weapon.element_set.include?(5)
  16.         for item in $game_party.items
  17.           return true if item.element_set.include?(5)
  18.         end
  19.         return false
  20.       end
  21.     end
  22.     return true
  23.   end
  24.   
  25. end

  26. class Scene_Battle

  27.   def update_actor_command_selection
  28.     if Input.trigger?(Input::B)
  29.       Sound.play_cancel
  30.       prior_actor
  31.     elsif Input.trigger?(Input::C)
  32.       case @actor_command_window.index
  33.       when 0  # 攻击
  34.         if @active_battler.attackable?
  35.           Sound.play_decision
  36.           @active_battler.action.set_attack
  37.           start_target_enemy_selection
  38.         else
  39.           Sound.play_buzzer
  40.         end
  41.       when 1  # 特技
  42.         Sound.play_decision
  43.         start_skill_selection
  44.       when 2  # 防御
  45.         Sound.play_decision
  46.         @active_battler.action.set_guard
  47.         next_actor
  48.       when 3  # 物品
  49.         Sound.play_decision
  50.         start_item_selection
  51.       end
  52.     end
  53.   end
  54.   
  55. end
复制代码

按你给我的要求做了- -
记得把武器啊.技能啊.箭筒的属性打上"弓"
就是属性的第5个..
"弓"一定要放在第5个属性.不然脚本得修改
你测试下吧
作者: 越前リョーマ    时间: 2008-7-2 03:51
以下引用诡异の猫于2008-7-1 18:52:31的发言:

class Game_Actor < Game_Battler
  
  def skill_can_use?(skill)
    super
    if skill.element_set.include?(5)
      for item in $game_party.items
        return true if item.element_set.include?(5)
      end
      return false
    end
  end
  
  def attackable?
    for weapon in self.weapons
      if weapon.element_set.include?(5)
        for item in $game_party.items
          return true if item.element_set.include?(5)
        end
        return false
      end
    end
    return true
  end
  
end

class Scene_Battle

  def update_actor_command_selection
    if Input.trigger?(Input::B)
      Sound.play_cancel
      prior_actor
    elsif Input.trigger?(Input::C)
      case @actor_command_window.index
      when 0  # 攻击
        if @active_battler.attackable?
          Sound.play_decision
          @active_battler.action.set_attack
          start_target_enemy_selection
        else
          Sound.play_buzzer
        end
      when 1  # 特技
        Sound.play_decision
        start_skill_selection
      when 2  # 防御
        Sound.play_decision
        @active_battler.action.set_guard
        next_actor
      when 3  # 物品
        Sound.play_decision
        start_item_selection
      end
    end
  end
  
end

按你给我的要求做了- -
记得把武器啊.技能啊.箭筒的属性打上"弓"
就是属性的第5个..
"弓"一定要放在第5个属性.不然脚本得修改
你测试下吧

话说其他技能没法用了……
作者: 诡异の猫    时间: 2008-7-2 03:56
  1. class Game_Actor < Game_Battler
  2.   
  3.   def skill_can_use?(skill)
  4.     return false unless skill.is_a?(RPG::Skill)
  5.     return false unless movable?
  6.     return false if silent? and skill.spi_f > 0
  7.     return false if calc_mp_cost(skill) > mp
  8.     if skill.element_set.include?(5)
  9.       for item in $game_party.items
  10.         return true if item.element_set.include?(5)
  11.       end
  12.       return false
  13.     end
  14.     if $game_temp.in_battle
  15.       return skill.battle_ok?
  16.     else
  17.       return skill.menu_ok?
  18.     end
  19.   end
  20.   
  21.   def attackable?
  22.     for weapon in self.weapons
  23.       if weapon.element_set.include?(5)
  24.         for item in $game_party.items
  25.           return true if item.element_set.include?(5)
  26.         end
  27.         return false
  28.       end
  29.     end
  30.     return true
  31.   end
  32.   
  33. end

  34. class Scene_Battle
  35.   #--------------------------------------------------------------------------
  36.   # ● 更新选择角色指令
  37.   #--------------------------------------------------------------------------
  38.   def update_actor_command_selection
  39.     if Input.trigger?(Input::B)
  40.       Sound.play_cancel
  41.       prior_actor
  42.     elsif Input.trigger?(Input::C)
  43.       case @actor_command_window.index
  44.       when 0  # 攻击
  45.         if @active_battler.attackable?
  46.           Sound.play_decision
  47.           @active_battler.action.set_attack
  48.           start_target_enemy_selection
  49.         else
  50.           Sound.play_buzzer
  51.         end
  52.       when 1  # 特技
  53.         Sound.play_decision
  54.         start_skill_selection
  55.       when 2  # 防御
  56.         Sound.play_decision
  57.         @active_battler.action.set_guard
  58.         next_actor
  59.       when 3  # 物品
  60.         Sound.play_decision
  61.         start_item_selection
  62.       end
  63.     end
  64.   end
  65. end
复制代码

恩.了解
试试吧- - [LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: 越前リョーマ    时间: 2008-7-2 04:05
完工了……




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