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

Project1

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

[已经过期] 菜单中执行技能的问题

 关闭 [复制链接]

Lv2.观梦者

梦石
0
星屑
265
在线时间
286 小时
注册时间
2009-11-7
帖子
55

开拓者

跳转到指定楼层
1
发表于 2011-11-3 19:51:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 好记的名字 于 2011-11-3 21:32 编辑

如何实现一个例如:
在菜单-特技中选中十字斩(也就是57号特技)并确定 然后5号变量就变成了57
目前这样构思:把数据库-特技-57:十字斩 设置个公共事件 比如公共事件2
然后公共事件2里设置:
脚本:$game_variables[5] = 什么脚本
这个“什么脚本”怎么写

Lv1.梦旅人

梦石
0
星屑
50
在线时间
498 小时
注册时间
2011-5-23
帖子
73
2
发表于 2011-11-3 21:00:33 | 只看该作者
lz我没听懂你的意思,不过我知道一些技能的脚本语言
特技设定:
系统对象: $data_skills
一般实例: $data_skills[编号]
警告: 游戏中的特技都是通过编号作为惟一的标记的,不论是战斗中还是战斗外,传递计算的都是以编号作为识别。其余属性,例如特技的名字、伤害判断等都是从$data_skills中随用随取,所以对$data_skills的修改将会对游戏系统产生重大影响,如果打算进行永久性的运行时修改,请慎重考虑。

SP消费: .sp_cost = 整数 注意这个设定可以让sp消费为负值
威力: .power = 数值
攻击力F: .atk_f = 数值
回避力F: .eva_f = 数值
防御力F: .pdef_f = 数值
魔防力F: .mdef_f = 数值
力F: .str_f = 数值
巧F: .dex_f = 数值
速F: .agi_f = 数值
魔F: .int_f = 数值
lz试试按自己想法去做吧
Dream
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
265
在线时间
286 小时
注册时间
2009-11-7
帖子
55

开拓者

3
 楼主| 发表于 2011-11-3 21:06:46 | 只看该作者
zjd540921697 发表于 2011-11-3 21:00
lz我没听懂你的意思,不过我知道一些技能的脚本语言
特技设定:
系统对象: $data_skills

我的意思是 菜单中执行技能 使XXX变量值=该技能的技能编号
比如编号57的十字斩 在菜单中执行 然后某个XXX变量就变成57了
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
498 小时
注册时间
2011-5-23
帖子
73
4
发表于 2011-11-3 21:13:56 | 只看该作者
楼主的意思是技能升级吧
  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 =nil
  44.   
  45.   # 菜单使用计数true/false
  46.   MENU_COUNT = true

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

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

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

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

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

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

  678. #==================================================================
  679. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  680. #==================================================================
复制代码
  1. #-------------------------------------------------------------
  2.   # 特别技能的详细设定,57和61号特技分别是十字斩和扫荡,大家最熟悉的两个招数
  3.   #----------------------------------------------------------------
  4.   
  5.   # 界限水平
  6.   # S_LEVEL[技艺ID]=[角色ID=>界限,…]
  7.   S_LEVEL[57] = {1=>18, 2=>12, 3=>5, 4=>12, 5=>12, 6=>12, 7=>12, 8=>12}
  8.   S_LEVEL[61] = {1=>12, 2=>18, 3=>15, 4=>12, 5=>12, 6=>12, 7=>12, 8=>12}
  9.      
  10.   # 技艺&actor威力上升率
  11.   # S_MIGHT[技艺ID]=[角色ID=>威力上升率,…]
  12.   S_MIGHT[57] = {1=>8, 2=>2, 3=>5, 4=>2, 5=>2, 6=>2, 7=>2, 8=>2}
  13.   S_MIGHT[61] = {1=>2, 2=>8, 3=>5, 4=>2, 5=>2, 6=>2, 7=>2, 8=>2}

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

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

  22.   #-----------------------------------------------------------------
  23.   # 技能成长的具体调节
  24.   #-----------------------------------------------------------------
  25.   # 技艺的增长图形
  26.   # 0:使用技艺一定回数的话提高水平
  27.   # 1:技艺一定回数+每水平の使用提高水平
  28.   SKILL_PATTERN = 0
  29.   
  30.   # 技艺水平上升间隔每(使用几回Lv提高)
  31.   #   ※没有设定的情况→基本设定被适应
  32.   # S_INTER[技艺ID]=[actorID=>上升间隔,…]
  33.   S_INTER[57] = {1=>5, 2=>8, 3=>8, 4=>8, 5=>8, 6=>8, 7=>8, 8=>8}
  34.   
  35.   # スキルレベル上昇の傾き(パターン1を使用する場合のみ必要)
  36.   #   ※設定がない場合は1となります。
  37.   # S_SLOPE[スキルID] = [アクターID=>上昇の傾き, …]
  38.   S_SLOPE[57] = {1=>5, 2=>8, 3=>8, 4=>8, 5=>8, 6=>8, 7=>8, 8=>8}

  39.   #-------------------------------------------------------------
  40.   # 技艺增长的话使之动画变化
  41.   #  记录格式: S_ANIME[技艺ID] = [角色ID=>[[等级, 动画ID]], ・・・]
  42.   #------------------------------------------------------------
  43.   # 实施技艺增长的动画变化?
  44.   USE_S_ANIME = true
  45.   
  46.   # 設定例
  47.   # 1号角色,57号特技,lv5,lv10动画变化
  48.   # 2号角色,Lv.11动画变化
  49.   S_ANIME[57] = {1=>[[5, 69], [10, 70]], 2=>[[11, 70]]}

  50.   #-------------------------------------------------------------------
  51.   # 属性変化/状态変化
  52.   #------------------------------------------------------------------
  53.   # 属性変化
  54.   # S_ELEMENT[技艺ID] = {角色ID=>{水平=>[属性ID,属性ID…]}, ・・・・}
  55.   S_ELEMENT[57] = {1=>{1=>[1], 2=>[2], 3=>[3]}, 2=>{1=>[2], 2=>[5]}}

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

  59.   # 状态変化-
  60.   # S_STATE_N[技艺ID] = {角色ID=>{水平=>[属性ID,属性ID…]}, ・・・・}
  61.   S_STATE_N[57] = {1=>{1=>[1], 2=>[2], 3=>[3]}, 2=>{1=>[2], 2=>[5]}}
复制代码
这一段意思差不多

点评

不是技能等级。。  发表于 2011-11-3 21:27
Dream
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
157 小时
注册时间
2011-7-17
帖子
128
5
发表于 2011-11-3 21:16:03 | 只看该作者
可以直接用装备界面,把名字改一下
在那遥远的地方——有一只小猫
这里没有字→
相信我吧。
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
265
在线时间
286 小时
注册时间
2009-11-7
帖子
55

开拓者

6
 楼主| 发表于 2011-11-3 21:27:21 | 只看该作者
竹轩轩 发表于 2011-11-3 21:16
可以直接用装备界面,把名字改一下

。。。试过 但是弊端很多 而且装备界面也需要其他装备用
回复

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
8 小时
注册时间
2009-7-9
帖子
57
7
发表于 2011-11-3 21:33:41 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
157 小时
注册时间
2011-7-17
帖子
128
8
发表于 2011-11-3 21:38:36 | 只看该作者
可以:特技,公共事件,XX变量=57

点评

hcm
这应是最好的方法了,蛮多人对着大堆脚本欲哭无泪的。  发表于 2011-11-3 23:08
额 也想过 不过一个技能用一个公共事件麻烦又浪费 不过还是谢谢了  发表于 2011-11-3 21:41
在那遥远的地方——有一只小猫
这里没有字→
相信我吧。
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-27 17:37

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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