Project1

标题: 全灭后待机成员参战(2015年6月4日更新) [打印本页]

作者: 企鹅达达    时间: 2015-5-31 07:25
标题: 全灭后待机成员参战(2015年6月4日更新)
本帖最后由 企鹅达达 于 2015-6-5 03:50 编辑
  1. $imported = {} if $imported.nil?
  2. $imported["Sub_Party"] = true
  3. #==============================================================================
  4. # 全灭后待机成员参战 v1.2
  5. #------------------------------------------------------------------------------
  6. #    2015.05.31 by 企鹅达达
  7. #    2015.06.03 修正事件扣血时不更换队员的bug
  8. #    2015.06.04 防止整队类脚本对为加入队伍的成员调用draw_actor_simple_status等出错
  9. #==============================================================================
  10. #       如题,这个脚本的功能就是让非战斗人员按照序号编成小队,全灭后一个小队一个
  11. #   小队上场战斗。嗯,感觉不是很好用,反正是自用的╮(╯_╰)╭
  12. #       用这个脚本建议把濒死设置成战斗后解除,这样可以避免某些小队战斗
  13. #   时空了一些死掉的队员。
  14. #       顺带一提这脚本和战斗中整队、战斗中添加成员(比如召唤)类型的脚本天生不对头,
  15. #   如果因为这些原因报错,本人也无能为力了 ← ←
  16. #==============================================================================

  17. #参战时显示的信息,可以使用转义符,%s取代角色名。
  18. #    JION_MESSAGE = "\ec[6]%s\ec[0] 参战!"

  19. #如果不想要这个信息,可以设置为 nil
  20. #    JION_MESSAGE = nil

  21. JION_MESSAGE = "%s 参战!"

  22. # 在菜单里显示的名字,SUB_PARTY_NAME里没有的话会用下面的SUB_PARTY_DEFAULT_NAME

  23. SUB_PARTY_SHOW_IN_MENU = true

  24. SUB_PARTY_NAME = ["第一小队","第二小队",]

  25. SUB_PARTY_DEFAULT_NAME = "候补小队"


  26. #==============================================================================
  27. # ■ Game_Battler
  28. #------------------------------------------------------------------------------
  29. #  处理战斗者的类。Game_Actor 和 Game_Enemy 类的父类。
  30. #==============================================================================

  31. class Game_Battler < Game_BattlerBase
  32.   attr_accessor :battle_formation_order          #队伍顺序标记
  33.   #--------------------------------------------------------------------------
  34.   # ● 保存队伍顺序
  35.   #--------------------------------------------------------------------------
  36.   def save_battle_formation_order
  37.     @battle_formation_order = index
  38.   end
  39.   #--------------------------------------------------------------------------
  40.   # ● 行动结束
  41.   #--------------------------------------------------------------------------
  42.   alias sub_party_on_action_end on_action_end
  43.   def on_action_end
  44.     sub_party_on_action_end
  45.     while $game_party.all_dead?
  46.       break if $game_party.sub_party_now >= $game_party.sub_party_max
  47.       $game_party.sub_party_jion_battle
  48.     end
  49.   end
  50. end
  51. #==============================================================================
  52. # ■ Game_Party
  53. #------------------------------------------------------------------------------
  54. #  管理队伍的类。保存有金钱及物品的信息。本类的实例请参考 $game_party 。
  55. #==============================================================================
  56. class Game_Party < Game_Unit
  57.   attr_accessor :sub_party_now          #参战分队编号
  58.   attr_accessor :sub_party_max          #参战分队最大编号
  59.   #--------------------------------------------------------------------------
  60.   # ● 战斗开始处理
  61.   #--------------------------------------------------------------------------
  62.   def sub_party_jion_battle
  63.     @sub_party_now += 1
  64.     max_battle_members.times do |i|
  65.       next if all_members[ max_battle_members * @sub_party_now + i ].nil?
  66.       next if all_members[ max_battle_members * @sub_party_now + i ].dead?
  67.       swap_order( i, max_battle_members * @sub_party_now + i)
  68.       if JION_MESSAGE
  69. #       BattleManager.log_window.add_text(sprintf(JION_MESSAGE, $game_party.all_members[i].name))
  70. #       BattleManager.log_window.abs_wait(90)
  71.         $game_message.add(sprintf(JION_MESSAGE, $game_party.all_members[i].name))
  72.         BattleManager.wait_for_message
  73.       end
  74.     end
  75.   end
  76.   #--------------------------------------------------------------------------
  77.   # ● 队伍顺序恢复
  78.   #--------------------------------------------------------------------------
  79.   def sub_party_reset_order
  80.     @actors.sort! {|a, b|$game_actors[a].battle_formation_order <=> $game_actors[b].battle_formation_order }
  81.   end
  82.   #--------------------------------------------------------------------------
  83.   # ● 保存队伍顺序
  84.   #--------------------------------------------------------------------------
  85.   def sub_party_save_order
  86.     all_members.each do |member|
  87.       member.save_battle_formation_order
  88.     end
  89.   end
  90.   #--------------------------------------------------------------------------
  91.   # ● 初始化参战分队信息,顺带让第一个有成活队员的分队上阵。
  92.   #--------------------------------------------------------------------------
  93.   def make_sub_party
  94.     @sub_party_now = 0
  95.     @sub_party_max = all_members.size / max_battle_members
  96.     @sub_party_max -= 1 if all_members.size == max_battle_members * @sub_party_max
  97.     while battle_members.select {|member|member.alive?}.empty?
  98.       break if @sub_party_now >= @sub_party_max
  99.       sub_party_jion_battle
  100.     end
  101.   end
  102.   #--------------------------------------------------------------------------
  103.   # ● 战斗开始处理
  104.   #--------------------------------------------------------------------------
  105.   alias sub_party_on_battle_start on_battle_start
  106.   def on_battle_start
  107.     sub_party_save_order
  108.     make_sub_party
  109.     sub_party_on_battle_start
  110.   end
  111.   #--------------------------------------------------------------------------
  112.   # ● 战斗结束处理
  113.   #--------------------------------------------------------------------------
  114.   alias sub_party_on_battle_end on_battle_end
  115.   def on_battle_end
  116.     sub_party_reset_order
  117.     sub_party_on_battle_end
  118.   end
  119. end
  120. #==============================================================================
  121. # ■ Game_Interpreter
  122. #------------------------------------------------------------------------------
  123. #  事件指令的解释器。
  124. #   本类在 Game_Map、Game_Troop、Game_Event 类的内部使用。
  125. #==============================================================================

  126. class Game_Interpreter
  127.   #--------------------------------------------------------------------------
  128.   # ● 增减 HP                   v 1.1更新
  129.   #--------------------------------------------------------------------------
  130.   def command_311
  131.     value = operate_value(@params[2], @params[3], @params[4])
  132.     iterate_actor_var(@params[0], @params[1]) do |actor|
  133.       next if actor.dead?
  134.       actor.change_hp(value, @params[5])
  135.       actor.perform_collapse_effect if actor.dead?
  136.     end
  137.     ##############################################
  138.     if SceneManager.scene_is?(Scene_Battle)
  139.       while $game_party.all_dead?
  140.         break if $game_party.sub_party_now >= $game_party.sub_party_max
  141.         $game_party.sub_party_jion_battle
  142.       end
  143.     end
  144.     ##############################################
  145.     SceneManager.goto(Scene_Gameover) if $game_party.all_dead?
  146.   end
  147.   #--------------------------------------------------------------------------
  148.   # ● 更改状态                   v 1.1更新
  149.   #--------------------------------------------------------------------------
  150.   alias sub_party_command_313 command_313
  151.   def command_313
  152.    sub_party_command_313
  153.     ##############################################
  154.     if SceneManager.scene_is?(Scene_Battle)
  155.       while $game_party.all_dead?
  156.         break if $game_party.sub_party_now >= $game_party.sub_party_max
  157.         $game_party.sub_party_jion_battle
  158.       end
  159.     end
  160.     ##############################################
  161.   end
  162. end
  163. if SUB_PARTY_SHOW_IN_MENU
  164. #==============================================================================
  165. # ■ Window_Base
  166. #------------------------------------------------------------------------------
  167. #  游戏中所有窗口的父类
  168. #==============================================================================
  169. class Window_Base < Window
  170.   #--------------------------------------------------------------------------
  171.   # ● 绘制分队名
  172.   #--------------------------------------------------------------------------
  173.   def draw_actor_sub_party(actor, x, y, width = 112)
  174.     return if actor.index.nil?                           #   v1.2修改
  175.     change_color(system_color)
  176.     sub_party_index = actor.index / $game_party.max_battle_members
  177.     text = SUB_PARTY_NAME[sub_party_index].nil? ? SUB_PARTY_DEFAULT_NAME : SUB_PARTY_NAME[sub_party_index]
  178.     draw_text(x, y, width, line_height, text)
  179.     change_color(normal_color)
  180.   end
  181.   #--------------------------------------------------------------------------
  182.   # ● 绘制简单的状态
  183.   #--------------------------------------------------------------------------
  184.   alias sub_party_draw_actor_simple_status draw_actor_simple_status
  185.   def draw_actor_simple_status(actor, x, y)
  186.     sub_party_draw_actor_simple_status(actor, x, y)
  187.     draw_actor_sub_party(actor, x-108, y+56)
  188.   end
  189. end

  190. #encoding:utf-8
  191. #==============================================================================
  192. # ■ Window_Status
  193. #------------------------------------------------------------------------------
  194. #  显示队伍成员状态的窗口
  195. #==============================================================================

  196. class Window_Status < Window_Selectable
  197.   #--------------------------------------------------------------------------
  198.   # ● 绘制基本区域
  199.   #--------------------------------------------------------------------------
  200.   alias sub_party_draw_basic_info draw_basic_info
  201.   def draw_basic_info(x, y)
  202.     sub_party_draw_basic_info(x, y)
  203.     draw_actor_sub_party(@actor, x -132, y+72, 100)
  204.   end
  205. end

  206. end # if SUB_PARTY_SHOW_IN_MENU
复制代码

作者: 牛肉面    时间: 2015-5-31 15:05
感谢发布~~这个应该会用得到!
作者: hitomisky    时间: 2015-6-1 20:43
支持一个~!留着备用
作者: hitomisky    时间: 2015-6-2 23:56
你好,感谢你分享你的脚本,
我现在使用过程中,发现和其他脚本有点不兼容

我在测试的时候使用了一个佣兵系统,佣兵系统自动生成的人物不是正常在数据库里生成合法名字的人物

现在插入你的脚本后,就算队伍后还有活着的佣兵,但是全灭了后边的就无法上场,如果是数据库里正常建立的角色就可以

不知道你能否帮忙修改一下你的脚本,能不能兼容佣兵脚本呢?

或者修改佣兵脚本让一堆脚本自动生成的佣兵在数据库里拥有临时的合法的名字?

还有一个就是胜利显示脚本, 由于佣兵也是系统黑户,存在佣兵的情况下胜利显示的时候就会出错,

我知道要求挺过分的,但还是希望你看到后能帮帮忙

我不会写脚本,也就到跟着注释改改数据的水平了

附件是我测试用的工程,
Project2 - 副本.part1.rar (1.8 MB, 下载次数: 116)
Project2 - 副本.part2.rar (1.8 MB, 下载次数: 104)
Project2 - 副本.part3.rar (191.88 KB, 下载次数: 98)
作者: 企鹅达达    时间: 2015-6-3 09:39
本帖最后由 企鹅达达 于 2015-6-3 10:28 编辑
hitomisky 发表于 2015-6-2 23:56
你好,感谢你分享你的脚本,
我现在使用过程中,发现和其他脚本有点不兼容



look,测试着没问题。
胜利脚本貌似是本身的bug,找到下面这段脚本的位置把对应的地方改掉就好
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # new method: victory_quotes
  3.   #--------------------------------------------------------------------------
  4.   def victory_quotes(type)
  5.     case type
  6.     when :win
  7.       return self.actor.win_quotes if self.actor.win_quotes != nil && self.actor.win_quotes != [""]#修改
  8.       return self.class.win_quotes
  9.     when :level
  10.       return self.actor.level_quotes if self.actor.level_quotes != nil && self.actor.level_quotes != [""]#修改
  11.       return self.class.level_quotes
  12.     when :drops
  13.       return self.actor.drops_quotes if self.actor.drops_quotes != nil && self.actor.drops_quotes != [""] #修改
  14.       return self.class.drops_quotes
  15.     else
  16.       return ["NOTEXT"]
  17.     end
  18.   end

作者: hitomisky    时间: 2015-6-3 11:02
企鹅达达 发表于 2015-6-3 09:39
look,测试着没问题。
胜利脚本貌似是本身的bug,找到下面这段脚本的位置把对应的地方改掉就好
  #----- ...

你好,目前使用你修改的胜利显示脚本已经可以正常了,
但是默认使用候补战斗脚本佣兵还是不会自动上场
不知道是怎么一回事了
作者: hitomisky    时间: 2015-6-3 13:21
hitomisky 发表于 2015-6-3 11:02
你好,目前使用你修改的胜利显示脚本已经可以正常了,
但是默认使用候补战斗脚本佣兵还是不会自动上场
不知 ...

嗯嗯,估计是我添加的其他脚本冲突了,我正在一个一个的添加进去测试 看看是哪里出问题 再次感谢你的帮忙
作者: hitomisky    时间: 2015-6-3 14:02
企鹅达达 发表于 2015-6-3 09:39
look,测试着没问题。
胜利脚本貌似是本身的bug,找到下面这段脚本的位置把对应的地方改掉就好
  #----- ...

大大你好,请问该怎么限制佣兵脚本里游戏出战和仓库存放的数量呢?

现在用了佣兵脚本,后备队员可以一大堆,我想限制人数改怎么做?


作者: hitomisky    时间: 2015-6-3 14:17
企鹅达达 发表于 2015-6-3 09:39
look,测试着没问题。
胜利脚本貌似是本身的bug,找到下面这段脚本的位置把对应的地方改掉就好
  #----- ...

"话说创建佣兵其实用一句$game_actors[模板人物id].setup(新人物id)就可以做到"
不懂脚本,不太会改,
这个佣兵脚本还是挺不错的,自动取名 调整数值,(对于我这个伸手党而言)
作者: hitomisky    时间: 2015-6-3 17:49
对了,忘记说,关于第一小队,第二小队那里的字体,能否设置小一点默认字体太大,都把猪脚帅气的脸遮住了,还有,能不能设置自定义图片来代替中文名?类似在人物肖像那里加个图片的素材框
作者: 小小西    时间: 2015-6-4 18:58
怎么解决{:2_276:}

QQ图片20150604185705.png (7.09 KB, 下载次数: 20)

QQ图片20150604185705.png

作者: 小小西    时间: 2015-6-5 00:18
小小西 发表于 2015-6-4 18:58
怎么解决

我的是每横字就空一横,所以有264,玩家玩我游戏时候出现的,我测试也没有出现这个,所以想问问{:2_279:}
作者: 企鹅达达    时间: 2015-6-5 02:46
本帖最后由 企鹅达达 于 2015-6-5 03:41 编辑
小小西 发表于 2015-6-5 00:18
我的是每横字就空一横,所以有264,玩家玩我游戏时候出现的,我测试也没有出现这个,所以想问问 ...


额,不知道是什么时候出现的,也不知道是哪一句……嗯,或许你可以不用这个脚本?反正也不是什么必要的功能 ← ←

这脚本两个地方用到除号,一个是all_members.size,一个是actor.index,前者一般不会变成nil,只能是后者出问题,有可能是你的整队脚本调用了def draw_actor_simple_status(actor, x, y)这个方法显示了未加入队伍的角色,所以出错了。

如果的确是这个原因,那v1.2更新后应该就没问题了。

如果是其他地方出问题,那之后再说吧 ← ←
作者: 天启之门    时间: 2015-6-9 15:35
对了,忘记说,关于第一小队,第二小队那里的字体,能否设置小一点默认字体太大,都把猪脚帅气的脸遮住了,还有,能不能设置自定义图片来代替中文名?类似在人物肖像那里加个图片的素材框

作者: 天启之门    时间: 2015-6-9 15:35
对了,忘记说,关于第一小队,第二小队那里的字体,能否设置小一点默认字体太大,都把猪脚帅气的脸遮住了,还有,能不能设置自定义图片来代替中文名?类似在人物肖像那里加个图片的素材框

作者: 13791224182    时间: 2015-6-17 23:22
如果第一小队全灭,第二小队上场以后可以复活第一小队的人,然后随意调换,就完美了




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