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

Project1

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

[已经解决] 脚本冲突........

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
60 小时
注册时间
2008-8-27
帖子
531
跳转到指定楼层
1
发表于 2009-7-22 14:22:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 angelwangm 于 2009-7-22 14:26 编辑

这个战斗公式的脚本和技能升级的脚本冲突了,两个效果只能出来一个
求救........
  1. #============================================================================



  2. #



  3. # ●●作为XP的整核心战斗公式重新整理,很多东西不再是默认的使用前请看懂说明



  4. #   否则会莫名奇妙



  5. #   该脚本与装备扩充,不兼容不过稍作协调即可,另外属性扩从也需要协调



  6. #   



  7. #  ---------------------------------------------------------------------------



  8. #  新的装备属性设定







  9. #    ●武器的会心几率 = 武器的灵巧



  10. #    ●武器命中修正 = 武器的力量







  11. #    ●实际攻击 = 力量 + 装备攻击



  12. #  



  13. #  那么所有的防具的力量都改成攻击力了







  14. #    考虑到有些人希望升级有防御力



  15. #    为了方便设定,把灵巧改为防御(魔法防御的话,不同人的意见很不同,把魔力基础跟魔防基础)







  16. #    ●实际防御 = 基础灵巧 + 装备防御力



  17. #    ●实际魔防 = 基础魔力 + 装备魔防 (基础就是本身的,不加装备的属性)







  18. #  如果还需要防具如首饰也有会心几率的话



  19. #    ●防具的会心几率 = 防具的灵巧







  20. #  关于怪物的相关属性,由于怪物没有装备,所以就设为默认



  21. #    ●怪物的:命中 = 速度 + 力量,会心率 = 灵巧,躲闪 = 速度 + 回避修正(力量是干什么的?)







  22. #  最后战斗公式



  23. #     ●攻击力 = 攻击 + 力量







  24. #     ●伤害 = 攻击力 - 防御力







  25. #     ●会心几率 = 会心几率(怪物,主角不一样啊)



  26. #     ●命中率% = 武器命中 + 速度 - 敌方速度 -敌方回避修正



  27. #-------------------------------------------------------------------------------



  28. #  新的技能属性设定



  29. #    技能灵巧为技能会心率



  30. #      关于技能命中你可以做如下设定;



  31. #        当技能命中设定为0时,该技能没有自身命中,其命中与主角普通攻击时命中相同



  32. #  最终技能公式



  33. #     ●伤害  = 技能威力 + (主角能力)* 相关度 - 敌人守备 * 相关度



  34. #     ●会心率 = 技能灵巧



  35. #----------------暂时这样吧,大概跟火纹相似--------------------------------------------------------











  36. class Game_Actor < Game_Battler



  37. #--------是否为主角----------------------------------------------------  



  38.   def actor?



  39.     true



  40.   end



  41.   #--------------------------------------------------------------------------



  42.   # ● 获取基本力量



  43.   #--------------------------------------------------------------------------



  44.   def base_str



  45.     n = $data_actors[@actor_id].parameters[2, @level]



  46.     #weapon = $data_weapons[@weapon_id]



  47.     #armor1 = $data_armors[@armor1_id]



  48.     #armor2 = $data_armors[@armor2_id]



  49.     #armor3 = $data_armors[@armor3_id]



  50.     #armor4 = $data_armors[@armor4_id]



  51.     #n += weapon != nil ? weapon.str_plus : 0



  52.     #n += armor1 != nil ? armor1.str_plus : 0



  53.     #n += armor2 != nil ? armor2.str_plus : 0



  54.     #n += armor3 != nil ? armor3.str_plus : 0



  55.     #n += armor4 != nil ? armor4.str_plus : 0



  56.     return [[n, 1].max, 999].min



  57.   end



  58.   #--------------------------------------------------------------------------



  59.   # ● 获取基本灵巧 — 这个是会心率啦!



  60.   #--------------------------------------------------------------------------



  61.   def base_dex



  62.     #n = $data_actors[@actor_id].parameters[3, @level]



  63.     weapon = $data_weapons[@weapon_id]



  64.     armor1 = $data_armors[@armor1_id]



  65.     armor2 = $data_armors[@armor2_id]



  66.     armor3 = $data_armors[@armor3_id]



  67.     armor4 = $data_armors[@armor4_id]



  68.     armor5 = $data_armors[@armor5_id] if @armor5_id != nil



  69.     armor6 = $data_armors[@armor6_id] if @armor6_id != nil



  70.     n = weapon != nil ? weapon.dex_plus : 0



  71.     n += armor1 != nil ? armor1.dex_plus : 0



  72.     n += armor2 != nil ? armor2.dex_plus : 0



  73.     n += armor3 != nil ? armor3.dex_plus : 0



  74.     n += armor4 != nil ? armor4.dex_plus : 0



  75.     n += armor5 != nil ? armor5.dex_plus : 0



  76.     n += armor6 != nil ? armor6.dex_plus : 0



  77.     return [[n, 1].max, 999].min



  78.   end



  79.   #--------------------------------------------------------------------------



  80.   # ● 获取基本攻击力



  81.   #--------------------------------------------------------------------------



  82.   def base_atk



  83.     n = $data_actors[@actor_id].parameters[2, @level]



  84.     weapon = $data_weapons[@weapon_id]



  85.     armor1 = $data_armors[@armor1_id]



  86.     armor2 = $data_armors[@armor2_id]



  87.     armor3 = $data_armors[@armor3_id]



  88.     armor4 = $data_armors[@armor4_id]



  89.     armor5 = $data_armors[@armor5_id] if @armor5_id != nil



  90.     armor6 = $data_armors[@armor6_id] if @armor6_id != nil



  91.     n += weapon != nil ? weapon.atk : 0



  92.     n += armor1 != nil ? armor1.str_plus : 0



  93.     n += armor2 != nil ? armor2.str_plus : 0



  94.     n += armor3 != nil ? armor3.str_plus : 0



  95.     n += armor4 != nil ? armor4.str_plus : 0



  96.     n += armor5 != nil ? armor5.str_plus : 0



  97.     n += armor6 != nil ? armor6.str_plus : 0



  98.     return [[n, 1].max, 999].min



  99.   end



  100.   #--------------------------------------------------------------------------



  101.   # ● 获取基本物理防御



  102.   #--------------------------------------------------------------------------



  103.   def base_pdef



  104.     n = $data_actors[@actor_id].parameters[3, @level]



  105.     weapon = $data_weapons[@weapon_id]



  106.     armor1 = $data_armors[@armor1_id]



  107.     armor2 = $data_armors[@armor2_id]



  108.     armor3 = $data_armors[@armor3_id]



  109.     armor4 = $data_armors[@armor4_id]



  110.     armor5 = $data_armors[@armor5_id] if @armor5_id != nil



  111.     armor6 = $data_armors[@armor6_id] if @armor5_id != nil



  112.     pdef1 = weapon != nil ? weapon.pdef : 0



  113.     pdef2 = armor1 != nil ? armor1.pdef : 0



  114.     pdef3 = armor2 != nil ? armor2.pdef : 0



  115.     pdef4 = armor3 != nil ? armor3.pdef : 0



  116.     pdef5 = armor4 != nil ? armor4.pdef : 0



  117.     pdef6 = armor5 != nil ? armor5.pdef : 0



  118.     pdef7 = armor6 != nil ? armor6.pdef : 0



  119.     return pdef1 + pdef2 + pdef3 + pdef4 + pdef5 + pdef6 + pdef7 + n



  120.   end



  121.   #--------------------------------------------------------------------------



  122.   # ● 获取基本魔法防御



  123.   #--------------------------------------------------------------------------



  124.   def base_mdef



  125.     n = $data_actors[@actor_id].parameters[5, @level]



  126.     weapon = $data_weapons[@weapon_id]



  127.     armor1 = $data_armors[@armor1_id]



  128.     armor2 = $data_armors[@armor2_id]



  129.     armor3 = $data_armors[@armor3_id]



  130.     armor4 = $data_armors[@armor4_id]



  131.     armor5 = $data_armors[@armor5_id] if @armor5_id != nil



  132.     armor6 = $data_armors[@armor6_id] if @armor5_id != nil



  133.     mdef1 = weapon != nil ? weapon.mdef : 0



  134.     mdef2 = armor1 != nil ? armor1.mdef : 0



  135.     mdef3 = armor2 != nil ? armor2.mdef : 0



  136.     mdef4 = armor3 != nil ? armor3.mdef : 0



  137.     mdef5 = armor4 != nil ? armor4.mdef : 0



  138.     mdef6 = armor5 != nil ? armor5.mdef : 0



  139.     mdef7 = armor6 != nil ? armor6.mdef : 0



  140.     return mdef1 + mdef2 + mdef3 + mdef4 + mdef5 + mdef6 + mdef7 + n



  141.   end



  142.   #--------------------------------------------------------------------------



  143.   # ● 获取修正命中率



  144.   #--------------------------------------------------------------------------



  145.   def base_hit



  146.     weapon = $data_weapons[@weapon_id]



  147.    return weapon != nil ? weapon.str_plus : 0



  148.   end



  149. end



  150. #==============================================================================



  151. # ■ Game_Enemy



  152. #------------------------------------------------------------------------------



  153. #  处理敌人的类。本类在 Game_Troop 类 ($game_troop) 的



  154. # 内部使用。



  155. #==============================================================================







  156. class Game_Enemy < Game_Battler



  157.   def actor?



  158.     false



  159.   end



  160.   def base_hit



  161.     return $data_enemies[@enemy_id].str



  162.   end



  163. end



  164. #==============================================================================



  165. # ■ Game_Battler (分割定义 1)



  166. #------------------------------------------------------------------------------



  167. #  处理战斗者的类。这个类作为 Game_Actor 类与 Game_Enemy 类的



  168. # 超级类来使用。



  169. #==============================================================================







  170. class Game_Battler







  171.   #--------------------------------------------------------------------------



  172.   # ● 获取命中修正



  173.   #--------------------------------------------------------------------------



  174.     def eva



  175.       return base_hit



  176.     end



  177.   #--------------------------------------------------------------------------



  178.   # ● 应用通常攻击效果



  179.   #     attacker : 攻击者 (battler)



  180.   #--------------------------------------------------------------------------



  181.   def attack_effect(attacker)



  182.     # 清除会心一击标志



  183.     self.critical = false



  184.     # 第一命中判定



  185.     hit_result = (rand(100) < 101)



  186.     # 命中的情况下



  187.     if hit_result == true



  188.       # 计算基本伤害



  189.       self.damage = [attacker.atk - self.pdef , 0].max + rand(30) +12



  190.       # 属性修正



  191.       self.damage *= elements_correct(attacker.element_set)



  192.       self.damage /= 100



  193.       # 伤害符号正确的情况下



  194.       if self.damage > 0



  195.         # 会心一击修正



  196.         if rand(100) < attacker.dex



  197.           self.damage *= 3



  198.           self.critical = true



  199.         end



  200.         # 防御修正



  201.         if self.guarding?



  202.           self.damage /= 2



  203.         end



  204.       end



  205.       # 分散



  206.       if self.damage.abs > 0



  207.         amp = [self.damage.abs * 15 / 100, 1].max



  208.         self.damage += rand(amp+1) + rand(amp+1) - amp



  209.       end



  210.       # 第二命中判定



  211.     end



  212.     # 命中的情况下



  213.     if hit_result == true



  214.       # 状态冲击解除



  215.       remove_states_shock



  216.       # HP 的伤害计算



  217.       self.hp -= self.damage



  218.       # 状态变化



  219.       @state_changed = false



  220.       states_plus(attacker.plus_state_set)



  221.       states_minus(attacker.minus_state_set)



  222.     # Miss 的情况下



  223.     else



  224.       # 伤害设置为 "Miss"



  225.       self.damage = "Miss"



  226.       # 清除会心一击标志



  227.       self.critical = false



  228.     end



  229.     # 过程结束



  230.     return true



  231.   end



  232.   #--------------------------------------------------------------------------



  233.   # ● 应用特技效果



  234.   #     user  : 特技的使用者 (battler)



  235.   #     skill : 特技



  236.   #--------------------------------------------------------------------------



  237.   def skill_effect(user, skill)



  238.     # 清除会心一击标志



  239.     self.critical = false



  240.     # 特技的效果范围是 HP 1 以上的己方、自己的 HP 为 0、



  241.     # 或者特技的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下



  242.     if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or



  243.        ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)



  244.       # 过程结束



  245.       return false



  246.     end



  247.     # 清除有效标志



  248.     effective = false



  249.     # 公共事件 ID 是有效的情况下,设置为有效标志



  250.     effective |= skill.common_event_id > 0



  251.     # 第一命中判定



  252.     if skill.hit !=0



  253.       hit = skill.hit



  254.     else



  255.       hit = user.hit + user.agi - self.agi - self.eva



  256.     end  



  257.     if skill.atk_f > 0



  258.       hit *= user.hit / 100



  259.     end



  260.     hit_result = (rand(100) < 101)



  261.     # 不确定的特技的情况下设置为有效标志



  262.     effective |= hit < 100



  263.     # 命中的情况下



  264.     if hit_result == true



  265.       # 计算威力



  266.       power = skill.power #+ user.atk * skill.atk_f / 100



  267.       if power > 0



  268.         power -= self.pdef * skill.pdef_f / 100



  269.         power -= self.mdef * skill.mdef_f / 100



  270.         power += (user.int * skill.int_f / 100)



  271.         power += (user.atk * skill.atk_f / 100)



  272. #===============================================================



  273.         power = [power, 0].max + rand(40) + 16

  274.         

  275. #===============================================================

  276.         

  277.       else



  278.         power -= (user.int * skill.int_f / 100)



  279.         power -= (user.atk * skill.atk_f / 100)



  280.       end



  281.       # 计算倍率



  282. #     rate = 20



  283. #     rate += (user.str * skill.str_f / 100)



  284. #     rate += (user.dex * skill.dex_f / 100)



  285. #     rate += (user.agi * skill.agi_f / 100)



  286.       



  287.       # 计算基本伤害



  288.       self.damage = power



  289.       # 属性修正



  290.       self.damage *= elements_correct(skill.element_set)



  291.       self.damage /= 100



  292.       # 伤害符号正确的情况下



  293.       if self.damage > 0



  294.         #h会心修正



  295.         if rand(100) < skill.dex_f



  296.           self.damage *= 3



  297.            self.critical = true



  298.         end  



  299.         # 防御修正



  300.         if self.guarding?



  301.           self.damage /= 2



  302.         end



  303.       end



  304.       # 分散



  305.       if skill.variance > 0 and self.damage.abs > 0



  306.         amp = [self.damage.abs * skill.variance / 100, 1].max



  307.         self.damage += rand(amp+1) + rand(amp+1) - amp



  308.       end



  309.       



  310.       # 不确定的特技的情况下设置为有效标志



  311.       effective |= hit < 100



  312.     end



  313.     # 命中的情况下



  314.     if hit_result == true



  315.       # 威力 0 以外的物理攻击的情况下



  316.       if skill.power != 0 and skill.atk_f > 0



  317.         # 状态冲击解除



  318.         remove_states_shock



  319.         # 设置有效标志



  320.         effective = true



  321.       end



  322.       # HP 的伤害减法运算



  323.       last_hp = self.hp



  324.       self.hp -= self.damage



  325.       effective |= self.hp != last_hp



  326.       # 状态变化



  327.       @state_changed = false



  328.       effective |= states_plus(skill.plus_state_set)



  329.       effective |= states_minus(skill.minus_state_set)



  330.       # 威力为 0 的场合



  331.       if skill.power == 0



  332.         # 伤害设置为空的字串



  333.         self.damage = ""



  334.         # 状态没有变化的情况下



  335.         unless @state_changed



  336.           # 伤害设置为 "Miss"



  337.           self.damage = "Miss"



  338.         end



  339.       end



  340.     # Miss 的情况下



  341.     else



  342.       # 伤害设置为 "Miss"



  343.       self.damage = "Miss"



  344.     end



  345.     # 不在战斗中的情况下



  346.     unless $game_temp.in_battle



  347.       # 伤害设置为 nil



  348.       self.damage = nil



  349.     end



  350.     # 过程结束



  351.     return effective



  352.   end



  353. end
复制代码
  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 = false      
  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 = "wd006"
  44.   
  45.   # 菜单使用计数true/false
  46.   MENU_COUNT = true

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

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

  60.   #-------------------------------------------------------------
  61.   # 特别技能的详细设定,57和61号特技分别是十字斩和扫荡,大家最熟悉的两个招数
  62.   #----------------------------------------------------------------
  63.   
  64.   # 界限水平
  65.   # S_LEVEL[技艺ID]=[角色ID=>界限,…]
  66.   S_LEVEL[57] = {1=>18, 2=>12, 3=>5, 4=>12, 5=>12, 6=>12, 7=>12, 8=>12}
  67.   S_LEVEL[61] = {1=>12, 2=>18, 3=>15, 4=>12, 5=>12, 6=>12, 7=>12, 8=>12}
  68.      
  69.   # 技艺&actor威力上升率
  70.   # S_MIGHT[技艺ID]=[角色ID=>威力上升率,…]
  71.   S_MIGHT[57] = {1=>2, 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]=[角色ID=>上升间隔,…]
  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 USE_S_ANIME#@active_battler.is_a?(Game_Actor) and
  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, "招式升级!")
  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
  460.     y = index * 32
  461.     rect = Rect.new(x, y, self.width / @column_max - 32, 32)
  462.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  463.     bitmap = RPG::Cache.icon(skill.icon_name)
  464.     opacity = self.contents.font.color == normal_color ? 255 : 128
  465.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  466. #-修正-----
  467.     @actor.skill_level[skill.id] = 0 if @actor.skill_level[skill.id] == nil
  468.     name_level = skill.name + "(等级" + @actor.skill_level[skill.id].to_s + ")"
  469.     self.contents.draw_text(x + 28, y, 204, 32, name_level, 0)
  470.     @actor.skill_sp_cost[skill.id] = skill.sp_cost if @actor.skill_sp_cost[skill.id] == nil
  471.     self.contents.draw_text(x + 232, y, 48, 32, @actor.skill_sp_cost[skill.id].to_s, 2)
  472. #----------
  473.   end
  474. end

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

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

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

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

  677. #==================================================================
  678. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  679. #==================================================================
复制代码

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

本版积分规则

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

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

GMT+8, 2024-5-16 13:25

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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