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

Project1

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

[已经解决] 求给这个特技升级脚本增加几个功能

[复制链接]

Lv1.梦旅人

梦石
0
星屑
105
在线时间
2107 小时
注册时间
2011-2-23
帖子
83
跳转到指定楼层
1
 楼主| 发表于 2013-1-19 09:17:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
12星屑
1、特技升级到一定等级自动学会新技能。(就是下面66行开始那里,可以自己设定的那种就可以)。
2、特技升级到一定等级,自动学会新技能的同时,遗忘旧技能,并且新的技能保留旧技能的等级。(这个不知道能不能实现。其实是为了实现一种技能升级到一定程度以后,可以增加更多功能的效果,比如变成群攻。就是1号技能(单体攻击)达到一定等级之后变成2号技能(群攻),但是游戏画面看起来还是那个特技,只是功能改了。)
3、460行那里被我自己改成用图片显示了,可是显示的位置实在是太囧了,不知道能不能顺便帮忙改成按照角色的坐标位置显示?
自己感觉好像就是加上学习和遗忘的语句和判断特技现在的等级的问题,应该不是很难吧?v不够可以再加的,希望有哪位可以帮忙。谢谢~

代码复制
  1. #==============================================================================
  2. # ■ スキルアップデート   Ver. 4.4.0                     
  3. #     スキルごとにレベル制を導入する
  4. #     戦闘中にスキルを使用するほど、威力上昇、消費SP減少、命中率上昇
  5. #
  6.  
  7.  
  8. module Skill_updata
  9.   S_MIGHT = []
  10.   S_COST = []
  11.   S_HIT = []
  12.   S_LEVEL = []
  13.   S_INTER = []
  14.   S_SLOPE = []
  15.   S_ANIME = []
  16.   S_ELEMENT = []
  17.   S_STATE_P = []
  18.   S_STATE_N = []
  19. #==============================================================================
  20. # □ 自定义内容
  21. #==============================================================================
  22.   # 威力上升使用true/false
  23.   SKILL_MIGHT_UP = true
  24.  
  25.   # SP消耗减少使用true/false
  26.   SP_COST_DOWN = true      
  27.  
  28.   # 命中率上升使用true/false
  29.   SKILL_HIT_UP = true      
  30.  
  31.   # 属性变化的使用true/false
  32.   ELEMENT_CHANGE = true   
  33.  
  34.   # 状态变化的使用true/false
  35.   STATE_CHANGE = true
  36.  
  37.   # 显示特技等级上升true/false
  38.   SHOW_SKILL_LV_UP = true
  39.  
  40.   # 等级上升的声效,不用的时候就=nil
  41.   SKILLUP_SE = "056-Right02"
  42.  
  43.   # 菜单使用计数true/false
  44.   MENU_COUNT = true
  45.  
  46.   # 升级所需次数
  47.   UPDATA_INTERVAL = 0
  48.  
  49.   # 等级上限
  50.   LEVEL_LIMIT = 30
  51.  
  52.   # 威力上升率(%%)
  53.   MIGHT_RATE = 5
  54.  
  55.   # SP消耗减少率(%)
  56.   COST_RATE = 1
  57.  
  58.   # 命中上升率(%)
  59.   HIT_RATE = 3
  60.  
  61.   #----------------------------------------------------------------------------
  62.   # 特别技能的详细设定,57和61号特技分别是十字斩和扫荡,大家最熟悉的两个招数
  63.   #----------------------------------------------------------------------------
  64.  
  65.   # 界限水平
  66.   # S_LEVEL[技艺ID]=[角色ID=>界限,…]
  67.   S_LEVEL[59] = {1=>18, 2=>12, 3=>5, 4=>12, 5=>12, 6=>12, 7=>12, 8=>12}
  68.   S_LEVEL[60] = {1=>12, 2=>18, 3=>15, 4=>12, 5=>12, 6=>12, 7=>12, 8=>12}
  69.  
  70.   # 技艺&actor威力上升率
  71.   # S_MIGHT[技艺ID]=[角色ID=>威力上升率,…]
  72.   S_MIGHT[59] = {1=>8, 2=>2, 3=>5, 4=>2, 5=>2, 6=>2, 7=>2, 8=>2}
  73.   S_MIGHT[60] = {1=>2, 2=>8, 3=>5, 4=>2, 5=>2, 6=>2, 7=>2, 8=>2}
  74.  
  75.   # 技艺&actorSP消费减少率
  76.   # S_COST[技艺ID]=[角色ID=>SP消费减少率,…]
  77.   S_COST[59] = {1=>8, 2=>2, 3=>5, 4=>2, 5=>2, 6=>2, 7=>2, 8=>2}
  78.   S_COST[60] = {1=>2, 2=>8, 3=>5, 4=>2, 5=>2, 6=>2, 7=>2, 8=>2}
  79.  
  80.   # 技艺&actor命中率
  81.   # S_HIT[技艺ID]=[角色ID=>命中上升率,…]
  82.   S_HIT[59] = {1=>2, 2=>1, 3=>1, 4=>1, 5=>1, 6=>1, 7=>1, 8=>1}
  83.   S_HIT[60] = {1=>1, 2=>2, 3=>1, 4=>1, 5=>1, 6=>1, 7=>1, 8=>1}
  84.  
  85.   #----------------------------------------------------------------------------
  86.   # 技能成长的具体调节
  87.   #----------------------------------------------------------------------------
  88.   # 技艺的增长图形
  89.   # 0:使用技艺一定回数的话提高水平
  90.   # 1:技艺一定回数+每水平の使用提高水平
  91.   SKILL_PATTERN = 1
  92.  
  93.   # 技艺水平上升间隔每(使用几回Lv提高)
  94.   #   ※没有设定的情况→基本设定被适应
  95.   # S_INTER[技艺ID]=[actorID=>上升间隔,…]
  96.   S_INTER[81] = {1=>5, 2=>8, 3=>8, 4=>8, 5=>8, 6=>8, 7=>8, 8=>8}
  97.  
  98.   # スキルレベル上昇の傾き(パターン1を使用する場合のみ必要)
  99.   #   ※設定がない場合は1となります。
  100.   # S_SLOPE[スキルID] = [アクターID=>上昇の傾き, …]
  101.   S_SLOPE[57] = {1=>5, 2=>8, 3=>8, 4=>8, 5=>8, 6=>8, 7=>8, 8=>8}
  102.  
  103.   #----------------------------------------------------------------------------
  104.   # 技艺增长的话使之动画变化
  105.   #  记录格式: S_ANIME[技艺ID] = [角色ID=>[[等级, 动画ID]], ・・・]
  106.   #----------------------------------------------------------------------------
  107.   # 实施技艺增长的动画变化?
  108.   USE_S_ANIME = true
  109.  
  110.   # 設定例
  111.   # 1号角色,57号特技,lv5,lv10动画变化
  112.   # 2号角色,Lv.11动画变化
  113.   S_ANIME[57] = {1=>[[5, 69], [10, 70]], 2=>[[11, 70]]}
  114.  
  115.   #----------------------------------------------------------------------------
  116.   # 属性変化/状态変化
  117.   #----------------------------------------------------------------------------
  118.   # 属性変化
  119.   # S_ELEMENT[技艺ID] = {角色ID=>{水平=>[属性ID,属性ID…]}, ・・・・}
  120.   S_ELEMENT[57] = {1=>{1=>[1], 2=>[2], 3=>[3]}, 2=>{1=>[2], 2=>[5]}}
  121.  
  122.   # 状态変化+
  123.   # S_STATE_P[技艺ID] = {角色ID=>{水平=>[属性ID,属性ID…]}, ・・・・}
  124.   S_STATE_P[57] = {1=>{1=>[1], 2=>[2], 3=>[3]}, 2=>{1=>[2], 2=>[5]}}
  125.  
  126.   # 状态変化-
  127.   # S_STATE_N[技艺ID] = {角色ID=>{水平=>[属性ID,属性ID…]}, ・・・・}
  128.   S_STATE_N[57] = {1=>{1=>[1], 2=>[2], 3=>[3]}, 2=>{1=>[2], 2=>[5]}}
  129.  
  130. #==============================================================================
  131. # □ 自定义内容终了
  132. #==============================================================================
  133. end
  134.  
  135.  
  136. class Game_Actor
  137.   include Skill_updata
  138.   attr_accessor   :skill_use      # スキル使用回数
  139.   attr_accessor   :skill_level    # スキルレベル
  140.   attr_accessor   :skill_power    # スキル威力更新値
  141.   attr_accessor   :skill_sp_cost  # スキルSP消費更新値
  142.   attr_accessor   :skill_hit      # スキル命中率
  143.   attr_accessor   :skill_up       # レベルアップフラグ
  144.   attr_accessor   :skill_list     # スキルEXPリスト
  145.   alias skill_updata_init setup
  146.   def setup(actor_id)
  147.     skill_updata_init(actor_id)
  148.     @skill_use = []
  149.     @skill_level = []
  150.     @skill_power = []
  151.     @skill_sp_cost = []
  152.     @skill_hit = []
  153.     @skill_up = false
  154.     @skill_list = []
  155.     for id in 1...$data_skills.size
  156.       @skill_use[id] = 0
  157.       @skill_level[id] = 0
  158.       @skill_power[id] = $data_skills[id].power
  159.       @skill_sp_cost[id] = $data_skills[id].sp_cost
  160.       @skill_hit[id] = $data_skills[id].hit
  161.       @skill_list[id] = make_skill_list(id)
  162.     end
  163.   end
  164.  
  165.   #--------------------------------------------------------------------------
  166.   # ● スキルEXP 計算
  167.   #--------------------------------------------------------------------------
  168.   def make_skill_list(skill_id)
  169.     interval = S_INTER[skill_id]
  170.     up_interval = ( (interval != nil and interval[@actor_id] != nil) ? interval[@actor_id] : UPDATA_INTERVAL )
  171.     slope = S_SLOPE[skill_id]
  172.     up_slope = ( (slope != nil and slope[@actor_id] != nil) ? slope[@actor_id] : 1 )
  173.     limit = S_LEVEL[skill_id]
  174.     limit_lv = ( (limit != nil and limit[@actor_id] != nil) ? limit[@actor_id] : LEVEL_LIMIT )
  175.     list = []
  176.     list[0] = 0
  177.     for lv in 1...limit_lv+1
  178.       exp = 0
  179.       case SKILL_PATTERN
  180.       when 0
  181.         exp = up_interval * lv
  182.       when 1
  183.         exp = list[lv-1] + up_slope * lv + up_interval
  184.       end
  185.       list[lv] = exp.truncate
  186.     end
  187.     return list
  188.   end
  189. end
  190.  
  191.  
  192. class Game_Battler
  193.   include Skill_updata
  194.   #--------------------------------------------------------------------------
  195.   # ● スキルの効果適用
  196.   #     user  : スキルの使用者 (バトラー)
  197.   #     skill : スキル
  198.   #--------------------------------------------------------------------------
  199.   alias skill_effect_update skill_effect
  200.   def skill_effect(user, skill)
  201.     up_flag = false
  202.     if user.is_a?(Game_Actor) and ($scene.is_a?(Scene_Battle) or MENU_COUNT)
  203.       skill_update_main(user, skill)
  204.       skill_base = skill.dup
  205.       # 威力上昇
  206.       if SKILL_MIGHT_UP
  207.         skill.power = user.skill_power[skill.id]
  208.       end
  209.       # 命中率上昇
  210.       if SKILL_HIT_UP
  211.         skill.hit = user.skill_hit[skill.id]
  212.       end
  213.       # 属性変化
  214.       if ELEMENT_CHANGE and S_ELEMENT != []
  215.         ele1 = S_ELEMENT[skill.id]
  216.         if ele1 != nil and ele1[user.id] != nil
  217.           ele2 = ele1[user.id]
  218.           if ele2 != [] and ele2[user.skill_level[skill.id]] != nil
  219.             skill.element_set = ele2[user.skill_level[skill.id]]
  220.           end
  221.         end
  222.       end
  223.       # ステート変化
  224.       if STATE_CHANGE
  225.         if S_STATE_P != []
  226.           pst1 = S_STATE_P[skill.id]
  227.           if pst1 != nil and pst1[user.id] != nil
  228.             pst2 = pst1[user.id]
  229.             if pst2 != nil and pst2[user.skill_level[skill.id]] != nil
  230.               skill.plus_state_set = pst2[user.skill_level[skill.id]]
  231.               p skill.plus_state_set
  232.             end
  233.           end
  234.         end
  235.         if S_STATE_N != []
  236.           nst1 = S_STATE_N[skill.id]
  237.           if nst1 != nil and nst1[user.id] != nil
  238.             nst2 = nst1[user.id]
  239.             if nst1 != nil and nst2[user.skill_level[skill.id]] != nil
  240.               skill.minus_state_set = nst2[user.skill_level[skill.id]]
  241.             end
  242.           end
  243.         end
  244.       end
  245.       up_flag = true
  246.     end
  247.     ret = skill_effect_update(user, skill)    # 原物
  248.     if up_flag
  249.       skill = skill_base
  250.       # Miss時には後戻し
  251.       if self.damage == "Miss"
  252.         skill_use_recount(user, skill)
  253.       end
  254.     end
  255.     return ret
  256.   end
  257.  
  258.   #--------------------------------------------------------------------------
  259.   # ● スキルアップデータメイン
  260.   #--------------------------------------------------------------------------
  261.   def skill_update_main(actor, skill)
  262.     # スキル使用回数のカウント
  263.     actor.skill_use[skill.id] += 1
  264.     # リミット取得
  265.     limit = S_LEVEL[skill.id]
  266.     s_limit = ( (limit != nil and limit[actor.id] != nil) ? limit[actor.id] : LEVEL_LIMIT)
  267.     # 書き換え限界到達
  268.     if s_limit == false or actor.skill_level[skill.id] < s_limit
  269.       # レベルアップ間隔取得
  270.       interval = actor.skill_list[skill.id]
  271.       # 書き換え回数到達
  272.       if actor.skill_use[skill.id] == interval[actor.skill_level[skill.id]+1]
  273.         # スキルレベル上昇
  274.         actor.skill_level[skill.id] += 1
  275.         actor.skill_up = true
  276.         # 威力上昇 = 有効
  277.         if SKILL_MIGHT_UP
  278.           might = S_MIGHT[skill.id]
  279.           might_rate = ((might != nil and might[actor.id] != nil) ? might[actor.id] : MIGHT_RATE)
  280.           # 補正値更新
  281.           actor.skill_power[skill.id] += skill.power * might_rate / 100
  282.           actor.skill_power[skill.id] = actor.skill_power[skill.id].truncate
  283.         end
  284.         # SP消費減少 = 有効
  285.         if SP_COST_DOWN
  286.           cost = S_COST[skill.id]
  287.           cost_rate = ((cost != nil and cost[actor.id] != nil) ? cost[actor.id] : COST_RATE)
  288.           actor.skill_sp_cost[skill.id] -= skill.sp_cost * cost_rate / 100
  289.           actor.skill_sp_cost[skill.id] = actor.skill_sp_cost[skill.id].truncate
  290.           # SP消費が0以下はありえない
  291.           if actor.skill_sp_cost[skill.id] < 0
  292.             actor.skill_sp_cost[skill.id] = 0
  293.           end
  294.         end
  295.         # 命中率上昇 = 有効
  296.         if SKILL_HIT_UP
  297.           hit = S_HIT[skill.id]
  298.           hit_rate = ((hit != nil and hit[actor.id] != nil) ? hit[actor.id] : HIT_RATE)
  299.           actor.skill_hit[skill.id] += skill.hit * hit_rate / 100
  300.           actor.skill_hit[skill.id] = actor.skill_hit[skill.id].truncate
  301.           # 100以上はありえない
  302.           if actor.skill_hit[skill.id] > 100
  303.             actor.skill_hit[skill.id] = 100
  304.           end
  305.         end
  306.       end
  307.     end
  308.   end
  309.  
  310.   #--------------------------------------------------------------------------
  311.   # ● 再カウント
  312.   #--------------------------------------------------------------------------
  313.   def skill_use_recount(actor, skill)
  314.     if actor.skill_up
  315.       actor.skill_level[skill.id] -= 1
  316.       # 威力を再計算
  317.       if SKILL_MIGHT_UP
  318.         actor.skill_power[skill.id] = skill.power
  319.         might = S_MIGHT[skill.id]
  320.         might_rate = ((might != nil and might[actor.id] != nil) ? might[actor.id] : MIGHT_RATE)
  321.         for i in 1...actor.skill_level[skill.id]
  322.           actor.skill_power[skill.id] += skill.power * might_rate / 100
  323.           actor.skill_power[skill.id] = actor.skill_power[skill.id].truncate
  324.         end
  325.       end
  326.       # SP消費再計算
  327.       if SP_COST_DOWN
  328.         actor.skill_sp_cost[skill.id] = skill.sp_cost
  329.         cost = S_COST[skill.id]
  330.         cost_rate = ((cost != nil and cost[actor.id] != nil) ? cost[actor.id] : COST_RATE)
  331.         for i in 1...actor.skill_level[skill.id]
  332.           actor.skill_sp_cost[skill.id] -= skill.sp_cost * cost_rate / 100
  333.           actor.skill_sp_cost[skill.id] = actor.skill_sp_cost[skill.id].truncate
  334.         end
  335.         # SP消費が0以下はありえない
  336.         if actor.skill_sp_cost[skill.id] < 0
  337.           actor.skill_sp_cost[skill.id] = 0
  338.         end
  339.       end
  340.       # 命中率再計算
  341.       if SKILL_HIT_UP
  342.         actor.skill_hit[skill.id] = skill.hit
  343.         hit = S_HIT[skill.id]
  344.         hit_rate = ((hit != nil and hit[actor.id] != nil) ? hit[actor.id] : HIT_RATE)
  345.         for i in 1...actor.skill_level[skill.id]
  346.           actor.skill_hit[skill.id] += skill.hit * hit_rate / 100
  347.           actor.skill_hit[skill.id] = actor.skill_hit[skill.id].truncate
  348.         end
  349.         # 100以上はありえない
  350.         if actor.skill_hit[skill.id] > 100
  351.           actor.skill_hit[skill.id] = 100
  352.         end
  353.       end
  354.       actor.skill_up = false
  355.     end
  356.     actor.skill_use[skill.id] -= 1
  357.   end
  358. end
  359.  
  360. #==============================================================================
  361. # スキル成長によるアニメーション変化
  362. #==============================================================================
  363. class Scene_Battle
  364.   include Skill_updata
  365.   #--------------------------------------------------------------------------
  366.   # ● フレーム更新 (メインフェーズ ステップ 4 : 対象側アニメーション)
  367.   #--------------------------------------------------------------------------
  368.   alias update_phase4_step4_skillup update_phase4_step4
  369.   def update_phase4_step4
  370.     update_phase4_step4_skillup
  371.     if @active_battler.is_a?(Game_Actor) and USE_S_ANIME
  372.       s_anime = S_ANIME[@skill.id]
  373.       # 設定がないなら無視
  374.       if s_anime != nil and s_anime[@active_battler.id] != nil
  375.         s_anime_set = s_anime[@active_battler.id]
  376.         for i in 0...s_anime_set.size
  377.           s_anime_def = s_anime_set[i]
  378.           # 規定レベル以上
  379.           if @active_battler.skill_level[@skill.id] >= s_anime_def[0]
  380.             # 対象側アニメーション
  381.             for target in @target_battlers
  382.               target.animation_id = s_anime_def[1]
  383.             end
  384.           end
  385.         end
  386.       end
  387.     end
  388.   end
  389. end
  390.  
  391. #==============================================================================
  392. # 以下、レベルアップ表示部分(レベルアップ表示がいらないなら消してもOK)
  393. #==============================================================================
  394. class Scene_Battle
  395.   include Skill_updata
  396.   if SHOW_SKILL_LV_UP
  397.   #--------------------------------------------------------------------------
  398.   # ● フレーム更新 (メインフェーズ ステップ 2 : アクション開始)
  399.   #--------------------------------------------------------------------------
  400.   alias update_phase4_step2_skillup update_phase4_step2
  401.   def update_phase4_step2
  402.     if @active_battler.is_a?(Game_Actor)
  403.       @active_battler.skill_up = false
  404.     end
  405.     @skillup = false
  406.     update_phase4_step2_skillup   # 原物
  407.   end
  408.  
  409.   #--------------------------------------------------------------------------
  410.   # ● フレーム更新 (メインフェーズ ステップ 3 : 行動側アニメーション)
  411.   #--------------------------------------------------------------------------
  412.   alias update_phase4_step3_skillup update_phase4_step3
  413.   def update_phase4_step3
  414.     if @active_battler.is_a?(Game_Actor) and @active_battler.skill_up != false
  415.       @skillup = true
  416.       @skill_up_window = Window_Skillup.new(@active_battler)
  417.       if SKILLUP_SE != nil
  418.         Audio.se_play("Audio/SE/" + SKILLUP_SE)
  419.         sleep(0.1)
  420.       end
  421.     end
  422.     update_phase4_step3_skillup
  423.   end
  424.  
  425.   #--------------------------------------------------------------------------
  426.   # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
  427.   #--------------------------------------------------------------------------
  428.   alias update_phase4_step5_skillup update_phase4_step5
  429.   def update_phase4_step5
  430.     if @active_battler.is_a?(Game_Actor) and @skillup
  431.       @skill_up_window.dispose
  432.       @active_battler.skill_up = false
  433.       @skillup = false
  434.     end
  435.     update_phase4_step5_skillup     # 原物
  436.   end
  437.  
  438.   #--------------------------------------------------------------------------
  439.   # ● フレーム更新
  440.   #--------------------------------------------------------------------------
  441.   alias update_skillup update
  442.   def update
  443.     if @active_battler.is_a?(Game_Actor) and @active_battler.skill_up and @skillup
  444.       @skill_up_window.contents_opacity -= 4
  445.     end
  446.     update_skillup              # 原物
  447.   end
  448.   end # if SHOW_SKILL_LV_UP
  449. end
  450.  
  451. class Window_Skillup < Window_Base
  452.   #--------------------------------------------------------------------------
  453.   # ● オブジェクト初期化
  454.   #     actor : アクター
  455.   #--------------------------------------------------------------------------
  456.   def initialize(actor)
  457.     super(actor.screen_x-140, 260, 250, 64)
  458.     self.contents = Bitmap.new(width - 32, height - 32)
  459.     self.opacity = 0
  460.     bitmap = RPG::Cache.picture("美化/特技升級提示") #改成用图片显示,可是位置……
  461.     self.contents.blt(80, 0, bitmap, bitmap.rect)
  462.    # self.contents.font.color = Color.new(255, 64, 0)
  463.   # self.contents.draw_text(80, 0, 150, 32, "特级升级!")
  464.   end
  465. end
  466.  
  467.  
  468.  
  469. #==============================================================================
  470. # 以下、再定義部分を含む(SP消費減少の機能がいらないなら消してもOK)
  471. #==============================================================================
  472. class Window_Skill < Window_Selectable
  473.   #--------------------------------------------------------------------------
  474.   # ● 項目の描画
  475.   #     index : 項目番号
  476.   #--------------------------------------------------------------------------
  477.   def draw_item(index)
  478.     skill = @data[index]
  479.     if @actor.skill_can_use?(skill.id)
  480.       self.contents.font.color = normal_color
  481.     else
  482.       self.contents.font.color = disabled_color
  483.     end
  484.     x = 4 + index % 2 * (288 + 32)
  485.     y = index / 2 * 32
  486.     rect = Rect.new(x, y, self.width / @column_max - 32, 32)
  487.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  488.     bitmap = RPG::Cache.icon(skill.icon_name)
  489.     opacity = self.contents.font.color == normal_color ? 255 : 128
  490.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  491. #-修正-----
  492.     @actor.skill_level[skill.id] = 0 if @actor.skill_level[skill.id] == nil
  493.     name_level = skill.name + "(" + @actor.skill_level[skill.id].to_s + ")"
  494.     self.contents.draw_text(x + 28, y, 204, 32, name_level, 0)
  495.     @actor.skill_sp_cost[skill.id] = skill.sp_cost if @actor.skill_sp_cost[skill.id] == nil
  496.     self.contents.draw_text(x + 232, y, 48, 32, @actor.skill_sp_cost[skill.id].to_s, 2)
  497. #----------
  498.   end
  499. end
  500.  
  501. class Scene_Skill
  502.   #--------------------------------------------------------------------------
  503.   # ● フレーム更新 (ターゲットウィンドウがアクティブの場合)
  504.   #--------------------------------------------------------------------------
  505.   def update_target
  506.     # B ボタンが押された場合
  507.     if Input.trigger?(Input::B)
  508.       # キャンセル SE を演奏
  509.       $game_system.se_play($data_system.cancel_se)
  510.       # ターゲットウィンドウを消去
  511.       @skill_window.active = true
  512.       @target_window.visible = false
  513.       @target_window.active = false
  514.       return
  515.     end
  516.     # C ボタンが押された場合
  517.     if Input.trigger?(Input::C)
  518.       # SP 切れなどで使用できなくなった場合
  519.       unless @actor.skill_can_use?(@skill.id)
  520.         # ブザー SE を演奏
  521.         $game_system.se_play($data_system.buzzer_se)
  522.         return
  523.       end
  524.       # ターゲットが全体の場合
  525.       if @target_window.index == -1
  526.         # パーティ全体にスキルの使用効果を適用
  527.         used = false
  528.         for i in $game_party.actors
  529.           used |= i.skill_effect(@actor, @skill)
  530.         end
  531.       end
  532.       # ターゲットが使用者の場合
  533.       if @target_window.index <= -2
  534.         # ターゲットのアクターにスキルの使用効果を適用
  535.         target = $game_party.actors[@target_window.index + 10]
  536.         used = target.skill_effect(@actor, @skill)
  537.       end
  538.       # ターゲットが単体の場合
  539.       if @target_window.index >= 0
  540.         # ターゲットのアクターにスキルの使用効果を適用
  541.         target = $game_party.actors[@target_window.index]
  542.         used = target.skill_effect(@actor, @skill)
  543.       end
  544.       # スキルを使った場合
  545.       if used
  546.         # スキルの使用時 SE を演奏
  547.         $game_system.se_play(@skill.menu_se)
  548. #-----修正------------------------------------------------------
  549.         @actor.skill_sp_cost[@skill.id] = @skill.sp_cost if @actor.skill_sp_cost[@skill.id] == nil
  550.         # SP 消費
  551.         @actor.sp -= @actor.skill_sp_cost[@skill.id]
  552. #---------------------------------------------------------------
  553.         # 各ウィンドウの内容を再作成
  554.         @status_window.refresh
  555.         @skill_window.refresh
  556.         @target_window.refresh
  557.         # 全滅の場合
  558.         if $game_party.all_dead?
  559.           # ゲームオーバー画面に切り替え
  560.           $scene = Scene_Gameover.new
  561.           return
  562.         end
  563.         # コモンイベント ID が有効の場合
  564.         if @skill.common_event_id > 0
  565.           # コモンイベント呼び出し予約
  566.           $game_temp.common_event_id = @skill.common_event_id
  567.           # マップ画面に切り替え
  568.           $scene = Scene_Map.new
  569.           return
  570.         end
  571.       end
  572.       # スキルを使わなかった場合
  573.       unless used
  574.         # ブザー SE を演奏
  575.         $game_system.se_play($data_system.buzzer_se)
  576.       end
  577.       return
  578.     end
  579.   end
  580. end
  581.  
  582. class Scene_Battle
  583.   include Skill_updata
  584.   #--------------------------------------------------------------------------
  585.   # ● スキルアクション 結果作成
  586.   #--------------------------------------------------------------------------
  587.   alias make_skill_action_result_skill_update make_skill_action_result
  588.   def make_skill_action_result
  589.     make_skill_action_result_skill_update
  590.     # SP 消費
  591.     if SP_COST_DOWN and @active_battler.is_a?(Game_Actor)
  592.       @active_battler.sp += @skill.sp_cost
  593.       @active_battler.sp -= @active_battler.skill_sp_cost[@skill.id]
  594.     end
  595.   end
  596. end
  597.  
  598. class Game_Battler
  599.   #--------------------------------------------------------------------------
  600.   # ● スキルの使用可能判定
  601.   #     skill_id : スキル ID
  602.   #--------------------------------------------------------------------------
  603.   alias skill_update_can_use? skill_can_use?
  604.   def skill_can_use?(skill_id)
  605.     ret = skill_update_can_use?(skill_id)
  606.     if !ret and SP_COST_DOWN
  607.       # SP が足りない場合は使用不可となった?
  608.       if $data_skills[skill_id].sp_cost > self.sp
  609.         if self.is_a?(Game_Actor)
  610.           skill_sp_cost = self.skill_sp_cost[skill_id]
  611.           if skill_sp_cost < self.sp
  612.             ret = true
  613.           end
  614.         end
  615.       end
  616.     end
  617.     return ret
  618.   end
  619. end
  620.  
  621. #==============================================================================
  622. # イベントスクリプト操作
  623. #==============================================================================
  624. class Interpreter
  625.   include Skill_updata
  626.   #--------------------------------------------------------------------------
  627.   # ● スキルレベル設定(レベルセット)
  628.   #     actor_id  :   アクターID
  629.   #     skill_id  :   スキルID
  630.   #     level     :   設定レベル
  631.   #--------------------------------------------------------------------------
  632.   def set_skill_level(actor_id, skill_id, level)
  633.     actor = $game_actors[actor_id]
  634.     skill = $data_skills[skill_id]
  635.     # リミット取得
  636.     limit = S_LEVEL[skill_id]
  637.     s_limit = ( (limit != nil and limit[actor.id] != nil) ? limit[actor.id] : LEVEL_LIMIT)
  638.     if level > s_limit or level < 0
  639.       return
  640.     end
  641.     # レベル
  642.     actor.skill_level[skill.id] = level
  643.     # 使用回数
  644.     use_list = actor.skill_list[skill.id]
  645.     actor.skill_use[skill.id] = use_list[level]
  646.     # 威力を再計算
  647.     if SKILL_MIGHT_UP
  648.       actor.skill_power[skill.id] = skill.power
  649.       might = S_MIGHT[skill.id]
  650.       might_rate = ((might != nil and might[actor.id] != nil) ? might[actor.id] : MIGHT_RATE)
  651.       for i in 0...level
  652.         actor.skill_power[skill.id] += skill.power * might_rate / 100
  653.         actor.skill_power[skill.id] = actor.skill_power[skill.id].truncate
  654.       end
  655.     end
  656.     # SP消費再計算
  657.     if SP_COST_DOWN
  658.       actor.skill_sp_cost[skill.id] = skill.sp_cost
  659.       cost = S_COST[skill.id]
  660.       cost_rate = ((cost != nil and cost[actor.id] != nil) ? cost[actor.id] : COST_RATE)
  661.       for i in 0...level
  662.         actor.skill_sp_cost[skill.id] -= skill.sp_cost * cost_rate / 100
  663.         actor.skill_sp_cost[skill.id] = actor.skill_sp_cost[skill.id].truncate
  664.       end
  665.       # SP消費が0以下はありえない
  666.       if actor.skill_sp_cost[skill.id] < 0
  667.         actor.skill_sp_cost[skill.id] = 0
  668.       end
  669.     end
  670.     # 命中率再計算
  671.     if SKILL_HIT_UP
  672.       actor.skill_hit[skill.id] = skill.hit
  673.       hit = S_HIT[skill.id]
  674.       hit_rate = ((hit != nil and hit[actor.id] != nil) ? hit[actor.id] : HIT_RATE)
  675.       for i in 0...level
  676.         actor.skill_hit[skill.id] += skill.hit * hit_rate / 100
  677.         actor.skill_hit[skill.id] = actor.skill_hit[skill.id].truncate
  678.       end
  679.       # 100以上はありえない
  680.       if actor.skill_hit[skill.id] > 100
  681.         actor.skill_hit[skill.id] = 100
  682.       end
  683.     end
  684.   end
  685.  
  686.   #--------------------------------------------------------------------------
  687.   # ● スキルレベル設定(レベルアップ)
  688.   #     actor_id  :   アクターID
  689.   #     skill_id  :   スキルID
  690.   #--------------------------------------------------------------------------
  691.   def skill_level_up(actor_id, skill_id)
  692.     actor = $game_actors[actor_id]
  693.     set_skill_level(actor_id, skill_id, actor.skill_level[skill_id]+1)
  694.   end
  695.  
  696.   #--------------------------------------------------------------------------
  697.   # ● スキルレベル設定(レベルダウン)
  698.   #     actor_id  :   アクターID
  699.   #     skill_id  :   スキルID
  700.   #--------------------------------------------------------------------------
  701.   def skill_level_down(actor_id, skill_id)
  702.     actor = $game_actors[actor_id]
  703.     set_skill_level(actor_id, skill_id, actor.skill_level[skill_id]-1)
  704.   end
  705. end
  706.  
  707. #==============================================================================
  708. #==============================================================================

最佳答案

查看完整内容

我用了你给我那个脚本还是会显示对话框,于是我就去google找了一下,找到了这个脚本的最新版本4.4升级到5.2了。 我在5.2的基础上给你添加了功能,你先测试一下。 1、打开工程后读取进度,我已经打了几场,下一场技能就会升级。 2、进入战斗后,使用十字斩,会升级,删除十字斩领悟扫荡,扫荡会继承十字斩的技能等级。 3、再次使用扫荡,会领悟火炎。 你可以打开工程测试一下设置其他技能会不会报错,搜索羞射了。 ...

Lv1.梦旅人

梦石
0
星屑
47
在线时间
976 小时
注册时间
2011-4-30
帖子
860
2
发表于 2013-1-19 09:17:07 | 只看该作者
君子兰 发表于 2013-1-19 11:04
好的,我自己没有改之前是这样的。
#================================================================ ...

Project2.rar (207.29 KB, 下载次数: 104)

我用了你给我那个脚本还是会显示对话框,于是我就去google找了一下,找到了这个脚本的最新版本4.4升级到5.2了。

我在5.2的基础上给你添加了功能,你先测试一下。

1、打开工程后读取进度,我已经打了几场,下一场技能就会升级。

2、进入战斗后,使用十字斩,会升级,删除十字斩领悟扫荡,扫荡会继承十字斩的技能等级。

3、再次使用扫荡,会领悟火炎。

你可以打开工程测试一下设置其他技能会不会报错,搜索羞射了。

点评

好的,感谢您啊!我先试试看~  发表于 2013-1-19 13:47
湿滑落式骑!
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
47
在线时间
976 小时
注册时间
2011-4-30
帖子
860
3
发表于 2013-1-19 10:45:16 | 只看该作者
我尝试了一下,提几个问题

1、你需要的是升级后学习?遗忘?继承?这功能当然类似的,但是细分需要做成三个功能,是都需要还是只需要替换技能继承等级?

2、升级前为什么会跳出个对话框显示[1]?你还改过些什么?
湿滑落式骑!
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
105
在线时间
2107 小时
注册时间
2011-2-23
帖子
83
4
 楼主| 发表于 2013-1-19 10:56:24 | 只看该作者
本帖最后由 君子兰 于 2013-1-19 11:59 编辑
羞射了 发表于 2013-1-19 11:45
我尝试了一下,提几个问题

1、你需要的是升级后学习?遗忘?继承?这功能当然类似的,但是细分需要做成三 ...


1、里面的1和2我希望是分成两个的,问题1就是纯粹的比如技能a达到了一定等级之后,就学会技能b。
问题2则是就类似“继承”吧。就是比如技能a到了8级之后,学会技能b,而技能a则被遗忘,而技能b在学会的时候就已经是8级了这样,……我的语言表达能力比较差,真是不好意思!不知道这个会不会很难?主要就是希望原本技能a比如设定的是单体攻击,但是8级以后可以自动变成全体攻击。但是我个人对脚本不是太懂,这样的设定太难了,所以才想可不可以通过这个特技升级的脚本来实现?


2、问题3里面提到的,我把那个升级提示改成用图片提示了,不知道是不是有关系?(就是460行的那里,原来用文字直接显示的被我注释掉了,自己加的用图片显示)。其他的地方应该都没有修改了……
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
47
在线时间
976 小时
注册时间
2011-4-30
帖子
860
5
发表于 2013-1-19 11:00:13 | 只看该作者
君子兰 发表于 2013-1-19 10:56
1、里面的1和2我希望是分成两个的,问题1就是纯粹的比如技能a达到了一定等级之后,就学会技能b。
问题2则 ...

有没有原版的这个脚本给我贴一下。
湿滑落式骑!
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
105
在线时间
2107 小时
注册时间
2011-2-23
帖子
83
6
 楼主| 发表于 2013-1-19 11:04:43 | 只看该作者
羞射了 发表于 2013-1-19 12:00
有没有原版的这个脚本给我贴一下。

好的,我自己没有改之前是这样的。
代码复制
  1. #==============================================================================
  2. # ■ スキルアップデート   Ver. 4.4.0                     
  3. #------------------------------------------------------------------------------
  4. #     スキルごとにレベル制を導入する
  5. #     戦闘中にスキルを使用するほど、威力上昇、消費SP減少、命中率上昇
  6. #==============================================================================
  7.  
  8. module Skill_updata
  9.   S_MIGHT = []
  10.   S_COST = []
  11.   S_HIT = []
  12.   S_LEVEL = []
  13.   S_INTER = []
  14.   S_SLOPE = []
  15.   S_ANIME = []
  16.   S_ELEMENT = []
  17.   S_STATE_P = []
  18.   S_STATE_N = []
  19. #==============================================================================
  20. # □ 自定义内容
  21. #==============================================================================
  22.   # 威力上升使用true/false
  23.   SKILL_MIGHT_UP = true
  24.  
  25.   # SP消耗减少使用true/false
  26.   SP_COST_DOWN = true      
  27.  
  28.   # 命中率上升使用true/false
  29.   SKILL_HIT_UP = true      
  30.  
  31.   # 属性变化的使用true/false
  32.   ELEMENT_CHANGE = true   
  33.  
  34.   # 状态变化的使用true/false
  35.   STATE_CHANGE = true
  36.  
  37.   # 显示特技等级上升true/false
  38.   SHOW_SKILL_LV_UP = true
  39.  
  40.   # 等级上升的声效,不用的时候就=nil
  41.   SKILLUP_SE = "056-Right02"
  42.  
  43.   # 菜单使用计数true/false
  44.   MENU_COUNT = true
  45.  
  46.   # 升级所需次数
  47.   UPDATA_INTERVAL = 0
  48.  
  49.   # 等级上限
  50.   LEVEL_LIMIT = 10
  51.  
  52.   # 威力上升率(%%)
  53.   MIGHT_RATE = 5
  54.  
  55.   # SP消耗减少率(%)
  56.   COST_RATE = 5
  57.  
  58.   # 命中上升率(%)
  59.   HIT_RATE = 1
  60.  
  61.   #----------------------------------------------------------------------------
  62.   # 特别技能的详细设定,57和61号特技分别是十字斩和扫荡,大家最熟悉的两个招数
  63.   #----------------------------------------------------------------------------
  64.  
  65.   # 界限水平
  66.   # S_LEVEL[技艺ID]=[角色ID=>界限,…]
  67.   S_LEVEL[59] = {1=>18, 2=>12, 3=>5, 4=>12, 5=>12, 6=>12, 7=>12, 8=>12}
  68.   S_LEVEL[60] = {1=>12, 2=>18, 3=>15, 4=>12, 5=>12, 6=>12, 7=>12, 8=>12}
  69.  
  70.   # 技艺&actor威力上升率
  71.   # S_MIGHT[技艺ID]=[角色ID=>威力上升率,…]
  72.   S_MIGHT[59] = {1=>8, 2=>2, 3=>5, 4=>2, 5=>2, 6=>2, 7=>2, 8=>2}
  73.   S_MIGHT[60] = {1=>2, 2=>8, 3=>5, 4=>2, 5=>2, 6=>2, 7=>2, 8=>2}
  74.  
  75.   # 技艺&actorSP消费减少率
  76.   # S_COST[技艺ID]=[角色ID=>SP消费减少率,…]
  77.   S_COST[59] = {1=>8, 2=>2, 3=>5, 4=>2, 5=>2, 6=>2, 7=>2, 8=>2}
  78.   S_COST[60] = {1=>2, 2=>8, 3=>5, 4=>2, 5=>2, 6=>2, 7=>2, 8=>2}
  79.  
  80.   # 技艺&actor命中率
  81.   # S_HIT[技艺ID]=[角色ID=>命中上升率,…]
  82.   S_HIT[59] = {1=>2, 2=>1, 3=>1, 4=>1, 5=>1, 6=>1, 7=>1, 8=>1}
  83.   S_HIT[60] = {1=>1, 2=>2, 3=>1, 4=>1, 5=>1, 6=>1, 7=>1, 8=>1}
  84.  
  85.   #----------------------------------------------------------------------------
  86.   # 技能成长的具体调节
  87.   #----------------------------------------------------------------------------
  88.   # 技艺的增长图形
  89.   # 0:使用技艺一定回数的话提高水平
  90.   # 1:技艺一定回数+每水平の使用提高水平
  91.   SKILL_PATTERN = 1
  92.  
  93.   # 技艺水平上升间隔每(使用几回Lv提高)
  94.   #   ※没有设定的情况→基本设定被适应
  95.   # S_INTER[技艺ID]=[actorID=>上升间隔,…]
  96.   S_INTER[81] = {1=>5, 2=>8, 3=>8, 4=>8, 5=>8, 6=>8, 7=>8, 8=>8}
  97.  
  98.   # スキルレベル上昇の傾き(パターン1を使用する場合のみ必要)
  99.   #   ※設定がない場合は1となります。
  100.   # S_SLOPE[スキルID] = [アクターID=>上昇の傾き, …]
  101.   S_SLOPE[57] = {1=>5, 2=>8, 3=>8, 4=>8, 5=>8, 6=>8, 7=>8, 8=>8}
  102.  
  103.   #----------------------------------------------------------------------------
  104.   # 技艺增长的话使之动画变化
  105.   #  记录格式: S_ANIME[技艺ID] = [角色ID=>[[等级, 动画ID]], ・・・]
  106.   #----------------------------------------------------------------------------
  107.   # 实施技艺增长的动画变化?
  108.   USE_S_ANIME = true
  109.  
  110.   # 設定例
  111.   # 1号角色,57号特技,lv5,lv10动画变化
  112.   # 2号角色,Lv.11动画变化
  113.   S_ANIME[57] = {1=>[[5, 69], [10, 70]], 2=>[[11, 70]]}
  114.  
  115.   #----------------------------------------------------------------------------
  116.   # 属性変化/状态変化
  117.   #----------------------------------------------------------------------------
  118.   # 属性変化
  119.   # S_ELEMENT[技艺ID] = {角色ID=>{水平=>[属性ID,属性ID…]}, ・・・・}
  120.   S_ELEMENT[57] = {1=>{1=>[1], 2=>[2], 3=>[3]}, 2=>{1=>[2], 2=>[5]}}
  121.  
  122.   # 状态変化+
  123.   # S_STATE_P[技艺ID] = {角色ID=>{水平=>[属性ID,属性ID…]}, ・・・・}
  124.   S_STATE_P[57] = {1=>{1=>[1], 2=>[2], 3=>[3]}, 2=>{1=>[2], 2=>[5]}}
  125.  
  126.   # 状态変化-
  127.   # S_STATE_N[技艺ID] = {角色ID=>{水平=>[属性ID,属性ID…]}, ・・・・}
  128.   S_STATE_N[57] = {1=>{1=>[1], 2=>[2], 3=>[3]}, 2=>{1=>[2], 2=>[5]}}
  129.  
  130. #==============================================================================
  131. # □ 自定义内容终了
  132. #==============================================================================
  133. end
  134.  
  135.  
  136. class Game_Actor
  137.   include Skill_updata
  138.   attr_accessor   :skill_use      # スキル使用回数
  139.   attr_accessor   :skill_level    # スキルレベル
  140.   attr_accessor   :skill_power    # スキル威力更新値
  141.   attr_accessor   :skill_sp_cost  # スキルSP消費更新値
  142.   attr_accessor   :skill_hit      # スキル命中率
  143.   attr_accessor   :skill_up       # レベルアップフラグ
  144.   attr_accessor   :skill_list     # スキルEXPリスト
  145.   alias skill_updata_init setup
  146.   def setup(actor_id)
  147.     skill_updata_init(actor_id)
  148.     @skill_use = []
  149.     @skill_level = []
  150.     @skill_power = []
  151.     @skill_sp_cost = []
  152.     @skill_hit = []
  153.     @skill_up = false
  154.     @skill_list = []
  155.     for id in 1...$data_skills.size
  156.       @skill_use[id] = 0
  157.       @skill_level[id] = 0
  158.       @skill_power[id] = $data_skills[id].power
  159.       @skill_sp_cost[id] = $data_skills[id].sp_cost
  160.       @skill_hit[id] = $data_skills[id].hit
  161.       @skill_list[id] = make_skill_list(id)
  162.     end
  163.   end
  164.  
  165.   #--------------------------------------------------------------------------
  166.   # ● スキルEXP 計算
  167.   #--------------------------------------------------------------------------
  168.   def make_skill_list(skill_id)
  169.     interval = S_INTER[skill_id]
  170.     up_interval = ( (interval != nil and interval[@actor_id] != nil) ? interval[@actor_id] : UPDATA_INTERVAL )
  171.     slope = S_SLOPE[skill_id]
  172.     up_slope = ( (slope != nil and slope[@actor_id] != nil) ? slope[@actor_id] : 1 )
  173.     limit = S_LEVEL[skill_id]
  174.     limit_lv = ( (limit != nil and limit[@actor_id] != nil) ? limit[@actor_id] : LEVEL_LIMIT )
  175.     list = []
  176.     list[0] = 0
  177.     for lv in 1...limit_lv+1
  178.       exp = 0
  179.       case SKILL_PATTERN
  180.       when 0
  181.         exp = up_interval * lv
  182.       when 1
  183.         exp = list[lv-1] + up_slope * lv + up_interval
  184.       end
  185.       list[lv] = exp.truncate
  186.     end
  187.     return list
  188.   end
  189. end
  190.  
  191.  
  192. class Game_Battler
  193.   include Skill_updata
  194.   #--------------------------------------------------------------------------
  195.   # ● スキルの効果適用
  196.   #     user  : スキルの使用者 (バトラー)
  197.   #     skill : スキル
  198.   #--------------------------------------------------------------------------
  199.   alias skill_effect_update skill_effect
  200.   def skill_effect(user, skill)
  201.     up_flag = false
  202.     if user.is_a?(Game_Actor) and ($scene.is_a?(Scene_Battle) or MENU_COUNT)
  203.       skill_update_main(user, skill)
  204.       skill_base = skill.dup
  205.       # 威力上昇
  206.       if SKILL_MIGHT_UP
  207.         skill.power = user.skill_power[skill.id]
  208.       end
  209.       # 命中率上昇
  210.       if SKILL_HIT_UP
  211.         skill.hit = user.skill_hit[skill.id]
  212.       end
  213.       # 属性変化
  214.       if ELEMENT_CHANGE and S_ELEMENT != []
  215.         ele1 = S_ELEMENT[skill.id]
  216.         if ele1 != nil and ele1[user.id] != nil
  217.           ele2 = ele1[user.id]
  218.           if ele2 != [] and ele2[user.skill_level[skill.id]] != nil
  219.             skill.element_set = ele2[user.skill_level[skill.id]]
  220.           end
  221.         end
  222.       end
  223.       # ステート変化
  224.       if STATE_CHANGE
  225.         if S_STATE_P != []
  226.           pst1 = S_STATE_P[skill.id]
  227.           if pst1 != nil and pst1[user.id] != nil
  228.             pst2 = pst1[user.id]
  229.             if pst2 != nil and pst2[user.skill_level[skill.id]] != nil
  230.               skill.plus_state_set = pst2[user.skill_level[skill.id]]
  231.               p skill.plus_state_set
  232.             end
  233.           end
  234.         end
  235.         if S_STATE_N != []
  236.           nst1 = S_STATE_N[skill.id]
  237.           if nst1 != nil and nst1[user.id] != nil
  238.             nst2 = nst1[user.id]
  239.             if nst1 != nil and nst2[user.skill_level[skill.id]] != nil
  240.               skill.minus_state_set = nst2[user.skill_level[skill.id]]
  241.             end
  242.           end
  243.         end
  244.       end
  245.       up_flag = true
  246.     end
  247.     ret = skill_effect_update(user, skill)    # 原物
  248.     if up_flag
  249.       skill = skill_base
  250.       # Miss時には後戻し
  251.       if self.damage == "Miss"
  252.         skill_use_recount(user, skill)
  253.       end
  254.     end
  255.     return ret
  256.   end
  257.  
  258.   #--------------------------------------------------------------------------
  259.   # ● スキルアップデータメイン
  260.   #--------------------------------------------------------------------------
  261.   def skill_update_main(actor, skill)
  262.     # スキル使用回数のカウント
  263.     actor.skill_use[skill.id] += 1
  264.     # リミット取得
  265.     limit = S_LEVEL[skill.id]
  266.     s_limit = ( (limit != nil and limit[actor.id] != nil) ? limit[actor.id] : LEVEL_LIMIT)
  267.     # 書き換え限界到達
  268.     if s_limit == false or actor.skill_level[skill.id] < s_limit
  269.       # レベルアップ間隔取得
  270.       interval = actor.skill_list[skill.id]
  271.       # 書き換え回数到達
  272.       if actor.skill_use[skill.id] == interval[actor.skill_level[skill.id]+1]
  273.         # スキルレベル上昇
  274.         actor.skill_level[skill.id] += 1
  275.         actor.skill_up = true
  276.         # 威力上昇 = 有効
  277.         if SKILL_MIGHT_UP
  278.           might = S_MIGHT[skill.id]
  279.           might_rate = ((might != nil and might[actor.id] != nil) ? might[actor.id] : MIGHT_RATE)
  280.           # 補正値更新
  281.           actor.skill_power[skill.id] += skill.power * might_rate / 100
  282.           actor.skill_power[skill.id] = actor.skill_power[skill.id].truncate
  283.         end
  284.         # SP消費減少 = 有効
  285.         if SP_COST_DOWN
  286.           cost = S_COST[skill.id]
  287.           cost_rate = ((cost != nil and cost[actor.id] != nil) ? cost[actor.id] : COST_RATE)
  288.           actor.skill_sp_cost[skill.id] -= skill.sp_cost * cost_rate / 100
  289.           actor.skill_sp_cost[skill.id] = actor.skill_sp_cost[skill.id].truncate
  290.           # SP消費が0以下はありえない
  291.           if actor.skill_sp_cost[skill.id] < 0
  292.             actor.skill_sp_cost[skill.id] = 0
  293.           end
  294.         end
  295.         # 命中率上昇 = 有効
  296.         if SKILL_HIT_UP
  297.           hit = S_HIT[skill.id]
  298.           hit_rate = ((hit != nil and hit[actor.id] != nil) ? hit[actor.id] : HIT_RATE)
  299.           actor.skill_hit[skill.id] += skill.hit * hit_rate / 100
  300.           actor.skill_hit[skill.id] = actor.skill_hit[skill.id].truncate
  301.           # 100以上はありえない
  302.           if actor.skill_hit[skill.id] > 100
  303.             actor.skill_hit[skill.id] = 100
  304.           end
  305.         end
  306.       end
  307.     end
  308.   end
  309.  
  310.   #--------------------------------------------------------------------------
  311.   # ● 再カウント
  312.   #--------------------------------------------------------------------------
  313.   def skill_use_recount(actor, skill)
  314.     if actor.skill_up
  315.       actor.skill_level[skill.id] -= 1
  316.       # 威力を再計算
  317.       if SKILL_MIGHT_UP
  318.         actor.skill_power[skill.id] = skill.power
  319.         might = S_MIGHT[skill.id]
  320.         might_rate = ((might != nil and might[actor.id] != nil) ? might[actor.id] : MIGHT_RATE)
  321.         for i in 1...actor.skill_level[skill.id]
  322.           actor.skill_power[skill.id] += skill.power * might_rate / 100
  323.           actor.skill_power[skill.id] = actor.skill_power[skill.id].truncate
  324.         end
  325.       end
  326.       # SP消費再計算
  327.       if SP_COST_DOWN
  328.         actor.skill_sp_cost[skill.id] = skill.sp_cost
  329.         cost = S_COST[skill.id]
  330.         cost_rate = ((cost != nil and cost[actor.id] != nil) ? cost[actor.id] : COST_RATE)
  331.         for i in 1...actor.skill_level[skill.id]
  332.           actor.skill_sp_cost[skill.id] -= skill.sp_cost * cost_rate / 100
  333.           actor.skill_sp_cost[skill.id] = actor.skill_sp_cost[skill.id].truncate
  334.         end
  335.         # SP消費が0以下はありえない
  336.         if actor.skill_sp_cost[skill.id] < 0
  337.           actor.skill_sp_cost[skill.id] = 0
  338.         end
  339.       end
  340.       # 命中率再計算
  341.       if SKILL_HIT_UP
  342.         actor.skill_hit[skill.id] = skill.hit
  343.         hit = S_HIT[skill.id]
  344.         hit_rate = ((hit != nil and hit[actor.id] != nil) ? hit[actor.id] : HIT_RATE)
  345.         for i in 1...actor.skill_level[skill.id]
  346.           actor.skill_hit[skill.id] += skill.hit * hit_rate / 100
  347.           actor.skill_hit[skill.id] = actor.skill_hit[skill.id].truncate
  348.         end
  349.         # 100以上はありえない
  350.         if actor.skill_hit[skill.id] > 100
  351.           actor.skill_hit[skill.id] = 100
  352.         end
  353.       end
  354.       actor.skill_up = false
  355.     end
  356.     actor.skill_use[skill.id] -= 1
  357.   end
  358. end
  359.  
  360. #==============================================================================
  361. # スキル成長によるアニメーション変化
  362. #==============================================================================
  363. class Scene_Battle
  364.   include Skill_updata
  365.   #--------------------------------------------------------------------------
  366.   # ● フレーム更新 (メインフェーズ ステップ 4 : 対象側アニメーション)
  367.   #--------------------------------------------------------------------------
  368.   alias update_phase4_step4_skillup update_phase4_step4
  369.   def update_phase4_step4
  370.     update_phase4_step4_skillup
  371.     if @active_battler.is_a?(Game_Actor) and USE_S_ANIME
  372.       s_anime = S_ANIME[@skill.id]
  373.       # 設定がないなら無視
  374.       if s_anime != nil and s_anime[@active_battler.id] != nil
  375.         s_anime_set = s_anime[@active_battler.id]
  376.         for i in 0...s_anime_set.size
  377.           s_anime_def = s_anime_set[i]
  378.           # 規定レベル以上
  379.           if @active_battler.skill_level[@skill.id] >= s_anime_def[0]
  380.             # 対象側アニメーション
  381.             for target in @target_battlers
  382.               target.animation_id = s_anime_def[1]
  383.             end
  384.           end
  385.         end
  386.       end
  387.     end
  388.   end
  389. end
  390.  
  391. #==============================================================================
  392. # 以下、レベルアップ表示部分(レベルアップ表示がいらないなら消してもOK)
  393. #==============================================================================
  394. class Scene_Battle
  395.   include Skill_updata
  396.   if SHOW_SKILL_LV_UP
  397.   #--------------------------------------------------------------------------
  398.   # ● フレーム更新 (メインフェーズ ステップ 2 : アクション開始)
  399.   #--------------------------------------------------------------------------
  400.   alias update_phase4_step2_skillup update_phase4_step2
  401.   def update_phase4_step2
  402.     if @active_battler.is_a?(Game_Actor)
  403.       @active_battler.skill_up = false
  404.     end
  405.     @skillup = false
  406.     update_phase4_step2_skillup   # 原物
  407.   end
  408.  
  409.   #--------------------------------------------------------------------------
  410.   # ● フレーム更新 (メインフェーズ ステップ 3 : 行動側アニメーション)
  411.   #--------------------------------------------------------------------------
  412.   alias update_phase4_step3_skillup update_phase4_step3
  413.   def update_phase4_step3
  414.     if @active_battler.is_a?(Game_Actor) and @active_battler.skill_up != false
  415.       @skillup = true
  416.       @skill_up_window = Window_Skillup.new(@active_battler)
  417.       if SKILLUP_SE != nil
  418.         Audio.se_play("Audio/SE/" + SKILLUP_SE)
  419.         sleep(0.1)
  420.       end
  421.     end
  422.     update_phase4_step3_skillup
  423.   end
  424.  
  425.   #--------------------------------------------------------------------------
  426.   # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
  427.   #--------------------------------------------------------------------------
  428.   alias update_phase4_step5_skillup update_phase4_step5
  429.   def update_phase4_step5
  430.     if @active_battler.is_a?(Game_Actor) and @skillup
  431.       @skill_up_window.dispose
  432.       @active_battler.skill_up = false
  433.       @skillup = false
  434.     end
  435.     update_phase4_step5_skillup     # 原物
  436.   end
  437.  
  438.   #--------------------------------------------------------------------------
  439.   # ● フレーム更新
  440.   #--------------------------------------------------------------------------
  441.   alias update_skillup update
  442.   def update
  443.     if @active_battler.is_a?(Game_Actor) and @active_battler.skill_up and @skillup
  444.       @skill_up_window.contents_opacity -= 4
  445.     end
  446.     update_skillup              # 原物
  447.   end
  448.   end # if SHOW_SKILL_LV_UP
  449. end
  450.  
  451. class Window_Skillup < Window_Base
  452.   #--------------------------------------------------------------------------
  453.   # ● オブジェクト初期化
  454.   #     actor : アクター
  455.   #--------------------------------------------------------------------------
  456.   def initialize(actor)
  457.     super(actor.screen_x-140, 260, 250, 64)
  458.     self.contents = Bitmap.new(width - 32, height - 32)
  459.     self.opacity = 0
  460.     self.contents.font.color = Color.new(255, 64, 0)
  461.     self.contents.draw_text(80, 0, 150, 32, "特技升级!")
  462.   end
  463. end
  464.  
  465.  
  466.  
  467. #==============================================================================
  468. # 以下、再定義部分を含む(SP消費減少の機能がいらないなら消してもOK)
  469. #==============================================================================
  470. class Window_Skill < Window_Selectable
  471.   #--------------------------------------------------------------------------
  472.   # ● 項目の描画
  473.   #     index : 項目番号
  474.   #--------------------------------------------------------------------------
  475.   def draw_item(index)
  476.     skill = @data[index]
  477.     if @actor.skill_can_use?(skill.id)
  478.       self.contents.font.color = normal_color
  479.     else
  480.       self.contents.font.color = disabled_color
  481.     end
  482.     x = 4 + index % 2 * (288 + 32)
  483.     y = index / 2 * 32
  484.     rect = Rect.new(x, y, self.width / @column_max - 32, 32)
  485.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  486.     bitmap = RPG::Cache.icon(skill.icon_name)
  487.     opacity = self.contents.font.color == normal_color ? 255 : 128
  488.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  489. #-修正-----
  490.     @actor.skill_level[skill.id] = 0 if @actor.skill_level[skill.id] == nil
  491.     name_level = skill.name + "(" + @actor.skill_level[skill.id].to_s + ")"
  492.     self.contents.draw_text(x + 28, y, 204, 32, name_level, 0)
  493.     @actor.skill_sp_cost[skill.id] = skill.sp_cost if @actor.skill_sp_cost[skill.id] == nil
  494.     self.contents.draw_text(x + 232, y, 48, 32, @actor.skill_sp_cost[skill.id].to_s, 2)
  495. #----------
  496.   end
  497. end
  498.  
  499. class Scene_Skill
  500.   #--------------------------------------------------------------------------
  501.   # ● フレーム更新 (ターゲットウィンドウがアクティブの場合)
  502.   #--------------------------------------------------------------------------
  503.   def update_target
  504.     # B ボタンが押された場合
  505.     if Input.trigger?(Input::B)
  506.       # キャンセル SE を演奏
  507.       $game_system.se_play($data_system.cancel_se)
  508.       # ターゲットウィンドウを消去
  509.       @skill_window.active = true
  510.       @target_window.visible = false
  511.       @target_window.active = false
  512.       return
  513.     end
  514.     # C ボタンが押された場合
  515.     if Input.trigger?(Input::C)
  516.       # SP 切れなどで使用できなくなった場合
  517.       unless @actor.skill_can_use?(@skill.id)
  518.         # ブザー SE を演奏
  519.         $game_system.se_play($data_system.buzzer_se)
  520.         return
  521.       end
  522.       # ターゲットが全体の場合
  523.       if @target_window.index == -1
  524.         # パーティ全体にスキルの使用効果を適用
  525.         used = false
  526.         for i in $game_party.actors
  527.           used |= i.skill_effect(@actor, @skill)
  528.         end
  529.       end
  530.       # ターゲットが使用者の場合
  531.       if @target_window.index <= -2
  532.         # ターゲットのアクターにスキルの使用効果を適用
  533.         target = $game_party.actors[@target_window.index + 10]
  534.         used = target.skill_effect(@actor, @skill)
  535.       end
  536.       # ターゲットが単体の場合
  537.       if @target_window.index >= 0
  538.         # ターゲットのアクターにスキルの使用効果を適用
  539.         target = $game_party.actors[@target_window.index]
  540.         used = target.skill_effect(@actor, @skill)
  541.       end
  542.       # スキルを使った場合
  543.       if used
  544.         # スキルの使用時 SE を演奏
  545.         $game_system.se_play(@skill.menu_se)
  546. #-----修正------------------------------------------------------
  547.         @actor.skill_sp_cost[@skill.id] = @skill.sp_cost if @actor.skill_sp_cost[@skill.id] == nil
  548.         # SP 消費
  549.         @actor.sp -= @actor.skill_sp_cost[@skill.id]
  550. #---------------------------------------------------------------
  551.         # 各ウィンドウの内容を再作成
  552.         @status_window.refresh
  553.         @skill_window.refresh
  554.         @target_window.refresh
  555.         # 全滅の場合
  556.         if $game_party.all_dead?
  557.           # ゲームオーバー画面に切り替え
  558.           $scene = Scene_Gameover.new
  559.           return
  560.         end
  561.         # コモンイベント ID が有効の場合
  562.         if @skill.common_event_id > 0
  563.           # コモンイベント呼び出し予約
  564.           $game_temp.common_event_id = @skill.common_event_id
  565.           # マップ画面に切り替え
  566.           $scene = Scene_Map.new
  567.           return
  568.         end
  569.       end
  570.       # スキルを使わなかった場合
  571.       unless used
  572.         # ブザー SE を演奏
  573.         $game_system.se_play($data_system.buzzer_se)
  574.       end
  575.       return
  576.     end
  577.   end
  578. end
  579.  
  580. class Scene_Battle
  581.   include Skill_updata
  582.   #--------------------------------------------------------------------------
  583.   # ● スキルアクション 結果作成
  584.   #--------------------------------------------------------------------------
  585.   alias make_skill_action_result_skill_update make_skill_action_result
  586.   def make_skill_action_result
  587.     make_skill_action_result_skill_update
  588.     # SP 消費
  589.     if SP_COST_DOWN and @active_battler.is_a?(Game_Actor)
  590.       @active_battler.sp += @skill.sp_cost
  591.       @active_battler.sp -= @active_battler.skill_sp_cost[@skill.id]
  592.     end
  593.   end
  594. end
  595.  
  596. class Game_Battler
  597.   #--------------------------------------------------------------------------
  598.   # ● スキルの使用可能判定
  599.   #     skill_id : スキル ID
  600.   #--------------------------------------------------------------------------
  601.   alias skill_update_can_use? skill_can_use?
  602.   def skill_can_use?(skill_id)
  603.     ret = skill_update_can_use?(skill_id)
  604.     if !ret and SP_COST_DOWN
  605.       # SP が足りない場合は使用不可となった?
  606.       if $data_skills[skill_id].sp_cost > self.sp
  607.         if self.is_a?(Game_Actor)
  608.           skill_sp_cost = self.skill_sp_cost[skill_id]
  609.           if skill_sp_cost < self.sp
  610.             ret = true
  611.           end
  612.         end
  613.       end
  614.     end
  615.     return ret
  616.   end
  617. end
  618.  
  619. #==============================================================================
  620. # イベントスクリプト操作
  621. #==============================================================================
  622. class Interpreter
  623.   include Skill_updata
  624.   #--------------------------------------------------------------------------
  625.   # ● スキルレベル設定(レベルセット)
  626.   #     actor_id  :   アクターID
  627.   #     skill_id  :   スキルID
  628.   #     level     :   設定レベル
  629.   #--------------------------------------------------------------------------
  630.   def set_skill_level(actor_id, skill_id, level)
  631.     actor = $game_actors[actor_id]
  632.     skill = $data_skills[skill_id]
  633.     # リミット取得
  634.     limit = S_LEVEL[skill_id]
  635.     s_limit = ( (limit != nil and limit[actor.id] != nil) ? limit[actor.id] : LEVEL_LIMIT)
  636.     if level > s_limit or level < 0
  637.       return
  638.     end
  639.     # レベル
  640.     actor.skill_level[skill.id] = level
  641.     # 使用回数
  642.     use_list = actor.skill_list[skill.id]
  643.     actor.skill_use[skill.id] = use_list[level]
  644.     # 威力を再計算
  645.     if SKILL_MIGHT_UP
  646.       actor.skill_power[skill.id] = skill.power
  647.       might = S_MIGHT[skill.id]
  648.       might_rate = ((might != nil and might[actor.id] != nil) ? might[actor.id] : MIGHT_RATE)
  649.       for i in 0...level
  650.         actor.skill_power[skill.id] += skill.power * might_rate / 100
  651.         actor.skill_power[skill.id] = actor.skill_power[skill.id].truncate
  652.       end
  653.     end
  654.     # SP消費再計算
  655.     if SP_COST_DOWN
  656.       actor.skill_sp_cost[skill.id] = skill.sp_cost
  657.       cost = S_COST[skill.id]
  658.       cost_rate = ((cost != nil and cost[actor.id] != nil) ? cost[actor.id] : COST_RATE)
  659.       for i in 0...level
  660.         actor.skill_sp_cost[skill.id] -= skill.sp_cost * cost_rate / 100
  661.         actor.skill_sp_cost[skill.id] = actor.skill_sp_cost[skill.id].truncate
  662.       end
  663.       # SP消費が0以下はありえない
  664.       if actor.skill_sp_cost[skill.id] < 0
  665.         actor.skill_sp_cost[skill.id] = 0
  666.       end
  667.     end
  668.     # 命中率再計算
  669.     if SKILL_HIT_UP
  670.       actor.skill_hit[skill.id] = skill.hit
  671.       hit = S_HIT[skill.id]
  672.       hit_rate = ((hit != nil and hit[actor.id] != nil) ? hit[actor.id] : HIT_RATE)
  673.       for i in 0...level
  674.         actor.skill_hit[skill.id] += skill.hit * hit_rate / 100
  675.         actor.skill_hit[skill.id] = actor.skill_hit[skill.id].truncate
  676.       end
  677.       # 100以上はありえない
  678.       if actor.skill_hit[skill.id] > 100
  679.         actor.skill_hit[skill.id] = 100
  680.       end
  681.     end
  682.   end
  683.  
  684.   #--------------------------------------------------------------------------
  685.   # ● スキルレベル設定(レベルアップ)
  686.   #     actor_id  :   アクターID
  687.   #     skill_id  :   スキルID
  688.   #--------------------------------------------------------------------------
  689.   def skill_level_up(actor_id, skill_id)
  690.     actor = $game_actors[actor_id]
  691.     set_skill_level(actor_id, skill_id, actor.skill_level[skill_id]+1)
  692.   end
  693.  
  694.   #--------------------------------------------------------------------------
  695.   # ● スキルレベル設定(レベルダウン)
  696.   #     actor_id  :   アクターID
  697.   #     skill_id  :   スキルID
  698.   #--------------------------------------------------------------------------
  699.   def skill_level_down(actor_id, skill_id)
  700.     actor = $game_actors[actor_id]
  701.     set_skill_level(actor_id, skill_id, actor.skill_level[skill_id]-1)
  702.   end
  703. end
  704.  
  705. #==============================================================================
  706. #==============================================================================
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
105
在线时间
2107 小时
注册时间
2011-2-23
帖子
83
7
 楼主| 发表于 2013-1-19 14:26:27 | 只看该作者
本帖最后由 君子兰 于 2013-1-19 15:32 编辑
羞射了 发表于 2013-1-19 14:39
我用了你给我那个脚本还是会显示对话框,于是我就去google找了一下,找到了这个脚本的最新版本4.4升级 ...


大人对不起,您给的那个范例测试时没有问题,
可是这个脚本升级版的好像改了很多东西,跟我原本用的那些脚本冲突很厉害。所以我只好按照您修改了的地方,把那些东西搬到原来那个4.4版的里面去。
因为我自己几乎不懂脚本,所以也不知道搬得到底行不行,可是进去之后其他特技都还可以用的,就是在您新加的那里设定了id的技能用了就会报错,您能看得出是什么原因吗?


自己改后的脚本我也贴出来吧,您能再帮忙看一下吗?谢谢您~
改的是129行,203行,275行,都是照搬的您原来改过的那些地方,就只有一个SkillUpdate,因为在原来的4.4版里面是用的Skill_updata,所以让我给改了……

ms
代码复制
  1. #==============================================================================
  2. # ■ スキルアップデート   Ver. 4.4.0                     
  3. #     スキルごとにレベル制を導入する
  4. #     戦闘中にスキルを使用するほど、威力上昇、消費SP減少、命中率上昇
  5.  
  6. module Skill_updata
  7.   S_MIGHT = []
  8.   S_COST = []
  9.   S_HIT = []
  10.   S_LEVEL = []
  11.   S_INTER = []
  12.   S_SLOPE = []
  13.   S_ANIME = []
  14.   S_ELEMENT = []
  15.   S_STATE_P = []
  16.   S_STATE_N = []
  17. #==============================================================================
  18. # □ 自定义内容
  19. #==============================================================================
  20.   # 威力上升使用true/false
  21.   SKILL_MIGHT_UP = true
  22.  
  23.   # SP消耗减少使用true/false
  24.   SP_COST_DOWN = true      
  25.  
  26.   # 命中率上升使用true/false
  27.   SKILL_HIT_UP = true      
  28.  
  29.   # 属性变化的使用true/false
  30.   ELEMENT_CHANGE = true   
  31.  
  32.   # 状态变化的使用true/false
  33.   STATE_CHANGE = true
  34.  
  35.   # 显示特技等级上升true/false
  36.   SHOW_SKILL_LV_UP = true
  37.  
  38.   # 等级上升的声效,不用的时候就=nil
  39.   SKILLUP_SE = "056-Right02"
  40.  
  41.   # 菜单使用计数true/false
  42.   MENU_COUNT = true
  43.  
  44.   # 升级所需次数
  45.   UPDATA_INTERVAL = 0
  46.  
  47.   # 等级上限
  48.   LEVEL_LIMIT = 30
  49.  
  50.   # 威力上升率(%%)
  51.   MIGHT_RATE = 5
  52.  
  53.   # SP消耗减少率(%)
  54.   COST_RATE = 1
  55.  
  56.   # 命中上升率(%)
  57.   HIT_RATE = 3
  58.  
  59.   #----------------------------------------------------------------------------
  60.   # 特别技能的详细设定,57和61号特技分别是十字斩和扫荡,大家最熟悉的两个招数
  61.   #----------------------------------------------------------------------------
  62.  
  63.   # 界限水平
  64.   # S_LEVEL[技艺ID]=[角色ID=>界限,…]
  65.   S_LEVEL[59] = {1=>18, 2=>12, 3=>5, 4=>12, 5=>12, 6=>12, 7=>12, 8=>12}
  66.   S_LEVEL[60] = {1=>12, 2=>18, 3=>15, 4=>12, 5=>12, 6=>12, 7=>12, 8=>12}
  67.  
  68.   # 技艺&actor威力上升率
  69.   # S_MIGHT[技艺ID]=[角色ID=>威力上升率,…]
  70.   S_MIGHT[59] = {1=>8, 2=>2, 3=>5, 4=>2, 5=>2, 6=>2, 7=>2, 8=>2}
  71.   S_MIGHT[60] = {1=>2, 2=>8, 3=>5, 4=>2, 5=>2, 6=>2, 7=>2, 8=>2}
  72.  
  73.   # 技艺&actorSP消费减少率
  74.   # S_COST[技艺ID]=[角色ID=>SP消费减少率,…]
  75.   S_COST[59] = {1=>8, 2=>2, 3=>5, 4=>2, 5=>2, 6=>2, 7=>2, 8=>2}
  76.   S_COST[60] = {1=>2, 2=>8, 3=>5, 4=>2, 5=>2, 6=>2, 7=>2, 8=>2}
  77.  
  78.   # 技艺&actor命中率
  79.   # S_HIT[技艺ID]=[角色ID=>命中上升率,…]
  80.   S_HIT[59] = {1=>2, 2=>1, 3=>1, 4=>1, 5=>1, 6=>1, 7=>1, 8=>1}
  81.   S_HIT[60] = {1=>1, 2=>2, 3=>1, 4=>1, 5=>1, 6=>1, 7=>1, 8=>1}
  82.  
  83.   #----------------------------------------------------------------------------
  84.   # 技能成长的具体调节
  85.   #----------------------------------------------------------------------------
  86.   # 技艺的增长图形
  87.   # 0:使用技艺一定回数的话提高水平
  88.   # 1:技艺一定回数+每水平の使用提高水平
  89.   SKILL_PATTERN = 1
  90.  
  91.   # 技艺水平上升间隔每(使用几回Lv提高)
  92.   #   ※没有设定的情况→基本设定被适应
  93.   # S_INTER[技艺ID]=[actorID=>上升间隔,…]
  94.   S_INTER[81] = {1=>5, 2=>8, 3=>8, 4=>8, 5=>8, 6=>8, 7=>8, 8=>8}
  95.  
  96.   # スキルレベル上昇の傾き(パターン1を使用する場合のみ必要)
  97.   #   ※設定がない場合は1となります。
  98.   # S_SLOPE[スキルID] = [アクターID=>上昇の傾き, …]
  99.   S_SLOPE[57] = {1=>5, 2=>8, 3=>8, 4=>8, 5=>8, 6=>8, 7=>8, 8=>8}
  100.  
  101.   #----------------------------------------------------------------------------
  102.   # 技艺增长的话使之动画变化
  103.   #  记录格式: S_ANIME[技艺ID] = [角色ID=>[[等级, 动画ID]], ・・・]
  104.   #----------------------------------------------------------------------------
  105.   # 实施技艺增长的动画变化?
  106.   USE_S_ANIME = true
  107.  
  108.   # 設定例
  109.   # 1号角色,57号特技,lv5,lv10动画变化
  110.   # 2号角色,Lv.11动画变化
  111.   S_ANIME[57] = {1=>[[5, 69], [10, 70]], 2=>[[11, 70]]}
  112.  
  113.   #----------------------------------------------------------------------------
  114.   # 属性変化/状态変化
  115.   #----------------------------------------------------------------------------
  116.   # 属性変化
  117.   # S_ELEMENT[技艺ID] = {角色ID=>{水平=>[属性ID,属性ID…]}, ・・・・}
  118.   S_ELEMENT[57] = {1=>{1=>[1], 2=>[2], 3=>[3]}, 2=>{1=>[2], 2=>[5]}}
  119.  
  120.   # 状态変化+
  121.   # S_STATE_P[技艺ID] = {角色ID=>{水平=>[属性ID,属性ID…]}, ・・・・}
  122.   S_STATE_P[57] = {1=>{1=>[1], 2=>[2], 3=>[3]}, 2=>{1=>[2], 2=>[5]}}
  123.  
  124.   # 状态変化-
  125.   # S_STATE_N[技艺ID] = {角色ID=>{水平=>[属性ID,属性ID…]}, ・・・・}
  126.   S_STATE_N[57] = {1=>{1=>[1], 2=>[2], 3=>[3]}, 2=>{1=>[2], 2=>[5]}}
  127.  
  128.  
  129.   #----------------------------------------------------------------------------
  130. # 羞射了新增定制功能
  131. #----------------------------------------------------------------------------
  132.   S_LEARN=[];S_CHANGE = []
  133.   # 领悟技能(true:有効 | false:無効)
  134.   SKILL_LEARN = true
  135.   # 替换技能并继承等级(true:有効 | false:無効)
  136.   SKILL_CHANGE = true
  137. # S_LEARN[技能ID] = {角色=>{技能等级=>[领悟技能ID…]}, ・・・・}
  138.   S_LEARN[57] = {1=>{2=>61}, 2=>{2=>8}}
  139. # S_CHANGE[技能ID] = {角色=>{技能等级=>[替换技能ID…]}, ・・・・}
  140.   S_CHANGE[61] = {1=>{2=>62}, 2=>{2=>7}}
  141.  
  142. #==============================================================================
  143. # □ 自定义内容终了
  144. #==============================================================================
  145. end
  146.  
  147.  
  148. class Game_Actor
  149.   include Skill_updata
  150.   attr_accessor   :skill_use      # スキル使用回数
  151.   attr_accessor   :skill_level    # スキルレベル
  152.   attr_accessor   :skill_power    # スキル威力更新値
  153.   attr_accessor   :skill_sp_cost  # スキルSP消費更新値
  154.   attr_accessor   :skill_hit      # スキル命中率
  155.   attr_accessor   :skill_up       # レベルアップフラグ
  156.   attr_accessor   :skill_list     # スキルEXPリスト
  157.   alias skill_updata_init setup
  158.   def setup(actor_id)
  159.     skill_updata_init(actor_id)
  160.     @skill_use = []
  161.     @skill_level = []
  162.     @skill_power = []
  163.     @skill_sp_cost = []
  164.     @skill_hit = []
  165.     @skill_up = false
  166.     @skill_list = []
  167.     for id in 1...$data_skills.size
  168.       @skill_use[id] = 0
  169.       @skill_level[id] = 0
  170.       @skill_power[id] = $data_skills[id].power
  171.       @skill_sp_cost[id] = $data_skills[id].sp_cost
  172.       @skill_hit[id] = $data_skills[id].hit
  173.       @skill_list[id] = make_skill_list(id)
  174.     end
  175.   end
  176.  
  177.   #--------------------------------------------------------------------------
  178.   # ● スキルEXP 計算
  179.   #--------------------------------------------------------------------------
  180.   def make_skill_list(skill_id)
  181.     interval = S_INTER[skill_id]
  182.     up_interval = ( (interval != nil and interval[@actor_id] != nil) ? interval[@actor_id] : UPDATA_INTERVAL )
  183.     slope = S_SLOPE[skill_id]
  184.     up_slope = ( (slope != nil and slope[@actor_id] != nil) ? slope[@actor_id] : 1 )
  185.     limit = S_LEVEL[skill_id]
  186.     limit_lv = ( (limit != nil and limit[@actor_id] != nil) ? limit[@actor_id] : LEVEL_LIMIT )
  187.     list = []
  188.     list[0] = 0
  189.     for lv in 1...limit_lv+1
  190.       exp = 0
  191.       case SKILL_PATTERN
  192.       when 0
  193.         exp = up_interval * lv
  194.       when 1
  195.         exp = list[lv-1] + up_slope * lv + up_interval
  196.       end
  197.       list[lv] = exp.truncate
  198.     end
  199.     return list
  200.   end
  201. end
  202.  
  203.   #--------------------------------------------------------------------------
  204.   # ● 羞射了领悟技能
  205.   #--------------------------------------------------------------------------
  206.   def skill_learn(skill, actor)
  207.     new_skill_id = S_LEARN[skill.id][actor.id][actor.skill[skill.id].level]
  208.     return get_data(new_skill_id, S_LEARN, skill.id, actor.id)
  209.   end
  210.   #--------------------------------------------------------------------------
  211.   # ● 羞射了替换技能
  212.   #--------------------------------------------------------------------------
  213.   def skill_change(skill, actor)
  214.     new_skill_id = S_CHANGE[skill.id][actor.id][actor.skill[skill.id].level]
  215.     return get_data(new_skill_id, S_CHANGE, skill.id, actor.id)
  216.   end
  217.  
  218.  
  219. class Game_Battler
  220.   include Skill_updata
  221.   #--------------------------------------------------------------------------
  222.   # ● スキルの効果適用
  223.   #     user  : スキルの使用者 (バトラー)
  224.   #     skill : スキル
  225.   #--------------------------------------------------------------------------
  226.   alias skill_effect_update skill_effect
  227.   def skill_effect(user, skill)
  228.     up_flag = false
  229.     if user.is_a?(Game_Actor) and ($scene.is_a?(Scene_Battle) or MENU_COUNT)
  230.       skill_update_main(user, skill)
  231.       skill_base = skill.dup
  232.       # 威力上昇
  233.       if SKILL_MIGHT_UP
  234.         skill.power = user.skill_power[skill.id]
  235.       end
  236.       # 命中率上昇
  237.       if SKILL_HIT_UP
  238.         skill.hit = user.skill_hit[skill.id]
  239.       end
  240.       # 属性変化
  241.       if ELEMENT_CHANGE and S_ELEMENT != []
  242.         ele1 = S_ELEMENT[skill.id]
  243.         if ele1 != nil and ele1[user.id] != nil
  244.           ele2 = ele1[user.id]
  245.           if ele2 != [] and ele2[user.skill_level[skill.id]] != nil
  246.             skill.element_set = ele2[user.skill_level[skill.id]]
  247.           end
  248.         end
  249.       end
  250.       # ステート変化
  251.       if STATE_CHANGE
  252.         if S_STATE_P != []
  253.           pst1 = S_STATE_P[skill.id]
  254.           if pst1 != nil and pst1[user.id] != nil
  255.             pst2 = pst1[user.id]
  256.             if pst2 != nil and pst2[user.skill_level[skill.id]] != nil
  257.               skill.plus_state_set = pst2[user.skill_level[skill.id]]
  258.               p skill.plus_state_set
  259.             end
  260.           end
  261.         end
  262.         if S_STATE_N != []
  263.           nst1 = S_STATE_N[skill.id]
  264.           if nst1 != nil and nst1[user.id] != nil
  265.             nst2 = nst1[user.id]
  266.             if nst1 != nil and nst2[user.skill_level[skill.id]] != nil
  267.               skill.minus_state_set = nst2[user.skill_level[skill.id]]
  268.             end
  269.           end
  270.         end
  271.       end
  272.       up_flag = true
  273.     end
  274.  
  275.        #羞射了执行
  276.     #===================================================================
  277.     if Skill_updata::SKILL_LEARN and Skill_updata::S_LEARN[skill.id] != nil
  278.       user.learn_skill(Skill_updata.skill_learn(skill, user))
  279.     end
  280.     if Skill_updata::SKILL_CHANGE and Skill_updata::S_CHANGE[skill.id] != nil
  281.       user.learn_skill(Skill_updata.skill_change(skill, user))
  282.       user.skill[Skill_updata.skill_change(skill, user)].level = user.skill[skill.id].level
  283.       user.forget_skill(skill.id)
  284.     end
  285.     #===================================================================
  286.     ret = skill_effect_update(user, skill)    # 原物
  287.     if up_flag
  288.       skill = skill_base
  289.       # Miss時には後戻し
  290.       if self.damage == "Miss"
  291.         skill_use_recount(user, skill)
  292.       end
  293.     end
  294.     return ret
  295.   end
  296.  
  297.   #--------------------------------------------------------------------------
  298.   # ● スキルアップデータメイン
  299.   #--------------------------------------------------------------------------
  300.   def skill_update_main(actor, skill)
  301.     # スキル使用回数のカウント
  302.     actor.skill_use[skill.id] += 1
  303.     # リミット取得
  304.     limit = S_LEVEL[skill.id]
  305.     s_limit = ( (limit != nil and limit[actor.id] != nil) ? limit[actor.id] : LEVEL_LIMIT)
  306.     # 書き換え限界到達
  307.     if s_limit == false or actor.skill_level[skill.id] < s_limit
  308.       # レベルアップ間隔取得
  309.       interval = actor.skill_list[skill.id]
  310.       # 書き換え回数到達
  311.       if actor.skill_use[skill.id] == interval[actor.skill_level[skill.id]+1]
  312.         # スキルレベル上昇
  313.         actor.skill_level[skill.id] += 1
  314.         actor.skill_up = true
  315.         # 威力上昇 = 有効
  316.         if SKILL_MIGHT_UP
  317.           might = S_MIGHT[skill.id]
  318.           might_rate = ((might != nil and might[actor.id] != nil) ? might[actor.id] : MIGHT_RATE)
  319.           # 補正値更新
  320.           actor.skill_power[skill.id] += skill.power * might_rate / 100
  321.           actor.skill_power[skill.id] = actor.skill_power[skill.id].truncate
  322.         end
  323.         # SP消費減少 = 有効
  324.         if SP_COST_DOWN
  325.           cost = S_COST[skill.id]
  326.           cost_rate = ((cost != nil and cost[actor.id] != nil) ? cost[actor.id] : COST_RATE)
  327.           actor.skill_sp_cost[skill.id] -= skill.sp_cost * cost_rate / 100
  328.           actor.skill_sp_cost[skill.id] = actor.skill_sp_cost[skill.id].truncate
  329.           # SP消費が0以下はありえない
  330.           if actor.skill_sp_cost[skill.id] < 0
  331.             actor.skill_sp_cost[skill.id] = 0
  332.           end
  333.         end
  334.         # 命中率上昇 = 有効
  335.         if SKILL_HIT_UP
  336.           hit = S_HIT[skill.id]
  337.           hit_rate = ((hit != nil and hit[actor.id] != nil) ? hit[actor.id] : HIT_RATE)
  338.           actor.skill_hit[skill.id] += skill.hit * hit_rate / 100
  339.           actor.skill_hit[skill.id] = actor.skill_hit[skill.id].truncate
  340.           # 100以上はありえない
  341.           if actor.skill_hit[skill.id] > 100
  342.             actor.skill_hit[skill.id] = 100
  343.           end
  344.         end
  345.       end
  346.     end
  347.   end
  348.  
  349.   #--------------------------------------------------------------------------
  350.   # ● 再カウント
  351.   #--------------------------------------------------------------------------
  352.   def skill_use_recount(actor, skill)
  353.     if actor.skill_up
  354.       actor.skill_level[skill.id] -= 1
  355.       # 威力を再計算
  356.       if SKILL_MIGHT_UP
  357.         actor.skill_power[skill.id] = skill.power
  358.         might = S_MIGHT[skill.id]
  359.         might_rate = ((might != nil and might[actor.id] != nil) ? might[actor.id] : MIGHT_RATE)
  360.         for i in 1...actor.skill_level[skill.id]
  361.           actor.skill_power[skill.id] += skill.power * might_rate / 100
  362.           actor.skill_power[skill.id] = actor.skill_power[skill.id].truncate
  363.         end
  364.       end
  365.       # SP消費再計算
  366.       if SP_COST_DOWN
  367.         actor.skill_sp_cost[skill.id] = skill.sp_cost
  368.         cost = S_COST[skill.id]
  369.         cost_rate = ((cost != nil and cost[actor.id] != nil) ? cost[actor.id] : COST_RATE)
  370.         for i in 1...actor.skill_level[skill.id]
  371.           actor.skill_sp_cost[skill.id] -= skill.sp_cost * cost_rate / 100
  372.           actor.skill_sp_cost[skill.id] = actor.skill_sp_cost[skill.id].truncate
  373.         end
  374.         # SP消費が0以下はありえない
  375.         if actor.skill_sp_cost[skill.id] < 0
  376.           actor.skill_sp_cost[skill.id] = 0
  377.         end
  378.       end
  379.       # 命中率再計算
  380.       if SKILL_HIT_UP
  381.         actor.skill_hit[skill.id] = skill.hit
  382.         hit = S_HIT[skill.id]
  383.         hit_rate = ((hit != nil and hit[actor.id] != nil) ? hit[actor.id] : HIT_RATE)
  384.         for i in 1...actor.skill_level[skill.id]
  385.           actor.skill_hit[skill.id] += skill.hit * hit_rate / 100
  386.           actor.skill_hit[skill.id] = actor.skill_hit[skill.id].truncate
  387.         end
  388.         # 100以上はありえない
  389.         if actor.skill_hit[skill.id] > 100
  390.           actor.skill_hit[skill.id] = 100
  391.         end
  392.       end
  393.       actor.skill_up = false
  394.     end
  395.     actor.skill_use[skill.id] -= 1
  396.   end
  397. end
  398.  
  399. #==============================================================================
  400. # スキル成長によるアニメーション変化
  401. #==============================================================================
  402. class Scene_Battle
  403.   include Skill_updata
  404.   #--------------------------------------------------------------------------
  405.   # ● フレーム更新 (メインフェーズ ステップ 4 : 対象側アニメーション)
  406.   #--------------------------------------------------------------------------
  407.   alias update_phase4_step4_skillup update_phase4_step4
  408.   def update_phase4_step4
  409.     update_phase4_step4_skillup
  410.     if @active_battler.is_a?(Game_Actor) and USE_S_ANIME
  411.       s_anime = S_ANIME[@skill.id]
  412.       # 設定がないなら無視
  413.       if s_anime != nil and s_anime[@active_battler.id] != nil
  414.         s_anime_set = s_anime[@active_battler.id]
  415.         for i in 0...s_anime_set.size
  416.           s_anime_def = s_anime_set[i]
  417.           # 規定レベル以上
  418.           if @active_battler.skill_level[@skill.id] >= s_anime_def[0]
  419.             # 対象側アニメーション
  420.             for target in @target_battlers
  421.               target.animation_id = s_anime_def[1]
  422.             end
  423.           end
  424.         end
  425.       end
  426.     end
  427.   end
  428. end
  429.  
  430. #==============================================================================
  431. # 以下、レベルアップ表示部分(レベルアップ表示がいらないなら消してもOK)
  432. #==============================================================================
  433. class Scene_Battle
  434.   include Skill_updata
  435.   if SHOW_SKILL_LV_UP
  436.   #--------------------------------------------------------------------------
  437.   # ● フレーム更新 (メインフェーズ ステップ 2 : アクション開始)
  438.   #--------------------------------------------------------------------------
  439.   alias update_phase4_step2_skillup update_phase4_step2
  440.   def update_phase4_step2
  441.     if @active_battler.is_a?(Game_Actor)
  442.       @active_battler.skill_up = false
  443.     end
  444.     @skillup = false
  445.     update_phase4_step2_skillup   # 原物
  446.   end
  447.  
  448.   #--------------------------------------------------------------------------
  449.   # ● フレーム更新 (メインフェーズ ステップ 3 : 行動側アニメーション)
  450.   #--------------------------------------------------------------------------
  451.   alias update_phase4_step3_skillup update_phase4_step3
  452.   def update_phase4_step3
  453.     if @active_battler.is_a?(Game_Actor) and @active_battler.skill_up != false
  454.       @skillup = true
  455.       @skill_up_window = Window_Skillup.new(@active_battler)
  456.       if SKILLUP_SE != nil
  457.         Audio.se_play("Audio/SE/" + SKILLUP_SE)
  458.         sleep(0.1)
  459.       end
  460.     end
  461.     update_phase4_step3_skillup
  462.   end
  463.  
  464.   #--------------------------------------------------------------------------
  465.   # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
  466.   #--------------------------------------------------------------------------
  467.   alias update_phase4_step5_skillup update_phase4_step5
  468.   def update_phase4_step5
  469.     if @active_battler.is_a?(Game_Actor) and @skillup
  470.       @skill_up_window.dispose
  471.       @active_battler.skill_up = false
  472.       @skillup = false
  473.     end
  474.     update_phase4_step5_skillup     # 原物
  475.   end
  476.  
  477.   #--------------------------------------------------------------------------
  478.   # ● フレーム更新
  479.   #--------------------------------------------------------------------------
  480.   alias update_skillup update
  481.   def update
  482.     if @active_battler.is_a?(Game_Actor) and @active_battler.skill_up and @skillup
  483.       @skill_up_window.contents_opacity -= 4
  484.     end
  485.     update_skillup              # 原物
  486.   end
  487.   end # if SHOW_SKILL_LV_UP
  488. end
  489.  
  490. class Window_Skillup < Window_Base
  491.   #--------------------------------------------------------------------------
  492.   # ● オブジェクト初期化
  493.   #     actor : アクター
  494.   #--------------------------------------------------------------------------
  495.   def initialize(actor)
  496.     super(actor.screen_x-140, 260, 250, 64)
  497.     self.contents = Bitmap.new(width - 32, height - 32)
  498.     self.opacity = 0
  499.  
  500.     self.contents.font.color = Color.new(255, 64, 0)
  501.    self.contents.draw_text(80, 0, 150, 32, "特级升级!")
  502.   end
  503. end
  504.  
  505.  
  506.  
  507. #==============================================================================
  508. # 以下、再定義部分を含む(SP消費減少の機能がいらないなら消してもOK)
  509. #==============================================================================
  510. class Window_Skill < Window_Selectable
  511.   #--------------------------------------------------------------------------
  512.   # ● 項目の描画
  513.   #     index : 項目番号
  514.   #--------------------------------------------------------------------------
  515.   def draw_item(index)
  516.     skill = @data[index]
  517.     if @actor.skill_can_use?(skill.id)
  518.       self.contents.font.color = normal_color
  519.     else
  520.       self.contents.font.color = disabled_color
  521.     end
  522.     x = 4 + index % 2 * (288 + 32)
  523.     y = index / 2 * 32
  524.     rect = Rect.new(x, y, self.width / @column_max - 32, 32)
  525.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  526.     bitmap = RPG::Cache.icon(skill.icon_name)
  527.     opacity = self.contents.font.color == normal_color ? 255 : 128
  528.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  529. #-修正-----
  530.     @actor.skill_level[skill.id] = 0 if @actor.skill_level[skill.id] == nil
  531.     name_level = skill.name + "(" + @actor.skill_level[skill.id].to_s + ")"
  532.     self.contents.draw_text(x + 28, y, 204, 32, name_level, 0)
  533.     @actor.skill_sp_cost[skill.id] = skill.sp_cost if @actor.skill_sp_cost[skill.id] == nil
  534.     self.contents.draw_text(x + 232, y, 48, 32, @actor.skill_sp_cost[skill.id].to_s, 2)
  535. #----------
  536.   end
  537. end
  538.  
  539. class Scene_Skill
  540.   #--------------------------------------------------------------------------
  541.   # ● フレーム更新 (ターゲットウィンドウがアクティブの場合)
  542.   #--------------------------------------------------------------------------
  543.   def update_target
  544.     # B ボタンが押された場合
  545.     if Input.trigger?(Input::B)
  546.       # キャンセル SE を演奏
  547.       $game_system.se_play($data_system.cancel_se)
  548.       # ターゲットウィンドウを消去
  549.       @skill_window.active = true
  550.       @target_window.visible = false
  551.       @target_window.active = false
  552.       return
  553.     end
  554.     # C ボタンが押された場合
  555.     if Input.trigger?(Input::C)
  556.       # SP 切れなどで使用できなくなった場合
  557.       unless @actor.skill_can_use?(@skill.id)
  558.         # ブザー SE を演奏
  559.         $game_system.se_play($data_system.buzzer_se)
  560.         return
  561.       end
  562.       # ターゲットが全体の場合
  563.       if @target_window.index == -1
  564.         # パーティ全体にスキルの使用効果を適用
  565.         used = false
  566.         for i in $game_party.actors
  567.           used |= i.skill_effect(@actor, @skill)
  568.         end
  569.       end
  570.       # ターゲットが使用者の場合
  571.       if @target_window.index <= -2
  572.         # ターゲットのアクターにスキルの使用効果を適用
  573.         target = $game_party.actors[@target_window.index + 10]
  574.         used = target.skill_effect(@actor, @skill)
  575.       end
  576.       # ターゲットが単体の場合
  577.       if @target_window.index >= 0
  578.         # ターゲットのアクターにスキルの使用効果を適用
  579.         target = $game_party.actors[@target_window.index]
  580.         used = target.skill_effect(@actor, @skill)
  581.       end
  582.       # スキルを使った場合
  583.       if used
  584.         # スキルの使用時 SE を演奏
  585.         $game_system.se_play(@skill.menu_se)
  586. #-----修正------------------------------------------------------
  587.         @actor.skill_sp_cost[@skill.id] = @skill.sp_cost if @actor.skill_sp_cost[@skill.id] == nil
  588.         # SP 消費
  589.         @actor.sp -= @actor.skill_sp_cost[@skill.id]
  590. #---------------------------------------------------------------
  591.         # 各ウィンドウの内容を再作成
  592.         @status_window.refresh
  593.         @skill_window.refresh
  594.         @target_window.refresh
  595.         # 全滅の場合
  596.         if $game_party.all_dead?
  597.           # ゲームオーバー画面に切り替え
  598.           $scene = Scene_Gameover.new
  599.           return
  600.         end
  601.         # コモンイベント ID が有効の場合
  602.         if @skill.common_event_id > 0
  603.           # コモンイベント呼び出し予約
  604.           $game_temp.common_event_id = @skill.common_event_id
  605.           # マップ画面に切り替え
  606.           $scene = Scene_Map.new
  607.           return
  608.         end
  609.       end
  610.       # スキルを使わなかった場合
  611.       unless used
  612.         # ブザー SE を演奏
  613.         $game_system.se_play($data_system.buzzer_se)
  614.       end
  615.       return
  616.     end
  617.   end
  618. end
  619.  
  620. class Scene_Battle
  621.   include Skill_updata
  622.   #--------------------------------------------------------------------------
  623.   # ● スキルアクション 結果作成
  624.   #--------------------------------------------------------------------------
  625.   alias make_skill_action_result_skill_update make_skill_action_result
  626.   def make_skill_action_result
  627.     make_skill_action_result_skill_update
  628.     # SP 消費
  629.     if SP_COST_DOWN and @active_battler.is_a?(Game_Actor)
  630.       @active_battler.sp += @skill.sp_cost
  631.       @active_battler.sp -= @active_battler.skill_sp_cost[@skill.id]
  632.     end
  633.   end
  634. end
  635.  
  636. class Game_Battler
  637.   #--------------------------------------------------------------------------
  638.   # ● スキルの使用可能判定
  639.   #     skill_id : スキル ID
  640.   #--------------------------------------------------------------------------
  641.   alias skill_update_can_use? skill_can_use?
  642.   def skill_can_use?(skill_id)
  643.     ret = skill_update_can_use?(skill_id)
  644.     if !ret and SP_COST_DOWN
  645.       # SP が足りない場合は使用不可となった?
  646.       if $data_skills[skill_id].sp_cost > self.sp
  647.         if self.is_a?(Game_Actor)
  648.           skill_sp_cost = self.skill_sp_cost[skill_id]
  649.           if skill_sp_cost < self.sp
  650.             ret = true
  651.           end
  652.         end
  653.       end
  654.     end
  655.     return ret
  656.   end
  657. end
  658.  
  659. #==============================================================================
  660. # イベントスクリプト操作
  661. #==============================================================================
  662. class Interpreter
  663.   include Skill_updata
  664.   #--------------------------------------------------------------------------
  665.   # ● スキルレベル設定(レベルセット)
  666.   #     actor_id  :   アクターID
  667.   #     skill_id  :   スキルID
  668.   #     level     :   設定レベル
  669.   #--------------------------------------------------------------------------
  670.   def set_skill_level(actor_id, skill_id, level)
  671.     actor = $game_actors[actor_id]
  672.     skill = $data_skills[skill_id]
  673.     # リミット取得
  674.     limit = S_LEVEL[skill_id]
  675.     s_limit = ( (limit != nil and limit[actor.id] != nil) ? limit[actor.id] : LEVEL_LIMIT)
  676.     if level > s_limit or level < 0
  677.       return
  678.     end
  679.     # レベル
  680.     actor.skill_level[skill.id] = level
  681.     # 使用回数
  682.     use_list = actor.skill_list[skill.id]
  683.     actor.skill_use[skill.id] = use_list[level]
  684.     # 威力を再計算
  685.     if SKILL_MIGHT_UP
  686.       actor.skill_power[skill.id] = skill.power
  687.       might = S_MIGHT[skill.id]
  688.       might_rate = ((might != nil and might[actor.id] != nil) ? might[actor.id] : MIGHT_RATE)
  689.       for i in 0...level
  690.         actor.skill_power[skill.id] += skill.power * might_rate / 100
  691.         actor.skill_power[skill.id] = actor.skill_power[skill.id].truncate
  692.       end
  693.     end
  694.     # SP消費再計算
  695.     if SP_COST_DOWN
  696.       actor.skill_sp_cost[skill.id] = skill.sp_cost
  697.       cost = S_COST[skill.id]
  698.       cost_rate = ((cost != nil and cost[actor.id] != nil) ? cost[actor.id] : COST_RATE)
  699.       for i in 0...level
  700.         actor.skill_sp_cost[skill.id] -= skill.sp_cost * cost_rate / 100
  701.         actor.skill_sp_cost[skill.id] = actor.skill_sp_cost[skill.id].truncate
  702.       end
  703.       # SP消費が0以下はありえない
  704.       if actor.skill_sp_cost[skill.id] < 0
  705.         actor.skill_sp_cost[skill.id] = 0
  706.       end
  707.     end
  708.     # 命中率再計算
  709.     if SKILL_HIT_UP
  710.       actor.skill_hit[skill.id] = skill.hit
  711.       hit = S_HIT[skill.id]
  712.       hit_rate = ((hit != nil and hit[actor.id] != nil) ? hit[actor.id] : HIT_RATE)
  713.       for i in 0...level
  714.         actor.skill_hit[skill.id] += skill.hit * hit_rate / 100
  715.         actor.skill_hit[skill.id] = actor.skill_hit[skill.id].truncate
  716.       end
  717.       # 100以上はありえない
  718.       if actor.skill_hit[skill.id] > 100
  719.         actor.skill_hit[skill.id] = 100
  720.       end
  721.     end
  722.   end
  723.  
  724.   #--------------------------------------------------------------------------
  725.   # ● スキルレベル設定(レベルアップ)
  726.   #     actor_id  :   アクターID
  727.   #     skill_id  :   スキルID
  728.   #--------------------------------------------------------------------------
  729.   def skill_level_up(actor_id, skill_id)
  730.     actor = $game_actors[actor_id]
  731.     set_skill_level(actor_id, skill_id, actor.skill_level[skill_id]+1)
  732.   end
  733.  
  734.   #--------------------------------------------------------------------------
  735.   # ● スキルレベル設定(レベルダウン)
  736.   #     actor_id  :   アクターID
  737.   #     skill_id  :   スキルID
  738.   #--------------------------------------------------------------------------
  739.   def skill_level_down(actor_id, skill_id)
  740.     actor = $game_actors[actor_id]
  741.     set_skill_level(actor_id, skill_id, actor.skill_level[skill_id]-1)
  742.   end
  743. end
  744.  
  745. #==============================================================================
  746. #==============================================================================


回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
47
在线时间
976 小时
注册时间
2011-4-30
帖子
860
8
发表于 2013-1-19 15:48:50 | 只看该作者
君子兰 发表于 2013-1-19 14:26
大人对不起,您给的那个范例测试时没有问题,
可是这个脚本升级版的好像改了很多东西,跟我原本用的那些 ...

Project4.rar (195.83 KB, 下载次数: 98)

这个是直接在你给我的未修改版本上改的,几个要点说一下。

首先首次技能升级会出现个提示框,这个不知道怎么回事,懒得看,不过第二次升级就不出现了,不知道你这边会不会出来。

这个技能升级与5.2版区别在于,5.2版本会攻击后补上本该学到的技能,而这个版本必须在技能升级时才会领悟,错过了就学不了了。

比如假设扫荡lv1时候可以学火炎,那么领悟扫荡删除十字斩后,扫荡是继承的十字斩等级,比如说2,那么之前设置的lv1领悟火炎就无法学会了。
湿滑落式骑!
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
105
在线时间
2107 小时
注册时间
2011-2-23
帖子
83
9
 楼主| 发表于 2013-1-19 16:10:15 | 只看该作者
本帖最后由 君子兰 于 2013-1-19 17:12 编辑
羞射了 发表于 2013-1-19 16:48
这个是直接在你给我的未修改版本上改的,几个要点说一下。

首先首次技能升级会出现个提示框,这个不知 ...


这个在我这边完全可以,也不会出现提示框,真的是太感谢您了!
刚刚看了很久新版和旧版的对比,真的增加了很多东西,自己乱改看来真的是不行啊!orz
不过想想还是认可了您之前给的那个新版的答案。如果万一还有其他有这方面需要的人搜到这里的话,在没有冲突的情况下,还是用新一点的版本会比较好吧~~
总之谢谢您了!

点评

啊,不好意思,我看错了,把你看成我了……==b  发表于 2013-1-19 16:23
是的,真的谢谢您啦~~~  发表于 2013-1-19 16:22
哈哈,你也是好心人~  发表于 2013-1-19 16:18
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

GMT+8, 2024-4-30 05:50

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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