Project1

标题: 请问如何实现装备不同武器攻击时消耗不同物品 [打印本页]

作者: 鱼剑浆糊    时间: 2015-2-16 11:18
标题: 请问如何实现装备不同武器攻击时消耗不同物品
比如说有两把枪 一把是7.62mm的 一把是5.45mm的,如何实现当我分别装备上这两种武器攻击时消耗相对应的口径子弹......
作者: 芯☆淡茹水    时间: 2015-2-16 14:03
条件:角色 XXX 冲锋枪 装备中。
      增减物品:5.45mm 子弹  - 1
分歧结束
条件:角色 XXX 狙击枪 装备中。
      增减物品:7.62mm 子弹  - 1
分歧结束
作者: a821615644    时间: 2015-2-16 14:36
要么采用楼上再加个分歧,或者可以通过特技里面的公共事件来控制子弹的减少。
作者: chd114    时间: 2015-2-16 14:47
参考2楼,你可以在game_battler3里面的普通攻击那添加
作者: 鱼剑浆糊    时间: 2015-2-16 17:02
芯☆淡茹水 发表于 2015-2-16 14:03
条件:角色 XXX 冲锋枪 装备中。
      增减物品:5.45mm 子弹  - 1
分歧结束

我想设置大量的武器,用事件一个一个设置太麻烦了......有没有脚本的方法....比如根据ID判断武器的类型,在根据类型设置需要消耗的物品........
作者: 芯☆淡茹水    时间: 2015-2-16 18:18
  1. #--------------------------------------------------------------------------
  2. class Scene_Battle
  3.   # 在这儿添加:武器ID => 使用的子弹物品ID。
  4.   MOD = {21=>30, 22=>31}
  5.   # 没有子弹时的提醒语句。
  6.   NO_AMMUNITION_TIP = "子弹不足!"
  7.   #--------------------------------------------------------------------------
  8.   alias add_update_phase4_step2_xdrs update_phase4_step2
  9.   def update_phase4_step2
  10.     if @active_battler.is_a?(Game_Actor) and MOD.keys.include?(@active_battler.weapon_id)
  11.       unless @active_battler.current_action.forcing
  12.         unless consumption_bullets
  13.           $game_temp.forcing_battler = nil
  14.           @phase4_step = 1
  15.           return
  16.         end
  17.       end
  18.     end
  19.     add_update_phase4_step2_xdrs
  20.   end
  21.   #--------------------------------------------------------------------------   
  22.   def consumption_bullets
  23.     cb = $game_party.item_number(MOD[@active_battler.weapon_id]) > 0
  24.     cb ? $game_party.gain_item(MOD[@active_battler.weapon_id], -1) : ammunition_tip
  25.     return cb
  26.   end
  27.   #---------------------------------------------------------------------------
  28.   def ammunition_tip
  29.     $game_system.se_play($data_system.buzzer_se)
  30.     tip = Sprite.new
  31.     tip.x = 226; tip.y = 160
  32.     tip.bitmap = Bitmap.new(186, 32)
  33.     tip.bitmap.fill_rect(0, 0, 186, 32, Color.new(0,0,0))
  34.     tip.bitmap.font.color = Color.new(255,0,0)
  35.     tip.bitmap.draw_text(0,0,186,32,NO_AMMUNITION_TIP,1)
  36.     for i in 1..30
  37.       Graphics.update
  38.     end
  39.     for i in 1..10
  40.       Graphics.update
  41.       tip.opacity -= 25
  42.     end
  43.     tip.bitmap.dispose;  tip.dispose
  44.   end
  45. end
  46. #------------------------------------------------------------------------------
复制代码
没测试~
作者: 鱼剑浆糊    时间: 2015-2-16 20:31
芯☆淡茹水 发表于 2015-2-16 18:18
没测试~

谢谢,请问这个是攻击和施放技能都消耗物品的么?
作者: 鱼剑浆糊    时间: 2015-2-16 20:49
芯☆淡茹水 发表于 2015-2-16 18:18
没测试~

谢谢,可以了,不过冒昧的在问一句 能不能实现某一技能消耗指定数量的物品,比如说技能 [连射] 消耗 5发子弹
作者: 芯☆淡茹水    时间: 2015-2-16 21:22
本帖最后由 芯☆淡茹水 于 2015-2-16 21:55 编辑

测试下



RUBY 代码复制
  1. module X☆R
  2.   # 在这儿添加:武器ID => 使用的子弹物品ID。
  3.   MOD = {21=>30, 22=>31}
  4.  
  5.   # 特殊技能消耗:技能ID => 子弹数量 。未准备消耗子弹的武器,以及武器对应的
  6.   #子弹不够,都不能释放技能。没写入的技能消耗 1 。
  7.   SKILL_MOD = {77=>2, 79=>5}
  8.  
  9.   # 没有子弹时的提醒语句。
  10.   NO_AMMUNITION_TIP = "子弹不足!"
  11. end
  12. class Game_Battler
  13.   #--------------------------------------------------------------------------
  14.   alias add_skill_can_use_xdrs skill_can_use?
  15.   def skill_can_use?(skill_id)
  16.     if self.is_a?(Game_Actor) and X☆R::SKILL_MOD.keys.include?(skill_id)
  17.       return false unless X☆R::MOD.keys.include?(self.weapon_id)
  18.       return false if $game_party.item_number(X☆R::MOD[self.weapon_id]) < X☆R::SKILL_MOD[skill_id]
  19.     end   
  20.     add_skill_can_use_xdrs(skill_id)
  21.   end
  22. end
  23. #----------------------------------------------------------------------------
  24. class Scene_Battle
  25.   #--------------------------------------------------------------------------
  26.   alias add_update_phase4_step2_xdrs update_phase4_step2
  27.   def update_phase4_step2
  28.     if @active_battler.is_a?(Game_Actor) and @active_battler.current_action.kind == 0 and
  29.      @active_battler.current_action.basic == 0 and X☆R::MOD.keys.include?(@active_battler.weapon_id)
  30.       unless @active_battler.current_action.forcing
  31.         unless consumption_bullets
  32.           $game_temp.forcing_battler = nil
  33.           @phase4_step = 1
  34.           return
  35.         end
  36.       end
  37.     end
  38.     add_update_phase4_step2_xdrs
  39.   end
  40.   #--------------------------------------------------------------------------   
  41.   def consumption_bullets
  42.     cb = $game_party.item_number(X☆R::MOD[@active_battler.weapon_id]) > 0
  43.     cb ? lose_bullet : ammunition_tip
  44.     return cb
  45.   end
  46.   #--------------------------------------------------------------------------
  47.   def make_skill_action_result
  48.     # 获取特技
  49.     @skill = $data_skills[@active_battler.current_action.skill_id]
  50.     # 如果不是强制行动
  51.     unless @active_battler.current_action.forcing
  52.       # 因为 SP 耗尽而无法使用的情况下
  53.       unless @active_battler.skill_can_use?(@skill.id)
  54.         # 清除强制行动对像的战斗者
  55.         $game_temp.forcing_battler = nil
  56.         # 移至步骤 1
  57.         @phase4_step = 1
  58.         return
  59.       end
  60.     end
  61.     if @active_battler.is_a?(Game_Actor) and X☆R::MOD.keys.include?(@active_battler.weapon_id)
  62.       lose_bullet
  63.     end
  64.     # 消耗 SP
  65.     @active_battler.sp -= @skill.sp_cost
  66.     # 刷新状态窗口
  67.     @status_window.refresh
  68.     # 在帮助窗口显示特技名
  69.     @help_window.set_text(@skill.name, 1)
  70.     # 设置动画 ID
  71.     @animation1_id = @skill.animation1_id
  72.     @animation2_id = @skill.animation2_id
  73.     # 设置公共事件 ID
  74.     @common_event_id = @skill.common_event_id
  75.     # 设置对像侧战斗者
  76.     set_target_battlers(@skill.scope)
  77.     # 应用特技效果
  78.     for target in @target_battlers
  79.       target.skill_effect(@active_battler, @skill)
  80.     end
  81.   end
  82.   #--------------------------------------------------------------------------
  83.   def lose_bullet
  84.     kind = @active_battler.current_action.kind
  85.     id = kind == 0 ? 0 : @active_battler.current_action.skill_id
  86.     n = X☆R::SKILL_MOD.keys.include?(id) ? X☆R::SKILL_MOD[id] : 1
  87.     $game_party.gain_item(X☆R::MOD[@active_battler.weapon_id], -n)
  88.   end
  89.   #---------------------------------------------------------------------------
  90.   def ammunition_tip
  91.     $game_system.se_play($data_system.buzzer_se)
  92.     tip = Sprite.new
  93.     tip.x = 226; tip.y = 160
  94.     tip.bitmap = Bitmap.new(186, 32)
  95.     tip.bitmap.fill_rect(0, 0, 186, 32, Color.new(0,0,0))
  96.     tip.bitmap.font.color = Color.new(255,0,0)
  97.     tip.bitmap.draw_text(0,0,186,32,X☆R::NO_AMMUNITION_TIP,1)
  98.     for i in 1..30
  99.       Graphics.update
  100.     end
  101.     for i in 1..10
  102.       Graphics.update
  103.       tip.opacity -= 25
  104.     end
  105.     tip.bitmap.dispose;  tip.dispose
  106.   end
  107. end
  108. #------------------------------------------------------------------------------

作者: 鱼剑浆糊    时间: 2015-2-16 21:32
芯☆淡茹水 发表于 2015-2-16 21:22
测试下:

14行有错误......
作者: 鱼剑浆糊    时间: 2015-2-16 22:13
芯☆淡茹水 发表于 2015-2-16 21:22
测试下

十分感谢{:2_275:}




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