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

Project1

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

[已经解决] 修改战斗伤害公式脚本怎样制作加血技能?

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
40 小时
注册时间
2009-9-3
帖子
64
跳转到指定楼层
1
发表于 2009-9-3 23:56:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
使用“修改战斗伤害公式脚本”后随着等级越来越高攻击力越来越强,加血技能的负值威力会变成正值,直接把自己打死了=_=|||   怎么解决啊?
【相关脚本】
  1. #修改后的战斗伤害公式
  2. #物理伤害 = (我攻击力+我力量-敌物理防御)*2
  3. #法术伤害 = 技威力+我魔法*技能魔力+我灵巧*技能灵巧-敌魔力防御*技能魔防
  4. #躲闪率 = 5*被灵+速 / 攻击灵+速 - 被的躲闪
  5. #暴击率 = 25%我 10%敌人 技能暴击率 = 15%我 8%敌人 伤害为1.5倍
  6. #当使用技能为10号时 攻击力为普通攻击的5倍伤害
  7. #2号或34号时,为1.5倍;3号或35号时为1.75倍 10号时5倍攻击
  8. #防御时 会涨血和蓝 为max的4%(包括小数)具体剑scene_battle 4
  9. #134行 类似 修改了复活药品和技能的使用限制
  10. #个人水平有限若有错误之处,还请指出或联系蜂蜜蚂蚁 谢谢
  11. #==============================================================================
  12. # ■ Game_Battler (分割定义 3)
  13. #------------------------------------------------------------------------------
  14. #  处理战斗者的类。这个类作为 Game_Actor 类与 Game_Enemy 类的
  15. # 超级类来使用。
  16. #==============================================================================
  17. class Game_Battler
  18. #--------------------------------------------------------------------------
  19. # ● 可以使用特技的判定
  20. # skill_id : 特技 ID
  21. #--------------------------------------------------------------------------
  22. def skill_can_use?(skill_id)
  23. # SP 不足的情况下不能使用
  24. if $data_skills[skill_id].sp_cost > self.sp
  25. return false
  26. end
  27. # 战斗不能的情况下不能使用
  28. if dead?
  29. return false
  30. end
  31. # 沉默状态的情况下、物理特技以外的特技不能使用
  32. if $data_skills[skill_id].atk_f == 0 and self.restriction == 1
  33. return false
  34. end
  35. # 获取可以使用的时机
  36. occasion = $data_skills[skill_id].occasion
  37. # 战斗中的情况下
  38. if $game_temp.in_battle
  39. # [平时] 或者是 [战斗中] 可以使用
  40. return (occasion == 0 or occasion == 1)
  41. # 不是战斗中的情况下
  42. else
  43. # [平时] 或者是 [菜单中] 可以使用
  44. return (occasion == 0 or occasion == 2)
  45. end
  46. end
  47. #--------------------------------------------------------------------------
  48. # ● 应用通常攻击效果
  49. # attacker : 攻击者 (battler)
  50. #--------------------------------------------------------------------------
  51. def attack_effect(attacker)
  52. # 清除会心一击标志
  53. self.critical = false
  54. # 第一命中判定
  55. hit_result = (rand(100) < attacker.hit)
  56. # 命中的情况下
  57. if hit_result == true
  58. # 计算基本伤害
  59. atk = [attacker.atk , 0].max
  60. self.damage = (attacker.atk - self.pdef + attacker.str)*2
  61. # 属性修正
  62. self.damage *= elements_correct(attacker.element_set)
  63. self.damage /= 100
  64. # 伤害符号正确的情况下
  65. if self.damage > 0
  66. if @battler.is_a?(Game_Enemy)
  67. # 会心一击修正
  68. if rand(100) < 10# 4 * attacker.dex / self.agi
  69. self.damage *= 1.5
  70. self.damage = self.damage.round
  71. self.critical = true
  72. end
  73. else
  74. if rand(100) < 25# 4 * attacker.dex / self.agi
  75. self.damage *= 1.5
  76. self.damage = self.damage.round
  77. self.critical = true
  78. end
  79. end
  80. # 防御修正
  81. if self.guarding?
  82. self.damage /= 2
  83. # self.hp += 200
  84. #self.sp += 200
  85. end
  86. end
  87. if self.damage<0
  88. self.damage = - (attacker.atk - self.pdef + attacker.str)/2
  89. end
  90. # 分散
  91. if self.damage.abs > 0
  92. amp = [self.damage.abs * 15 / 100, 1].max
  93. self.damage += rand(amp+1) + rand(amp+1) - amp
  94. end
  95. # 第二命中判定
  96. eva = 5 * (self.agi+self.dex) / (attacker.dex+attacker.agi) + self.eva
  97. hit = self.damage < 0 ? 100 : 100 - eva
  98. hit = self.cant_evade? ? 100 : hit
  99. hit_result = (rand(100) < hit)
  100. end
  101. # 命中的情况下
  102. if hit_result == true
  103. # 状态冲击解除
  104. remove_states_shock
  105. # HP 的伤害计算
  106. self.hp -= self.damage
  107. # 状态变化
  108. @state_changed = false
  109. states_plus(attacker.plus_state_set)
  110. states_minus(attacker.minus_state_set)
  111. # Miss 的情况下
  112. else
  113. # 伤害设置为 "Miss"
  114. self.damage = "Miss"
  115. # 清除会心一击标志
  116. self.critical = false
  117. end
  118. # 过程结束
  119. return true
  120. end
  121. #--------------------------------------------------------------------------
  122. # ● 应用特技效果
  123. # user : 特技的使用者 (battler)
  124. # skill : 特技
  125. #--------------------------------------------------------------------------
  126. def skill_effect(user, skill)
  127. # 清除会心一击标志
  128. self.critical = false
  129. # 特技的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  130. # 或者特技的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  131. if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0)# or
  132. # ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
  133. # 过程结束
  134. return false
  135. end
  136. # 清除有效标志
  137. effective = false
  138. # 公共事件 ID 是有效的情况下,设置为有效标志
  139. effective |= skill.common_event_id > 0
  140. # 第一命中判定
  141. hit = skill.hit
  142. if skill.atk_f > 0
  143. hit *= user.hit / 100
  144. end
  145. hit_result = (rand(100) < hit)
  146. # 不确定的特技的情况下设置为有效标志
  147. effective |= hit < 100
  148. # 命中的情况下
  149. if hit_result == true
  150. # 计算威力
  151. power = skill.power + user.int * skill.int_f + user.dex * skill.dex_f
  152. #法方-
  153. if power > 0
  154. # power -= self.pdef * skill.pdef_f / 200
  155. # power -= / 200
  156. power = [power, 0].max
  157. end
  158. # 计算倍率
  159. rate = self.mdef * skill.mdef_f
  160. # 计算基本伤害
  161. self.damage = power - rate
  162. # 属性修正
  163. self.damage *= elements_correct(skill.element_set)
  164. self.damage /= 100

  165. case skill.id
  166. when 10
  167. self.damage = (user.atk - self.pdef + user.str)*10
  168. when 2
  169. self.damage = (user.atk - self.pdef + user.str)*3
  170. when 3
  171. self.damage = (user.atk - self.pdef + user.str)*3.5
  172. self.damage = self.damage.round
  173. when 34
  174. self.damage = (user.atk - self.pdef + user.str)*3
  175. when 35
  176. self.damage = (user.atk - self.pdef + user.str)*3.5
  177. self.damage = self.damage.round
  178. end

  179. # 伤害符号正确的情况下
  180. if self.damage > 0
  181. if @battler.is_a?(Game_Enemy)
  182. if rand(100) < 8# 4 * attacker.dex / self.agi
  183. self.damage *= 1.5
  184. self.damage = self.damage.round
  185. self.critical = true
  186. end
  187. else
  188. if rand(100) < 15# 4 * attacker.dex / self.agi
  189. self.damage *= 1.5
  190. self.damage = self.damage.round
  191. self.critical = true
  192. end
  193. end

  194. # 防御修正
  195. if self.guarding?
  196. self.damage /= 2
  197. end
  198. end
  199. if self.damage < 0
  200. self.damage = skill.power
  201. end
  202. # 分散
  203. if skill.variance > 0 and self.damage.abs > 0
  204. amp = [self.damage.abs * skill.variance / 100, 1].max
  205. self.damage += rand(amp+1) + rand(amp+1) - amp
  206. end
  207. # 第二命中判定
  208. eva = 5 * (self.agi+self.dex) / (user.dex + user.agi) + self.eva
  209. hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
  210. hit = self.cant_evade? ? 100 : hit
  211. hit_result = (rand(100) < hit)
  212. # 不确定的特技的情况下设置为有效标志
  213. effective |= hit < 100
  214. end
  215. # 命中的情况下
  216. if hit_result == true
  217. # 威力 0 以外的物理攻击的情况下
  218. if skill.power != 0 #and skill.atk_f > 0
  219. #蚂蚁跑啊跑 和状态有关 (默认是物理)挨打都会状态解除
  220. # 状态冲击解除
  221. remove_states_shock
  222. # 设置有效标志
  223. effective = true
  224. end
  225. # HP 的伤害减法运算
  226. last_hp = self.hp
  227. self.hp -= self.damage
  228. effective |= self.hp != last_hp
  229. # 状态变化
  230. @state_changed = false
  231. effective |= states_plus(skill.plus_state_set)
  232. effective |= states_minus(skill.minus_state_set)
  233. # 威力为 0 的场合
  234. if skill.power == 0
  235. # 伤害设置为空的字串
  236. self.damage = ""
  237. # 状态没有变化的情况下
  238. unless @state_changed
  239. # 伤害设置为 "Miss"
  240. self.damage = "Miss"
  241. end
  242. end
  243. # Miss 的情况下
  244. else
  245. # 伤害设置为 "Miss"
  246. self.damage = "Miss "
  247. end
  248. # 不在战斗中的情况下
  249. unless $game_temp.in_battle
  250. # 伤害设置为 nil
  251. self.damage = nil
  252. end
  253. # 过程结束
  254. return effective
  255. end
  256. #--------------------------------------------------------------------------
  257. # ● 应用物品效果
  258. # item : 物品
  259. #--------------------------------------------------------------------------
  260. def item_effect(item)
  261. # 清除会心一击标志
  262. self.critical = false
  263. # 物品的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  264. # 或者物品的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  265. if ((item.scope == 3 or item.scope == 4) and self.hp == 0) #or
  266. #((item.scope == 5 or item.scope == 6) and self.hp >= 1)
  267. # 过程结束
  268. return false
  269. end
  270. # 清除有效标志
  271. effective = false
  272. # 公共事件 ID 是有效的情况下,设置为有效标志
  273. effective |= item.common_event_id > 0
  274. # 命中判定
  275. hit_result = (rand(100) < item.hit)
  276. # 不确定的特技的情况下设置为有效标志
  277. effective |= item.hit < 100
  278. # 命中的情况
  279. if hit_result == true
  280. # 计算回复量
  281. recover_hp = maxhp * item.recover_hp_rate / 100 + item.recover_hp
  282. recover_sp = maxsp * item.recover_sp_rate / 100 + item.recover_sp
  283. if recover_hp < 0
  284. recover_hp += self.pdef * item.pdef_f / 20
  285. recover_hp += self.mdef * item.mdef_f / 20
  286. recover_hp = [recover_hp, 0].min
  287. end
  288. # 属性修正
  289. recover_hp *= elements_correct(item.element_set)
  290. recover_hp /= 100
  291. recover_sp *= elements_correct(item.element_set)
  292. recover_sp /= 100
  293. # 分散
  294. if item.variance > 0 and recover_hp.abs > 0
  295. amp = [recover_hp.abs * item.variance / 100, 1].max
  296. recover_hp += rand(amp+1) + rand(amp+1) - amp
  297. end
  298. if item.variance > 0 and recover_sp.abs > 0
  299. amp = [recover_sp.abs * item.variance / 100, 1].max
  300. recover_sp += rand(amp+1) + rand(amp+1) - amp
  301. end
  302. # 回复量符号为负的情况下
  303. if recover_hp < 0
  304. # 防御修正
  305. if self.guarding?
  306. recover_hp /= 2
  307. end
  308. end
  309. # HP 回复量符号的反转、设置伤害值
  310. self.damage = -recover_hp
  311. # HP 以及 SP 的回复
  312. last_hp = self.hp
  313. last_sp = self.sp
  314. self.hp += recover_hp
  315. self.sp += recover_sp

  316. effective |= self.hp != last_hp
  317. effective |= self.sp != last_sp
  318. if recover_sp != 0 #如果补SP的量不等于0
  319. self.damage = -recover_sp #伤害=SP恢复量的倒数
  320. end
  321. # 状态变化
  322. @state_changed = false
  323. effective |= states_plus(item.plus_state_set)
  324. effective |= states_minus(item.minus_state_set)
  325. # 能力上升值有效的情况下
  326. if item.recover_hp_rate == 0 and item.recover_hp == 0 and item.recover_sp_rate == 0 and item.recover_sp == 0 #原来只判断HP,现在附带判断SP

  327. # 能力值的分支
  328. case item.parameter_type
  329. when 1 # MaxHP
  330. @maxhp_plus += item.parameter_points
  331. when 2 # MaxSP
  332. @maxsp_plus += item.parameter_points
  333. when 3 # 力量
  334. @str_plus += item.parameter_points
  335. when 4 # 灵巧
  336. @dex_plus += item.parameter_points
  337. when 5 # 速度
  338. @agi_plus += item.parameter_points
  339. when 6 # 魔力
  340. @int_plus += item.parameter_points
  341. end
  342. # 设置有效标志
  343. effective = true
  344. end
  345. # HP 回复率与回复量为 0 的情况下
  346. if item.recover_hp_rate == 0 and item.recover_hp == 0 and item.recover_sp_rate == 0 and item.recover_sp == 0 #原来只判断HP,现在附带判断SP
  347. # 设置伤害为空的字符串
  348. self.damage = ""
  349. # SP 回复率与回复量为 0、能力上升值无效的情况下
  350. if item.recover_sp_rate == 0 and item.recover_sp == 0 and
  351. (item.parameter_type == 0 or item.parameter_points == 0)
  352. # 状态没有变化的情况下
  353. unless @state_changed
  354. # 伤害设置为 "Miss"
  355. self.damage = "Miss"
  356. end
  357. end
  358. end
  359. # Miss 的情况下
  360. else
  361. # 伤害设置为 "Miss"
  362. self.damage = "Miss"
  363. end
  364. # 不在战斗中的情况下
  365. unless $game_temp.in_battle
  366. # 伤害设置为 nil
  367. self.damage = nil
  368. end
  369. # 过程结束
  370. return effective
  371. end
  372. #--------------------------------------------------------------------------
  373. # ● 应用连续伤害效果
  374. #--------------------------------------------------------------------------
  375. def slip_damage_effect
  376. # 设置伤害
  377. self.damage = self.maxhp / 20
  378. self.damage = self.damage.round
  379. # 分散
  380. if self.damage.abs > 0
  381. amp = [self.damage.abs * 15 / 100, 1].max
  382. self.damage += rand(amp+1) + rand(amp+1) - amp
  383. end
  384. # HP 的伤害减法运算
  385. self.hp -= self.damage
  386. # 过程结束
  387. return true
  388. end
  389. #--------------------------------------------------------------------------
  390. # ● 属性修正计算
  391. # element_set : 属性
  392. #--------------------------------------------------------------------------
  393. def elements_correct(element_set)
  394. # 無属性的情况
  395. if element_set == []
  396. # 返回 100
  397. return 100
  398. end
  399. # 在被赋予的属性中返回最弱的
  400. # ※过程 element_rate 是、本类以及继承的 Game_Actor
  401. # 和 Game_Enemy 类的定义
  402. weakest = -100
  403. for i in element_set
  404. weakest = [weakest, self.element_rate(i)].max
  405. end
  406. return weakest
  407. end
  408. end
复制代码

Lv3.寻梦者

梦石
0
星屑
1323
在线时间
831 小时
注册时间
2007-12-25
帖子
1558
2
发表于 2009-9-4 00:00:00 | 只看该作者
实际上如果LZ游戏开工不久的话,可以试着采用我发布的那个战斗公式
脚本呢!
http://rpg.blue/viewthread.php?tid=114450
精卫赤龙腾   
总是存在一种强大,去完成似乎不可能的事情.
无畏战乾程   
或是需要一种勇气,去挑战几乎不存在的胜利.
一味玄真魂     
这是拥有一种恒心,去化解根本没有解的困难.
烈卫开天径    
只是带着一种决心,去争取残存的最后的希望。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

~琉璃の雪~<

梦石
0
星屑
49
在线时间
36 小时
注册时间
2008-11-6
帖子
3678
3
发表于 2009-9-4 00:09:18 | 只看该作者
要注意以下几个技能(10号,2号。。。。35号)是设定好计算伤害的,如果你把加血技能设定为以下几个是没有效果的。
case skill.id
when 10
self.damage = (user.atk - self.pdef + user.str)*10
when 2
self.damage = (user.atk - self.pdef + user.str)*3
when 3
self.damage = (user.atk - self.pdef + user.str)*3.5
self.damage = self.damage.round
when 34
self.damage = (user.atk - self.pdef + user.str)*3
when 35
self.damage = (user.atk - self.pdef + user.str)*3.5
self.damage = self.damage.round
要修改公式的话我建议还是到Game_Battler3里自己去改.
~现在开始自绘头像~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
40 小时
注册时间
2009-9-3
帖子
64
4
 楼主| 发表于 2009-9-4 00:29:00 | 只看该作者
本帖最后由 鬼火 于 2009-9-4 00:33 编辑

已经解决了,谢谢两位啊。。。
结贴了~~~
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-9 17:05

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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