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

Project1

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

[已经过期] 技能升级的小问题

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
37 小时
注册时间
2009-10-4
帖子
45
跳转到指定楼层
1
发表于 2009-11-13 16:07:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
我想把这个脚本给弄成技能到达一定层,用个道具把这技能升一级
能不能改?
  1. #=====================================================================
  2. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3. #====================================================================


  4. #====================================================================
  5. # ■ スキルアップデート   Ver. 4.4.0                     by Claimh
  6. #---------------------------------------------------------------
  7. #     スキルごとにレベル制を導入する
  8. #     戦闘中にスキルを使用するほど、威力上昇、消費SP減少、命中率上昇
  9. #==============================================================

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

  47.   # 升级所需次数
  48.   UPDATA_INTERVAL = 5
  49.   
  50.   # 等级上限
  51.   LEVEL_LIMIT = 20

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

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

  73.   # 技艺&actorSP消费减少率
  74.   # S_COST[技艺ID]=[角色ID=>SP消费减少率,…]
  75.   S_COST[57] = {1=>8, 2=>2, 3=>5, 4=>2, 5=>2, 6=>2, 7=>2, 8=>2}
  76.   S_COST[61] = {1=>2, 2=>8, 3=>5, 4=>2, 5=>2, 6=>2, 7=>2, 8=>2}

  77.   # 技艺&actor命中率
  78.   # S_HIT[技艺ID]=[角色ID=>命中上升率,…]
  79.   S_HIT[57] = {1=>2, 2=>1, 3=>1, 4=>1, 5=>1, 6=>1, 7=>1, 8=>1}
  80.   S_HIT[61] = {1=>1, 2=>2, 3=>1, 4=>1, 5=>1, 6=>1, 7=>1, 8=>1}

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

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

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

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

  118.   # 状态変化-
  119.   # S_STATE_N[技艺ID] = {角色ID=>{水平=>[属性ID,属性ID…]}, ・・・・}
  120.   S_STATE_N[57] = {1=>{1=>[1], 2=>[2], 3=>[3]}, 2=>{1=>[2], 2=>[5]}}

  121. #==================================================================
  122. # □ 自定义内容终了
  123. #==================================================================
  124. end


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

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


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

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

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

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

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

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

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



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

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

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

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

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

  677. #==================================================================
  678. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  679. #==================================================================
复制代码
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

GMT+8, 2024-5-22 23:05

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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