Project1

标题: 2点VIP请求帮忙改脚本 [打印本页]

作者: wozx922an    时间: 2009-3-26 00:08
标题: 2点VIP请求帮忙改脚本
  1. #==============================================================================
  2. #  按键威力加成 Ver.1.3.0          by Claimh   sphinger汉化修改
  3. #  本脚本来自www.66rpg.com,转载和使用请保留注释,方便来者
  4. #------------------------------------------------------------------------------
  5. #  功能添加:柳柳
  6. #
  7. #  添加修改说明:1、在T_SKILL设置技能的加成按键和威力的加成比例。
  8. #                   威力加成可以使用随机数
  9. #                2、窗口目前是可以输入很多内容,并且会自动滚动
  10. #                3、添加困难指令个数的数量限制
  11. #                4、添加随机生成指令的功能,指令处直接给定一个数字就是随机出来的指令个数
  12. #                   如果给定一个字符串的数字,比如 "15" 这样,则是只有上下左右构成的随机指令15个。
  13. #
  14. #  范例研究方法:用默认工程,给希露达(魔法师)学会7、8、9号技能(也就是火系的三招)
  15. #                然后使用这三招就知道了。
  16. #
  17. #  可能会用到的窗口修改:class Window_KeyCounter,描绘血槽的窗口
  18. #                        class Window_KeyCount,描绘按键的窗口。你可以恶搞地把它弄成跳舞机
  19. #==============================================================================

  20. module TacticalSkill
  21. #==============================================================================
  22. #  START
  23. #==============================================================================
  24. # 按键设定
  25. A = Input::A            # 对应按键:Z
  26. B = Input::B            # 对应按键:X
  27. C = Input::C            # 对应按键:C
  28. X = Input::X            # 对应按键:A
  29. Y = Input::Y            # 对应按键:S
  30. Z = Input::Z            # 对应按键:D
  31. L = Input::L            # 对应按键:Q
  32. R = Input::R            # 对应按键:W
  33. UP = Input::UP
  34. DOWN = Input::DOWN
  35. LEFT = Input::LEFT
  36. RIGHT = Input::RIGHT

  37. # 时间的快慢调整,越大越慢
  38. KEY_SEC = 0.5

  39. # 时间条显示自己放个150*10的就可以了,放在(Graphics/Windowskins/)下就可以拉
  40. T_BAR_NAME = "bar"

  41. T_HARD_NUMBER = 10 # 确定输入多少个的时候开始算做困难指令
  42.                     # 困难指令给的时间不会按照按键数量增多而增长


  43. # 技能设定
  44. T_SKILL = {
  45.    #技能ID => [[按键1,按键2,……?,按键N],技能攻击力加成]
  46.        7 => [[UP,DOWN,LEFT,RIGHT,UP,DOWN,LEFT,RIGHT,UP,DOWN,LEFT,RIGHT,UP,DOWN,LEFT,RIGHT,UP,DOWN,C,LEFT,RIGHT,UP,DOWN,LEFT,RIGHT], rand(150)+100],
  47.        8 => [12, 200],
  48.        9 => ["15", 250],
  49.        10 => [[align=left,UP], 50],
  50.        11 => [[L,X,R], 50],
  51.        12 => [[X,C,RIGHT,R], 50],
  52.        13 => [[UP,RIGHT], 50],
  53.        14 => [[L,Z,A], 50],
  54.        15 => [[R,X,X,DOWN], 50],
  55.        16 => [[DOWN, RIGHT], 50],
  56.        17 => [[A,B,C], 50],
  57.        18 => [[Y,X,DOWN,B], 50],
  58.        19 => [[align=left,DOWN], 50],
  59.        20 => [[Z,Y,A], 50],
  60.        21 => [[B,C,X,L], 50],
  61.        22 => [[align=right,DOWN], 50],
  62.        23 => [[A,B,R], 50],
  63.        24 => [[X,Y,LEFT,R], 50],
  64.        25 => [[align=left,RIGHT], 50],
  65.        26 => [[X,L,B], 50],
  66.        27 => [[align=left,X,C,Z], 50],
  67.        28 => [[align=left,DOWN], 50],
  68.        29 => [[C,X,A], 50],
  69.        30 => [[X,Z,C,UP], 50],
  70.        31 => [[UP,DOWN,X], 0],
  71.        32 => [[align=left,RIGHT,L,R], 50],
  72.        57 => [[A, C], 50],
  73.        58 => [[C, X, UP], 50],
  74.        59 => [[A, UP, RIGHT, A], 50],
  75.        60 => [[Z, C, A, B], 150],
  76.        61 => [[X, C], 50],
  77.        62 => [[UP, X, DOWN], 50],
  78.        63 => [[align=left, C, Y, A], 50],
  79.        64 => [[X, C, Y, A], 50],
  80.        65 => [[Y, A], 50],
  81.        66 => [[align=right, B, A], 50],
  82.        67 => [[align=left, UP, Z, A], 50],
  83.        68 => [[Y, B, Y, A], 50],
  84.        69 => [[align=left, A], 50],
  85.        70 => [[A, C, A], 50],
  86.        71 => [[B, B, A, A], 50],
  87.        72 => [[A, B, X, Y], 50],
  88.        73 => [[X, A], 50],
  89.        74 => [[Y, A, B], 50],
  90.        75 => [[align=left, RIGHT, Y, A], 50],
  91.        76 => [[A, C, L, A], 50],
  92.        77 => [[R, X], 50],
  93.        78 => [[L, C, R], 50],
  94.        79 => [[align=left, L, RIGHT, R], 50],
  95.        80 => [[C, C, Z, RIGHT], 50]
  96. }

  97. #  
  98. #==============================================================================
  99. # END
  100. #==============================================================================
  101. end

  102. #==============================================================================
  103. #   Input
  104. #==============================================================================
  105. module Input
  106. module_function
  107. #--------------------------------------------------------------------------
  108. #--------------------------------------------------------------------------
  109. def n_trigger?(num)
  110.    if trigger?(num)
  111.      return false
  112.    elsif trigger?(A) or trigger?(B) or trigger?(C) or
  113.          trigger?(X) or trigger?(Y) or trigger?(Z) or
  114.          trigger?(L) or trigger?(R) or
  115.          trigger?(UP) or trigger?(DOWN) or trigger?(RIGHT) or trigger?(LEFT)
  116.        return true
  117.    end
  118.    return false
  119. end
  120. #--------------------------------------------------------------------------
  121. #--------------------------------------------------------------------------
  122. def key_converter(key)
  123.    # 按键对应的字母或文字

  124.      case key
  125.      when A
  126.        return "Z"
  127.      when B
  128.        return "X"
  129.      when C
  130.        return "C"
  131.      when X
  132.        return "A"
  133.      when Y
  134.        return "S"
  135.      when Z
  136.        return "D"
  137.      when L
  138.        return "Q"
  139.      when R
  140.        return "W"
  141.     when UP
  142.      return "上"
  143.     when DOWN
  144.      return "下"
  145.     when LEFT
  146.      return "左"
  147.     when RIGHT
  148.      return "右"
  149.     end
  150. end
  151. end

  152. #==============================================================================
  153. #   Game_Battler
  154. #==============================================================================
  155. class Game_Battler
  156. attr_accessor   :tact_flag
  157. #--------------------------------------------------------------------------
  158. #--------------------------------------------------------------------------
  159. alias initialize_tactical initialize
  160. def initialize
  161.    initialize_tactical     #  
  162.    @tact_flag = false
  163. end
  164. #--------------------------------------------------------------------------
  165. #     user  :  
  166. #     skill :  
  167. #--------------------------------------------------------------------------
  168. alias skill_effect_tactical skill_effect
  169. def skill_effect2(user, skill)
  170.    skill_copy = $data_skills[skill.id].dup
  171.    skill.power = skill.power * TacticalSkill::T_SKILL[skill.id][1] / 100
  172.    skill.hit = 0 if skill.power == 0
  173.    ret = skill_effect_tactical(user, skill)
  174.    user.tact_flag = false
  175.    $data_skills[skill.id] = skill_copy.dup
  176.    return ret
  177. end
  178. end

  179. #==============================================================================
  180. #  Scene_Battle
  181. #==============================================================================
  182. class Scene_Battle
  183. #--------------------------------------------------------------------------
  184. #--------------------------------------------------------------------------
  185. alias update_phase4_step2_tactical update_phase4_step2
  186. def update_phase4_step2
  187.    update_phase4_step2_tactical
  188.    @active_battler.tact_flag = false
  189. end
  190. #--------------------------------------------------------------------------
  191. #--------------------------------------------------------------------------
  192. def make_skill_action_result
  193.    unless @active_battler.current_action.forcing
  194.      # SP  
  195.      unless @active_battler.skill_can_use?(@active_battler.current_action.skill_id)
  196.        $game_temp.forcing_battler = nil
  197.        # 移至步奏1
  198.        @phase4_step = 1
  199.        return
  200.      end
  201.    end
  202.    
  203.    if @active_battler.is_a?(Game_Actor)
  204.      if !TacticalSkill::T_SKILL[@active_battler.current_action.skill_id].nil?
  205.        if make_tactical_skill_result
  206.          # 获取特技
  207.          @skill = $data_skills[@active_battler.current_action.skill_id]
  208.          # 如果不是强制行动
  209.          unless @active_battler.current_action.forcing
  210.            # 因为 SP 耗尽而无法使用的情况下
  211.            unless @active_battler.skill_can_use?(@skill.id)
  212.              # 清除强制行动对像的战斗者
  213.              $game_temp.forcing_battler = nil
  214.              # 移至步骤 1
  215.              @phase4_step = 1
  216.              return
  217.            end
  218.          end
  219.          # 消耗 SP
  220.          @active_battler.sp -= @skill.sp_cost
  221.          # 刷新状态窗口
  222.          @status_window.refresh
  223.          # 在帮助窗口显示特技名
  224.          @help_window.set_text(@skill.name, 1)
  225.          # 设置动画 ID
  226.          @animation1_id = @skill.animation1_id
  227.          @animation2_id = @skill.animation2_id
  228.          # 设置公共事件 ID
  229.          @common_event_id = @skill.common_event_id
  230.          # 设置对像侧战斗者
  231.          set_target_battlers(@skill.scope)
  232.          # 应用特技效果
  233.          for target in @target_battlers
  234.            target.skill_effect2(@active_battler, @skill)
  235.          end
  236.        else
  237.          # 获取特技
  238.          @skill = $data_skills[@active_battler.current_action.skill_id]
  239.          # 如果不是强制行动
  240.          unless @active_battler.current_action.forcing
  241.            # 因为 SP 耗尽而无法使用的情况下
  242.            unless @active_battler.skill_can_use?(@skill.id)
  243.              # 清除强制行动对像的战斗者
  244.              $game_temp.forcing_battler = nil
  245.              # 移至步骤 1
  246.              @phase4_step = 1
  247.              return
  248.            end
  249.          end
  250.          # 消耗 SP
  251.          @active_battler.sp -= @skill.sp_cost
  252.          # 刷新状态窗口
  253.          @status_window.refresh
  254.          # 在帮助窗口显示特技名
  255.          @help_window.set_text(@skill.name, 1)
  256.          # 设置动画 ID
  257.          @animation1_id = @skill.animation1_id
  258.          @animation2_id = @skill.animation2_id
  259.          # 设置公共事件 ID
  260.          @common_event_id = @skill.common_event_id
  261.          # 设置对像侧战斗者
  262.          set_target_battlers(@skill.scope)
  263.          # 应用特技效果
  264.          for target in @target_battlers
  265.            target.skill_effect(@active_battler, @skill)
  266.          end
  267.        end
  268.      else
  269.        # 获取特技
  270.        @skill = $data_skills[@active_battler.current_action.skill_id]
  271.        # 如果不是强制行动
  272.        unless @active_battler.current_action.forcing
  273.          # 因为 SP 耗尽而无法使用的情况下
  274.          unless @active_battler.skill_can_use?(@skill.id)
  275.            # 清除强制行动对像的战斗者
  276.            $game_temp.forcing_battler = nil
  277.            # 移至步骤 1
  278.            @phase4_step = 1
  279.            return
  280.          end
  281.        end
  282.        # 消耗 SP
  283.        @active_battler.sp -= @skill.sp_cost
  284.        # 刷新状态窗口
  285.        @status_window.refresh
  286.        # 在帮助窗口显示特技名
  287.        @help_window.set_text(@skill.name, 1)
  288.        # 设置动画 ID
  289.        @animation1_id = @skill.animation1_id
  290.        @animation2_id = @skill.animation2_id
  291.        # 设置公共事件 ID
  292.        @common_event_id = @skill.common_event_id
  293.        # 设置对像侧战斗者
  294.        set_target_battlers(@skill.scope)
  295.        # 应用特技效果
  296.        for target in @target_battlers
  297.          target.skill_effect(@active_battler, @skill)
  298.        end
  299.      end
  300.    else      
  301.      # 获取特技
  302.      @skill = $data_skills[@active_battler.current_action.skill_id]
  303.      # 如果不是强制行动
  304.      unless @active_battler.current_action.forcing
  305.        # 因为 SP 耗尽而无法使用的情况下
  306.        unless @active_battler.skill_can_use?(@skill.id)
  307.          # 清除强制行动对像的战斗者
  308.          $game_temp.forcing_battler = nil
  309.          # 移至步骤 1
  310.          @phase4_step = 1
  311.          return
  312.        end
  313.      end
  314.      # 消耗 SP
  315.      @active_battler.sp -= @skill.sp_cost
  316.      # 刷新状态窗口
  317.      @status_window.refresh
  318.      # 在帮助窗口显示特技名
  319.      @help_window.set_text(@skill.name, 1)
  320.      # 设置动画 ID
  321.      @animation1_id = @skill.animation1_id
  322.      @animation2_id = @skill.animation2_id
  323.      # 设置公共事件 ID
  324.      @common_event_id = @skill.common_event_id
  325.      # 设置对像侧战斗者
  326.      set_target_battlers(@skill.scope)
  327.      # 应用特技效果
  328.      for target in @target_battlers
  329.        target.skill_effect(@active_battler, @skill)
  330.      end
  331.    end
  332. end
  333. def make_rand_tact(ini)
  334.    b = []
  335.    for i in 0...ini
  336.      case rand(12).to_i
  337.      when 0
  338.        b.push(Input::A)
  339.      when 1
  340.        b.push(Input::B)
  341.      when 2
  342.        b.push(Input::C)
  343.      when 3
  344.        b.push(Input::X)
  345.      when 4
  346.        b.push(Input::Y)
  347.      when 5
  348.        b.push(Input::Z)
  349.      when 6
  350.        b.push(Input::L)
  351.      when 7
  352.        b.push(Input::R)
  353.      when 8
  354.        b.push(Input::RIGHT)
  355.      when 9
  356.        b.push(Input::UP)
  357.      when 10
  358.        b.push(Input::LEFT)
  359.      when 11
  360.        b.push(Input::DOWN)
  361.      end
  362.    end
  363.    return b
  364. end
  365. def make_rand_tact4(ini)
  366.    b = []
  367.    for i in 0...ini
  368.      case rand(4).to_i
  369.      when 0
  370.        b.push(Input::RIGHT)
  371.      when 1
  372.        b.push(Input::UP)
  373.      when 2
  374.        b.push(Input::LEFT)
  375.      when 3
  376.        b.push(Input::DOWN)
  377.      end
  378.    end
  379.    return b
  380. end

  381. #--------------------------------------------------------------------------
  382. #--------------------------------------------------------------------------
  383. def make_tactical_skill_result
  384.    
  385.    tact_skill = TacticalSkill::T_SKILL[@active_battler.current_action.skill_id][0]
  386.    if tact_skill.is_a?(Numeric)
  387.      a = tact_skill
  388.      tact_skill = make_rand_tact(a)
  389.    elsif tact_skill.is_a?(String)
  390.      a = tact_skill.to_i
  391.      tact_skill = make_rand_tact4(a)
  392.    end   
  393.    
  394.    time = TacticalSkill::KEY_SEC * [tact_skill.size,TacticalSkill::T_HARD_NUMBER].min * Graphics.frame_rate
  395.    key_count = 0
  396.    @active_battler.tact_flag = true

  397.    window_keycount = Window_KeyCount.new(tact_skill)
  398.    window_counter = Window_KeyCounter.new

  399.      actor_x = @active_battler.index * 160

  400.    window_keycount.x = 220
  401.    window_counter.x = 220

  402.    for i in 0...time

  403.      if Input.trigger?(tact_skill[key_count])
  404.        key_count += 1
  405.        window_keycount.key_in
  406.      elsif Input.n_trigger?(tact_skill[key_count])   

  407.        break
  408.      end
  409.      # 如果成功
  410.      if key_count >= tact_skill.size
  411.        window_keycount.text_in("成功 加倍伤害")
  412.        # 成功提示音
  413.        Audio.se_play("Audio/SE/爆发")
  414.        @active_battler.tact_flag = false            
  415.        # 成功与失败后的处理
  416.        for i in 0...10
  417.          Graphics.update
  418.          @spriteset.update
  419.        end
  420.        window_keycount.dispose
  421.        window_counter.dispose
  422.        return true
  423.      end
  424.      # 刷新
  425.      window_counter.refresh((i*100/time).truncate)
  426.      Graphics.update
  427.      Input.update
  428.    end
  429.    # 如果失败
  430.    if @active_battler.tact_flag
  431.      #失败提示音
  432.      Audio.se_play("Audio/SE/057-Wrong01")
  433.      window_keycount.text_in("失败 普通伤害")
  434.    end
  435.    # 成功与失败后的处理
  436.    for i in 0...10
  437.      Graphics.update
  438.      @spriteset.update
  439.    end
  440.    window_keycount.dispose
  441.    window_counter.dispose
  442.    return false
  443. end
  444. end

  445. #==============================================================================
  446. #  Window_Base
  447. #==============================================================================
  448. class Window_Base < Window
  449. #--------------------------------------------------------------------------
  450. #--------------------------------------------------------------------------
  451. def draw_counter_bar(x, y, current)
  452.    bitmap = RPG::Cache.windowskin(TacticalSkill::T_BAR_NAME)
  453.    cw = bitmap.width * current / 100
  454.    ch = bitmap.height
  455.    src_rect = Rect.new(0, 0, cw, ch)
  456.    self.contents.blt(x, y, bitmap, src_rect)
  457. end
  458. end


  459. #==============================================================================
  460. #  Window_KeyCounter
  461. #==============================================================================
  462. class Window_KeyCounter < Window_Base
  463. #--------------------------------------------------------------------------
  464. #    输入窗口的描绘
  465. #--------------------------------------------------------------------------
  466. def initialize
  467.    super(0, 256, 180, 80)
  468.    self.contents = Bitmap.new(width - 32, height - 32)
  469.    self.opacity = 0
  470.    self.z = 999            
  471.    refresh(0)
  472. end
  473. #--------------------------------------------------------------------------
  474. #--------------------------------------------------------------------------
  475. def refresh(current)
  476.    self.contents.clear
  477.    draw_counter_bar(0, 0, current)
  478. end
  479. end
  480. #==============================================================================
  481. #   Window_KeyCount
  482. #------------------------------------------------------------------------------
  483. #  
  484. #==============================================================================
  485. class Window_KeyCount < Window_Base
  486. #--------------------------------------------------------------------------
  487. #--------------------------------------------------------------------------
  488. def initialize(key)
  489.    super(0, 230, 180, 80)
  490.    self.contents = Bitmap.new(width - 32, height - 32)
  491.    self.opacity = 255     
  492.    self.z = 998
  493.    @key = key
  494.    @key_count = 0
  495.    refresh
  496. end
  497. #--------------------------------------------------------------------------
  498. #--------------------------------------------------------------------------
  499. def refresh
  500.    self.contents.clear
  501.    for i in [email protected]
  502.      if @key.size > 4
  503.        if @key_count >= 3
  504.          x = (i-@key_count+2)*32
  505.        else
  506.          x = i * 32
  507.        end
  508.      else        
  509.        x = i * 32
  510.      end
  511.      if i < @key_count
  512.        self.contents.font.color = knockout_color
  513.        self.contents.font.size = 16
  514.      elsif i== @key_count        
  515.        self.contents.font.color = normal_color
  516.        self.contents.font.size = 25
  517.      else
  518.        self.contents.font.color = disabled_color
  519.        self.contents.font.size = 18
  520.      end
  521.      self.contents.draw_text(x, 0, 100, 32, Input.key_converter(@key[i]))
  522.    end
  523. end
  524. #--------------------------------------------------------------------------
  525. #--------------------------------------------------------------------------
  526. def key_in
  527.    @key_count += 1
  528.    refresh
  529. end
  530. #--------------------------------------------------------------------------
  531. #--------------------------------------------------------------------------
  532. def text_in(text)
  533.    self.contents.clear
  534.    self.contents.font.size = 20
  535.    self.contents.draw_text(0, 0, 130, 32, text, 1)
  536. end
  537. end
复制代码


这个是“按键威力加成”脚本:按键正确技能伤害加成,错误则为普通伤害
能不能改成:按键正确后才能发动特技,错误则不发动,SP照样消耗

在这里谢谢了 [LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: Tabris_Air    时间: 2009-3-26 00:38
拿去{/hx}
参考260到280行部分,
其实很简单的=。=b


  1. #==============================================================================
  2. #  按键威力加成 Ver.1.3.0          by Claimh   sphinger汉化修改
  3. #  本脚本来自www.66rpg.com,转载和使用请保留注释,方便来者
  4. #------------------------------------------------------------------------------
  5. #  功能添加:柳柳
  6. #
  7. #  添加修改说明:1、在T_SKILL设置技能的加成按键和威力的加成比例。
  8. #                   威力加成可以使用随机数
  9. #                2、窗口目前是可以输入很多内容,并且会自动滚动
  10. #                3、添加困难指令个数的数量限制
  11. #                4、添加随机生成指令的功能,指令处直接给定一个数字就是随机出来的指令个数
  12. #                   如果给定一个字符串的数字,比如 "15" 这样,则是只有上下左右构成的随机指令15个。
  13. #
  14. #  范例研究方法:用默认工程,给希露达(魔法师)学会7、8、9号技能(也就是火系的三招)
  15. #                然后使用这三招就知道了。
  16. #
  17. #  可能会用到的窗口修改:class Window_KeyCounter,描绘血槽的窗口
  18. #                        class Window_KeyCount,描绘按键的窗口。你可以恶搞地把它弄成跳舞机
  19. #==============================================================================

  20. module TacticalSkill
  21. #==============================================================================
  22. #  START
  23. #==============================================================================
  24. # 按键设定
  25. A = Input::A            # 对应按键:Z
  26. B = Input::B            # 对应按键:X
  27. C = Input::C            # 对应按键:C
  28. X = Input::X            # 对应按键:A
  29. Y = Input::Y            # 对应按键:S
  30. Z = Input::Z            # 对应按键:D
  31. L = Input::L            # 对应按键:Q
  32. R = Input::R            # 对应按键:W
  33. UP = Input::UP
  34. DOWN = Input::DOWN
  35. LEFT = Input::LEFT
  36. RIGHT = Input::RIGHT

  37. # 时间的快慢调整,越大越慢
  38. KEY_SEC = 0.5

  39. # 时间条显示自己放个150*10的就可以了,放在(Graphics/Windowskins/)下就可以拉
  40. T_BAR_NAME = "bar"

  41. T_HARD_NUMBER = 10 # 确定输入多少个的时候开始算做困难指令
  42.                     # 困难指令给的时间不会按照按键数量增多而增长


  43. # 技能设定
  44. T_SKILL = {
  45.    #技能ID => [[按键1,按键2,……?,按键N],技能攻击力加成]
  46.        7 => [[UP,DOWN,LEFT,RIGHT,UP,DOWN,LEFT,RIGHT,UP,DOWN,LEFT,RIGHT,UP,DOWN,LEFT,RIGHT,UP,DOWN,C,LEFT,RIGHT,UP,DOWN,LEFT,RIGHT], rand(150)+100],
  47.        8 => [12, 200],
  48.        9 => ["15", 250],
  49.        10 => [[align=left,UP], 50],
  50.        11 => [[L,X,R], 50],
  51.        12 => [[X,C,RIGHT,R], 50],
  52.        13 => [[UP,RIGHT], 50],
  53.        14 => [[L,Z,A], 50],
  54.        15 => [[R,X,X,DOWN], 50],
  55.        16 => [[DOWN, RIGHT], 50],
  56.        17 => [[A,B,C], 50],
  57.        18 => [[Y,X,DOWN,B], 50],
  58.        19 => [[align=left,DOWN], 50],
  59.        20 => [[Z,Y,A], 50],
  60.        21 => [[B,C,X,L], 50],
  61.        22 => [[align=right,DOWN], 50],
  62.        23 => [[A,B,R], 50],
  63.        24 => [[X,Y,LEFT,R], 50],
  64.        25 => [[align=left,RIGHT], 50],
  65.        26 => [[X,L,B], 50],
  66.        27 => [[align=left,X,C,Z], 50],
  67.        28 => [[align=left,DOWN], 50],
  68.        29 => [[C,X,A], 50],
  69.        30 => [[X,Z,C,UP], 50],
  70.        31 => [[UP,DOWN,X], 0],
  71.        32 => [[align=left,RIGHT,L,R], 50],
  72.        57 => [[A, C], 50],
  73.        58 => [[C, X, UP], 50],
  74.        59 => [[A, UP, RIGHT, A], 50],
  75.        60 => [[Z, C, A, B], 150],
  76.        61 => [[X, C], 50],
  77.        62 => [[UP, X, DOWN], 50],
  78.        63 => [[align=left, C, Y, A], 50],
  79.        64 => [[X, C, Y, A], 50],
  80.        65 => [[Y, A], 50],
  81.        66 => [[align=right, B, A], 50],
  82.        67 => [[align=left, UP, Z, A], 50],
  83.        68 => [[Y, B, Y, A], 50],
  84.        69 => [[align=left, A], 50],
  85.        70 => [[A, C, A], 50],
  86.        71 => [[B, B, A, A], 50],
  87.        72 => [[A, B, X, Y], 50],
  88.        73 => [[X, A], 50],
  89.        74 => [[Y, A, B], 50],
  90.        75 => [[align=left, RIGHT, Y, A], 50],
  91.        76 => [[A, C, L, A], 50],
  92.        77 => [[R, X], 50],
  93.        78 => [[L, C, R], 50],
  94.        79 => [[align=left, L, RIGHT, R], 50],
  95.        80 => [[C, C, Z, RIGHT], 50]
  96. }

  97. #  
  98. #==============================================================================
  99. # END
  100. #==============================================================================
  101. end

  102. #==============================================================================
  103. #   Input
  104. #==============================================================================
  105. module Input
  106. module_function
  107. #--------------------------------------------------------------------------
  108. #--------------------------------------------------------------------------
  109. def n_trigger?(num)
  110.    if trigger?(num)
  111.      return false
  112.    elsif trigger?(A) or trigger?(B) or trigger?(C) or
  113.          trigger?(X) or trigger?(Y) or trigger?(Z) or
  114.          trigger?(L) or trigger?(R) or
  115.          trigger?(UP) or trigger?(DOWN) or trigger?(RIGHT) or trigger?(LEFT)
  116.        return true
  117.    end
  118.    return false
  119. end
  120. #--------------------------------------------------------------------------
  121. #--------------------------------------------------------------------------
  122. def key_converter(key)
  123.    # 按键对应的字母或文字

  124.      case key
  125.      when A
  126.        return "Z"
  127.      when B
  128.        return "X"
  129.      when C
  130.        return "C"
  131.      when X
  132.        return "A"
  133.      when Y
  134.        return "S"
  135.      when Z
  136.        return "D"
  137.      when L
  138.        return "Q"
  139.      when R
  140.        return "W"
  141.     when UP
  142.      return "上"
  143.     when DOWN
  144.      return "下"
  145.     when LEFT
  146.      return "左"
  147.     when RIGHT
  148.      return "右"
  149.     end
  150. end
  151. end

  152. #==============================================================================
  153. #   Game_Battler
  154. #==============================================================================
  155. class Game_Battler
  156. attr_accessor   :tact_flag
  157. #--------------------------------------------------------------------------
  158. #--------------------------------------------------------------------------
  159. alias initialize_tactical initialize
  160. def initialize
  161.    initialize_tactical     #  
  162.    @tact_flag = false
  163. end
  164. #--------------------------------------------------------------------------
  165. #     user  :  
  166. #     skill :  
  167. #--------------------------------------------------------------------------
  168. alias skill_effect_tactical skill_effect
  169. def skill_effect2(user, skill)
  170.    skill_copy = $data_skills[skill.id].dup
  171.    skill.power = skill.power * TacticalSkill::T_SKILL[skill.id][1] / 100
  172.    skill.hit = 0 if skill.power == 0
  173.    ret = skill_effect_tactical(user, skill)
  174.    user.tact_flag = false
  175.    $data_skills[skill.id] = skill_copy.dup
  176.    return ret
  177. end
  178. end

  179. #==============================================================================
  180. #  Scene_Battle
  181. #==============================================================================
  182. class Scene_Battle
  183. #--------------------------------------------------------------------------
  184. #--------------------------------------------------------------------------
  185. alias update_phase4_step2_tactical update_phase4_step2
  186. def update_phase4_step2
  187.    update_phase4_step2_tactical
  188.    @active_battler.tact_flag = false
  189. end
  190. #--------------------------------------------------------------------------
  191. #--------------------------------------------------------------------------
  192. def make_skill_action_result
  193.    unless @active_battler.current_action.forcing
  194.      # SP  
  195.      unless @active_battler.skill_can_use?(@active_battler.current_action.skill_id)
  196.        $game_temp.forcing_battler = nil
  197.        # 移至步奏1
  198.        @phase4_step = 1
  199.        return
  200.      end
  201.    end
  202.    
  203.    if @active_battler.is_a?(Game_Actor)
  204.      if !TacticalSkill::T_SKILL[@active_battler.current_action.skill_id].nil?
  205.        if make_tactical_skill_result
  206.          # 获取特技
  207.          @skill = $data_skills[@active_battler.current_action.skill_id]
  208.          # 如果不是强制行动
  209.          unless @active_battler.current_action.forcing
  210.            # 因为 SP 耗尽而无法使用的情况下
  211.            unless @active_battler.skill_can_use?(@skill.id)
  212.              # 清除强制行动对像的战斗者
  213.              $game_temp.forcing_battler = nil
  214.              # 移至步骤 1
  215.              @phase4_step = 1
  216.              return
  217.            end
  218.          end
  219.          # 消耗 SP
  220.          @active_battler.sp -= @skill.sp_cost
  221.          # 刷新状态窗口
  222.          @status_window.refresh
  223.          # 在帮助窗口显示特技名
  224.          @help_window.set_text(@skill.name, 1)
  225.          # 设置动画 ID
  226.          @animation1_id = @skill.animation1_id
  227.          @animation2_id = @skill.animation2_id
  228.          # 设置公共事件 ID
  229.          @common_event_id = @skill.common_event_id
  230.          # 设置对像侧战斗者
  231.          set_target_battlers(@skill.scope)
  232.          # 应用特技效果
  233.          for target in @target_battlers
  234.            target.skill_effect2(@active_battler, @skill)
  235.          end
  236.        else
  237.          # 获取特技
  238.          @skill = $data_skills[@active_battler.current_action.skill_id]
  239.          # 如果不是强制行动
  240.          unless @active_battler.current_action.forcing
  241.            # 因为 SP 耗尽而无法使用的情况下
  242.            unless @active_battler.skill_can_use?(@skill.id)
  243.              # 清除强制行动对像的战斗者
  244.              $game_temp.forcing_battler = nil
  245.              # 移至步骤 1
  246.              @phase4_step = 1
  247.              return
  248.            end
  249.          end
  250.          # 消耗 SP
  251.          @active_battler.sp -= @skill.sp_cost
  252.          # 刷新状态窗口
  253.          @status_window.refresh
  254.          # 在帮助窗口显示特技名
  255. #         @help_window.set_text(@skill.name, 1)
  256.          # 设置动画 ID
  257. #         @animation1_id = @skill.animation1_id
  258. #         @animation2_id = @skill.animation2_id
  259.          # 设置公共事件 ID
  260. #         @common_event_id = @skill.common_event_id
  261.          # 设置对像侧战斗者
  262. #         set_target_battlers(@skill.scope)
  263.          # 应用特技效果
  264. #         for target in @target_battlers
  265. #           target.skill_effect(@active_battler, @skill)
  266. #         end
  267.              $game_temp.forcing_battler = nil
  268.              # 移至步骤 1
  269.              @phase4_step = 1
  270.        end
  271.      else
  272.        # 获取特技
  273.        @skill = $data_skills[@active_battler.current_action.skill_id]
  274.        # 如果不是强制行动
  275.        unless @active_battler.current_action.forcing
  276.          # 因为 SP 耗尽而无法使用的情况下
  277.          unless @active_battler.skill_can_use?(@skill.id)
  278.            # 清除强制行动对像的战斗者
  279.            $game_temp.forcing_battler = nil
  280.            # 移至步骤 1
  281.            @phase4_step = 1
  282.            return
  283.          end
  284.        end
  285.        # 消耗 SP
  286.        @active_battler.sp -= @skill.sp_cost
  287.        # 刷新状态窗口
  288.        @status_window.refresh
  289.        # 在帮助窗口显示特技名
  290.        @help_window.set_text(@skill.name, 1)
  291.        # 设置动画 ID
  292.        @animation1_id = @skill.animation1_id
  293.        @animation2_id = @skill.animation2_id
  294.        # 设置公共事件 ID
  295.        @common_event_id = @skill.common_event_id
  296.        # 设置对像侧战斗者
  297.        set_target_battlers(@skill.scope)
  298.        # 应用特技效果
  299.        for target in @target_battlers
  300.          target.skill_effect(@active_battler, @skill)
  301.        end
  302.      end
  303.    else      
  304.      # 获取特技
  305.      @skill = $data_skills[@active_battler.current_action.skill_id]
  306.      # 如果不是强制行动
  307.      unless @active_battler.current_action.forcing
  308.        # 因为 SP 耗尽而无法使用的情况下
  309.        unless @active_battler.skill_can_use?(@skill.id)
  310.          # 清除强制行动对像的战斗者
  311.          $game_temp.forcing_battler = nil
  312.          # 移至步骤 1
  313.          @phase4_step = 1
  314.          return
  315.        end
  316.      end
  317.      # 消耗 SP
  318.      @active_battler.sp -= @skill.sp_cost
  319.      # 刷新状态窗口
  320.      @status_window.refresh
  321.      # 在帮助窗口显示特技名
  322.      @help_window.set_text(@skill.name, 1)
  323.      # 设置动画 ID
  324.      @animation1_id = @skill.animation1_id
  325.      @animation2_id = @skill.animation2_id
  326.      # 设置公共事件 ID
  327.      @common_event_id = @skill.common_event_id
  328.      # 设置对像侧战斗者
  329.      set_target_battlers(@skill.scope)
  330.      # 应用特技效果
  331.      for target in @target_battlers
  332.        target.skill_effect(@active_battler, @skill)
  333.      end
  334.    end
  335. end
  336. def make_rand_tact(ini)
  337.    b = []
  338.    for i in 0...ini
  339.      case rand(12).to_i
  340.      when 0
  341.        b.push(Input::A)
  342.      when 1
  343.        b.push(Input::B)
  344.      when 2
  345.        b.push(Input::C)
  346.      when 3
  347.        b.push(Input::X)
  348.      when 4
  349.        b.push(Input::Y)
  350.      when 5
  351.        b.push(Input::Z)
  352.      when 6
  353.        b.push(Input::L)
  354.      when 7
  355.        b.push(Input::R)
  356.      when 8
  357.        b.push(Input::RIGHT)
  358.      when 9
  359.        b.push(Input::UP)
  360.      when 10
  361.        b.push(Input::LEFT)
  362.      when 11
  363.        b.push(Input::DOWN)
  364.      end
  365.    end
  366.    return b
  367. end
  368. def make_rand_tact4(ini)
  369.    b = []
  370.    for i in 0...ini
  371.      case rand(4).to_i
  372.      when 0
  373.        b.push(Input::RIGHT)
  374.      when 1
  375.        b.push(Input::UP)
  376.      when 2
  377.        b.push(Input::LEFT)
  378.      when 3
  379.        b.push(Input::DOWN)
  380.      end
  381.    end
  382.    return b
  383. end

  384. #--------------------------------------------------------------------------
  385. #--------------------------------------------------------------------------
  386. def make_tactical_skill_result
  387.    
  388.    tact_skill = TacticalSkill::T_SKILL[@active_battler.current_action.skill_id][0]
  389.    if tact_skill.is_a?(Numeric)
  390.      a = tact_skill
  391.      tact_skill = make_rand_tact(a)
  392.    elsif tact_skill.is_a?(String)
  393.      a = tact_skill.to_i
  394.      tact_skill = make_rand_tact4(a)
  395.    end   
  396.    
  397.    time = TacticalSkill::KEY_SEC * [tact_skill.size,TacticalSkill::T_HARD_NUMBER].min * Graphics.frame_rate
  398.    key_count = 0
  399.    @active_battler.tact_flag = true

  400.    window_keycount = Window_KeyCount.new(tact_skill)
  401.    window_counter = Window_KeyCounter.new

  402.      actor_x = @active_battler.index * 160

  403.    window_keycount.x = 220
  404.    window_counter.x = 220

  405.    for i in 0...time

  406.      if Input.trigger?(tact_skill[key_count])
  407.        key_count += 1
  408.        window_keycount.key_in
  409.      elsif Input.n_trigger?(tact_skill[key_count])   

  410.        break
  411.      end
  412.      # 如果成功
  413.      if key_count >= tact_skill.size
  414.        window_keycount.text_in("成功 加倍伤害")
  415.        # 成功提示音
  416.        Audio.se_play("Audio/SE/爆发")
  417.        @active_battler.tact_flag = false            
  418.        # 成功与失败后的处理
  419.        for i in 0...10
  420.          Graphics.update
  421.          @spriteset.update
  422.        end
  423.        window_keycount.dispose
  424.        window_counter.dispose
  425.        return true
  426.      end
  427.      # 刷新
  428.      window_counter.refresh((i*100/time).truncate)
  429.      Graphics.update
  430.      Input.update
  431.    end
  432.    # 如果失败
  433.    if @active_battler.tact_flag
  434.      #失败提示音
  435.      Audio.se_play("Audio/SE/057-Wrong01")
  436.      window_keycount.text_in("失败 普通伤害")
  437.    end
  438.    # 成功与失败后的处理
  439.    for i in 0...10
  440.      Graphics.update
  441.      @spriteset.update
  442.    end
  443.    window_keycount.dispose
  444.    window_counter.dispose
  445.    return false
  446. end
  447. end

  448. #==============================================================================
  449. #  Window_Base
  450. #==============================================================================
  451. class Window_Base < Window
  452. #--------------------------------------------------------------------------
  453. #--------------------------------------------------------------------------
  454. def draw_counter_bar(x, y, current)
  455.    bitmap = RPG::Cache.windowskin(TacticalSkill::T_BAR_NAME)
  456.    cw = bitmap.width * current / 100
  457.    ch = bitmap.height
  458.    src_rect = Rect.new(0, 0, cw, ch)
  459.    self.contents.blt(x, y, bitmap, src_rect)
  460. end
  461. end


  462. #==============================================================================
  463. #  Window_KeyCounter
  464. #==============================================================================
  465. class Window_KeyCounter < Window_Base
  466. #--------------------------------------------------------------------------
  467. #    输入窗口的描绘
  468. #--------------------------------------------------------------------------
  469. def initialize
  470.    super(0, 256, 180, 80)
  471.    self.contents = Bitmap.new(width - 32, height - 32)
  472.    self.opacity = 0
  473.    self.z = 999            
  474.    refresh(0)
  475. end
  476. #--------------------------------------------------------------------------
  477. #--------------------------------------------------------------------------
  478. def refresh(current)
  479.    self.contents.clear
  480.    draw_counter_bar(0, 0, current)
  481. end
  482. end
  483. #==============================================================================
  484. #   Window_KeyCount
  485. #------------------------------------------------------------------------------
  486. #  
  487. #==============================================================================
  488. class Window_KeyCount < Window_Base
  489. #--------------------------------------------------------------------------
  490. #--------------------------------------------------------------------------
  491. def initialize(key)
  492.    super(0, 230, 180, 80)
  493.    self.contents = Bitmap.new(width - 32, height - 32)
  494.    self.opacity = 255     
  495.    self.z = 998
  496.    @key = key
  497.    @key_count = 0
  498.    refresh
  499. end
  500. #--------------------------------------------------------------------------
  501. #--------------------------------------------------------------------------
  502. def refresh
  503.    self.contents.clear
  504.    for i in [email protected]
  505.      if @key.size > 4
  506.        if @key_count >= 3
  507.          x = (i-@key_count+2)*32
  508.        else
  509.          x = i * 32
  510.        end
  511.      else        
  512.        x = i * 32
  513.      end
  514.      if i < @key_count
  515.        self.contents.font.color = knockout_color
  516.        self.contents.font.size = 16
  517.      elsif i== @key_count        
  518.        self.contents.font.color = normal_color
  519.        self.contents.font.size = 25
  520.      else
  521.        self.contents.font.color = disabled_color
  522.        self.contents.font.size = 18
  523.      end
  524.      self.contents.draw_text(x, 0, 100, 32, Input.key_converter(@key[i]))
  525.    end
  526. end
  527. #--------------------------------------------------------------------------
  528. #--------------------------------------------------------------------------
  529. def key_in
  530.    @key_count += 1
  531.    refresh
  532. end
  533. #--------------------------------------------------------------------------
  534. #--------------------------------------------------------------------------
  535. def text_in(text)
  536.    self.contents.clear
  537.    self.contents.font.size = 20
  538.    self.contents.draw_text(0, 0, 130, 32, text, 1)
  539. end
  540. end
复制代码
[LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: wozx922an    时间: 2009-3-26 18:36
谢谢 果然够硬




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