Project1

标题: 【5vip】两个重量级脚本整合,高手请进 [打印本页]

作者: Tabris_Air    时间: 2009-3-19 01:00
标题: 【5vip】两个重量级脚本整合,高手请进
============================================
请先看下去,如果有人接了我再把分附上
============================================

要整合的两个脚本:
手动按键输入
http://rpg.blue/viewthread.php?tid=30865&ntime=2009%2D3%2D17+13%3A10%3A18
按键连技脚本
http://rpg.blue/viewthread.php?tid=73053&ntime=2009%2D3%2D18+16%3A49%3A22
第一个脚本实现的功能是发招前可以通过按键使技能威力加强,第二个脚本实现的功能是在发招中通过按键可以连接上另外一个招式,即连续技的效果。

简单说一下要求:
1.使两个脚本同时生效,即实现:第一个特技发动前输入按键(使其威力加强)--》第一个特技发动中通过按键(连接下一个特技)--》在下一个特技发动前又能输入按键使其威力加强。(这个功能不难实现,我已经做好了只是比较麻烦,关键是第二个)
2.上面两个脚本里,第一个脚本是有可视化效果的(见下面的工程),希望能给第二个脚本,也就是在接连技的时候也加同样的动态提示效果,最好是完全一样

  


这是未整合的工程
http://rpg.blue/upload_program/d/Tabris_Air_ZZProject1_117823747.rar



=====================================================================
下面是我自己的想法:
=====================================================================

我自己的办法是在播放技能动画的时候弄了一个和帮助窗口并列的窗口
用技能编号做条件分歧来显示连续技按键

有没有办法让这个窗口显示的内容根据键盘输入来变化,
从而达成输入连续技的样子呢?

就像读入chain数组内容,显示,
当键盘按下正确的时候对应字符就变一个颜色,要是按错了就显示错误

这样直接套用绿发的脚本,就可以形式上做出输入连续技指令的效果,而不需要设计battle phase这一类脚本……

不过我不知道怎么读数组显示,判断键盘输入这些东西……
[LINE]1,#dddddd[/LINE]此贴于 2009-3-30 12:19:24 被版主darkten提醒,请楼主看到后对本贴做出回应。 [LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: Tabris_Air    时间: 2009-3-19 02:03
自己试了一下还是有点问题,连续技的可视化效果还是出不来
还得求助脚本达人……
作者: 蓝の星辰    时间: 2009-3-19 04:56
提示: 作者被禁止或删除 内容自动屏蔽
作者: Tabris_Air    时间: 2009-3-21 06:23
呃我做出回应……有人接么?

就是给摁键连技加一个像第一个脚本那样的效果……
作者: hitlerson    时间: 2009-3-21 19:35
汗,你的沙发害我搞好了删了,不接了{/fn} [LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~ [LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: 蓝の星辰    时间: 2009-3-21 21:46
提示: 作者被禁止或删除 内容自动屏蔽
作者: Tabris_Air    时间: 2009-3-21 22:20
啊……hitlerson不要啊 > < ~~~~

以下引用hitlerson于2009-3-21 11:35:37的发言:

汗,你的沙发害我搞好了删了,不接了


作者: Tabris_Air    时间: 2009-3-21 22:24

加窗口已经做好了= =
我想要第一个脚本那样的依次按键提示效果……

以下引用蓝の星辰于2009-3-21 13:46:45的发言:

是不是在第二个脚本加上按键提示的窗口

ps:ls的同学如果做好了就发出来吧,有人写过了,偶就不想再写了 - -bb

[LINE]1,#dddddd[/LINE]版主对此帖的评论:『你居然连贴……算了,看在是好孩子的份上。』,积分『-0』。这些被扣积分的一半会用于对本帖正确答案的悬赏。
作者: dbshy    时间: 2009-3-21 23:20
以下引用Tabris_Air于2009-3-21 14:24:02的发言:

我想要第一个脚本那样的依次按键提示效果……


那您是卡在那里呢?或者是没有思路?
让我来教您好了(其实是我懒,不想动手)

作者: yry的马甲    时间: 2009-3-21 23:31
提示: 作者被禁止或删除 内容自动屏蔽
作者: Tabris_Air    时间: 2009-3-21 23:37
就是也给技能连击加上下面这样的效果,
只是弄个静态的提示窗口倒是没啥问题,
要实现这样的效果我觉得应该把第二个脚本再写一遍,可是看着看着脚本就觉得没思路= =




以下引用dbshy于2009-3-21 15:20:47的发言:


以下引用Tabris_Air于2009-3-21 14:24:02的发言:

我想要第一个脚本那样的依次按键提示效果……




那您是卡在那里呢?或者是没有思路?
让我来教您好了(其实是我懒,不想动手)


作者: yry的马甲    时间: 2009-3-22 00:02
提示: 作者被禁止或删除 内容自动屏蔽
作者: yry的马甲    时间: 2009-3-22 00:07
提示: 作者被禁止或删除 内容自动屏蔽
作者: Tabris_Air    时间: 2009-3-22 00:58
VIP已经挂上

楼上的高手不愿意给的话,我也只好指望其他人了
作者: 蓝の星辰    时间: 2009-3-22 02:22
提示: 作者被禁止或删除 内容自动屏蔽
作者: Tabris_Air    时间: 2009-3-22 02:28

要注意的有好几个地方:
1.第一个脚本的判断时间是在技能动画之前,现在接连续技是在技能动画播放的那段时间
2.成功之后如何设置角色马上施放下一技能



以下引用蓝の星辰于2009-3-21 18:22:13的发言:


以下引用Tabris_Air于2009-3-21 15:37:13的发言:

要实现这样的效果我觉得应该把第二个脚本再写一遍,可是看着看着脚本就觉得没思路= =




您可以看一下这段
  for i in 0...time

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

      break
    end
    # 如果成功
    if key_count >= tact_skill.size
      window_keycount.text_in("成功")
      # 成功提示音
      Audio.se_play("Audio/SE/056-Right02")
      @active_battler.tact_flag = false            
      # 成功与失败后的处理
      for i in 0...10
        Graphics.update
        @spriteset.update
      end
      window_keycount.dispose
      window_counter.dispose
      return true
    end
    # 刷新
    window_counter.refresh((i*100/time).truncate)
    Graphics.update
    Input.update
  end

上面的是显示窗口的核心算法,再想一下吧


作者: 蓝の星辰    时间: 2009-3-22 02:35
提示: 作者被禁止或删除 内容自动屏蔽
作者: Tabris_Air    时间: 2009-3-22 02:38

哎搞不清楚= =||
一般的脚本还能自己弄一下,
这种涉及到alias和各种battle phase的只能伸手了……

以下引用蓝の星辰于2009-3-21 18:35:20的发言:

这就需要您将第二个脚本的原理看懂了 - -bbb
因为您刚才说不会弄动态的窗口


作者: 蓝の星辰    时间: 2009-3-22 02:49
提示: 作者被禁止或删除 内容自动屏蔽
作者: hitlerson    时间: 2009-3-22 03:19
V还在吗?

{/cy}

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

  39. module TacticalSkill
  40. #==============================================================================
  41. #  START
  42. #==============================================================================
  43. # 按键设定
  44. A = Input::A            # 对应按键:Z
  45. B = Input::B            # 对应按键:X
  46. C = Input::C            # 对应按键:C
  47. X = Input::X            # 对应按键:A
  48. Y = Input::Y            # 对应按键:S
  49. Z = Input::Z            # 对应按键:D
  50. L = Input::L            # 对应按键:Q
  51. R = Input::R            # 对应按键:W
  52. UP = Input::UP
  53. DOWN = Input::DOWN
  54. LEFT = Input::LEFT
  55. RIGHT = Input::RIGHT

  56. # 时间的快慢调整,越大越慢
  57. KEY_SEC = 0.5

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

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


  62. # 技能设定
  63. T_SKILL = {
  64.    #技能ID => [[按键1,按键2,……?,按键N],技能攻击力加成]
  65.        57 => [[align=left,RIGHT], rand(150)+100],
  66.        8 => [12, 200],
  67.        9 => ["15", 250],
  68.        85 => [[align=left,UP], 50],
  69.        86 => [[L,X,R], 50],
  70.        12 => [[X,C,RIGHT,R], 50],
  71.        13 => [[UP,RIGHT], 50],
  72.        14 => [[L,Z,A], 50],
  73.        15 => [[R,X,X,DOWN], 50],
  74.        16 => [[DOWN, RIGHT], 50],
  75.        17 => [[A,B,C], 50],
  76.        18 => [[Y,X,DOWN,B], 50],
  77.        19 => [[align=left,DOWN], 50],
  78.        20 => [[Z,Y,A], 50],
  79.        21 => [[B,C,X,L], 50],
  80.        22 => [[align=right,DOWN], 50],
  81.        23 => [[A,B,R], 50],
  82.        24 => [[X,Y,LEFT,R], 50],
  83.        25 => [[align=left,RIGHT], 50],
  84.        26 => [[X,L,B], 50],
  85.        27 => [[align=left,X,C,Z], 50],
  86.        28 => [[align=left,DOWN], 50],
  87.        29 => [[C,X,A], 50],
  88.        30 => [[X,Z,C,UP], 50],
  89.        31 => [[UP,DOWN,X], 0],
  90.        32 => [[align=left,RIGHT,L,R], 50],
  91.        7 => [[A, C], 50],
  92.        58 => [[C, X, UP], 50],
  93.        59 => [[A, UP, RIGHT, A], 50],
  94.        60 => [[Z, C, A, B], 50],
  95.        61 => [[X, C], 50],
  96.        62 => [[UP, X, DOWN], 50],
  97.        63 => [[align=left, C, Y, A], 50],
  98.        64 => [[X, C, Y, A], 50],
  99.        65 => [[Y, A], 50],
  100.        66 => [[align=right, B, A], 50],
  101.        67 => [[align=left, UP, Z, A], 50],
  102.        68 => [[Y, B, Y, A], 50],
  103.        69 => [[align=left, A], 50],
  104.        70 => [[A, C, A], 50],
  105.        71 => [[B, B, A, A], 50],
  106.        72 => [[A, B, X, Y], 50],
  107.        73 => [[X, A], 50],
  108.        74 => [[Y, A, B], 50],
  109.        75 => [[align=left, RIGHT, Y, A], 50],
  110.        76 => [[A, C, L, A], 50],
  111.        77 => [[R, X], 50],
  112.        78 => [[L, C, R], 50],
  113.        79 => [[align=left, L, RIGHT, R], 50],
  114.        80 => [[C, C, Z, RIGHT], 50]
  115. }


  116. L_SKILL = {
  117.        57 => [[UP,DOWN], rand(150)+100,57]


  118. }
  119. #  
  120. #==============================================================================
  121. # END
  122. #==============================================================================
  123. end

  124. #==============================================================================
  125. #   Input
  126. #==============================================================================
  127. module Input
  128. module_function
  129. #--------------------------------------------------------------------------
  130. #--------------------------------------------------------------------------
  131. def n_trigger?(num)
  132.    if trigger?(num)
  133.      return false
  134.    elsif trigger?(A) or trigger?(B) or trigger?(C) or
  135.          trigger?(X) or trigger?(Y) or trigger?(Z) or
  136.          trigger?(L) or trigger?(R) or
  137.          trigger?(UP) or trigger?(DOWN) or trigger?(RIGHT) or trigger?(LEFT)
  138.        return true
  139.    end
  140.    return false
  141. end
  142. #--------------------------------------------------------------------------
  143. #--------------------------------------------------------------------------
  144. def key_converter(key)
  145.    # 按键对应的字母或文字

  146.      case key
  147.      when A
  148.        return "Z"
  149.      when B
  150.        return "X"
  151.      when C
  152.        return "C"
  153.      when X
  154.        return "A"
  155.      when Y
  156.        return "S"
  157.      when Z
  158.        return "D"
  159.      when L
  160.        return "Q"
  161.      when R
  162.        return "W"
  163.     when UP
  164.      return "上"
  165.     when DOWN
  166.      return "下"
  167.     when LEFT
  168.      return "左"
  169.     when RIGHT
  170.      return "右"
  171.     end
  172. end
  173. end

  174. #==============================================================================
  175. #   Game_Battler
  176. #==============================================================================
  177. class Game_Battler
  178. attr_accessor   :tact_flag
  179. #--------------------------------------------------------------------------
  180. #--------------------------------------------------------------------------
  181. alias initialize_tactical initialize
  182. def initialize
  183.    initialize_tactical     #  
  184.    @tact_flag = false
  185. end
  186. #--------------------------------------------------------------------------
  187. #     user  :  
  188. #     skill :  
  189. #--------------------------------------------------------------------------
  190. alias skill_effect_tactical skill_effect
  191. def skill_effect2(user, skill)
  192.    skill_copy = $data_skills[skill.id].dup
  193.    skill.power = skill.power * TacticalSkill::T_SKILL[skill.id][1] / 100
  194.    skill.hit = 0 if skill.power == 0
  195.    ret = skill_effect_tactical(user, skill)
  196.    user.tact_flag = false
  197.    $data_skills[skill.id] = skill_copy.dup
  198.    return ret
  199. end
  200. end

  201. #==============================================================================
  202. #  Scene_Battle
  203. #==============================================================================
  204. class Scene_Battle
  205. #--------------------------------------------------------------------------
  206. #--------------------------------------------------------------------------
  207.   alias update_phase4_step2_tactical update_phase4_step2
  208.   def update_phase4_step2
  209.     update_phase4_step2_tactical
  210.     @active_battler.tact_flag = false
  211.   end


  212.   alias update_e :update
  213.   def update
  214.     @l_skill = false if @l_skill == nil
  215.     if @phase4_step == 5 && @active_battler.current_action.kind == 1
  216.       @use = @active_battler.current_action.kind == 1 && TacticalSkill::L_SKILL[@active_battler.current_action.skill_id] != nil
  217.       if @use == true
  218.          @use = $data_skills[TacticalSkill::L_SKILL[@active_battler.current_action.skill_id][2]].sp_cost <= @active_battler.sp
  219.       end
  220.       if @l_skill == false and @use == true and @phase == 4 and @phase4_step == 5 and @active_battler.current_action.kind == 1
  221.         if make_tactical_skill_result(1)
  222.           @active_battler.current_action.kind = 1
  223.           a = TacticalSkill::L_SKILL[@active_battler.current_action.skill_id][2]
  224.           @active_battler.current_action.skill_id = a
  225.           @l_skill = [@active_battler,a]
  226.         else
  227.           @l_skill = true
  228.         end
  229.       end
  230.     end
  231.     if @phase == 4 and @phase4_step > 5 and @l_skill != false and @l_skill != true
  232.       @active_battler.current_action.kind = 1
  233.       @active_battler.current_action.skill_id = @l_skill[1]
  234.       @action_battlers.unshift(@l_skill[0])
  235.       update_phase4_step1
  236.     end
  237.     update_e
  238.   end


  239. #--------------------------------------------------------------------------
  240.   #--------------------------------------------------------------------------
  241.   # ● 刷新画面 (主回合步骤 1 : 准备行动)
  242.   #--------------------------------------------------------------------------
  243.   def update_phase4_step1
  244.     # 隐藏帮助窗口
  245.     @help_window.visible = false
  246.     # 判定胜败
  247.     if judge
  248.       # 胜利或者失败的情况下 : 过程结束
  249.       return
  250.     end
  251.     # 强制行动的战斗者不存在的情况下
  252.     if $game_temp.forcing_battler == nil
  253.       # 设置战斗事件
  254.       setup_battle_event
  255.       # 执行战斗事件中的情况下
  256.       if $game_system.battle_interpreter.running?
  257.         return
  258.       end
  259.     end
  260.     # 强制行动的战斗者存在的情况下
  261.     if $game_temp.forcing_battler != nil
  262.       # 在头部添加后移动
  263.       @action_battlers.delete($game_temp.forcing_battler)
  264.       @action_battlers.unshift($game_temp.forcing_battler)
  265.     end
  266.     # 未行动的战斗者不存在的情况下 (全员已经行动)
  267.     if @action_battlers.size == 0
  268.       # 开始同伴命令回合
  269.       @l_skill = false
  270.       start_phase2
  271.       return
  272.     end
  273.     # 初始化动画 ID 和公共事件 ID
  274.     @animation1_id = 0
  275.     @animation2_id = 0
  276.     @common_event_id = 0
  277.     # 未行动的战斗者移动到序列的头部
  278.     @active_battler = @action_battlers.shift
  279.     # 如果已经在战斗之外的情况下
  280.     if @active_battler.index == nil
  281.       return
  282.     end
  283.     # 连续伤害
  284.     if @active_battler.hp > 0 and @active_battler.slip_damage?
  285.       @active_battler.slip_damage_effect
  286.       @active_battler.damage_pop = true
  287.     end
  288.     # 自然解除状态
  289.     @active_battler.remove_states_auto
  290.     # 刷新状态窗口
  291.     @status_window.refresh
  292.     # 移至步骤 2
  293.     @phase4_step = 2
  294.   end
  295. #--------------------------------------------------------------------------
  296. def make_skill_action_result
  297.    unless @active_battler.current_action.forcing || @l_skill != false
  298.      # SP  
  299.      unless @active_battler.skill_can_use?(@active_battler.current_action.skill_id)
  300.        $game_temp.forcing_battler = nil
  301.        # 移至步奏1
  302.        @phase4_step = 1
  303.        return
  304.      end
  305.    end
  306.    
  307.    if @active_battler.is_a?(Game_Actor)
  308.      if !TacticalSkill::T_SKILL[@active_battler.current_action.skill_id].nil?
  309.        if make_tactical_skill_result
  310.          # 获取特技
  311.          @skill = $data_skills[@active_battler.current_action.skill_id]
  312.          # 如果不是强制行动
  313.          unless @active_battler.current_action.forcing
  314.            # 因为 SP 耗尽而无法使用的情况下
  315.            unless @active_battler.skill_can_use?(@skill.id)
  316.              # 清除强制行动对像的战斗者
  317.              $game_temp.forcing_battler = nil
  318.              # 移至步骤 1
  319.              @phase4_step = 1
  320.              return
  321.            end
  322.          end
  323.          @l_skill = false
  324.          # 消耗 SP
  325.          @active_battler.sp -= @skill.sp_cost
  326.          # 刷新状态窗口
  327.          @status_window.refresh
  328.          # 在帮助窗口显示特技名
  329.          @help_window.set_text(@skill.name, 1)
  330.          # 设置动画 ID
  331.          @animation1_id = @skill.animation1_id
  332.          @animation2_id = @skill.animation2_id
  333.          # 设置公共事件 ID
  334.          @common_event_id = @skill.common_event_id
  335.          # 设置对像侧战斗者
  336.          set_target_battlers(@skill.scope)
  337.          # 应用特技效果
  338.          for target in @target_battlers
  339.            target.skill_effect2(@active_battler, @skill)
  340.          end
  341.        else
  342.          # 获取特技
  343.          @skill = $data_skills[@active_battler.current_action.skill_id]
  344.          # 如果不是强制行动
  345.          unless @active_battler.current_action.forcing
  346.            # 因为 SP 耗尽而无法使用的情况下
  347.            unless @active_battler.skill_can_use?(@skill.id)
  348.              # 清除强制行动对像的战斗者
  349.              $game_temp.forcing_battler = nil
  350.              # 移至步骤 1
  351.              @phase4_step = 1
  352.              return
  353.            end
  354.          end
  355.          @l_skill = false
  356.          # 消耗 SP
  357.          @active_battler.sp -= @skill.sp_cost
  358.          # 刷新状态窗口
  359.          @status_window.refresh
  360.          # 在帮助窗口显示特技名
  361.          @help_window.set_text(@skill.name, 1)
  362.          # 设置动画 ID
  363.          @animation1_id = @skill.animation1_id
  364.          @animation2_id = @skill.animation2_id
  365.          # 设置公共事件 ID
  366.          @common_event_id = @skill.common_event_id
  367.          # 设置对像侧战斗者
  368.          set_target_battlers(@skill.scope)
  369.          # 应用特技效果
  370.          for target in @target_battlers
  371.            target.skill_effect(@active_battler, @skill)
  372.          end
  373.        end
  374.      else
  375.        # 获取特技
  376.        @skill = $data_skills[@active_battler.current_action.skill_id]
  377.        # 如果不是强制行动
  378.        unless @active_battler.current_action.forcing || @l_skill != false
  379.          # 因为 SP 耗尽而无法使用的情况下
  380.          unless @active_battler.skill_can_use?(@skill.id)
  381.            # 清除强制行动对像的战斗者
  382.            $game_temp.forcing_battler = nil
  383.            # 移至步骤 1
  384.            @phase4_step = 1
  385.            return
  386.          end
  387.        end
  388.        @l_skill = false
  389.        #@l_skill = false
  390.        # 消耗 SP
  391.        @active_battler.sp -= @skill.sp_cost
  392.        # 刷新状态窗口
  393.        @status_window.refresh
  394.        # 在帮助窗口显示特技名
  395.        @help_window.set_text(@skill.name, 1)
  396.        # 设置动画 ID
  397.        @animation1_id = @skill.animation1_id
  398.        @animation2_id = @skill.animation2_id
  399.        # 设置公共事件 ID
  400.        @common_event_id = @skill.common_event_id
  401.        # 设置对像侧战斗者
  402.        set_target_battlers(@skill.scope)
  403.        # 应用特技效果
  404.        for target in @target_battlers
  405.          target.skill_effect(@active_battler, @skill)
  406.        end
  407.      end
  408.    else      
  409.      # 获取特技
  410.      @skill = $data_skills[@active_battler.current_action.skill_id]
  411.      # 如果不是强制行动
  412.      unless @active_battler.current_action.forcing
  413.        # 因为 SP 耗尽而无法使用的情况下
  414.        unless @active_battler.skill_can_use?(@skill.id)
  415.          # 清除强制行动对像的战斗者
  416.          $game_temp.forcing_battler = nil
  417.          # 移至步骤 1
  418.          @phase4_step = 1
  419.          return
  420.        end
  421.      end
  422.      # 消耗 SP
  423.      @active_battler.sp -= @skill.sp_cost
  424.      # 刷新状态窗口
  425.      @status_window.refresh
  426.      # 在帮助窗口显示特技名
  427.      @help_window.set_text(@skill.name, 1)
  428.      # 设置动画 ID
  429.      @animation1_id = @skill.animation1_id
  430.      @animation2_id = @skill.animation2_id
  431.      # 设置公共事件 ID
  432.      @common_event_id = @skill.common_event_id
  433.      # 设置对像侧战斗者
  434.      set_target_battlers(@skill.scope)
  435.      # 应用特技效果
  436.      for target in @target_battlers
  437.        target.skill_effect(@active_battler, @skill)
  438.      end
  439.    end
  440. end
  441. def make_rand_tact(ini)
  442.    b = []
  443.    for i in 0...ini
  444.      case rand(12).to_i
  445.      when 0
  446.        b.push(Input::A)
  447.      when 1
  448.        b.push(Input::B)
  449.      when 2
  450.        b.push(Input::C)
  451.      when 3
  452.        b.push(Input::X)
  453.      when 4
  454.        b.push(Input::Y)
  455.      when 5
  456.        b.push(Input::Z)
  457.      when 6
  458.        b.push(Input::L)
  459.      when 7
  460.        b.push(Input::R)
  461.      when 8
  462.        b.push(Input::RIGHT)
  463.      when 9
  464.        b.push(Input::UP)
  465.      when 10
  466.        b.push(Input::LEFT)
  467.      when 11
  468.        b.push(Input::DOWN)
  469.      end
  470.    end
  471.    return b
  472. end
  473. def make_rand_tact4(ini)
  474.    b = []
  475.    for i in 0...ini
  476.      case rand(4).to_i
  477.      when 0
  478.        b.push(Input::RIGHT)
  479.      when 1
  480.        b.push(Input::UP)
  481.      when 2
  482.        b.push(Input::LEFT)
  483.      when 3
  484.        b.push(Input::DOWN)
  485.      end
  486.    end
  487.    return b
  488. end

  489. #--------------------------------------------------------------------------
  490. #--------------------------------------------------------------------------
  491. def make_tactical_skill_result(t=0)
  492.    
  493.    tact_skill = TacticalSkill::T_SKILL[@active_battler.current_action.skill_id][0]
  494.    tact_skill = TacticalSkill::L_SKILL[@active_battler.current_action.skill_id][0] if t == 1
  495.    if tact_skill.is_a?(Numeric)
  496.      a = tact_skill
  497.      tact_skill = make_rand_tact(a)
  498.    elsif tact_skill.is_a?(String)
  499.      a = tact_skill.to_i
  500.      tact_skill = make_rand_tact4(a)
  501.    end   
  502.    
  503.    time = TacticalSkill::KEY_SEC * [tact_skill.size,TacticalSkill::T_HARD_NUMBER].min * Graphics.frame_rate
  504.    key_count = 0
  505.    @active_battler.tact_flag = true

  506.    window_keycount = Window_KeyCount.new(tact_skill)
  507.    window_counter = Window_KeyCounter.new

  508.      actor_x = @active_battler.index * 160

  509.    window_keycount.x = window_counter.x = actor_x

  510.    for i in 0...time

  511.      if Input.trigger?(tact_skill[key_count])
  512.        key_count += 1
  513.        window_keycount.key_in
  514.      elsif Input.n_trigger?(tact_skill[key_count])   

  515.        break
  516.      end
  517.      # 如果成功
  518.      if key_count >= tact_skill.size
  519.        window_keycount.text_in("成功")
  520.        # 成功提示音
  521.        Audio.se_play("Audio/SE/056-Right02")
  522.        @active_battler.tact_flag = false            
  523.        # 成功与失败后的处理
  524.        for i in 0...10
  525.          Graphics.update
  526.          @spriteset.update
  527.        end
  528.        window_keycount.dispose
  529.        window_counter.dispose
  530.        return true
  531.      end
  532.      # 刷新
  533.      window_counter.refresh((i*100/time).truncate)
  534.      Graphics.update
  535.      Input.update
  536.    end
  537.    # 如果失败
  538.    if @active_battler.tact_flag
  539.      #失败提示音
  540.      Audio.se_play("Audio/SE/057-Wrong01")
  541.      window_keycount.text_in("失败")
  542.    end
  543.    # 成功与失败后的处理
  544.    for i in 0...10
  545.      Graphics.update
  546.      @spriteset.update
  547.    end
  548.    window_keycount.dispose
  549.    window_counter.dispose
  550.    return false
  551. end
  552. end

  553. #==============================================================================
  554. #  Window_Base
  555. #==============================================================================
  556. class Window_Base < Window
  557. #--------------------------------------------------------------------------
  558. #--------------------------------------------------------------------------
  559. def draw_counter_bar(x, y, current)
  560.    bitmap = RPG::Cache.windowskin(TacticalSkill::T_BAR_NAME)
  561.    cw = bitmap.width * current / 100
  562.    ch = bitmap.height
  563.    src_rect = Rect.new(0, 0, cw, ch)
  564.    self.contents.blt(x, y, bitmap, src_rect)
  565. end
  566. end


  567. #==============================================================================
  568. #  Window_KeyCounter
  569. #==============================================================================
  570. class Window_KeyCounter < Window_Base
  571. #--------------------------------------------------------------------------
  572. #    输入窗口的描绘
  573. #--------------------------------------------------------------------------
  574. def initialize
  575.    super(0, 256, 180, 80)
  576.    self.contents = Bitmap.new(width - 32, height - 32)
  577.    self.opacity = 0
  578.    self.z = 1            
  579.    refresh(0)
  580. end
  581. #--------------------------------------------------------------------------
  582. #--------------------------------------------------------------------------
  583. def refresh(current)
  584.    self.contents.clear
  585.    draw_counter_bar(0, 0, current)
  586. end
  587. end
  588. #==============================================================================
  589. #   Window_KeyCount
  590. #------------------------------------------------------------------------------
  591. #  
  592. #==============================================================================
  593. class Window_KeyCount < Window_Base
  594. #--------------------------------------------------------------------------
  595. #--------------------------------------------------------------------------
  596. def initialize(key)
  597.    super(0, 230, 180, 80)
  598.    self.contents = Bitmap.new(width - 32, height - 32)
  599.    self.opacity = 160     
  600.    self.z = 0
  601.    @key = key
  602.    @key_count = 0
  603.    refresh
  604. end
  605. #--------------------------------------------------------------------------
  606. #--------------------------------------------------------------------------
  607. def refresh
  608.    self.contents.clear
  609.    for i in [email protected]
  610.      if @key.size > 4
  611.        if @key_count >= 3
  612.          x = (i-@key_count+2)*32
  613.        else
  614.          x = i *32
  615.        end
  616.      else        
  617.        x = i * 32
  618.      end
  619.      if i < @key_count
  620.        self.contents.font.color = knockout_color
  621.        self.contents.font.size = 16
  622.      elsif i== @key_count        
  623.        self.contents.font.color = normal_color
  624.        self.contents.font.size = 25
  625.      else
  626.        self.contents.font.color = disabled_color
  627.        self.contents.font.size = 18
  628.      end
  629.      self.contents.draw_text(x, 0, 100, 32, Input.key_converter(@key[i]))
  630.    end
  631. end
  632. #--------------------------------------------------------------------------
  633. #--------------------------------------------------------------------------
  634. def key_in
  635.    @key_count += 1
  636.    refresh
  637. end
  638. #--------------------------------------------------------------------------
  639. #--------------------------------------------------------------------------
  640. def text_in(text)
  641.    self.contents.clear
  642.    self.contents.font.size = 20
  643.    self.contents.draw_text(0, 0, 130, 32, text, 1)
  644. end
  645. end
复制代码

作者: 蓝の星辰    时间: 2009-3-22 03:22
提示: 作者被禁止或删除 内容自动屏蔽
作者: Tabris_Air    时间: 2009-3-22 03:48

嗯就是这个效果~~~
有个问题,就是如果只在L_SKILL里面加入而不在T_SKILL里加的话会报错
这样的话只想要连续技不想要威力加强就没办法实现了……

以下引用hitlerson于2009-3-21 19:19:29的发言:

V还在吗?



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

module TacticalSkill
#==============================================================================
#  START
#==============================================================================
# 按键设定
A = Input::A            # 对应按键:Z
B = Input::B            # 对应按键:X
C = Input::C            # 对应按键:C
X = Input::X            # 对应按键:A
Y = Input::Y            # 对应按键:S
Z = Input::Z            # 对应按键:D
L = Input::L            # 对应按键:Q
R = Input::R            # 对应按键:W
UP = Input::UP
DOWN = Input::DOWN
LEFT = Input::LEFT
RIGHT = Input::RIGHT

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

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

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


# 技能设定
T_SKILL = {
   #技能ID => [[按键1,按键2,……?,按键N],技能攻击力加成]
       57 => [[align=left,RIGHT], rand(150)+100],
       8 => [12, 200],
       9 => ["15", 250],
       85 => [[align=left,UP], 50],
       86 => [[L,X,R], 50],
       12 => [[X,C,RIGHT,R], 50],
       13 => [[UP,RIGHT], 50],
       14 => [[L,Z,A], 50],
       15 => [[R,X,X,DOWN], 50],
       16 => [[DOWN, RIGHT], 50],
       17 => [[A,B,C], 50],
       18 => [[Y,X,DOWN,B], 50],
       19 => [[align=left,DOWN], 50],
       20 => [[Z,Y,A], 50],
       21 => [[B,C,X,L], 50],
       22 => [[align=right,DOWN], 50],
       23 => [[A,B,R], 50],
       24 => [[X,Y,LEFT,R], 50],
       25 => [[align=left,RIGHT], 50],
       26 => [[X,L,B], 50],
       27 => [[align=left,X,C,Z], 50],
       28 => [[align=left,DOWN], 50],
       29 => [[C,X,A], 50],
       30 => [[X,Z,C,UP], 50],
       31 => [[UP,DOWN,X], 0],
       32 => [[align=left,RIGHT,L,R], 50],
       7 => [[A, C], 50],
       58 => [[C, X, UP], 50],
       59 => [[A, UP, RIGHT, A], 50],
       60 => [[Z, C, A, B], 50],
       61 => [[X, C], 50],
       62 => [[UP, X, DOWN], 50],
       63 => [[align=left, C, Y, A], 50],
       64 => [[X, C, Y, A], 50],
       65 => [[Y, A], 50],
       66 => [[align=right, B, A], 50],
       67 => [[align=left, UP, Z, A], 50],
       68 => [[Y, B, Y, A], 50],
       69 => [[align=left, A], 50],
       70 => [[A, C, A], 50],
       71 => [[B, B, A, A], 50],
       72 => [[A, B, X, Y], 50],
       73 => [[X, A], 50],
       74 => [[Y, A, B], 50],
       75 => [[align=left, RIGHT, Y, A], 50],
       76 => [[A, C, L, A], 50],
       77 => [[R, X], 50],
       78 => [[L, C, R], 50],
       79 => [[align=left, L, RIGHT, R], 50],
       80 => [[C, C, Z, RIGHT], 50]
}


L_SKILL = {
       57 => [[UP,DOWN], rand(150)+100,57]


}
#  
#==============================================================================
# END
#==============================================================================
end

#==============================================================================
#   Input
#==============================================================================
module Input
module_function
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
def n_trigger?(num)
   if trigger?(num)
     return false
   elsif trigger?(A) or trigger?(B) or trigger?(C) or
         trigger?(X) or trigger?(Y) or trigger?(Z) or
         trigger?(L) or trigger?(R) or
         trigger?(UP) or trigger?(DOWN) or trigger?(RIGHT) or trigger?(LEFT)
       return true
   end
   return false
end
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
def key_converter(key)
   # 按键对应的字母或文字

     case key
     when A
       return "Z"
     when B
       return "X"
     when C
       return "C"
     when X
       return "A"
     when Y
       return "S"
     when Z
       return "D"
     when L
       return "Q"
     when R
       return "W"
    when UP
     return "上"
    when DOWN
     return "下"
    when LEFT
     return "左"
    when RIGHT
     return "右"
    end
end
end

#==============================================================================
#   Game_Battler
#==============================================================================
class Game_Battler
attr_accessor   :tact_flag
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
alias initialize_tactical initialize
def initialize
   initialize_tactical     #  
   @tact_flag = false
end
#--------------------------------------------------------------------------
#     user  :  
#     skill :  
#--------------------------------------------------------------------------
alias skill_effect_tactical skill_effect
def skill_effect2(user, skill)
   skill_copy = $data_skills[skill.id].dup
   skill.power = skill.power * TacticalSkill::T_SKILL[skill.id][1] / 100
   skill.hit = 0 if skill.power == 0
   ret = skill_effect_tactical(user, skill)
   user.tact_flag = false
   $data_skills[skill.id] = skill_copy.dup
   return ret
end
end

#==============================================================================
#  Scene_Battle
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
  alias update_phase4_step2_tactical update_phase4_step2
  def update_phase4_step2
    update_phase4_step2_tactical
    @active_battler.tact_flag = false
  end


  alias update_e :update
  def update
    @l_skill = false if @l_skill == nil
    if @phase4_step == 5 && @active_battler.current_action.kind == 1
      @use = @active_battler.current_action.kind == 1 && TacticalSkill::L_SKILL[@active_battler.current_action.skill_id] != nil
      if @use == true
         @use = $data_skills[TacticalSkill::L_SKILL[@active_battler.current_action.skill_id][2]].sp_cost <= @active_battler.sp
      end
      if @l_skill == false and @use == true and @phase == 4 and @phase4_step == 5 and @active_battler.current_action.kind == 1
        if make_tactical_skill_result(1)
          @active_battler.current_action.kind = 1
          a = TacticalSkill::L_SKILL[@active_battler.current_action.skill_id][2]
          @active_battler.current_action.skill_id = a
          @l_skill = [@active_battler,a]
        else
          @l_skill = true
        end
      end
    end
    if @phase == 4 and @phase4_step > 5 and @l_skill != false and @l_skill != true
      @active_battler.current_action.kind = 1
      @active_battler.current_action.skill_id = @l_skill[1]
      @action_battlers.unshift(@l_skill[0])
      update_phase4_step1
    end
    update_e
  end


#--------------------------------------------------------------------------
  #--------------------------------------------------------------------------
  # ● 刷新画面 (主回合步骤 1 : 准备行动)
  #--------------------------------------------------------------------------
  def update_phase4_step1
    # 隐藏帮助窗口
    @help_window.visible = false
    # 判定胜败
    if judge
      # 胜利或者失败的情况下 : 过程结束
      return
    end
    # 强制行动的战斗者不存在的情况下
    if $game_temp.forcing_battler == nil
      # 设置战斗事件
      setup_battle_event
      # 执行战斗事件中的情况下
      if $game_system.battle_interpreter.running?
        return
      end
    end
    # 强制行动的战斗者存在的情况下
    if $game_temp.forcing_battler != nil
      # 在头部添加后移动
      @action_battlers.delete($game_temp.forcing_battler)
      @action_battlers.unshift($game_temp.forcing_battler)
    end
    # 未行动的战斗者不存在的情况下 (全员已经行动)
    if @action_battlers.size == 0
      # 开始同伴命令回合
      @l_skill = false
      start_phase2
      return
    end
    # 初始化动画 ID 和公共事件 ID
    @animation1_id = 0
    @animation2_id = 0
    @common_event_id = 0
    # 未行动的战斗者移动到序列的头部
    @active_battler = @action_battlers.shift
    # 如果已经在战斗之外的情况下
    if @active_battler.index == nil
      return
    end
    # 连续伤害
    if @active_battler.hp > 0 and @active_battler.slip_damage?
      @active_battler.slip_damage_effect
      @active_battler.damage_pop = true
    end
    # 自然解除状态
    @active_battler.remove_states_auto
    # 刷新状态窗口
    @status_window.refresh
    # 移至步骤 2
    @phase4_step = 2
  end
#--------------------------------------------------------------------------
def make_skill_action_result
   unless @active_battler.current_action.forcing || @l_skill != false
     # SP  
     unless @active_battler.skill_can_use?(@active_battler.current_action.skill_id)
       $game_temp.forcing_battler = nil
       # 移至步奏1
       @phase4_step = 1
       return
     end
   end
   
   if @active_battler.is_a?(Game_Actor)
     if !TacticalSkill::T_SKILL[@active_battler.current_action.skill_id].nil?
       if make_tactical_skill_result
         # 获取特技
         @skill = $data_skills[@active_battler.current_action.skill_id]
         # 如果不是强制行动
         unless @active_battler.current_action.forcing
           # 因为 SP 耗尽而无法使用的情况下
           unless @active_battler.skill_can_use?(@skill.id)
             # 清除强制行动对像的战斗者
             $game_temp.forcing_battler = nil
             # 移至步骤 1
             @phase4_step = 1
             return
           end
         end
         @l_skill = false
         # 消耗 SP
         @active_battler.sp -= @skill.sp_cost
         # 刷新状态窗口
         @status_window.refresh
         # 在帮助窗口显示特技名
         @help_window.set_text(@skill.name, 1)
         # 设置动画 ID
         @animation1_id = @skill.animation1_id
         @animation2_id = @skill.animation2_id
         # 设置公共事件 ID
         @common_event_id = @skill.common_event_id
         # 设置对像侧战斗者
         set_target_battlers(@skill.scope)
         # 应用特技效果
         for target in @target_battlers
           target.skill_effect2(@active_battler, @skill)
         end
       else
         # 获取特技
         @skill = $data_skills[@active_battler.current_action.skill_id]
         # 如果不是强制行动
         unless @active_battler.current_action.forcing
           # 因为 SP 耗尽而无法使用的情况下
           unless @active_battler.skill_can_use?(@skill.id)
             # 清除强制行动对像的战斗者
             $game_temp.forcing_battler = nil
             # 移至步骤 1
             @phase4_step = 1
             return
           end
         end
         @l_skill = false
         # 消耗 SP
         @active_battler.sp -= @skill.sp_cost
         # 刷新状态窗口
         @status_window.refresh
         # 在帮助窗口显示特技名
         @help_window.set_text(@skill.name, 1)
         # 设置动画 ID
         @animation1_id = @skill.animation1_id
         @animation2_id = @skill.animation2_id
         # 设置公共事件 ID
         @common_event_id = @skill.common_event_id
         # 设置对像侧战斗者
         set_target_battlers(@skill.scope)
         # 应用特技效果
         for target in @target_battlers
           target.skill_effect(@active_battler, @skill)
         end
       end
     else
       # 获取特技
       @skill = $data_skills[@active_battler.current_action.skill_id]
       # 如果不是强制行动
       unless @active_battler.current_action.forcing || @l_skill != false
         # 因为 SP 耗尽而无法使用的情况下
         unless @active_battler.skill_can_use?(@skill.id)
           # 清除强制行动对像的战斗者
           $game_temp.forcing_battler = nil
           # 移至步骤 1
           @phase4_step = 1
           return
         end
       end
       @l_skill = false
       #@l_skill = false
       # 消耗 SP
       @active_battler.sp -= @skill.sp_cost
       # 刷新状态窗口
       @status_window.refresh
       # 在帮助窗口显示特技名
       @help_window.set_text(@skill.name, 1)
       # 设置动画 ID
       @animation1_id = @skill.animation1_id
       @animation2_id = @skill.animation2_id
       # 设置公共事件 ID
       @common_event_id = @skill.common_event_id
       # 设置对像侧战斗者
       set_target_battlers(@skill.scope)
       # 应用特技效果
       for target in @target_battlers
         target.skill_effect(@active_battler, @skill)
       end
     end
   else      
     # 获取特技
     @skill = $data_skills[@active_battler.current_action.skill_id]
     # 如果不是强制行动
     unless @active_battler.current_action.forcing
       # 因为 SP 耗尽而无法使用的情况下
       unless @active_battler.skill_can_use?(@skill.id)
         # 清除强制行动对像的战斗者
         $game_temp.forcing_battler = nil
         # 移至步骤 1
         @phase4_step = 1
         return
       end
     end
     # 消耗 SP
     @active_battler.sp -= @skill.sp_cost
     # 刷新状态窗口
     @status_window.refresh
     # 在帮助窗口显示特技名
     @help_window.set_text(@skill.name, 1)
     # 设置动画 ID
     @animation1_id = @skill.animation1_id
     @animation2_id = @skill.animation2_id
     # 设置公共事件 ID
     @common_event_id = @skill.common_event_id
     # 设置对像侧战斗者
     set_target_battlers(@skill.scope)
     # 应用特技效果
     for target in @target_battlers
       target.skill_effect(@active_battler, @skill)
     end
   end
end
def make_rand_tact(ini)
   b = []
   for i in 0...ini
     case rand(12).to_i
     when 0
       b.push(Input::A)
     when 1
       b.push(Input::B)
     when 2
       b.push(Input::C)
     when 3
       b.push(Input::X)
     when 4
       b.push(Input::Y)
     when 5
       b.push(Input::Z)
     when 6
       b.push(Input::L)
     when 7
       b.push(Input::R)
     when 8
       b.push(Input::RIGHT)
     when 9
       b.push(Input::UP)
     when 10
       b.push(Input::LEFT)
     when 11
       b.push(Input::DOWN)
     end
   end
   return b
end
def make_rand_tact4(ini)
   b = []
   for i in 0...ini
     case rand(4).to_i
     when 0
       b.push(Input::RIGHT)
     when 1
       b.push(Input::UP)
     when 2
       b.push(Input::LEFT)
     when 3
       b.push(Input::DOWN)
     end
   end
   return b
end

#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
def make_tactical_skill_result(t=0)
   
   tact_skill = TacticalSkill::T_SKILL[@active_battler.current_action.skill_id][0]
   tact_skill = TacticalSkill::L_SKILL[@active_battler.current_action.skill_id][0] if t == 1
   if tact_skill.is_a?(Numeric)
     a = tact_skill
     tact_skill = make_rand_tact(a)
   elsif tact_skill.is_a?(String)
     a = tact_skill.to_i
     tact_skill = make_rand_tact4(a)
   end   
   
   time = TacticalSkill::KEY_SEC * [tact_skill.size,TacticalSkill::T_HARD_NUMBER].min * Graphics.frame_rate
   key_count = 0
   @active_battler.tact_flag = true

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

     actor_x = @active_battler.index * 160

   window_keycount.x = window_counter.x = actor_x

   for i in 0...time

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

       break
     end
     # 如果成功
     if key_count >= tact_skill.size
       window_keycount.text_in("成功")
       # 成功提示音
       Audio.se_play("Audio/SE/056-Right02")
       @active_battler.tact_flag = false            
       # 成功与失败后的处理
       for i in 0...10
         Graphics.update
         @spriteset.update
       end
       window_keycount.dispose
       window_counter.dispose
       return true
     end
     # 刷新
     window_counter.refresh((i*100/time).truncate)
     Graphics.update
     Input.update
   end
   # 如果失败
   if @active_battler.tact_flag
     #失败提示音
     Audio.se_play("Audio/SE/057-Wrong01")
     window_keycount.text_in("失败")
   end
   # 成功与失败后的处理
   for i in 0...10
     Graphics.update
     @spriteset.update
   end
   window_keycount.dispose
   window_counter.dispose
   return false
end
end

#==============================================================================
#  Window_Base
#==============================================================================
class Window_Base < Window
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
def draw_counter_bar(x, y, current)
   bitmap = RPG::Cache.windowskin(TacticalSkill::T_BAR_NAME)
   cw = bitmap.width * current / 100
   ch = bitmap.height
   src_rect = Rect.new(0, 0, cw, ch)
   self.contents.blt(x, y, bitmap, src_rect)
end
end


#==============================================================================
#  Window_KeyCounter
#==============================================================================
class Window_KeyCounter < Window_Base
#--------------------------------------------------------------------------
#    输入窗口的描绘
#--------------------------------------------------------------------------
def initialize
   super(0, 256, 180, 80)
   self.contents = Bitmap.new(width - 32, height - 32)
   self.opacity = 0
   self.z = 1            
   refresh(0)
end
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
def refresh(current)
   self.contents.clear
   draw_counter_bar(0, 0, current)
end
end
#==============================================================================
#   Window_KeyCount
#------------------------------------------------------------------------------
#  
#==============================================================================
class Window_KeyCount < Window_Base
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
def initialize(key)
   super(0, 230, 180, 80)
   self.contents = Bitmap.new(width - 32, height - 32)
   self.opacity = 160     
   self.z = 0
   @key = key
   @key_count = 0
   refresh
end
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
def refresh
   self.contents.clear
   for i in [email protected]
     if @key.size > 4
       if @key_count >= 3
         x = (i-@key_count+2)*32
       else
         x = i *32
       end
     else        
       x = i * 32
     end
     if i < @key_count
       self.contents.font.color = knockout_color
       self.contents.font.size = 16
     elsif i== @key_count        
       self.contents.font.color = normal_color
       self.contents.font.size = 25
     else
       self.contents.font.color = disabled_color
       self.contents.font.size = 18
     end
     self.contents.draw_text(x, 0, 100, 32, Input.key_converter(@key))
   end
end
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
def key_in
   @key_count += 1
   refresh
end
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
def text_in(text)
   self.contents.clear
   self.contents.font.size = 20
   self.contents.draw_text(0, 0, 130, 32, text, 1)
end
end


作者: 007008    时间: 2009-3-22 03:54
[url][/url]
作者: Tabris_Air    时间: 2009-3-22 04:00

另外,如果设置
技能A--》技能B
之后继续添加 技能B--》技能C 的话,会出现技能C的指令但是无法继续连下去……

[quote]以下引用hitlerson于2009-3-21 19:19:29的发言:

V还在吗?


作者: hitlerson    时间: 2009-3-22 04:55
可以接啊,我都接了N个了啊。。。人物有没有习得那个技能?没习得接不起来的,说起来这还真是个BUG,改改吧

238行
        s = TacticalSkill::L_SKILL[@active_battler.current_action.skill_id][2]
        if @active_battler.skills.include?(s)
          if make_tactical_skill_result(1)
            @active_battler.current_action.kind = 1
            a = s
            @active_battler.current_action.skill_id = a
            @l_skill = [@active_battler,a]
          else
            @l_skill = true
          end
        end
作者: hitlerson    时间: 2009-3-22 05:23
http://rpg.blue/upload_program/d/hitlerson_ZZProject1_118099280.rar
这个是和动画播放同步刷新按键技能窗口,感觉才是楼上们聊的正真要的效果。
用Graphics.update把动画停住了,么动感了
作者: Tabris_Air    时间: 2009-3-22 05:34

嗯好像是这样的~~
现在还有两个问题 > <
1.只设连续技不设按键加强威力的话会报错
2.我想把放连续技的窗口放到技能动画播放完之后,或者和技能动画同时显示可以吗?
  绿发的脚本ms就是在播放技能动画的时候输入……


以下引用hitlerson于2009-3-21 20:55:31的发言:

可以接啊,我都接了N个了啊。。。人物有没有习得那个技能?没习得接不起来的,说起来这还真是个BUG,改改吧

238行
       s = TacticalSkill::L_SKILL[@active_battler.current_action.skill_id][2]
       if @active_battler.skills.include?(s)
         if make_tactical_skill_result(1)
           @active_battler.current_action.kind = 1
           a = s
           @active_battler.current_action.skill_id = a
           @l_skill = [@active_battler,a]
         else
           @l_skill = true
         end
       end


作者: hitlerson    时间: 2009-3-22 05:51
514这里改成

def make_tactical_skill_result(t=0)
   @tact_skill = TacticalSkill::T_SKILL[@active_battler.current_action.skill_id][0] if TacticalSkill::T_SKILL[@active_battler.current_action.skill_id] != nil
   @tact_skill = TacticalSkill::L_SKILL[@active_battler.current_action.skill_id][0] if t == 1

那个范例就是这样的吧,同时进行,不过你最好把技能动画搞长点
作者: Tabris_Air    时间: 2009-3-22 06:06

呃……有办法弄在技能动画之后吗?
我用的是CP战斗,
不知道为什么是放完技能才显示提示窗口而且没办法输入也没办法dispose{/dk}

以下引用hitlerson于2009-3-21 21:51:16的发言:

514这里改成

def make_tactical_skill_result(t=0)
  @tact_skill = TacticalSkill::T_SKILL[@active_battler.current_action.skill_id][0] if TacticalSkill::T_SKILL[@active_battler.current_action.skill_id] != nil
  @tact_skill = TacticalSkill::L_SKILL[@active_battler.current_action.skill_id][0] if t == 1

那个范例就是这样的吧,同时进行,不过你最好把技能动画搞长点


作者: Tabris_Air    时间: 2009-3-22 06:15
http://rpg.blue/upload_program/d/Tabris_Air_cp_118102489.rar


还请麻烦看一下这个情形{/ll}


作者: hitlerson    时间: 2009-3-22 06:26
{/gg}

罢工
作者: Tabris_Air    时间: 2009-3-22 07:04

汗………………
我自己的办法是在播放技能动画的时候弄了一个和帮助窗口并列的窗口
用技能编号做条件分歧来显示连续技按键

hitlerson大有没有办法让这个窗口显示的内容根据键盘输入来变化,
从而达成输入连续技的样子呢?

就像读入chain数组内容,显示,
当键盘按下正确的时候那个就变一个颜色,要是按错了就显示错误

这样直接套用绿发的脚本,就可以形式上做出输入连续技指令的效果,而不需要设计battle phase这一类脚本……

不过我不知道怎么读数组显示,判断键盘输入这些东西……



以下引用hitlerson于2009-3-21 22:26:34的发言:



罢工


作者: Tabris_Air    时间: 2009-3-22 18:01
首页上加了一点我自己的想法,这样可能会简单一些
希望有高手能搞定之~
作者: Tabris_Air    时间: 2009-3-28 23:04
呃……为什么没有人做的样子= =b
我的vip啊 T T...
作者: 蒦們    时间: 2009-3-28 23:25
怎么你不去找下夏娜或者星辰呀,秀秀應該可以帮菿鉨呀?= =
作者: 紫苏    时间: 2009-3-29 20:40
这样不知道符合要求不~
hitlerson 说的那个 bug 改了;
另外发现连击时正确输入了按键之后再按下别的键就连击失败了,所以改成了和按键加强同样的效果,只要按下正确的按键后随后的按键无效,如果是故意保留的话可以说一声,我帮改回来~
最后改了按键加强窗口的宽度,原来是180,在窗口移动到第四个角色的时候就有部分超出窗口………

工程用的是第四页顶楼的那个工程,直接加入了整合+修改后的脚本,编辑器里面第一个下划线之后的在默认工程也能运行:
http://rpg.blue/upload_program/d/紫苏_cp_118758864.rar [LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: 逝刃    时间: 2009-3-29 22:01
提示: 作者被禁止或删除 内容自动屏蔽
作者: Tabris_Air    时间: 2009-3-31 06:42
太棒了!!就是这个效果~~~~

紫苏大大威武!!VIP献上{/hx}
hitlerson大大也帮了不少忙,3+2合适吧……

以下引用紫苏于2009-3-29 12:40:59的发言:

这样不知道符合要求不~
hitlerson 说的那个 bug 改了;
另外发现连击时正确输入了按键之后再按下别的键就连击失败了,所以改成了和按键加强同样的效果,只要按下正确的按键后随后的按键无效,如果是故意保留的话可以说一声,我帮改回来~
最后改了按键加强窗口的宽度,原来是180,在窗口移动到第四个角色的时候就有部分超出窗口………

工程用的是第四页顶楼的那个工程,直接加入了整合+修改后的脚本,编辑器里面第一个下划线之后的在默认工程也能运行:
http://rpg.blue/upload_program/d/紫苏_cp_118758864.rar


[本贴由作者于 2009-3-29 12:43:07 最后编辑]






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