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

Project1

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

[已经解决] 【脚本问题】自己修改的脚本求大佬帮忙看下

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
3 小时
注册时间
2017-10-20
帖子
3
跳转到指定楼层
1
发表于 2017-10-20 19:16:32 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 Zter 于 2017-10-20 19:25 编辑

我暂时只会把技能列表改成这样 (暂时不要帮助窗口),但是这样显得不美观,我想把技能名和花费TP的描绘都统一向下微移一些,但是我只会调技能名的位置,不会调技能花费的位置,所以求助大佬,还有我也想把技能列表调成战斗开始时就显得的那种,也就是说要完全屏蔽Window_PartyCommand和Window_ActorCommand两窗口,技能窗口从战斗开始一直显示到战斗结束才消失,每回合只存在有效无效的转换,求助大佬怎么改脚本,
附上脚本修改后的Scene_Battle和新加的Window_BattleSkillEx脚本
RUBY 代码复制下载
  1. class Window_BattleSkillEx < Window_Selectable
  2.  
  3.   def initialize
  4.     super(0,Graphics.height-fitting_height(3),Graphics.width,fitting_height(3))
  5.     @actor = nil
  6.     @stype_id = 0
  7.     @data = []
  8.   end
  9.  
  10.   def col_max
  11.     return 4
  12.   end
  13.  
  14.   def row_max
  15.     return 1
  16.   end
  17.  
  18.   def spacing
  19.     return 8
  20.   end
  21.  
  22.   def item_rect(index)
  23.     rect = Rect.new
  24.     rect.width = item_width
  25.     rect.height = fitting_height(2)
  26.     rect.x = index % col_max * item_width
  27.     rect.y = index / col_max * item_height
  28.     rect
  29.   end
  30.  
  31.   def actor=(actor)
  32.     return if @actor == actor
  33.     @actor = actor
  34.     refresh
  35.     self.oy = 0
  36.   end
  37.  
  38.   def stype_id=(stype_id)
  39.     return if @stype_id == stype_id
  40.     @stype_id = stype_id
  41.     refresh
  42.     self.oy = 0
  43.   end
  44.  
  45.   def item_max
  46.     @data ? @data.size : 1
  47.   end
  48.  
  49.   def item
  50.     @data && index >= 0 ? @data[index] : nil
  51.   end
  52.  
  53.   def current_item_enabled?
  54.     enable?(@data[index])
  55.   end
  56.  
  57.   def include?(item)
  58.     item && item.stype_id == @stype_id
  59.   end
  60.  
  61.   def enable?(item)
  62.     @actor && @actor.usable?(item)
  63.   end
  64.  
  65.   def make_item_list
  66.     @data = @actor ? @actor.skills.select {|skill| include?(skill) } : []
  67.   end
  68.  
  69.   def select_last
  70.     select(@data.index(@actor.last_skill.object) || 0)
  71.   end
  72.  
  73.   def draw_item(index)
  74.     skill = @data[index]
  75.     if skill
  76.       rect = item_rect(index)
  77.       draw_item_name(skill, rect.x, rect.y, enable?(skill))
  78.       draw_skill_cost(rect, skill)
  79.     end
  80.   end
  81.  
  82.   def draw_skill_cost(rect, skill)
  83.     if @actor.skill_tp_cost(skill) > 0
  84.       change_color(tp_cost_color, enable?(skill))
  85.       draw_text(rect, @actor.skill_tp_cost(skill), 2)
  86.     elsif @actor.skill_mp_cost(skill) > 0
  87.       change_color(mp_cost_color, enable?(skill))
  88.       draw_text(rect, @actor.skill_mp_cost(skill), 2)
  89.     end
  90.   end
  91.  
  92.   def refresh
  93.     make_item_list
  94.     create_contents
  95.     draw_all_items
  96.   end
  97.  
  98. end

  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Scene_Battle
  4. #------------------------------------------------------------------------------
  5. #  战斗画面
  6. #==============================================================================

  7. class Scene_Battle < Scene_Base
  8.   #--------------------------------------------------------------------------
  9.   # ● 开始处理
  10.   #--------------------------------------------------------------------------
  11.   def start
  12.     super
  13.     create_spriteset
  14.     create_all_windows
  15.     BattleManager.method_wait_for_message = method(:wait_for_message)
  16.   end
  17.   #--------------------------------------------------------------------------
  18.   # ● 开始后处理
  19.   #--------------------------------------------------------------------------
  20.   def post_start
  21.     super
  22.     battle_start
  23.   end
  24.   #--------------------------------------------------------------------------
  25.   # ● 结束前处理
  26.   #--------------------------------------------------------------------------
  27.   def pre_terminate
  28.     super
  29.     Graphics.fadeout(30) if SceneManager.scene_is?(Scene_Map)
  30.     Graphics.fadeout(60) if SceneManager.scene_is?(Scene_Title)
  31.   end
  32.   #--------------------------------------------------------------------------
  33.   # ● 结束处理
  34.   #--------------------------------------------------------------------------
  35.   def terminate
  36.     super
  37.     dispose_spriteset
  38.     @info_viewport.dispose
  39.     RPG::ME.stop
  40.   end
  41.   #--------------------------------------------------------------------------
  42.   # ● 更新画面
  43.   #--------------------------------------------------------------------------
  44.   def update
  45.     super
  46.     if BattleManager.in_turn?
  47.       process_event
  48.       process_action
  49.     end
  50.     BattleManager.judge_win_loss
  51.   end
  52.   #--------------------------------------------------------------------------
  53.   # ● 更新画面(基础)
  54.   #--------------------------------------------------------------------------
  55.   def update_basic
  56.     super
  57.     $game_timer.update
  58.     $game_troop.update
  59.     @spriteset.update
  60.     update_info_viewport
  61.     update_message_open
  62.   end
  63.   #--------------------------------------------------------------------------
  64.   # ● 更新画面(等待用)
  65.   #--------------------------------------------------------------------------
  66.   def update_for_wait
  67.     update_basic
  68.   end
  69.   #--------------------------------------------------------------------------
  70.   # ● 等待
  71.   #--------------------------------------------------------------------------
  72.   def wait(duration)
  73.     duration.times {|i| update_for_wait if i < duration / 2 || !show_fast? }
  74.   end
  75.   #--------------------------------------------------------------------------
  76.   # ● 快进判定
  77.   #--------------------------------------------------------------------------
  78.   def show_fast?
  79.     Input.press?(:A) || Input.press?(:C)
  80.   end
  81.   #--------------------------------------------------------------------------
  82.   # ● 等待(快进无效)
  83.   #--------------------------------------------------------------------------
  84.   def abs_wait(duration)
  85.     duration.times {|i| update_for_wait }
  86.   end
  87.   #--------------------------------------------------------------------------
  88.   # ● 短时间等待(快进无效)
  89.   #--------------------------------------------------------------------------
  90.   def abs_wait_short
  91.     abs_wait(15)
  92.   end
  93.   #--------------------------------------------------------------------------
  94.   # ● 等待信息显示的结束
  95.   #--------------------------------------------------------------------------
  96.   def wait_for_message
  97.     @message_window.update
  98.     update_for_wait while $game_message.visible
  99.   end
  100.   #--------------------------------------------------------------------------
  101.   # ● 等待动画显示的结束
  102.   #--------------------------------------------------------------------------
  103.   def wait_for_animation
  104.     update_for_wait
  105.     update_for_wait while @spriteset.animation?
  106.   end
  107.   #--------------------------------------------------------------------------
  108.   # ● 等待效果执行的结束
  109.   #--------------------------------------------------------------------------
  110.   def wait_for_effect
  111.     update_for_wait
  112.     update_for_wait while @spriteset.effect?
  113.   end
  114.   #--------------------------------------------------------------------------
  115.   # ● 更新信息显示的显示端口
  116.   #--------------------------------------------------------------------------
  117.   def update_info_viewport
  118.     move_info_viewport(64)  if BattleManager.in_turn?
  119.   end
  120.   #--------------------------------------------------------------------------
  121.   # ● 移动信息显示的显示端口
  122.   #--------------------------------------------------------------------------
  123.   def move_info_viewport(ox)
  124.     current_ox = @info_viewport.ox
  125.     @info_viewport.ox = [ox, current_ox + 16].min if current_ox < ox
  126.     @info_viewport.ox = [ox, current_ox - 16].max if current_ox > ox
  127.   end
  128.   #--------------------------------------------------------------------------
  129.   # ● 信息窗口打开时的更新
  130.   #    在状态窗口关闭完成前,信息窗口的打开度设置为 0 。
  131.   #--------------------------------------------------------------------------
  132.   def update_message_open
  133.     if $game_message.busy? && !@status_window.close?
  134.       @message_window.openness = 0
  135.       @status_window.close
  136.       @party_command_window.close
  137.       @actor_command_window.close
  138.     end
  139.   end
  140.   #--------------------------------------------------------------------------
  141.   # ● 生成精灵组
  142.   #--------------------------------------------------------------------------
  143.   def create_spriteset
  144.     @spriteset = Spriteset_Battle.new
  145.   end
  146.   #--------------------------------------------------------------------------
  147.   # ● 释放精灵组
  148.   #--------------------------------------------------------------------------
  149.   def dispose_spriteset
  150.     @spriteset.dispose
  151.   end
  152.   #--------------------------------------------------------------------------
  153.   # ● 生成所有窗口
  154.   #--------------------------------------------------------------------------
  155.   def create_all_windows
  156.     create_message_window
  157.     create_scroll_text_window
  158.     create_log_window
  159.     create_status_window
  160.     create_info_viewport
  161.     create_help_window
  162.     create_skill_window
  163.     create_actor_window
  164.     create_enemy_window
  165.   end
  166.   #--------------------------------------------------------------------------
  167.   # ● 生成信息窗口
  168.   #--------------------------------------------------------------------------
  169.   def create_message_window
  170.     @message_window = Window_Message.new
  171.   end
  172.   #--------------------------------------------------------------------------
  173.   # ● 生成滚动文字窗口
  174.   #--------------------------------------------------------------------------
  175.   def create_scroll_text_window
  176.     @scroll_text_window = Window_ScrollText.new
  177.   end
  178.   #--------------------------------------------------------------------------
  179.   # ● 生成日志记录窗口
  180.   #--------------------------------------------------------------------------
  181.   def create_log_window
  182.     @log_window = Window_BattleLog.new
  183.     @log_window.method_wait = method(:wait)
  184.     @log_window.method_wait_for_effect = method(:wait_for_effect)
  185.   end
  186.   #--------------------------------------------------------------------------
  187.   # ● 生成状态窗口
  188.   #--------------------------------------------------------------------------
  189.   def create_status_window
  190.     @status_window = Window_BattleStatus.new
  191.     @status_window.x = 128
  192.   end
  193.   #--------------------------------------------------------------------------
  194.   # ● 生成信息显示的显示端口
  195.   #--------------------------------------------------------------------------
  196.   def create_info_viewport
  197.     @info_viewport = Viewport.new
  198.     @info_viewport.rect.y = Graphics.height - @status_window.height
  199.     @info_viewport.rect.height = @status_window.height
  200.     @info_viewport.z = 100
  201.     @info_viewport.ox = 64
  202.     @status_window.viewport = @info_viewport
  203.   end
  204.   #--------------------------------------------------------------------------
  205.   # ● 生成帮助窗口
  206.   #--------------------------------------------------------------------------
  207.   def create_help_window
  208.     @help_window = Window_Help.new
  209.     @help_window.visible = false
  210.   end
  211.   #--------------------------------------------------------------------------
  212.   # ● 生成技能窗口
  213.   #--------------------------------------------------------------------------
  214.   def create_skill_window
  215.     @skill_window = Window_BattleSkillEx.new
  216.     @skill_window.set_handler(:ok,     method(:on_skill_ok))
  217.     @skill_window.set_handler(:cancel, method(:on_skill_cancel))
  218.   end
  219.   #--------------------------------------------------------------------------
  220.   # ● 生成角色窗口
  221.   #--------------------------------------------------------------------------
  222.   def create_actor_window
  223.     @actor_window = Window_BattleActor.new(@info_viewport)
  224.     @actor_window.set_handler(:ok,     method(:on_actor_ok))
  225.     @actor_window.set_handler(:cancel, method(:on_actor_cancel))
  226.   end
  227.   #--------------------------------------------------------------------------
  228.   # ● 生成敌人窗口
  229.   #--------------------------------------------------------------------------
  230.   def create_enemy_window
  231.     @enemy_window = Window_BattleEnemy.new(@info_viewport)
  232.     @enemy_window.set_handler(:ok,     method(:on_enemy_ok))
  233.     @enemy_window.set_handler(:cancel, method(:on_enemy_cancel))
  234.   end
  235.   #--------------------------------------------------------------------------
  236.   # ● 更新状态窗口的信息
  237.   #--------------------------------------------------------------------------
  238.   def refresh_status
  239.     @status_window.refresh
  240.   end
  241.   #--------------------------------------------------------------------------
  242.   # ● 进行下一个指令输入
  243.   #--------------------------------------------------------------------------
  244.   def next_command
  245.     if BattleManager.next_command
  246.       @skill_window.activate
  247.     else
  248.       turn_start
  249.     end
  250.   end
  251.   #--------------------------------------------------------------------------
  252.   # ● 返回上一个指令输入
  253.   #--------------------------------------------------------------------------
  254.   def prior_command
  255.     if BattleManager.prior_command
  256.       start_skill_selection
  257.     else
  258.       start_skill_selection
  259.     end
  260.   end
  261.   #--------------------------------------------------------------------------
  262.   # ● 开始队伍指令的选择
  263.   #--------------------------------------------------------------------------
  264.   def start_party_command_selection
  265.     unless scene_changing?
  266.       refresh_status
  267.       @status_window.unselect
  268.       @status_window.open
  269.       if BattleManager.input_start
  270.         @actor_command_window.close
  271.         @party_command_window.setup
  272.       else
  273.         @party_command_window.deactivate
  274.         turn_start
  275.       end
  276.     end
  277.   end
  278.   #--------------------------------------------------------------------------
  279.   # ● 开始角色指令的选择
  280.   #--------------------------------------------------------------------------
  281.   def start_actor_command_selection
  282.     @status_window.select(BattleManager.actor.index)
  283.     @party_command_window.close
  284.     @actor_command_window.setup(BattleManager.actor)
  285.   end
  286.   #--------------------------------------------------------------------------
  287.   # ● 开始技能指令的选择
  288.   #--------------------------------------------------------------------------
  289.   def start_skill_selection
  290.     @skill_window.actor = BattleManager.actor
  291.     @skill_window.refresh
  292.     @skill_window.show.activate
  293.   end
  294.   #--------------------------------------------------------------------------
  295.   # ● 指令“技能”
  296.   #--------------------------------------------------------------------------
  297.   def command_skill
  298.     @skill_window.actor = BattleManager.actor
  299.     @skill_window.stype_id = @actor_command_window.current_ext
  300.     @skill_window.refresh
  301.     @skill_window.show.activate
  302.   end
  303.   #--------------------------------------------------------------------------
  304.   # ● 开始选择队友
  305.   #--------------------------------------------------------------------------
  306.   def select_actor_selection
  307.     @actor_window.refresh
  308.     @actor_window.show.activate
  309.   end
  310.   #--------------------------------------------------------------------------
  311.   # ● 角色“确定”
  312.   #--------------------------------------------------------------------------
  313.   def on_actor_ok
  314.     BattleManager.actor.input.target_index = @actor_window.index
  315.     @actor_window.hide
  316.     @skill_window.deactivate
  317.     next_command
  318.   end
  319.   #--------------------------------------------------------------------------
  320.   # ● 角色“取消”
  321.   #--------------------------------------------------------------------------
  322.   def on_actor_cancel
  323.     @actor_window.hide
  324.     @skill_window.activate
  325.   end
  326.   #--------------------------------------------------------------------------
  327.   # ● 开始选择敌人
  328.   #--------------------------------------------------------------------------
  329.   def select_enemy_selection
  330.     @enemy_window.refresh
  331.     @enemy_window.show.activate
  332.   end
  333.   #--------------------------------------------------------------------------
  334.   # ● 敌人“确定”
  335.   #--------------------------------------------------------------------------
  336.   def on_enemy_ok
  337.     BattleManager.actor.input.target_index = @enemy_window.enemy.index
  338.     @enemy_window.hide
  339.     @skill_window.deactivate
  340.     next_command
  341.   end
  342.   #--------------------------------------------------------------------------
  343.   # ● 敌人“取消”
  344.   #--------------------------------------------------------------------------
  345.   def on_enemy_cancel
  346.     @enemy_window.hide
  347.     @skill_window.activate
  348.   end
  349.   #--------------------------------------------------------------------------
  350.   # ● 技能“确定”
  351.   #--------------------------------------------------------------------------
  352.   def on_skill_ok
  353.     @skill = @skill_window.item
  354.     BattleManager.actor.input.set_skill(@skill.id)
  355.     BattleManager.actor.last_skill.object = @skill
  356.     if [email protected]_selection?
  357.       @skill_window.deactivate
  358.       next_command
  359.     elsif @skill.for_opponent?
  360.       select_enemy_selection
  361.     else
  362.       select_actor_selection
  363.     end
  364.   end
  365.   #--------------------------------------------------------------------------
  366.   # ● 技能“取消”
  367.   #--------------------------------------------------------------------------
  368.   def on_skill_cancel
  369.     @skill_window.deactivate
  370.   end
  371.   #--------------------------------------------------------------------------
  372.   # ● 战斗开始
  373.   #--------------------------------------------------------------------------
  374.   def battle_start
  375.     BattleManager.battle_start
  376.     process_event
  377.     @skill_window.activate
  378.   end
  379.   #--------------------------------------------------------------------------
  380.   # ● 回合开始
  381.   #--------------------------------------------------------------------------
  382.   def turn_start
  383.     @skill_window.deactivate
  384.     @status_window.unselect
  385.     @subject =  nil
  386.     BattleManager.turn_start
  387.     @log_window.wait
  388.     @log_window.clear
  389.   end
  390.   #--------------------------------------------------------------------------
  391.   # ● 回合结束
  392.   #--------------------------------------------------------------------------
  393.   def turn_end
  394.     all_battle_members.each do |battler|
  395.       battler.on_turn_end
  396.       refresh_status
  397.       @log_window.display_auto_affected_status(battler)
  398.       @log_window.wait_and_clear
  399.     end
  400.     BattleManager.turn_end
  401.     process_event
  402.     @skill_window.activate
  403.   end
  404.   #--------------------------------------------------------------------------
  405.   # ● 获取敌我双方的全部参战角色
  406.   #--------------------------------------------------------------------------
  407.   def all_battle_members
  408.     $game_party.members + $game_troop.members
  409.   end
  410.   #--------------------------------------------------------------------------
  411.   # ● 处理事件
  412.   #--------------------------------------------------------------------------
  413.   def process_event
  414.     while !scene_changing?
  415.       $game_troop.interpreter.update
  416.       $game_troop.setup_battle_event
  417.       wait_for_message
  418.       wait_for_effect if $game_troop.all_dead?
  419.       process_forced_action
  420.       BattleManager.judge_win_loss
  421.       break unless $game_troop.interpreter.running?
  422.       update_for_wait
  423.     end
  424.   end
  425.   #--------------------------------------------------------------------------
  426.   # ● 处理强制战斗行动
  427.   #--------------------------------------------------------------------------
  428.   def process_forced_action
  429.     if BattleManager.action_forced?
  430.       last_subject = @subject
  431.       @subject = BattleManager.action_forced_battler
  432.       BattleManager.clear_action_force
  433.       process_action
  434.       @subject = last_subject
  435.     end
  436.   end
  437.   #--------------------------------------------------------------------------
  438.   # ● 处理战斗行动
  439.   #--------------------------------------------------------------------------
  440.   def process_action
  441.     return if scene_changing?
  442.     if !@subject || [email protected]_action
  443.       @subject = BattleManager.next_subject
  444.     end
  445.     return turn_end unless @subject
  446.     if @subject.current_action
  447.       @subject.current_action.prepare
  448.       if @subject.current_action.valid?
  449.         @status_window.open
  450.         execute_action
  451.       end
  452.       @subject.remove_current_action
  453.     end
  454.     process_action_end unless @subject.current_action
  455.   end
  456.   #--------------------------------------------------------------------------
  457.   # ● 战斗行动结束时的处理
  458.   #--------------------------------------------------------------------------
  459.   def process_action_end
  460.     @subject.on_action_end
  461.     refresh_status
  462.     @log_window.display_auto_affected_status(@subject)
  463.     @log_window.wait_and_clear
  464.     @log_window.display_current_state(@subject)
  465.     @log_window.wait_and_clear
  466.     BattleManager.judge_win_loss
  467.   end
  468.   #--------------------------------------------------------------------------
  469.   # ● 执行战斗行动
  470.   #--------------------------------------------------------------------------
  471.   def execute_action
  472.     @subject.sprite_effect_type = :whiten
  473.     use_item
  474.     @log_window.wait_and_clear
  475.   end
  476.   #--------------------------------------------------------------------------
  477.   # ● 使用技能/物品
  478.   #--------------------------------------------------------------------------
  479.   def use_item
  480.     item = @subject.current_action.item
  481.     @log_window.display_use_item(@subject, item)
  482.     @subject.use_item(item)
  483.     refresh_status
  484.     targets = @subject.current_action.make_targets.compact
  485.     show_animation(targets, item.animation_id)
  486.     targets.each {|target| item.repeats.times { invoke_item(target, item) } }
  487.   end
  488.   #--------------------------------------------------------------------------
  489.   # ● 发动技能/物品
  490.   #--------------------------------------------------------------------------
  491.   def invoke_item(target, item)
  492.     if rand < target.item_cnt(@subject, item)
  493.       invoke_counter_attack(target, item)
  494.     elsif rand < target.item_mrf(@subject, item)
  495.       invoke_magic_reflection(target, item)
  496.     else
  497.       apply_item_effects(apply_substitute(target, item), item)
  498.     end
  499.     @subject.last_target_index = target.index
  500.   end
  501.   #--------------------------------------------------------------------------
  502.   # ● 应用技能/物品效果
  503.   #--------------------------------------------------------------------------
  504.   def apply_item_effects(target, item)
  505.     target.item_apply(@subject, item)
  506.     refresh_status
  507.     @log_window.display_action_results(target, item)
  508.   end
  509.   #--------------------------------------------------------------------------
  510.   # ● 发动反击
  511.   #--------------------------------------------------------------------------
  512.   def invoke_counter_attack(target, item)
  513.     @log_window.display_counter(target, item)
  514.     attack_skill = $data_skills[target.attack_skill_id]
  515.     @subject.item_apply(target, attack_skill)
  516.     refresh_status
  517.     @log_window.display_action_results(@subject, attack_skill)
  518.   end
  519.   #--------------------------------------------------------------------------
  520.   # ● 发动反射魔法攻击
  521.   #--------------------------------------------------------------------------
  522.   def invoke_magic_reflection(target, item)
  523.     @log_window.display_reflection(target, item)
  524.     apply_item_effects(@subject, item)
  525.   end
  526.   #--------------------------------------------------------------------------
  527.   # ● 应用保护弱者
  528.   #--------------------------------------------------------------------------
  529.   def apply_substitute(target, item)
  530.     if check_substitute(target, item)
  531.       substitute = target.friends_unit.substitute_battler
  532.       if substitute && target != substitute
  533.         @log_window.display_substitute(substitute, target)
  534.         return substitute
  535.       end
  536.     end
  537.     target
  538.   end
  539.   #--------------------------------------------------------------------------
  540.   # ● 检查是否能使用保护弱者
  541.   #--------------------------------------------------------------------------
  542.   def check_substitute(target, item)
  543.     target.hp < target.mhp / 4 && (!item || !item.certain?)
  544.   end
  545.   #--------------------------------------------------------------------------
  546.   # ● 显示动画
  547.   #     targets      : 目标的数组
  548.   #     animation_id : 动画 ID(-1: 与普通攻击一样)
  549.   #--------------------------------------------------------------------------
  550.   def show_animation(targets, animation_id)
  551.     if animation_id < 0
  552.       show_attack_animation(targets)
  553.     else
  554.       show_normal_animation(targets, animation_id)
  555.     end
  556.     @log_window.wait
  557.     wait_for_animation
  558.   end
  559.   #--------------------------------------------------------------------------
  560.   # ● 显示攻击动画
  561.   #     targets : 目标的数组
  562.   #    是角色的时候考虑双持武器的效果(反转动画显示左手武器)。
  563.   #    是敌人的时候,在那一瞬间,播放“敌人普通攻击”的声效。
  564.   #--------------------------------------------------------------------------
  565.   def show_attack_animation(targets)
  566.     if @subject.actor?
  567.       show_normal_animation(targets, @subject.atk_animation_id1, false)
  568.       show_normal_animation(targets, @subject.atk_animation_id2, true)
  569.     else
  570.       Sound.play_enemy_attack
  571.       abs_wait_short
  572.     end
  573.   end
  574.   #--------------------------------------------------------------------------
  575.   # ● 显示普通动画
  576.   #     targets      : 目标的数组
  577.   #     animation_id : 动画ID
  578.   #     mirror       : 左右反转
  579.   #--------------------------------------------------------------------------
  580.   def show_normal_animation(targets, animation_id, mirror = false)
  581.     animation = $data_animations[animation_id]
  582.     if animation
  583.       targets.each do |target|
  584.         target.animation_id = animation_id
  585.         target.animation_mirror = mirror
  586.         abs_wait_short unless animation.to_screen?
  587.       end
  588.       abs_wait_short if animation.to_screen?
  589.     end
  590.   end
  591. end
复制代码


如果Scene_Battle不改的话加上Window_BattleSkillEx技能窗口还可用,内容也能照常显示,如果Scene_Battle改了的话加上Window_BattleSkillEx,技能窗口就不能显示内容了,也就不好用了,大佬求教咋改,感激万分!(顺便本人也是刚学会些简单的脚本,很多东西都只能暴力修改,不懂逻辑。。



Lv4.逐梦者

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

开拓者

2
发表于 2017-10-20 22:06:25 | 只看该作者
首先呢,完全可以不用重写一个,直接修改原来的更方便,而且一般来说原本的这个类也就在战斗中这一块地方使用,所以应该不会影响别的地方
那么,经过修改
RUBY 代码复制
  1. class Window_BattleSkill < Window_SkillList
  2.   def initialize
  3.     super(0, Graphics.height-fitting_height(3), Graphics.width, fitting_height(3))
  4.     self.visible = false
  5.   end
  6.   def show
  7.     select_last
  8.     super
  9.   end
  10.   def hide
  11.     super
  12.   end
  13.   def col_max
  14.     return 4
  15.   end
  16.   def spacing
  17.     return 0
  18.   end
  19.   def item_height
  20.     line_height*3
  21.   end
  22.  
  23.   def draw_item(index)
  24.     skill = @data[index]
  25.     if skill
  26.       rect = item_rect(index)
  27.       rect.width -= 4
  28.       draw_item_name(skill, rect.x, rect.y+24, enable?(skill))
  29.       draw_skill_cost(rect, skill)
  30.     end
  31.   end
  32.   def draw_skill_cost(rect, skill)
  33.     if @actor.skill_tp_cost(skill) > 0
  34.       change_color(tp_cost_color, enable?(skill))
  35.       draw_text(rect.x,rect.y,rect.width,rect.height + 24, @actor.skill_tp_cost(skill), 2)
  36.     elsif @actor.skill_mp_cost(skill) > 0
  37.       change_color(mp_cost_color, enable?(skill))
  38.       draw_text(rect.x,rect.y,rect.width,rect.height + 24, @actor.skill_mp_cost(skill), 2)
  39.     end
  40.   end
  41. end

就只需要30多行代码了,是不是省事多了呢~
顺便说一下第一个问题,技能名坐标你会了,那就不多说了,消耗坐标的话其实draw_text这个方法可以把第一个参数rect拆开来写成4个参数(x,y,width,height),通过调整这四个参数来实现坐标的具体修改
具体的可以参考上面的代码自己试着调整一下参数看看变化就ok了
别忘了改这里
RUBY 代码复制
  1. class Scene_Battle < Scene_Base
  2.   def create_skill_window
  3.     @skill_window = Window_BattleSkill.new
  4.     @skill_window.set_handler(:ok,     method(:on_skill_ok))
  5.     @skill_window.set_handler(:cancel, method(:on_skill_cancel))
  6.   end
  7. end


那么,第二个问题呢,也不用考虑的太复杂了
只需要一个简单的思路:战斗开始——>选择技能
那么展开来继续思考:战斗开始——>直接进入角色技能选择界面
继续:战斗开始——>跳过队伍指令——>跳过角色指令——>直接进入角色技能选择界面
大致的思路有了,那么想一想怎么实现比较方便,2个思路
1.干脆取消创建窗口
2.创建了窗口但隐藏掉(反正玩家看不见就行了)
那么,首先是第一步
去掉队伍指令窗口,在这里就选择干脆取消创建窗口吧
RUBY 代码复制
  1. def create_all_windows
  2.     create_message_window
  3.     create_scroll_text_window
  4.     create_log_window
  5.     create_status_window
  6.     create_info_viewport
  7.     create_actor_command_window
  8.     create_help_window
  9.     create_skill_window
  10.     create_item_window
  11.     create_actor_window
  12.     create_enemy_window
  13.   end

去掉创建队伍指令窗口的那行脚本
直接这样去掉肯定一堆出错吧?没关系,一点点调试就行了
直接进去战斗测试,你会发现各种报错
没关系,这些报错都是写原本调用了队伍指令窗口的地方报错(因为现在不创建了)
把这些东西该改的改一改该注释的注释掉就行了
RUBY 代码复制
  1. def update_info_viewport
  2.     move_info_viewport(64)  if BattleManager.in_turn?
  3.   end
  4.   def update_message_open
  5.     if $game_message.busy? && !@status_window.close?
  6.       @message_window.openness = 0
  7.       @status_window.close
  8.       @actor_command_window.close
  9.     end
  10.   end
  11. def start_party_command_selection
  12.     unless scene_changing?
  13.       refresh_status
  14.       @status_window.unselect
  15.       @status_window.open
  16.       if BattleManager.input_start
  17.         command_fight
  18.       else
  19.         turn_start
  20.       end
  21.     end
  22.   end
  23.   def start_actor_command_selection
  24.     @status_window.select(BattleManager.actor.index)
  25.     @actor_command_window.setup(BattleManager.actor)
  26.   end
  27.   def turn_start
  28.     @actor_command_window.close
  29.     @status_window.unselect
  30.     @subject =  nil
  31.     BattleManager.turn_start
  32.     @log_window.wait
  33.     @log_window.clear
  34.   end

嗯,然后呢,队伍指令窗口就这么没了,进入战斗测试后会发现直接开始角色命令的选择了。
那么,第一步完成
第二步,想办法直接进入技能选择界面
RUBY 代码复制
  1. def start_party_command_selection
  2.     unless scene_changing?
  3.       refresh_status
  4.       @status_window.unselect
  5.       @status_window.open
  6.       if BattleManager.input_start
  7.         command_fight
  8.       else
  9.         turn_start
  10.       end
  11.     end
  12.   end

这个方法是刚刚上面改的,在战斗开始后就直接进入战斗命令了(相当于默认选择了"战斗")
那么选择战斗是进入角色指令界面,那如果默认选择"技能"呢?
于是改一改
RUBY 代码复制
  1. def start_party_command_selection
  2.     unless scene_changing?
  3.       refresh_status
  4.       @status_window.unselect
  5.       @status_window.open
  6.       if BattleManager.input_start
  7.         if BattleManager.next_command
  8.           start_actor_command_selection
  9.           command_skill
  10.         else
  11.           turn_start
  12.         end
  13.       else
  14.         turn_start
  15.       end
  16.     end
  17.   end

这样一来,就默认选择了技能
测试一下,发现虽然打开了技能界面,但角色指令窗口还是在,于是还要改一下
RUBY 代码复制
  1. def start_actor_command_selection
  2.     @status_window.select(BattleManager.actor.index)
  3.   end

这样的话呢,角色指令窗口就没了
但是新的问题又来了,窗口出现但没技能
于是改一改command_skill的@skill_window.stype_id的值,这里改成1代表第一种类型的技能(因为数据库里可以设置很多种类的技能,这里改成默认显示1也就是"特技",当然可以进一步的修改来显示所有已学会的技能)
RUBY 代码复制
  1. def command_skill
  2.     @skill_window.actor = BattleManager.actor
  3.     @skill_window.stype_id = 1
  4.     @skill_window.refresh
  5.     @skill_window.show.activate
  6.   end

然后测试,发现可以选择了,但是,你会发现2个问题
1.如果技能都消耗不足无法使用怎么继续
2.如果这回合不想使用技能怎么跳过进入下一个角色的选择
那么,想一想,确定来选择,那么取消呢,取消还没修改
默认的取消是返回角色指令选择界面,那么我们现在不需要,所以要修改
RUBY 代码复制
  1. def on_skill_cancel
  2.     @skill_window.hide
  3.     next_command
  4.   end

取消后直接进入下一个选择就ok了,这样一下子就解决了2个问题和原本按取消时候的bug
到这里,就算基本完成了

包括第一个问题总的合起来就是:
RUBY 代码复制
  1. class Scene_Battle < Scene_Base
  2.   def create_skill_window
  3.     @skill_window = Window_BattleSkill.new
  4.     @skill_window.set_handler(:ok,     method(:on_skill_ok))
  5.     @skill_window.set_handler(:cancel, method(:on_skill_cancel))
  6.   end
  7. end
  8. class Window_BattleSkill < Window_SkillList
  9.   def initialize
  10.     super(0, Graphics.height-fitting_height(3), Graphics.width, fitting_height(3))
  11.     self.visible = false
  12.   end
  13.   def show
  14.     select_last
  15.     super
  16.   end
  17.   def hide
  18.     super
  19.   end
  20.   def col_max
  21.     return 4
  22.   end
  23.   def spacing
  24.     return 0
  25.   end
  26.   def item_height
  27.     line_height*3
  28.   end
  29.  
  30.   def draw_item(index)
  31.     skill = @data[index]
  32.     if skill
  33.       rect = item_rect(index)
  34.       rect.width -= 4
  35.       draw_item_name(skill, rect.x, rect.y+24, enable?(skill))
  36.       draw_skill_cost(rect, skill)
  37.     end
  38.   end
  39.   def draw_skill_cost(rect, skill)
  40.     if @actor.skill_tp_cost(skill) > 0
  41.       change_color(tp_cost_color, enable?(skill))
  42.       draw_text(rect.x,rect.y,rect.width,rect.height + 24, @actor.skill_tp_cost(skill), 2)
  43.     elsif @actor.skill_mp_cost(skill) > 0
  44.       change_color(mp_cost_color, enable?(skill))
  45.       draw_text(rect.x,rect.y,rect.width,rect.height + 24, @actor.skill_mp_cost(skill), 2)
  46.     end
  47.   end
  48. end
  49. class Scene_Battle < Scene_Base
  50.   def update_info_viewport
  51.     move_info_viewport(64)  if BattleManager.in_turn?
  52.   end
  53.   def update_message_open
  54.     if $game_message.busy? && !@status_window.close?
  55.       @message_window.openness = 0
  56.       @status_window.close
  57.       @actor_command_window.close
  58.     end
  59.   end
  60.   def create_all_windows
  61.     create_message_window
  62.     create_scroll_text_window
  63.     create_log_window
  64.     create_status_window
  65.     create_info_viewport
  66.     create_actor_command_window
  67.     create_help_window
  68.     create_skill_window
  69.     create_item_window
  70.     create_actor_window
  71.     create_enemy_window
  72.   end
  73.   def start_party_command_selection
  74.     unless scene_changing?
  75.       refresh_status
  76.       @status_window.unselect
  77.       @status_window.open
  78.       if BattleManager.input_start
  79.         if BattleManager.next_command
  80.           start_actor_command_selection
  81.           command_skill
  82.         else
  83.           turn_start
  84.         end
  85.       else
  86.         turn_start
  87.       end
  88.     end
  89.   end
  90.   def start_actor_command_selection
  91.     @status_window.select(BattleManager.actor.index)
  92.   end
  93.   def turn_start
  94.     @actor_command_window.close
  95.     @status_window.unselect
  96.     @subject =  nil
  97.     BattleManager.turn_start
  98.     @log_window.wait
  99.     @log_window.clear
  100.   end
  101.   def command_skill
  102.     @skill_window.actor = BattleManager.actor
  103.     @skill_window.stype_id = 1
  104.     @skill_window.refresh
  105.     @skill_window.show.activate
  106.   end
  107.   def next_command
  108.     if BattleManager.next_command
  109.       start_actor_command_selection
  110.       command_skill
  111.     else
  112.       turn_start
  113.     end
  114.   end
  115.   def on_skill_cancel
  116.     @skill_window.hide
  117.     next_command
  118.   end
  119. end


点评

多谢大佬,已经解决了,感激万分  发表于 2017-10-21 12:02

评分

参与人数 1+1 收起 理由
oott123 + 1 精品文章

查看全部评分

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

使用道具 举报

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

本版积分规则

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

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

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

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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