设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2200|回复: 4
打印 上一主题 下一主题

[已经解决] 两个脚本冲突了

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2180
在线时间
1011 小时
注册时间
2015-10-17
帖子
1285
跳转到指定楼层
1
发表于 2017-7-25 20:55:36 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
下面两个脚本冲突了,看下能解决不,谢谢

RUBY 代码复制
  1. module BattleManager
  2.   class << self
  3.  
  4.     alias :rev_init_members :init_members
  5.     def init_members
  6.       @revive_input = []
  7.       @revive_input_start = []
  8.       @revive_actor_index = []
  9.     end
  10.  
  11.     def revive_input_set(actor)
  12.       @revive_input.push(true)
  13.       $game_party.members.each_with_index do |v,i|
  14.         if v.id == actor.id
  15.           @revive_actor_index.push(i)
  16.           break
  17.         end  
  18.       end  
  19.     end
  20.  
  21.     def revive_input
  22.       @revive_input[0]
  23.     end
  24.  
  25.     def revive_input_start
  26.       @revive_input_start[0]
  27.     end
  28.  
  29.     def setup_revive_input
  30.       @revive_input.shift
  31.       @actor_index = @revive_actor_index.shift
  32.       actor.make_actions
  33.       if actor.auto_battle?
  34.         actor.make_auto_battle_actions
  35.         inject_revive_actor
  36.       else
  37.         @revive_input_start.push(true)
  38.         SceneManager.scene.start_actor_command_selection
  39.       end
  40.     end
  41.  
  42.     def inject_revive_actor
  43.       actor.make_speed
  44.       @action_battlers.push(actor)
  45.       @action_battlers.sort! {|a,b| b.speed - a.speed }
  46.     end
  47.  
  48.     alias :rev_next_command :next_command
  49.     def next_command
  50.       if revive_input_start
  51.         inject_revive_actor
  52.         @revive_input_start.shift
  53.         return false
  54.       end  
  55.       rev_next_command
  56.     end
  57.  
  58.     alias :rev_prior_command :prior_command
  59.     def prior_command
  60.       return false if revive_input_start
  61.       rev_prior_command
  62.     end
  63.  
  64.     def in_turn?
  65.       return false if revive_input_start
  66.       @phase == :turn
  67.     end
  68.  
  69.   end
  70. end
  71.  
  72. class Scene_Battle < Scene_Base
  73.  
  74.   def process_action
  75.     return if scene_changing?
  76.     if !@subject || !@subject.current_action
  77.       if BattleManager.revive_input
  78.           BattleManager.setup_revive_input
  79.           return
  80.       end  
  81.       @subject = BattleManager.next_subject  
  82.     end
  83.     return turn_end unless @subject
  84.     if @subject.current_action
  85.       @subject.current_action.prepare
  86.       if @subject.current_action.valid?
  87.         @status_window.open
  88.         execute_action
  89.       end
  90.       @subject.remove_current_action
  91.     end
  92.     process_action_end unless @subject.current_action
  93.   end
  94.  
  95.   def prior_command
  96.     if BattleManager.prior_command
  97.       start_actor_command_selection
  98.     elsif BattleManager.revive_input_start
  99.         @actor_command_window.activate
  100.     else  
  101.         start_party_command_selection
  102.     end
  103.   end  
  104.  
  105. end  
  106.  
  107. class Game_Actor
  108.  
  109.   def revive
  110.                 @hp = 1 if @hp == 0
  111.     return if !$game_party.in_battle
  112.     BattleManager.revive_input_set(self)
  113.         end
  114.  
  115. end



RUBY 代码复制
  1. # [url=home.php?mod=space&uid=102614]@taroxd[/url] metadata 1.0
  2. # @require taroxd_core
  3. # @id target_ext
  4. # [url=home.php?mod=space&uid=502659]@DISPLAY[/url] 使用目标的扩展
  5. # @help 设置技能、物品的使用目标。
  6. # 使用方法:
  7. #   在技能/物品的备注栏写下类似于下面例子的备注,设置可选择的全体目标。
  8. #
  9. #   该脚本不影响菜单中使用技能/物品。
  10. #
  11. #   用 a 指代使用者,用 b 或 self 指代目标。
  12. #
  13. #   例1:存活队员中 hp 最小者。
  14. #   <target>
  15. #     select: alive?
  16. #     min_by: hp_rate
  17. #   </target>
  18. #
  19. #   例2:所有 hp 大于 50 的队员
  20. #   <target>
  21. #     select: hp > 50
  22. #   </target>
  23. #
  24. #   例3:除自己之外的全体队友
  25. #   <target>
  26. #     select: alive? && b != a
  27. #   </target>
  28. #
  29. #   例4:无视生死
  30. #   <target></target>
  31.  
  32. module Taroxd::TargetExt
  33.  
  34.   RE_OUTER = /<target>(.*?)<\/target>/mi # 整体设置
  35.   SEPARATOR = ':'                        # 每一行中的分隔符
  36.  
  37.   # 实例方法,用于选择目标的窗口中
  38.  
  39.   # virtual
  40.   # 返回可以选择的所有目标
  41.   def targets_to_select
  42.     []
  43.   end
  44.  
  45.   # 返回设置的目标
  46.   # 若 actor 未初始化,或没有设置目标,返回 nil
  47.   def selectable_targets
  48.     actor = BattleManager.actor
  49.     return unless actor
  50.     item = actor.input.item
  51.     return unless item
  52.     item.get_targets(actor, targets_to_select)
  53.   end
  54.  
  55.   # 由于父类可能未定义,不调用 super
  56.   def enable?(battler)
  57.     targets = selectable_targets
  58.     !targets || targets.include?(battler)
  59.   end
  60.  
  61.   def current_item_enabled?
  62.     super && enable?(targets_to_select[index])
  63.   end
  64.  
  65.   # 模块方法,用于读取备注
  66.  
  67.   def self.parse_note(note)
  68.     note =~ RE_OUTER ? parse_settings($1) : false
  69.   end
  70.  
  71.   private
  72.  
  73.   # lambda do |battlers, a|
  74.   #   battlers.select { |b| b.instance_eval { alive? && b != a } }
  75.   # end
  76.   def self.parse_settings(settings)
  77.     eval %(
  78.       lambda do |battlers, a|
  79.         battlers#{extract_settings(settings)}
  80.       end
  81.     )
  82.   end
  83.  
  84.   def self.extract_settings(settings)
  85.     settings.each_line.map { |line|
  86.       method, _, block = line.partition(SEPARATOR).map(&:strip)
  87.       if method.empty?
  88.         ''
  89.       elsif block.empty?
  90.         ".#{method}"
  91.       else
  92.         ".#{method} { |b| b.instance_eval { #{block} } }"
  93.       end
  94.     }.join
  95.   end
  96.  
  97. end
  98.  
  99. class RPG::UsableItem < RPG::BaseItem
  100.  
  101.   # 缓存并返回生成的 lambda。
  102.   # 如果不存在,返回伪值。
  103.   def get_target_lambda
  104.     @get_target = Taroxd::TargetExt.parse_note(@note) if @get_target.nil?
  105.     @get_target
  106.   end
  107.  
  108.   # 返回目标的数组。a:使用者。
  109.   # 如果没有设置,返回 nil。
  110.   def get_targets(a, battlers = nil)
  111.     return unless get_target_lambda
  112.     battlers ||= (for_friend? ? a.friends_unit : a.opponents_unit).members
  113.     Array(get_target_lambda.call(battlers, a))
  114.   end
  115.  
  116. end
  117.  
  118. class Game_Action
  119.  
  120.   def_chain :targets_for_opponents do |old|
  121.     targets = item.get_targets(@subject)
  122.     if !targets
  123.       old.call
  124.     elsif item.for_random?
  125.       Array.new(item.number_of_targets) { random_target(targets) }
  126.     elsif item.for_one?
  127.       num = 1 + (attack? ? subject.atk_times_add.to_i : 0)
  128.       target = if @target_index < 0
  129.         random_target(targets)
  130.       else
  131.         eval_smooth_target(opponents_unit, @target_index)
  132.       end
  133.       Array.new(num, target)
  134.     else
  135.       targets
  136.     end
  137.   end
  138.  
  139.   def_chain :targets_for_friends do |old|
  140.     targets = item.get_targets(@subject)
  141.     if !targets
  142.       old.call
  143.     elsif item.for_user?
  144.       [subject]
  145.     else
  146.       if item.for_one?
  147.         if @target_index < 0
  148.           [random_target(targets)]
  149.         else
  150.           [eval_smooth_target(friends_unit, @target_index)]
  151.         end
  152.       else
  153.         targets
  154.       end
  155.     end
  156.   end
  157.  
  158.   private
  159.  
  160.   def eval_smooth_target(unit, index)
  161.     unit[index] || unit[0]
  162.   end
  163.  
  164.   def random_target(targets)
  165.     tgr_rand = rand * targets.sum(&:tgr)
  166.     targets.each do |target|
  167.       tgr_rand -= target.tgr
  168.       return target if tgr_rand < 0
  169.     end
  170.     targets.first
  171.   end
  172. end
  173.  
  174. class Game_BattlerBase
  175.   # 如果设置了目标,必须存在目标才可使用
  176.   def_and :usable_item_conditions_met? do |item|
  177.     targets = item.get_targets(self)
  178.     !targets || !targets.empty?
  179.   end
  180. end
  181.  
  182. class Game_Battler < Game_BattlerBase
  183.   # 如果设置了目标,删除是否死亡的测试
  184.   def_chain :item_test do |old, user, item|
  185.     if item.get_target_lambda
  186.       return true if $game_party.in_battle
  187.       return true if item.for_opponent?
  188.       return true if item.damage.recover? && item.damage.to_hp? && hp < mhp
  189.       return true if item.damage.recover? && item.damage.to_mp? && mp < mmp
  190.       return true if item_has_any_valid_effects?(user, item)
  191.       false
  192.     else
  193.       old.call(user, item)
  194.     end
  195.   end
  196. end
  197.  
  198. class Window_BattleActor < Window_BattleStatus
  199.  
  200.   include Taroxd::TargetExt
  201.  
  202.   def targets_to_select
  203.     $game_party.battle_members
  204.   end
  205.  
  206.   def draw_actor_name(actor, x, y, width = 112)
  207.     change_color(hp_color(actor), enable?(actor))
  208.     draw_text(x, y, width, line_height, actor.name)
  209.   end
  210. end
  211.  
  212. class Window_BattleEnemy < Window_Selectable
  213.  
  214.   include Taroxd::TargetExt
  215.  
  216.   def targets_to_select
  217.     $game_troop.alive_members
  218.   end
  219.  
  220.   def draw_item(index)
  221.     enemy = $game_troop.alive_members[index]
  222.     change_color(normal_color, enable?(enemy))
  223.     name = enemy.name
  224.     draw_text(item_rect_for_text(index), name)
  225.   end
  226. end

Lv3.寻梦者

梦石
0
星屑
2180
在线时间
1011 小时
注册时间
2015-10-17
帖子
1285
3
 楼主| 发表于 2017-7-26 11:50:32 | 只看该作者
本帖最后由 fjm 于 2017-7-26 11:52 编辑
魔法丶小肉包 发表于 2017-7-26 09:52
目测第一个脚本的第6行加个rev_init_members


是这样加吗,这样的话还是有冲突

@revive_input = []
      @rev_init_members= []
      @revive_input_start = []

点评

fjm
感谢肉包,完美解决了  发表于 2017-7-26 16:47
不是,我是说第5行和第6行之间加一行就写rev_init_members  发表于 2017-7-26 12:57
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6260
在线时间
1481 小时
注册时间
2015-7-25
帖子
652

开拓者

2
发表于 2017-7-26 09:52:56 | 只看该作者
目测第一个脚本的第6行加个rev_init_members

评分

参与人数 1星屑 +200 收起 理由
RaidenInfinity + 200 认可答案

查看全部评分

笨肉包的首款像素OC游戏《花城梦之心》尝试制作中~
目前的坑 【不可思议的迷宫】幽灵契约外传:歌莉娅
持续更新中~ 当前进度 v0.28
大版本更新时才会更新网盘文件,预计下次大版本更新:v0.30
完成度:
主线 15% 支线 0% 数据库 6% 系统 86% 美术 6%
两边同时填坑~
( 这里是笨肉包~专修魔法!目标是大魔法师!
( 坑太大啦,一个人填不完啦hhh 一定会填完的嗯...
( 每天都和bug们比试魔力~吾之魔法将扫平一切!
( 弱点是美术,魔法修行之余再补补课吧~
( 哼哼哼~这便是魔法的力量!
大家都离开啦,笨肉包也不知道还能坚持多久呀...
这是属于笨肉包一个人的旅行(再见了...蚊子湯,七重酱,笨肉包永远想你们!TwT
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-17 14:37

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表