Project1

标题: 【★】如何制作一个武器,装备后普通攻击敌全体? [打印本页]

作者: 迷糊的安安    时间: 2012-10-8 13:47
标题: 【★】如何制作一个武器,装备后普通攻击敌全体?
本帖最后由 迷糊的安安 于 2012-10-8 20:47 编辑

本问题为【Ace推荐问答计划】活动问题。
详情请点击:http://rpg.blue/forum.php?mod=viewthread&tid=251118

实现要求:使用脚本实现“让部分武器装备后,普通可以攻击敌人全体”的功能。使用方法可以参照以下。
在武器备注栏写<AttackType0>则该武器装备后,普通攻击攻击的是敌人全体。
在武器备注栏写<AttackType1>则该武器装备后,普通攻击攻击的是一个随机敌人。
在武器备注栏写<AttackType2>则该武器装备后,普通攻击攻击的是两个随机敌人。
在武器备注栏写<AttackType3>则该武器装备后,普通攻击攻击的是三个随机敌人。
在武器备注栏写<AttackType4>则该武器装备后,普通攻击攻击的是四个随机敌人。

如果只实现普通攻击敌全体,也可以算认可答案。dsu_plus_rewardpost_czw
作者: 怪蜀黍    时间: 2012-10-8 16:31
本帖最后由 protosssonny 于 2012-10-8 19:02 编辑

就这个是脚本的问题,那么P叔占楼预定答这个好了。事件什么的简单饭菜依旧是先留给大家的。

VA真是不熟悉。各种定义找不到在哪里,忙了半天才有个结果。
安安,P叔交作业了
范例在这里,由于大小限制,请自行添加RGSS300.dll文件。
Project1.rar (300.86 KB, 下载次数: 204)
按照安安的要求,上传到百度网盘,一直没有毅力注册网盘,今天终于注册了。
在百度网盘的范例
按规定截图,但是图看不出什么效果:

脚本在这里,注释得很详细:
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Game_Action
  4. #------------------------------------------------------------------------------
  5. #  处理战斗中的行动的类。本类在 Game_Battler 类的内部使用。
  6. #==============================================================================

  7. class Game_Action
  8.   #--------------------------------------------------------------------------
  9.   # ● 目标为敌人
  10.   #--------------------------------------------------------------------------
  11.   def targets_for_opponents
  12.     if item.for_random?
  13.       Array.new(item.number_of_targets) { opponents_unit.random_target }
  14.     elsif item.for_one?
  15.       num = 1 + (attack? ? subject.atk_times_add.to_i : 0)
  16.       num = atk_times_by_weapon  # 添加
  17.       if num == 1                # 如果目标数为1则执行默认情形
  18.         if @target_index < 0
  19.           [opponents_unit.random_target] * num
  20.         else
  21.           [opponents_unit.smooth_target(@target_index)] * num
  22.         end
  23.       elsif num == 5             # 如果目标数为5则执行攻击全体
  24.         opponents_unit.alive_members
  25.       else
  26.         case num
  27.         when 2                   # 如果目标数为2则先攻击1次目标,再攻击1个随机目标
  28.           [opponents_unit.smooth_target(@target_index)] + [opponents_unit.random_target]
  29.         when 3                   # 如果目标数为3则先攻击1次目标,再攻击2个随机目标
  30.           [opponents_unit.smooth_target(@target_index)] + [opponents_unit.random_target] + [opponents_unit.random_target]
  31.         when 4                   # 如果目标数为4则先攻击1次目标,再攻击3个随机目标
  32.           [opponents_unit.smooth_target(@target_index)] + [opponents_unit.random_target] + [opponents_unit.random_target] + [opponents_unit.random_target]
  33.         end  
  34.       end  
  35.     else
  36.       opponents_unit.alive_members
  37.     end
  38.   end
  39.   
  40.   def atk_times_by_weapon
  41.     times = [1]                  # 赋初值
  42.     if @subject.class != Game_Enemy  # 攻击者不为敌人(即为角色)的情形
  43.       for i in @subject.weapons  # 如果注释包含这些文字
  44.         # 因为考虑双手武器,所以用for i in @subject.weapons
  45.         times.push(0) if i.note.include?("<AttackType0>")
  46.         times.push(1) if i.note.include?("<AttackType1>")
  47.         times.push(2) if i.note.include?("<AttackType2>")
  48.         times.push(3) if i.note.include?("<AttackType3>")
  49.         times.push(4) if i.note.include?("<AttackType4>")
  50.       end
  51.     end
  52.     # 当数组times中包含0,则time为5(全体攻击标志),否则就为数组times的最大值。
  53.     time = times.include?(0) ? 5 : times.max
  54.     return time
  55.   end  
  56. end  
复制代码

作者: feizhaodan    时间: 2012-10-8 17:11
本帖最后由 feizhaodan 于 2013-6-21 09:09 编辑
  1. class RPG::Weapon < RPG::EquipItem
  2.   def attack_skill
  3.     @note.each_line do |line|
  4.       if line =~ /\<(?:AttackSkill)[ ]*(\d+)\>/i
  5.         return $1.to_i == 0 ? 1 : $1.to_i
  6.       end
  7.     end
  8.     return 1
  9.   end
  10. end
  11. class Game_Actor < Game_Battler
  12.   alias attack_skill_attack_skill_id attack_skill_id
  13.   def attack_skill_id
  14.     return weapons[0].attack_skill if weapons[0]
  15.     if dual_wield?
  16.       return weapons[1].attack_skill if weapons[1]
  17.     end
  18.     return attack_skill_attack_skill_id
  19.   end
  20. end
  21. class Scene_Battle < Scene_Base
  22.   alias attack_skill_command_attack command_attack
  23.   def command_attack
  24.     attack_skill_command_attack
  25.     if !BattleManager.actor.current_action.item.need_selection?
  26.       @enemy_window.deactivate
  27.       on_enemy_ok
  28.     end
  29.   end
  30. end
复制代码
在武器的备注栏里输入<attackskill x>来更换装备中的角色的物理攻击的技能ID。
然后随便设置技能吧。公式啥的也能随便改了。


百度网盘下载范例你某以后再也不做范例了囧
范例。虽然是日文的但是有关的地方都是中文所以因该没问题/w\

设置图示:
首先在武器的备注下面设置该武器的普通攻击对应的技能编号。

再将武器对应的技能按照需求设置,范例中设置的是全体攻击。


补充说明:
范例中为了减小体积,删去了DLL文件,请打开工程以后按下保存再运行即可。
如果需要将效果应用在自己的工程中,请将脚本添加至自己的工程。

Project5.zip

430.6 KB, 下载次数: 237


作者: q254    时间: 2022-4-29 19:55
feizhaodan 发表于 2012-10-8 17:11
在武器的备注栏里输入来更换装备中的角色的物理攻击的技能ID。
然后随便设置技能吧。公式啥的也能随便改了 ...

26行出错




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