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

Project1

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

XP战斗公式—重新整合

 关闭 [复制链接]

Lv3.寻梦者

梦石
0
星屑
1323
在线时间
831 小时
注册时间
2007-12-25
帖子
1558
跳转到指定楼层
1
发表于 2009-1-6 03:54:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
XP的默认战斗公式有点夸张,不过也没什么


该脚本对武器有了命中修正,会心率,角色本身有了防御力,跟魔防,敌人也有会心率

跟命中率(这些都可以直接填写,不过要放弃些不是很实用的属性)

对技能有了会心率,以及更改了下计算公式

大致跟火焰之文章的类同吧
  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) < attacker.hit + attacker.agi - self.agi - self.eva)
  186.     # 命中的情况下
  187.     if hit_result == true
  188.       # 计算基本伤害
  189.       self.damage = [attacker.atk - self.pdef , 0].max
  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) < hit)
  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.       else
  273.         power -= (user.int * skill.int_f / 100)
  274.         power -= (user.atk * skill.atk_f / 100)
  275.       end
  276.       # 计算倍率
  277. #     rate = 20
  278. #     rate += (user.str * skill.str_f / 100)
  279. #     rate += (user.dex * skill.dex_f / 100)
  280. #     rate += (user.agi * skill.agi_f / 100)
  281.       
  282.       # 计算基本伤害
  283.       self.damage = power
  284.       # 属性修正
  285.       self.damage *= elements_correct(skill.element_set)
  286.       self.damage /= 100
  287.       # 伤害符号正确的情况下
  288.       if self.damage > 0
  289.         #h会心修正
  290.         if rand(100) < skill.dex_f
  291.           self.damage *= 3
  292.            self.critical = true
  293.         end  
  294.         # 防御修正
  295.         if self.guarding?
  296.           self.damage /= 2
  297.         end
  298.       end
  299.       # 分散
  300.       if skill.variance > 0 and self.damage.abs > 0
  301.         amp = [self.damage.abs * skill.variance / 100, 1].max
  302.         self.damage += rand(amp+1) + rand(amp+1) - amp
  303.       end
  304.       
  305.       # 不确定的特技的情况下设置为有效标志
  306.       effective |= hit < 100
  307.     end
  308.     # 命中的情况下
  309.     if hit_result == true
  310.       # 威力 0 以外的物理攻击的情况下
  311.       if skill.power != 0 and skill.atk_f > 0
  312.         # 状态冲击解除
  313.         remove_states_shock
  314.         # 设置有效标志
  315.         effective = true
  316.       end
  317.       # HP 的伤害减法运算
  318.       last_hp = self.hp
  319.       self.hp -= self.damage
  320.       effective |= self.hp != last_hp
  321.       # 状态变化
  322.       @state_changed = false
  323.       effective |= states_plus(skill.plus_state_set)
  324.       effective |= states_minus(skill.minus_state_set)
  325.       # 威力为 0 的场合
  326.       if skill.power == 0
  327.         # 伤害设置为空的字串
  328.         self.damage = ""
  329.         # 状态没有变化的情况下
  330.         unless @state_changed
  331.           # 伤害设置为 "Miss"
  332.           self.damage = "Miss"
  333.         end
  334.       end
  335.     # Miss 的情况下
  336.     else
  337.       # 伤害设置为 "Miss"
  338.       self.damage = "Miss"
  339.     end
  340.     # 不在战斗中的情况下
  341.     unless $game_temp.in_battle
  342.       # 伤害设置为 nil
  343.       self.damage = nil
  344.     end
  345.     # 过程结束
  346.     return effective
  347.   end
  348. end
  349.    
  350.    
  351.    
  352.    
  353.    
  354.    
复制代码


1.01更新版本,支持装备扩充到 6 个


如果一大堆说明看不懂的话就把最基本的几个更改记住就好了

可能的冲突,与装备系统有关的吧!不过调节下就可以了
精卫赤龙腾   
总是存在一种强大,去完成似乎不可能的事情.
无畏战乾程   
或是需要一种勇气,去挑战几乎不存在的胜利.
一味玄真魂     
这是拥有一种恒心,去化解根本没有解的困难.
烈卫开天径    
只是带着一种决心,去争取残存的最后的希望。

Lv1.梦旅人

梦石
0
星屑
60
在线时间
9 小时
注册时间
2006-9-7
帖子
303
2
发表于 2009-1-6 05:29:46 | 只看该作者
不错,收下了, 正想修改默认的战斗公式呢.{/cy}
十年磨一剑,蓦然回首,年华如水,青春如歌。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
301
在线时间
573 小时
注册时间
2005-10-27
帖子
1164
3
发表于 2009-1-6 11:08:35 | 只看该作者
这个很强大,也对新开坑的同志很有帮助
认真地猥琐,猥琐地认真
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
65
在线时间
385 小时
注册时间
2007-7-27
帖子
4106

开拓者

4
发表于 2009-1-6 22:53:14 | 只看该作者
战斗公式……确实很简洁很火焰纹章……
吸吸
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2009-1-6
帖子
413
5
发表于 2009-1-7 00:04:57 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1323
在线时间
831 小时
注册时间
2007-12-25
帖子
1558
6
 楼主| 发表于 2009-1-7 00:07:19 | 只看该作者
另外支持状态提升会心几率
精卫赤龙腾   
总是存在一种强大,去完成似乎不可能的事情.
无畏战乾程   
或是需要一种勇气,去挑战几乎不存在的胜利.
一味玄真魂     
这是拥有一种恒心,去化解根本没有解的困难.
烈卫开天径    
只是带着一种决心,去争取残存的最后的希望。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 12:01

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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