Project1

标题: 特技升级脚本,求修正。 [打印本页]

作者: 美丽晨露    时间: 2013-3-31 14:37
标题: 特技升级脚本,求修正。
这个特技升级脚本有个问题。
就是消耗SP的问题
它是先消耗一个技能的所需的SP
再恢复该技能等级所减少的SP消耗
请问要怎么改才能直接消耗当前技能等级的SP?
  1. #==============================================================================
  2. # ■ スキルアップデート   Ver. 4.4.0                     
  3. #------------------------------------------------------------------------------
  4. #     スキルごとにレベル制を導入する
  5. #     戦闘中にスキルを使用するほど、威力上昇、消費SP減少、命中率上昇
  6. #==============================================================================

  7. module Skill_updata
  8.   S_MIGHT = []
  9.   S_COST = []
  10.   S_HIT = []
  11.   S_LEVEL = []
  12.   S_INTER = []
  13.   S_SLOPE = []
  14.   S_ANIME = []
  15.   S_ELEMENT = []
  16.   S_STATE_P = []
  17.   S_STATE_N = []
  18. #==============================================================================
  19. # □ 自定义内容
  20. #==============================================================================
  21.   # 威力上升使用true/false
  22.   SKILL_MIGHT_UP = true
  23.   
  24.   # SP消耗减少使用true/false
  25.   SP_COST_DOWN = true      
  26.   
  27.   # 命中率上升使用true/false
  28.   SKILL_HIT_UP = true      
  29.   
  30.   # 属性变化的使用true/false
  31.   ELEMENT_CHANGE = true   
  32.   
  33.   # 状态变化的使用true/false
  34.   STATE_CHANGE = true
  35.   
  36.   # 显示特技等级上升true/false
  37.   SHOW_SKILL_LV_UP = true
  38.   
  39.   # 等级上升的声效,不用的时候就=nil
  40.   SKILLUP_SE = "056-Right02"
  41.   
  42.   # 菜单使用计数true/false
  43.   MENU_COUNT = false

  44.   # 升级所需次数
  45.   UPDATA_INTERVAL = 0
  46.   
  47.   # 等级上限
  48.   LEVEL_LIMIT = 20

  49.   # 威力上升率(%%)
  50.   MIGHT_RATE = 5
  51.   
  52.   # SP消耗减少率(%)
  53.   COST_RATE = 3
  54.   
  55.   # 命中上升率(%)
  56.   HIT_RATE = 1

  57.   #----------------------------------------------------------------------------
  58.   # 特别技能的详细设定,57和61号特技分别是十字斩和扫荡,大家最熟悉的两个招数
  59.   #----------------------------------------------------------------------------
  60.   
  61.   # 界限水平
  62.   # S_LEVEL[技艺ID]=[角色ID=>界限,…]
  63.   S_LEVEL[771] = {1=>18, 2=>12, 3=>5, 4=>12, 5=>12, 6=>12, 7=>12, 8=>12}
  64.   S_LEVEL[772] = {1=>12, 2=>18, 3=>15, 4=>12, 5=>12, 6=>12, 7=>12, 8=>12}
  65.      
  66.   # 技艺&actor威力上升率
  67.   # S_MIGHT[技艺ID]=[角色ID=>威力上升率,…]
  68.   S_MIGHT[771] = {1=>8, 2=>2, 3=>5, 4=>2, 5=>2, 6=>2, 7=>2, 8=>2}
  69.   S_MIGHT[772] = {1=>2, 2=>8, 3=>5, 4=>2, 5=>2, 6=>2, 7=>2, 8=>2}

  70.   # 技艺&actorSP消费减少率
  71.   # S_COST[技艺ID]=[角色ID=>SP消费减少率,…]
  72.   S_COST[771] = {1=>8, 2=>2, 3=>5, 4=>2, 5=>2, 6=>2, 7=>2, 8=>2}
  73.   S_COST[772] = {1=>2, 2=>8, 3=>5, 4=>2, 5=>2, 6=>2, 7=>2, 8=>2}

  74.   # 技艺&actor命中率
  75.   # S_HIT[技艺ID]=[角色ID=>命中上升率,…]
  76.   S_HIT[771] = {1=>2, 2=>1, 3=>1, 4=>1, 5=>1, 6=>1, 7=>1, 8=>1}
  77.   S_HIT[772] = {1=>1, 2=>2, 3=>1, 4=>1, 5=>1, 6=>1, 7=>1, 8=>1}

  78.   #----------------------------------------------------------------------------
  79.   # 技能成长的具体调节
  80.   #----------------------------------------------------------------------------
  81.   # 技艺的增长图形
  82.   # 0:使用技艺一定回数的话提高水平
  83.   # 1:技艺一定回数+每水平の使用提高水平
  84.   SKILL_PATTERN = 1
  85.   
  86.   # 技艺水平上升间隔每(使用几回Lv提高)
  87.   #   ※没有设定的情况→基本设定被适应
  88.   # S_INTER[技艺ID]=[actorID=>上升间隔,…]
  89.   S_INTER[771] = {1=>5, 2=>8, 3=>8, 4=>8, 5=>8, 6=>8, 7=>8, 8=>8}
  90.   
  91.   # スキルレベル上昇の傾き(パターン1を使用する場合のみ必要)
  92.   #   ※設定がない場合は1となります。
  93.   # S_SLOPE[スキルID] = [アクターID=>上昇の傾き, …]
  94.   S_SLOPE[772] = {1=>5, 2=>8, 3=>8, 4=>8, 5=>8, 6=>8, 7=>8, 8=>8}

  95.   #----------------------------------------------------------------------------
  96.   # 技艺增长的话使之动画变化
  97.   #  记录格式: S_ANIME[技艺ID] = [角色ID=>[[等级, 动画ID]], ・・・]
  98.   #----------------------------------------------------------------------------
  99.   # 实施技艺增长的动画变化?
  100.   USE_S_ANIME = true
  101.   
  102.   # 設定例
  103.   # 1号角色,57号特技,lv5,lv10动画变化
  104.   # 2号角色,Lv.11动画变化
  105.   S_ANIME[772] = {1=>[[5, 69], [10, 70]], 2=>[[11, 70]]}

  106.   #----------------------------------------------------------------------------
  107.   # 属性変化/状态変化
  108.   #----------------------------------------------------------------------------
  109.   # 属性変化
  110.   # S_ELEMENT[技艺ID] = {角色ID=>{水平=>[属性ID,属性ID…]}, ・・・・}
  111.   S_ELEMENT[772] = {1=>{1=>[1], 2=>[2], 3=>[3]}, 2=>{1=>[2], 2=>[5]}}

  112.   # 状态変化+
  113.   # S_STATE_P[技艺ID] = {角色ID=>{水平=>[属性ID,属性ID…]}, ・・・・}
  114.   S_STATE_P[773] = {1=>{1=>[1], 2=>[2], 3=>[3]}, 2=>{1=>[2], 2=>[5]}}

  115.   # 状态変化-
  116.   # S_STATE_N[技艺ID] = {角色ID=>{水平=>[属性ID,属性ID…]}, ・・・・}
  117.   S_STATE_N[773] = {1=>{1=>[1], 2=>[2], 3=>[3]}, 2=>{1=>[2], 2=>[5]}}

  118. #==============================================================================
  119. # □ 自定义内容终了
  120. #==============================================================================
  121. end


  122. class Game_Actor
  123.   include Skill_updata
  124.   attr_accessor   :skill_use      # スキル使用回数
  125.   attr_accessor   :skill_level    # スキルレベル
  126.   attr_accessor   :skill_power    # スキル威力更新値
  127.   attr_accessor   :skill_sp_cost  # スキルSP消費更新値
  128.   attr_accessor   :skill_hit      # スキル命中率
  129.   attr_accessor   :skill_up       # レベルアップフラグ
  130.   attr_accessor   :skill_list     # スキルEXPリスト
  131.   alias skill_updata_init setup
  132.   def setup(actor_id)
  133.     skill_updata_init(actor_id)
  134.     @skill_use = []
  135.     @skill_level = []
  136.     @skill_power = []
  137.     @skill_sp_cost = []
  138.     @skill_hit = []
  139.     @skill_up = false
  140.     @skill_list = []
  141.     for id in 1...$data_skills.size
  142.       @skill_use[id] = 0
  143.       @skill_level[id] = 0
  144.       @skill_power[id] = $data_skills[id].power
  145.       @skill_sp_cost[id] = $data_skills[id].sp_cost
  146.       @skill_hit[id] = $data_skills[id].hit
  147.       @skill_list[id] = make_skill_list(id)
  148.     end
  149.   end

  150.   #--------------------------------------------------------------------------
  151.   # ● スキルEXP 計算
  152.   #--------------------------------------------------------------------------
  153.   def make_skill_list(skill_id)
  154.     interval = S_INTER[skill_id]
  155.     up_interval = ( (interval != nil and interval[@actor_id] != nil) ? interval[@actor_id] : UPDATA_INTERVAL )
  156.     slope = S_SLOPE[skill_id]
  157.     up_slope = ( (slope != nil and slope[@actor_id] != nil) ? slope[@actor_id] : 1 )
  158.     limit = S_LEVEL[skill_id]
  159.     limit_lv = ( (limit != nil and limit[@actor_id] != nil) ? limit[@actor_id] : LEVEL_LIMIT )
  160.     list = []
  161.     list[0] = 0
  162.     for lv in 1...limit_lv+1
  163.       exp = 0
  164.       case SKILL_PATTERN
  165.       when 0
  166.         exp = up_interval * lv
  167.       when 1
  168.         exp = list[lv-1] + up_slope * lv + up_interval
  169.       end
  170.       list[lv] = exp.truncate
  171.     end
  172.     return list
  173.   end
  174. end


  175. class Game_Battler
  176.   include Skill_updata
  177.   #--------------------------------------------------------------------------
  178.   # ● スキルの効果適用
  179.   #     user  : スキルの使用者 (バトラー)
  180.   #     skill : スキル
  181.   #--------------------------------------------------------------------------
  182.   alias skill_effect_update skill_effect
  183.   def skill_effect(user, skill)
  184.     up_flag = false
  185.     if user.is_a?(Game_Actor) and ($scene.is_a?(Scene_Battle) or MENU_COUNT)
  186.       skill_update_main(user, skill)
  187.       skill_base = skill.dup
  188.       # 威力上昇
  189.       if SKILL_MIGHT_UP
  190.         skill.power = user.skill_power[skill.id]
  191.       end
  192.       # 命中率上昇
  193.       if SKILL_HIT_UP
  194.         skill.hit = user.skill_hit[skill.id]
  195.       end
  196.       # 属性変化
  197.       if ELEMENT_CHANGE and S_ELEMENT != []
  198.         ele1 = S_ELEMENT[skill.id]
  199.         if ele1 != nil and ele1[user.id] != nil
  200.           ele2 = ele1[user.id]
  201.           if ele2 != [] and ele2[user.skill_level[skill.id]] != nil
  202.             skill.element_set = ele2[user.skill_level[skill.id]]
  203.           end
  204.         end
  205.       end
  206.       # ステート変化
  207.       if STATE_CHANGE
  208.         if S_STATE_P != []
  209.           pst1 = S_STATE_P[skill.id]
  210.           if pst1 != nil and pst1[user.id] != nil
  211.             pst2 = pst1[user.id]
  212.             if pst2 != nil and pst2[user.skill_level[skill.id]] != nil
  213.               skill.plus_state_set = pst2[user.skill_level[skill.id]]
  214.               p skill.plus_state_set
  215.             end
  216.           end
  217.         end
  218.         if S_STATE_N != []
  219.           nst1 = S_STATE_N[skill.id]
  220.           if nst1 != nil and nst1[user.id] != nil
  221.             nst2 = nst1[user.id]
  222.             if nst1 != nil and nst2[user.skill_level[skill.id]] != nil
  223.               skill.minus_state_set = nst2[user.skill_level[skill.id]]
  224.             end
  225.           end
  226.         end
  227.       end
  228.       up_flag = true
  229.     end
  230.     ret = skill_effect_update(user, skill)    # 原物
  231.     if up_flag
  232.       skill = skill_base
  233.       # Miss時には後戻し
  234.       if self.damage == "躲闪"
  235.         skill_use_recount(user, skill)
  236.       end
  237.     end
  238.     return ret
  239.   end
  240.   
  241.   #--------------------------------------------------------------------------
  242.   # ● スキルアップデータメイン
  243.   #--------------------------------------------------------------------------
  244.   def skill_update_main(actor, skill)
  245.     # スキル使用回数のカウント
  246.     actor.skill_use[skill.id] += 1
  247.     # リミット取得
  248.     limit = S_LEVEL[skill.id]
  249.     s_limit = ( (limit != nil and limit[actor.id] != nil) ? limit[actor.id] : LEVEL_LIMIT)
  250.     # 書き換え限界到達
  251.     if s_limit == false or actor.skill_level[skill.id] < s_limit
  252.       # レベルアップ間隔取得
  253.       interval = actor.skill_list[skill.id]
  254.       # 書き換え回数到達
  255.       if actor.skill_use[skill.id] == interval[actor.skill_level[skill.id]+1]
  256.         # スキルレベル上昇
  257.         actor.skill_level[skill.id] += 1
  258.         actor.skill_up = true
  259.         # 威力上昇 = 有効
  260.         if SKILL_MIGHT_UP
  261.           might = S_MIGHT[skill.id]
  262.           might_rate = ((might != nil and might[actor.id] != nil) ? might[actor.id] : MIGHT_RATE)
  263.           # 補正値更新
  264.           actor.skill_power[skill.id] += skill.power * might_rate / 100
  265.           actor.skill_power[skill.id] = actor.skill_power[skill.id].truncate
  266.         end
  267.         # SP消費減少 = 有効
  268.         if SP_COST_DOWN
  269.           cost = S_COST[skill.id]
  270.           cost_rate = ((cost != nil and cost[actor.id] != nil) ? cost[actor.id] : COST_RATE)
  271.           actor.skill_sp_cost[skill.id] -= skill.sp_cost * cost_rate / 100
  272.           actor.skill_sp_cost[skill.id] = actor.skill_sp_cost[skill.id].truncate
  273.           # SP消費が0以下はありえない
  274.           if actor.skill_sp_cost[skill.id] < 0
  275.             actor.skill_sp_cost[skill.id] = 0
  276.           end
  277.         end
  278.         # 命中率上昇 = 有効
  279.         if SKILL_HIT_UP
  280.           hit = S_HIT[skill.id]
  281.           hit_rate = ((hit != nil and hit[actor.id] != nil) ? hit[actor.id] : HIT_RATE)
  282.           actor.skill_hit[skill.id] += skill.hit * hit_rate / 100
  283.           actor.skill_hit[skill.id] = actor.skill_hit[skill.id].truncate
  284.           # 100以上はありえない
  285.           if actor.skill_hit[skill.id] > 100
  286.             actor.skill_hit[skill.id] = 100
  287.           end
  288.         end
  289.       end
  290.     end
  291.   end
  292.   
  293.   #--------------------------------------------------------------------------
  294.   # ● 再カウント
  295.   #--------------------------------------------------------------------------
  296.   def skill_use_recount(actor, skill)
  297.     if actor.skill_up
  298.       actor.skill_level[skill.id] -= 1
  299.       # 威力を再計算
  300.       if SKILL_MIGHT_UP
  301.         actor.skill_power[skill.id] = skill.power
  302.         might = S_MIGHT[skill.id]
  303.         might_rate = ((might != nil and might[actor.id] != nil) ? might[actor.id] : MIGHT_RATE)
  304.         for i in 1...actor.skill_level[skill.id]
  305.           actor.skill_power[skill.id] += skill.power * might_rate / 100
  306.           actor.skill_power[skill.id] = actor.skill_power[skill.id].truncate
  307.         end
  308.       end
  309.       # SP消費再計算
  310.       if SP_COST_DOWN
  311.         actor.skill_sp_cost[skill.id] = skill.sp_cost
  312.         cost = S_COST[skill.id]
  313.         cost_rate = ((cost != nil and cost[actor.id] != nil) ? cost[actor.id] : COST_RATE)
  314.         for i in 1...actor.skill_level[skill.id]
  315.           actor.skill_sp_cost[skill.id] -= skill.sp_cost * cost_rate / 100
  316.           actor.skill_sp_cost[skill.id] = actor.skill_sp_cost[skill.id].truncate
  317.         end
  318.         # SP消費が0以下はありえない
  319.         if actor.skill_sp_cost[skill.id] < 0
  320.           actor.skill_sp_cost[skill.id] = 0
  321.         end
  322.       end
  323.       # 命中率再計算
  324.       if SKILL_HIT_UP
  325.         actor.skill_hit[skill.id] = skill.hit
  326.         hit = S_HIT[skill.id]
  327.         hit_rate = ((hit != nil and hit[actor.id] != nil) ? hit[actor.id] : HIT_RATE)
  328.         for i in 1...actor.skill_level[skill.id]
  329.           actor.skill_hit[skill.id] += skill.hit * hit_rate / 100
  330.           actor.skill_hit[skill.id] = actor.skill_hit[skill.id].truncate
  331.         end
  332.         # 100以上はありえない
  333.         if actor.skill_hit[skill.id] > 100
  334.           actor.skill_hit[skill.id] = 100
  335.         end
  336.       end
  337.       actor.skill_up = false
  338.     end
  339.     actor.skill_use[skill.id] -= 1
  340.   end
  341. end

  342. #==============================================================================
  343. # スキル成長によるアニメーション変化
  344. #==============================================================================
  345. class Scene_Battle
  346.   include Skill_updata
  347.   #--------------------------------------------------------------------------
  348.   # ● フレーム更新 (メインフェーズ ステップ 4 : 対象側アニメーション)
  349.   #--------------------------------------------------------------------------
  350.   alias update_phase4_step4_skillup update_phase4_step4
  351.   def update_phase4_step4
  352.     update_phase4_step4_skillup
  353.     if @active_battler.is_a?(Game_Actor) and USE_S_ANIME
  354.       s_anime = S_ANIME[@skill.id]
  355.       # 設定がないなら無視
  356.       if s_anime != nil and s_anime[@active_battler.id] != nil
  357.         s_anime_set = s_anime[@active_battler.id]
  358.         for i in 0...s_anime_set.size
  359.           s_anime_def = s_anime_set[i]
  360.           # 規定レベル以上
  361.           if @active_battler.skill_level[@skill.id] >= s_anime_def[0]
  362.             # 対象側アニメーション
  363.             for target in @target_battlers
  364.               target.animation_id = s_anime_def[1]
  365.             end
  366.           end
  367.         end
  368.       end
  369.     end
  370.   end
  371. end

  372. #==============================================================================
  373. # 以下、レベルアップ表示部分(レベルアップ表示がいらないなら消してもOK)
  374. #==============================================================================
  375. class Scene_Battle
  376.   include Skill_updata
  377.   if SHOW_SKILL_LV_UP
  378.   #--------------------------------------------------------------------------
  379.   # ● フレーム更新 (メインフェーズ ステップ 2 : アクション開始)
  380.   #--------------------------------------------------------------------------
  381.   alias update_phase4_step2_skillup update_phase4_step2
  382.   def update_phase4_step2
  383.     if @active_battler.is_a?(Game_Actor)
  384.       @active_battler.skill_up = false
  385.     end
  386.     @skillup = false
  387.     update_phase4_step2_skillup   # 原物
  388.   end

  389.   #--------------------------------------------------------------------------
  390.   # ● フレーム更新 (メインフェーズ ステップ 3 : 行動側アニメーション)
  391.   #--------------------------------------------------------------------------
  392.   alias update_phase4_step3_skillup update_phase4_step3
  393.   def update_phase4_step3
  394.     if @active_battler.is_a?(Game_Actor) and @active_battler.skill_up != false
  395.       @skillup = true
  396.       @skill_up_window = Window_Skillup.new(@active_battler)
  397.       if SKILLUP_SE != nil
  398.         Audio.se_play("Audio/SE/" + SKILLUP_SE)
  399.         sleep(0.1)
  400.       end
  401.     end
  402.     update_phase4_step3_skillup
  403.   end

  404.   #--------------------------------------------------------------------------
  405.   # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
  406.   #--------------------------------------------------------------------------
  407.   alias update_phase4_step5_skillup update_phase4_step5
  408.   def update_phase4_step5
  409.     if @active_battler.is_a?(Game_Actor) and @skillup
  410.       @skill_up_window.dispose
  411.       @active_battler.skill_up = false
  412.       @skillup = false
  413.     end
  414.     update_phase4_step5_skillup     # 原物
  415.   end

  416.   #--------------------------------------------------------------------------
  417.   # ● フレーム更新
  418.   #--------------------------------------------------------------------------
  419.   alias update_skillup update
  420.   def update
  421.     if @active_battler.is_a?(Game_Actor) and @active_battler.skill_up and @skillup
  422.       @skill_up_window.contents_opacity -= 4
  423.     end
  424.     update_skillup              # 原物
  425.   end
  426.   end # if SHOW_SKILL_LV_UP
  427. end

  428. class Window_Skillup < Window_Base
  429.   #--------------------------------------------------------------------------
  430.   # ● オブジェクト初期化
  431.   #     actor : アクター
  432.   #--------------------------------------------------------------------------
  433.   def initialize(actor)
  434.     super(actor.screen_x-140, 260, 250, 64)
  435.     self.contents = Bitmap.new(width - 32, height - 32)
  436.     self.opacity = 0
  437.     self.contents.font.color = Color.new(255, 64, 0)
  438.     self.contents.draw_text(80, 0, 150, 32, "魔法升级")
  439.   end
  440. end



  441. #==============================================================================
  442. # 以下、再定義部分を含む(SP消費減少の機能がいらないなら消してもOK)
  443. #==============================================================================
  444. class Window_Skill < Window_Selectable
  445.   #--------------------------------------------------------------------------
  446.   # ● 項目の描画
  447.   #     index : 項目番号
  448.   #--------------------------------------------------------------------------
  449.   def draw_item(index)
  450.     skill = @data[index]
  451.     if @actor.skill_can_use?(skill.id)
  452.       self.contents.font.color = normal_color
  453.     else
  454.       self.contents.font.color = disabled_color
  455.     end
  456.     x = 4 + index % 2 * (288 + 32)
  457.     y = index / 2 * 32
  458.     rect = Rect.new(x, y, self.width / @column_max - 32, 32)
  459.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  460.     bitmap = RPG::Cache.icon(skill.icon_name)
  461.     opacity = self.contents.font.color == normal_color ? 255 : 128
  462.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  463. #-修正-----
  464.     @actor.skill_level[skill.id] = 0 if @actor.skill_level[skill.id] == nil
  465.     name_level = skill.name + " Lv " + @actor.skill_level[skill.id].to_s + ""
  466.     self.contents.draw_text(x + 28, y, 204, 32, name_level, 0)
  467.     @actor.skill_sp_cost[skill.id] = skill.sp_cost if @actor.skill_sp_cost[skill.id] == nil
  468.     self.contents.draw_text(x + 138, y, 144, 32, "消耗:"[email protected]_sp_cost[skill.id].to_s, 2)
  469. #----------x=232
  470.   end
  471. end

  472. class Scene_Skill
  473.   #--------------------------------------------------------------------------
  474.   # ● フレーム更新 (ターゲットウィンドウがアクティブの場合)
  475.   #--------------------------------------------------------------------------
  476.   def update_target
  477.     # B ボタンが押された場合
  478.     if Input.trigger?(Input::B)
  479.       # キャンセル SE を演奏
  480.       $game_system.se_play($data_system.cancel_se)
  481.       # ターゲットウィンドウを消去
  482.       @skill_window.active = true
  483.       @target_window.visible = false
  484.       @target_window.active = false
  485.       return
  486.     end
  487.     # C ボタンが押された場合
  488.     if Input.trigger?(Input::C)
  489.       # SP 切れなどで使用できなくなった場合
  490.       unless @actor.skill_can_use?(@skill.id)
  491.         # ブザー SE を演奏
  492.         $game_system.se_play($data_system.buzzer_se)
  493.         return
  494.       end
  495.       # ターゲットが全体の場合
  496.       if @target_window.index == -1
  497.         # パーティ全体にスキルの使用効果を適用
  498.         used = false
  499.         for i in $game_party.actors
  500.           used |= i.skill_effect(@actor, @skill)
  501.         end
  502.       end
  503.       # ターゲットが使用者の場合
  504.       if @target_window.index <= -2
  505.         # ターゲットのアクターにスキルの使用効果を適用
  506.         target = $game_party.actors[@target_window.index + 10]
  507.         used = target.skill_effect(@actor, @skill)
  508.       end
  509.       # ターゲットが単体の場合
  510.       if @target_window.index >= 0
  511.         # ターゲットのアクターにスキルの使用効果を適用
  512.         target = $game_party.actors[@target_window.index]
  513.         used = target.skill_effect(@actor, @skill)
  514.       end
  515.       # スキルを使った場合
  516.       if used
  517.         # スキルの使用時 SE を演奏
  518.         $game_system.se_play(@skill.menu_se)
  519. #-----修正------------------------------------------------------
  520.         @actor.skill_sp_cost[@skill.id] = @skill.sp_cost if @actor.skill_sp_cost[@skill.id] == nil
  521.         # SP 消費
  522.         @actor.sp -= @actor.skill_sp_cost[@skill.id]
  523. #---------------------------------------------------------------
  524.         # 各ウィンドウの内容を再作成
  525.         @status_window.refresh
  526.         @skill_window.refresh
  527.         @target_window.refresh
  528.         # 全滅の場合
  529.         if $game_party.all_dead?
  530.           # ゲームオーバー画面に切り替え
  531.           $scene = Scene_Gameover.new
  532.           return
  533.         end
  534.         # コモンイベント ID が有効の場合
  535.         if @skill.common_event_id > 0
  536.           # コモンイベント呼び出し予約
  537.           $game_temp.common_event_id = @skill.common_event_id
  538.           # マップ画面に切り替え
  539.           $scene = Scene_Map.new
  540.           return
  541.         end
  542.       end
  543.       # スキルを使わなかった場合
  544.       unless used
  545.         # ブザー SE を演奏
  546.         $game_system.se_play($data_system.buzzer_se)
  547.       end
  548.       return
  549.     end
  550.   end
  551. end

  552. class Scene_Battle
  553.   include Skill_updata
  554.   #--------------------------------------------------------------------------
  555.   # ● スキルアクション 結果作成
  556.   #--------------------------------------------------------------------------
  557.   alias make_skill_action_result_skill_update make_skill_action_result
  558.   def make_skill_action_result
  559.     make_skill_action_result_skill_update
  560.     # SP 消費
  561.     if SP_COST_DOWN and @active_battler.is_a?(Game_Actor)
  562.       @active_battler.sp += @skill.sp_cost
  563.       @active_battler.sp -= @active_battler.skill_sp_cost[@skill.id]
  564.     end
  565.   end
  566. end

  567. class Game_Battler
  568.   #--------------------------------------------------------------------------
  569.   # ● スキルの使用可能判定
  570.   #     skill_id : スキル ID
  571.   #--------------------------------------------------------------------------
  572.   alias skill_update_can_use? skill_can_use?
  573.   def skill_can_use?(skill_id)
  574.     ret = skill_update_can_use?(skill_id)
  575.     if !ret and SP_COST_DOWN
  576.       # SP が足りない場合は使用不可となった?
  577.       if $data_skills[skill_id].sp_cost > self.sp
  578.         if self.is_a?(Game_Actor)
  579.           skill_sp_cost = self.skill_sp_cost[skill_id]
  580.           if skill_sp_cost < self.sp
  581.             ret = true
  582.           end
  583.         end
  584.       end
  585.     end
  586.     return ret
  587.   end
  588. end

  589. #==============================================================================
  590. # イベントスクリプト操作
  591. #==============================================================================
  592. class Interpreter
  593.   include Skill_updata
  594.   #--------------------------------------------------------------------------
  595.   # ● スキルレベル設定(レベルセット)
  596.   #     actor_id  :   アクターID
  597.   #     skill_id  :   スキルID
  598.   #     level     :   設定レベル
  599.   #--------------------------------------------------------------------------
  600.   def set_skill_level(actor_id, skill_id, level)
  601.     actor = $game_actors[actor_id]
  602.     skill = $data_skills[skill_id]
  603.     # リミット取得
  604.     limit = S_LEVEL[skill_id]
  605.     s_limit = ( (limit != nil and limit[actor.id] != nil) ? limit[actor.id] : LEVEL_LIMIT)
  606.     if level > s_limit or level < 0
  607.       return
  608.     end
  609.     # レベル
  610.     actor.skill_level[skill.id] = level
  611.     # 使用回数
  612.     use_list = actor.skill_list[skill.id]
  613.     actor.skill_use[skill.id] = use_list[level]
  614.     # 威力を再計算
  615.     if SKILL_MIGHT_UP
  616.       actor.skill_power[skill.id] = skill.power
  617.       might = S_MIGHT[skill.id]
  618.       might_rate = ((might != nil and might[actor.id] != nil) ? might[actor.id] : MIGHT_RATE)
  619.       for i in 0...level
  620.         actor.skill_power[skill.id] += skill.power * might_rate / 100
  621.         actor.skill_power[skill.id] = actor.skill_power[skill.id].truncate
  622.       end
  623.     end
  624.     # SP消費再計算
  625.     if SP_COST_DOWN
  626.       actor.skill_sp_cost[skill.id] = skill.sp_cost
  627.       cost = S_COST[skill.id]
  628.       cost_rate = ((cost != nil and cost[actor.id] != nil) ? cost[actor.id] : COST_RATE)
  629.       for i in 0...level
  630.         actor.skill_sp_cost[skill.id] -= skill.sp_cost * cost_rate / 100
  631.         actor.skill_sp_cost[skill.id] = actor.skill_sp_cost[skill.id].truncate
  632.       end
  633.       # SP消費が0以下はありえない
  634.       if actor.skill_sp_cost[skill.id] < 0
  635.         actor.skill_sp_cost[skill.id] = 0
  636.       end
  637.     end
  638.     # 命中率再計算
  639.     if SKILL_HIT_UP
  640.       actor.skill_hit[skill.id] = skill.hit
  641.       hit = S_HIT[skill.id]
  642.       hit_rate = ((hit != nil and hit[actor.id] != nil) ? hit[actor.id] : HIT_RATE)
  643.       for i in 0...level
  644.         actor.skill_hit[skill.id] += skill.hit * hit_rate / 100
  645.         actor.skill_hit[skill.id] = actor.skill_hit[skill.id].truncate
  646.       end
  647.       # 100以上はありえない
  648.       if actor.skill_hit[skill.id] > 100
  649.         actor.skill_hit[skill.id] = 100
  650.       end
  651.     end
  652.   end
  653.   
  654.   #--------------------------------------------------------------------------
  655.   # ● スキルレベル設定(レベルアップ)
  656.   #     actor_id  :   アクターID
  657.   #     skill_id  :   スキルID
  658.   #--------------------------------------------------------------------------
  659.   def skill_level_up(actor_id, skill_id)
  660.     actor = $game_actors[actor_id]
  661.     set_skill_level(actor_id, skill_id, actor.skill_level[skill_id]+1)
  662.   end
  663.   
  664.   #--------------------------------------------------------------------------
  665.   # ● スキルレベル設定(レベルダウン)
  666.   #     actor_id  :   アクターID
  667.   #     skill_id  :   スキルID
  668.   #--------------------------------------------------------------------------
  669.   def skill_level_down(actor_id, skill_id)
  670.     actor = $game_actors[actor_id]
  671.     set_skill_level(actor_id, skill_id, actor.skill_level[skill_id]-1)
  672.   end
  673. end

  674. #==============================================================================
  675. #==============================================================================
复制代码

作者: 美丽晨露    时间: 2013-4-6 12:10
没有人知道怎么改吗?




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