Project1

标题: 队伍里同时有两个特定角色时才能使用或效果增强的技能 [打印本页]

作者: 骷髅岛遗老    时间: 2018-8-3 01:00
标题: 队伍里同时有两个特定角色时才能使用或效果增强的技能
比如A和B同时出战时某技能才能被使用或者使用时威力增强,物品也可以,以及希望这个组合可以被玩家控制,比如可以选择AB或AC或BD
作者: 魔法丶小肉包    时间: 2018-8-4 18:43
好久不写脚本了,趁这个机会正好练练手

使用方法:
1.主脚本放在main上方
2.在需要组合的技能备注里写上<组合>

玩家自由选择组合玩法:
菜单-技能-选择一个技能-组合-然后选择2名成员

玩家重置组合方法:
重新选择即可,不选择或是只选一个也视为重置组合(组合无效)

注意事项:
只经过简单的测试,并不保证没有其他bug

脚本:
RUBY 代码复制
  1. class Game_BattlerBase
  2.   def skill_conditions_met?(skill)
  3.     usable_item_conditions_met?(skill) &&
  4.     skill_wtype_ok?(skill) && skill_cost_payable?(skill) &&
  5.     !skill_sealed?(skill.id) && !skill_type_sealed?(skill.stype_id) && skill_zh?(skill.id)
  6.   end
  7.   def skill_zh?(id)
  8.     if $data_skills[id].note.include?("<组合>")
  9.       return false unless ($zuhe && $zuhe[id])
  10.       if $game_party.battle_members.include?($zuhe[id][0]) && $game_party.battle_members.include?($zuhe[id][1])
  11.         return true
  12.       else
  13.         return false
  14.       end
  15.     end
  16.     return true
  17.   end
  18. end
  19. class Window_SkillList < Window_Selectable
  20.   def enable?(item)
  21.     true
  22.   end
  23. end
  24. class Window_BattleSkill < Window_SkillList
  25.   def enable?(item)
  26.     @actor && @actor.usable?(item)
  27.   end
  28. end
  29. class Window_SC < Window_Command
  30.   def initialize
  31.     super(0, 0)
  32.     select(0)
  33.   end
  34.   def window_width
  35.     return 160
  36.   end
  37.   def visible_line_number
  38.     2
  39.   end
  40.   def make_command_list
  41.     add_command("使用",   :iuse,iuse_en?)
  42.     add_command("组合",  :zuhe)
  43.   end
  44.   def set_item(item)
  45.     @item = item
  46.   end
  47.   def iuse_en?
  48.     $game_party.usable?(@item)
  49.   end
  50. end
  51. class Window_SCA < Window_MenuStatus
  52.   def window_width
  53.     100
  54.   end
  55.   def draw_item(index)
  56.     actor = $game_party.all_members[index]
  57.     enabled = $game_party.members.include?(actor)
  58.     rect = item_rect(index)
  59.     draw_item_background(index)
  60.     draw_actor_graphic(actor, rect.x+50, rect.y+50)
  61.   end
  62.   def process_ok
  63.     $zuhe[$id] << $game_party.all_members[index]
  64.     $game_party.remove_actor($game_party.all_members[index].id)
  65.     refresh
  66.     if (@cy.size - 2) >= $game_party.all_members.size
  67.       hide
  68.     end
  69.     call_ok_handler
  70.   end
  71.   def hide
  72.     super
  73.     return unless @cy
  74.     loop do
  75.       break if @cy == []
  76.     $game_party.add_actor(@cy[0].id)
  77.     @cy.delete_at(0)
  78.     end
  79.     if $zuhe[$id] && $zuhe[$id].size < 2
  80.       $zuhe[$id] = []
  81.     end
  82.   end
  83.   def show
  84.     super
  85.     $zuhe[$id] = []
  86.     @cy = $game_party.all_members
  87.     refresh
  88.   end
  89.   def process_cancel
  90.     super
  91.     hide
  92.   end
  93. end
  94. class Scene_Title < Scene_Base
  95.   def command_new_game
  96.     DataManager.setup_new_game
  97.     close_command_window
  98.     fadeout_all
  99.     $game_map.autoplay
  100.     $zuhe = {}
  101.     SceneManager.goto(Scene_Map)
  102.   end
  103. end
  104. class Scene_Skill
  105.   def start
  106.     super
  107.     create_help_window
  108.     create_command_window
  109.     create_status_window
  110.     create_item_window
  111.     c_cw
  112.     c_sca
  113.   end
  114.   def c_cw
  115.     @choicew = Window_SC.new
  116.     @choicew.set_item(@item_window.index)
  117.     @choicew.set_handler(:iuse,      method(:command_iuse))
  118.     @choicew.set_handler(:zuhe,      method(:command_zuhe))
  119.     @choicew.set_handler(:cancel,      method(:c_c))
  120.     @choicew.z = 999
  121.     @choicew.hide
  122.   end
  123.   def c_sca
  124.     @sca = Window_SCA.new(@item_window.index%2==0 ? 0 : 400,0)
  125.     @sca.set_handler(:ok,     method(:scaok))
  126.     @sca.set_handler(:cancel, method(:scacancel))
  127.     @sca.hide
  128.     @sca.z = 999
  129.   end
  130.   def scaok
  131.     @sca.activate
  132.     @item_window.activate if @sca.visible == false
  133.     @choicew.hide if @sca.visible == false
  134.   end
  135.   def scacancel
  136.     @sca.hide
  137.     @choicew.activate
  138.   end
  139.   def on_item_ok
  140.     @choicew.show
  141.     @choicew.activate
  142.   end
  143.   def command_iuse
  144.     @actor.last_skill.object = item
  145.     determine_item
  146.   end
  147.   def c_c
  148.     @choicew.hide
  149.     @item_window.activate
  150.   end
  151.   def command_zuhe
  152.     @actor.last_skill.object = item
  153.     $id = item.id
  154.     @sca.show
  155.     @sca.activate
  156.     @sca.select(0)
  157.   end
  158. end





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