Project1

标题: 领队脚本+固定队伍完整版(2009-03-18) [打印本页]

作者: discain    时间: 2009-3-15 07:25
标题: 领队脚本+固定队伍完整版(2009-03-18)
刚学RGSS不久,翻了旧贴,看到SailCat编写,king整合的VX领队脚本,真的很喜欢。此脚本语句很简单、精炼,于是学习之~~然后就有这个贴子。
其实不算原创,只是扩展而已。>_<
这个功能MS其他大神也发布过了,不过那个领队脚本限制太多,还是对这版脚本有爱呀。

工程下载:更换领队脚本.rar2009-03-18更新)

---------------------------------------------------------------------------
原版:领队更换系统 作者:SailCat http://rpg.blue/web/htm/news859.htm
VX原版:领队更换系统 作者:http://rpg.blue/viewthread.php?tid=83508&ntime=2009%2D3%2D14+23%3A07%3A59

原功能
#==============================================================================
# 领队更换系统 by SailCat   
# 领队更换系统  VX版 by King
#------------------------------------------------------------------------------
# 添加此脚本后,在地图画面按下A键更换当前的领队。
# 领队更改不会造成战斗队伍、菜单队伍次序的更改。
# 若要在条件分歧中调用领队,请用脚本:$game_party.leader == 序号
# 序号为0-3的值,最大不会超过队伍的角色数目减1。
#==============================================================================

增加功能新功能
# 若要在场景中强行更换领队,请用脚本:$game_party.leader = 序号
#==============================================================
LEADER_SE = "load"
# 若需更换领队音效只需更换音效的文件名(忽略扩展名)
# 音效默认文件夹为"Audio/SE/"
# 如不需要领队音效,只需将赋值改为0
#=================================================================
# 整合固定队伍顺序脚本,主角离队后归队时复位,且领队做出相应的切换
# 修正bug:非首位主角离队时赋值为空的问题(2009-3-15)
#          强行更换领队时如无该领队序号则不做任何操作(2009-3-15)
#          领队主角离队时下一位主角替换领队(2009-3-15)
#          非领队主角离队时不替换当前领队(2009-3-15)
#          主角离队时刷新有效(2009-3-16)
#          脚本优化(其实啥米也没优化)(2009-3-18)
#=================================================================



  1. #==============================================================================
  2. # 领队更换系统 by SailCat   
  3. # 领队更换系统  VX版 by King
  4. # 整合领队+入队离队 VX版 by discain
  5. #------------------------------------------------------------------------------
  6. # 添加此脚本后,在地图画面按下A键更换当前的领队。
  7. # 领队更改不会造成战斗队伍、菜单队伍次序的更改。
  8. # 若要在条件分歧中调用领队,请用脚本:$game_party.leader == 序号
  9. # 序号为0-3的值,最大不会超过队伍的角色数目减1。
  10. #==============================================================================
  11. # 以下为新增的功能   by discain
  12. # 若要在场景中强行更换领队,请用脚本:$game_party.leader = 序号
  13. #------------------------------------------------------------------------------
  14. LEADER_SE = "load"
  15. # 若需更换领队音效只需更换音效的文件名(忽略扩展名)
  16. # 音效默认文件夹为"Audio/SE/"
  17. # 如不需要领队音效,只需将赋值改为0
  18. #------------------------------------------------------------------------------
  19. # 固定队伍小脚本(VX版)  by discain   
  20. # 说明:离队人员再次回队按照原位置加入。
  21. #------------------------------------------------------------------------------
  22. FIX_PATRY = 15
  23. #  用来调用系统开关,默认值为15,默认状态为false。
  24. #  如果希望使用这个功能请将系统开关15设定为true
  25. #------------------------------------------------------------------------------
  26. # 修正bug:非首位主角离队时赋值为空的问题(2009-3-15)
  27. #          强行更换领队时如无该领队序号则不做任何操作(2009-3-15)
  28. #          领队主角离队时下一位主角替换领队(2009-3-15)
  29. #          非领队主角离队时不替换当前领队(2009-3-15)
  30. #          主角离队时刷新有效(2009-3-16)
  31. #==============================================================================

  32. class Game_Party
  33. #--------------------------------------------------------------------------
  34. # ● 追加实例变量
  35. #--------------------------------------------------------------------------
  36. attr_accessor :leader
  37. alias sailcat_initialize initialize
  38. #--------------------------------------------------------------------------
  39. # ● 初始化对像
  40. #--------------------------------------------------------------------------
  41. def initialize
  42.    # 生成领队
  43.    @leader = 0
  44.    $Game_leader = 0
  45.    sailcat_initialize
  46. end
  47. #--------------------------------------------------------------------------
  48. # * 设置队伍初期阵容
  49. #--------------------------------------------------------------------------
  50. def setup_starting_members
  51.    @index = []
  52.    #初期队伍索引
  53.    @actors = []
  54.    # 生成领队
  55.    @leader = 0
  56.    for i in $data_system.party_members
  57.      @actors.push(i)
  58.      @index.push(i)
  59.    end
  60. end
  61. #--------------------------------------------------------------------------
  62. # ● 领队变更判定
  63. #--------------------------------------------------------------------------
  64. def determine_leader
  65.    @leader %= @actors.size
  66.    $Game_leader = @leader
  67. end
  68. #--------------------------------------------------------------------------
  69. # ● 设置领队
  70. #--------------------------------------------------------------------------
  71. def switch_leader
  72.    @leader += 1
  73.    determine_leader
  74. end
  75.   #--------------------------------------------------------------------------
  76.   # * 主角离队
  77.   #     actor_id : 主角编号
  78.   #--------------------------------------------------------------------------
  79.   def remove_actor(actor_id)
  80.     if @actors.include?(actor_id)
  81.       actors_index = @actors.index(actor_id)
  82.       @actors.delete(actor_id)
  83.       if @leader != 0 and @leader > actors_index
  84.         @leader -= 1
  85.       end
  86.       determine_leader
  87.       $game_player.refresh
  88.     end
  89.   end
  90.   #--------------------------------------------------------------------------
  91.   # * 主角入队
  92.   #     actor_id : 主角编号
  93.   #--------------------------------------------------------------------------
  94.   def add_actor(actor_id)
  95.     if @actors.size < MAX_MEMBERS and not @actors.include?(actor_id)
  96.       @actors.push(actor_id)
  97.       if $game_switches[FIX_PATRY] == true
  98.         @actors = @index & @actors
  99.         #主角入队时按初期阵容排序
  100.         if @actors.size < MAX_MEMBERS and not @actors.include?(actor_id)
  101.           @actors.push(actor_id)
  102.           #有新主角入队时加入在队尾
  103.           @index.push(actor_id)
  104.           #更新队伍索引
  105.         end
  106.         actors_index = @actors.index(actor_id)
  107.         if @leader >= actors_index
  108.           @leader += 1
  109.         end
  110.         determine_leader
  111.       end
  112.       $game_player.refresh
  113.     end
  114.   end
  115. end

  116. class Game_Player
  117. alias sailcat_update update
  118. #--------------------------------------------------------------------------
  119. # ● 领队音效
  120. #--------------------------------------------------------------------------
  121. def leader_se
  122.    se = LEADER_SE
  123.    if se != 0
  124.      RPG::SE.new(se, 80 ,100).play
  125.    end
  126. end
  127. #--------------------------------------------------------------------------
  128. # ● 刷新
  129. #--------------------------------------------------------------------------
  130. def refresh
  131.    # 同伴人数为 0 的情况下
  132.    if $game_party.members.size == 0
  133.      # 清除角色的文件名及对像
  134.      @character_name = ""
  135.      @character_hue = 0
  136.      # 分支结束
  137.      return
  138.    end
  139.    # 获取带头的角色
  140.    actor = $game_party.members[$game_party.leader]
  141.    # 设置角色的文件名及对像
  142.    @character_name = actor.character_name
  143.    @character_index = actor.character_index
  144.    # 初始化不透明度和合成方式
  145.    @opacity = 255
  146.    @blend_type = 0
  147.    leader_se
  148. end

  149. #--------------------------------------------------------------------------
  150. # ● 画面更新
  151. #--------------------------------------------------------------------------
  152. def update
  153.    # 按下 A 键的情况下
  154.    if Input.trigger?(Input::X)
  155.      # 更换领队
  156.      $game_party.switch_leader
  157.      refresh
  158.    end
  159.    if $game_party.leader != $Game_leader and $game_party.members.size > $game_party.leader
  160.      refresh
  161.      $Game_leader = $game_party.leader
  162.    else
  163.      $game_party.leader = $Game_leader
  164.    end
  165.    sailcat_update
  166. end
  167. end
复制代码



新加了一个小脚本,没什么用。只是对一些想让离开队伍的主角再次回到队伍后
回到原菜单位置的游戏制作者可能有点作用。
因为本人水平有限,目前还没测出bug,大家可以帮着测试看看。
另外,这个脚本请单独使用。如需与领队脚本配合使用,请看同期发布的领队脚本
#==============================================================================
# 固定队伍小脚本(VX版)  by discain   
# 说明:离队人员再次回队按照原位置加入。
#------------------------------------------------------------------------------
FIX_PATRY = 15
#  用来调用系统开关,默认值为15,默认状态为false。
#  如果希望使用这个功能请将系统开关15设定为true
#==============================================================================


  1. #==============================================================================
  2. # 固定队伍插件(VX版)  by discain   
  3. #------------------------------------------------------------------------------
  4. FIX_PATRY = 15
  5. #  用来调用系统开关,默认值为15,默认状态为false。
  6. #  如果希望使用这个功能请将系统开关15设定为true
  7. #==============================================================================

  8. #==============================================================================
  9. # ** Game_Party
  10. #==============================================================================

  11. class Game_Party
  12.   #--------------------------------------------------------------------------
  13.   # * 设置队伍初期阵容
  14.   #--------------------------------------------------------------------------
  15.   def setup_starting_members
  16.     @actors = []
  17.     #初期队伍索引
  18.     @index = []
  19.     for i in $data_system.party_members
  20.       @actors.push(i)
  21.       @index.push(i)
  22.     end
  23.   end
  24.   #--------------------------------------------------------------------------
  25.   # * 主角入队
  26.   #     actor_id : 主角编号
  27.   #--------------------------------------------------------------------------
  28.   def add_actor(actor_id)
  29.     if @actors.size < MAX_MEMBERS and not @actors.include?(actor_id)
  30.       @actors.push(actor_id)
  31.       if $game_switches[FIX_PATRY] == true
  32.       #主角入队时按初期阵容排序
  33.       @actors = @index & @actors
  34.       #有新主角入队时加入在队尾
  35.        if @actors.size < MAX_MEMBERS and not @actors.include?(actor_id)
  36.          @actors.push(actor_id)
  37.          #更新队伍索引
  38.          @index.push(actor_id)
  39.        end
  40.       end
  41.       $game_player.refresh
  42.     end
  43.   end
  44. end
复制代码

作者: 星辰天羽    时间: 2009-3-16 06:12
呵呵,不错的脚本,正要用到!




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