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

Project1

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

[已经解决] 求改技能冷却脚本

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
24 小时
注册时间
2010-10-25
帖子
12
跳转到指定楼层
1
发表于 2011-6-18 11:46:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 irothala 于 2011-6-18 12:06 编辑

我使用了下面这个脚本设定技能的冷却,现在希望做一个技能(比如29号),使用后刷新1至28号技能的冷却。
改的时候请不要直接改skill_can_use,而是把剩余冷却回合数改成0(或是1?),总之直接改skill_can_use会和另外一个插件(武器类型决定技能能否使用)冲突。
看了半天没找到应该在哪里下手修改。。求各位帮忙,多谢了
  1. module Sword
  2.   ON = true ; OFF = false ; Sword15_Cooling = Array.new
  3. #=======================================
  4. #★ 魔劍工舖 - 技能冷卻1.02
  5. # 轉貼腳本請著名出處:http://blog.yam.com/a870053jjkj/
  6. # 如果採用在遊戲中,看你高興是否顯示腳本出處,但嚴禁說是自己寫的腳本!!
  7. #=======================================
  8. #● 使用者自定設置
  9. Sword15_XPVX = 1 # 此腳本用於XP時設為0;此腳本用在VX時設為1
  10. Sword15_Battle = 0  # 戰鬥結束時的冷卻狀態,0為不需冷卻;1為記憶;2為需冷卻
  11. Sword15_Menu1 = ON # 選單中的技能畫面,是否要顯示剩餘的冷卻時間
  12. Sword15_Menu2 = 0 # 選單中的使用標準,0為一律可用;1為沒冷卻中時可用;
  13.                                   # 2為沒冷卻中時可用(使用後變更為冷卻中);3為一律不可用
  14. Sword15_Enemy = ON # 敵人使用冷卻技能時,是否需要冷卻
  15. Sword15_Text = ' \V回合冷却' # 技能冷卻的顯示內容,\V表示剩餘冷卻回合數
  16. #--------------------------------------------------------------
  17. #○ 技能冷卻回合(Sword15_Cooling[技能編號] = 冷卻回合數)

  18. Sword15_Cooling[1] = 1
  19. ...  #省略掉了
  20. Sword15_Cooling[29] = 12

  21. =begin
  22. ========================================
  23. =end
  24.   $Sword ? $Sword[15] = 101 : $Sword = {15=>101} # 腳本使用標誌
  25. end
  26. # 詳細設置說明請參考:http://blog.yam.com/a870053jjkj/article/25549943
  27. #=======================================
  28. #■ 處理臨時資料的類別
  29. class Game_Temp
  30.   attr_accessor :skill_id # 技能編號(選單用)
  31.   alias sword15_initialize initialize
  32.   def initialize
  33.     @skill_id = 0 ; sword15_initialize
  34.   end
  35. end
  36. #=======================================
  37. #■ 處理戰鬥者的類別
  38. class Game_Battler
  39.   include Sword # 連接自定設置
  40.   attr_accessor :cooling  # 冷卻技能表
  41.   #-------------------------------------------------------------
  42.   #● 初始化物件
  43.   alias sword15_initialize initialize
  44.   def initialize
  45.     sword15_initialize
  46.     @cooling = {}
  47.     Sword15_Cooling.each_index do |index|
  48.       next if Sword15_Cooling[index] == nil # 沒設置冷卻時間的技能跳過
  49.       if Sword15_Battle == 2 ; @cooling[index] = Sword15_Cooling[index]
  50.       else ; @cooling[index] = 0 ; end
  51.     end
  52.   end
  53.   #-------------------------------------------------------------
  54.   #● 可以使用技能的判定
  55.   alias sword15_skill_can_use? skill_can_use?
  56.   def skill_can_use?(skill_id)
  57.     if Sword15_Enemy or self.is_a?(Game_Actor)
  58.       skill_id = skill_id.id if Sword15_XPVX == 1 # 將數據轉成編號(VX)
  59.       if (not $game_temp.in_battle) # 不是戰鬥中時
  60.         return sword15_skill_can_use?(skill_id) if Sword15_Menu2 == 0 # 一律可用
  61.         return false if Sword15_Cooling.has_key?(skill_id) if Sword15_Menu2 == 3
  62.       end
  63.       return false if self.cooling[skill_id] > 0 if self.cooling[skill_id] # 冷卻技能不可使用
  64.       skill_id = $data_skills[skill_id] if Sword15_XPVX == 1 # 將編號轉成數據(VX)
  65.     end
  66.     sword15_skill_can_use?(skill_id)
  67.   end
  68. end
  69. #=======================================
  70. #■ 處理角色的類別
  71. class Game_Actor < Game_Battler
  72.   include Sword # 連接自定設置
  73.   attr_reader   :actor_id # 角色編號
  74.   attr_accessor :cooling  # 冷卻技能表
  75.   #-------------------------------------------------------------
  76.   #● 初始化物件
  77.   alias sword15_setup setup
  78.   def setup(actor_id)
  79.     sword15_setup(actor_id)
  80.     @cooling = {}
  81.     Sword15_Cooling.each_index do |index|
  82.       next if Sword15_Cooling[index] == nil # 沒設置冷卻時間的技能跳過
  83.       if Sword15_Battle == 2 ; @cooling[index] = Sword15_Cooling[index]
  84.       else ; @cooling[index] = 0 ; end
  85.     end
  86.   end
  87.   #-------------------------------------------------------------
  88.   #● 變更 SP(XP)
  89.   if Sword15_Menu2 == 2 and Sword15_Battle != 0
  90.     if Sword15_XPVX == 0 ; alias sword15_sp= sp=
  91.     else ; alias sword15_mp= mp= ; end
  92.     def sp=(a)
  93.       @cooling[$game_temp.skill_id] = Sword15_Cooling[$game_temp.skill_id] if
  94.       Sword15_Cooling[$game_temp.skill_id] != nil # 自定設置有設定就設置冷卻回合
  95.       self.sword15_sp = a
  96.     end
  97.     #-----------------------------------------------------------
  98.     #●  變更 MP(VX)
  99.     def mp=(a)
  100.       @cooling[$game_temp.skill_id] = Sword15_Cooling[$game_temp.skill_id] if
  101.       Sword15_Cooling[$game_temp.skill_id] != nil # 自定設置有設定就設置冷卻回合
  102.       self.sword15_mp = a
  103.     end
  104.   end
  105. end
  106. #=======================================
  107. #■ 技能畫面、戰鬥畫面、顯示可以使用的技能的瀏覽視窗
  108. class Window_Skill < Window_Selectable
  109.   include Sword # 連接自定設置
  110.   #-------------------------------------------------------------
  111.   #● 描繪項目
  112.   alias sword15_draw_item draw_item
  113.   def draw_item(index)
  114.     if Sword15_Menu1 or $game_temp.in_battle # 允許顯示或戰鬥時的場合
  115.       text = '' # 負責存入冷卻內容的變量
  116.       if @actor.cooling[@data[index].id] ; if @actor.cooling[@data[index].id] > 0
  117.         text = Sword15_Text ; text = text.gsub(/\\[Vv]/) { @actor.cooling[@data[index].id] }
  118.         @data[index].name += text
  119.       end ; end
  120.     end
  121.     sword15_draw_item(index)
  122.     @data[index].name = @data[index].name.gsub(/#{text}/) { '' }
  123.   end
  124. end
  125. #=======================================
  126. #■ 處理戰鬥畫面的類別
  127. class Scene_Battle
  128.   include Sword # 連接自定設置
  129.   #-------------------------------------------------------------
  130.   #● 戰鬥結束
  131.   alias sword15_battle_end battle_end
  132.   def battle_end(result)
  133.     sword15_battle_end(result)
  134.     actor = Sword15_XPVX == 0 ? $game_party.actors : $game_party.members
  135.     xpvx = Sword15_XPVX == 0 ? 1 : 0
  136.     if Sword15_Battle == 0 # 當指定為「不需冷卻」的場合
  137.       (0...actor.size).each {|i| $game_actors[actor[i].id].cooling = Hash.new}
  138.     elsif Sword15_Battle == 2 # 當指定為「需冷卻」的場合
  139.       (0...actor.size).each do |i| ; (1..Sword15_Cooling.size).each do |ii|
  140.         $game_actors[actor[i].id].cooling[ii] = Sword15_Cooling[ii] + xpvx if
  141.         Sword15_Cooling[ii] != nil # 當有設置冷卻時代入冷卻回合
  142.       end ; end
  143.     end
  144.   end
  145.   #-------------------------------------------------------------
  146.   #● 產生技能行動結果(XP)
  147.   if Sword15_XPVX == 0 ; alias sword15_make_skill_action_result make_skill_action_result
  148.   else ; alias sword15_make_skill_action_result execute_action_skill ; end
  149.   def make_skill_action_result
  150.     #○ 確認敵人是否可使用該技能
  151.     skill_id = Sword15_XPVX == 0 ? @active_battler.current_action.skill_id :
  152.     @active_battler.action.skill_id # 縮短腳本長度
  153.     skill = Sword15_XPVX == 0 ?
  154.     $data_skills[@active_battler.current_action.skill_id] :
  155.     $data_skills[@active_battler.action.skill_id]
  156.     no = false
  157.     a = Sword15_XPVX == 0 ?
  158.     @active_battler.current_action.forcing : @active_battler.action.forcing
  159.     b = Sword15_XPVX == 0 ? skill.id : skill
  160.     unless a ; unless @active_battler.skill_can_use?(b)
  161.       @phase4_step = 1 if no # 跳轉到階段1
  162.       no = true
  163.     end ; end
  164.     sword15_make_skill_action_result unless no
  165.     #○ 設置冷卻回合
  166.     return if @active_battler.cooling[skill_id] > 0 if @active_battler.cooling[skill_id] != nil
  167.     xpvx = Sword15_XPVX == 0 ? 1 : 0 # XP和VX的回合數值修正
  168.     @active_battler.cooling[skill_id] = Sword15_Cooling[skill_id] + xpvx if
  169.     Sword15_Cooling[skill_id] != nil # 如果自定設置有設定就設置冷卻回合
  170.     $game_temp.forcing_battler = nil if no # 清除強制行動對像
  171.   end
  172.   #-------------------------------------------------------------
  173.   #● 執行戰鬥行動:使用技能(VX)
  174.   def execute_action_skill
  175.     make_skill_action_result
  176.   end
  177.   #-------------------------------------------------------------
  178.   #● 更新畫面 (主回合步驟 6 : 更新)(XP)
  179.   if Sword15_XPVX == 0 ; alias sword15_update_phase4_step6 update_phase4_step6
  180.   else ; alias sword15_update_phase4_step6 set_next_active_battler ; end
  181.   def update_phase4_step6
  182.     sword15_update_phase4_step6
  183.     return if @active_battler == nil # 如果行動方是空的就中斷
  184.     @active_battler.cooling.each_key do |i|
  185.       @active_battler.cooling[i] -= 1 if @active_battler.cooling[i] > 0
  186.     end
  187.   end
  188.   #-------------------------------------------------------------
  189.   #● 設置下一戰鬥者行動(VX)
  190.   def set_next_active_battler
  191.     update_phase4_step6
  192.   end
  193. end
  194. #=======================================
  195. #■ 處理技能畫面的類別
  196. class Scene_Skill
  197.   include Sword # 連接自定設置
  198.   #-------------------------------------------------------------
  199.   #● 更新畫面 (技能視窗被活化的情況下) (XP)
  200.   if Sword15_XPVX == 0 ; alias sword15_update_skill update_skill
  201.   else ; alias sword15_update_skill update_skill_selection ; end
  202.   def update_skill
  203.     $game_temp.skill_id = @skill_window.skill.id
  204.     sword15_update_skill
  205.     $game_temp.skill_id = nil if $scene.is_a?(Scene_Skill)
  206.   end
  207.   #-------------------------------------------------------------
  208.   #● 更新技能選擇(VX)
  209.   def update_skill_selection
  210.     update_skill
  211.   end
  212. end
复制代码
好吧。。我已经解决了。。这帖子还在审核。。
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

GMT+8, 2025-1-11 20:18

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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