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

Project1

 找回密码
 注册会员
搜索
楼主: Bsallo
打印 上一主题 下一主题

[已经解决] 帮忙制作rmxp1.02战斗伤害及属性脚本

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
55
在线时间
0 小时
注册时间
2009-4-7
帖子
341
11
发表于 2009-10-10 15:53:50 | 只看该作者
唉!现在这个网站和柳柳大哥在的时候大不相同了···话说,柳柳大哥现在不做rpg了??
Bsallo 发表于 2009-10-10 02:33


的确....
看着现在的人气....真是荒凉..的感觉!
关于6子,以下是不负责任传闻:
工作瓶颈+感情危机,正为生存挣扎...闭关修炼ING...
回复 支持 反对

使用道具 举报

Lv3.寻梦者

昨日的黄昏

梦石
0
星屑
1005
在线时间
937 小时
注册时间
2006-11-5
帖子
4128

第2届短篇游戏比赛季军第3届短篇游戏大赛小游戏及其他组季军

12
发表于 2009-10-10 16:09:11 | 只看该作者
本帖最后由 七夕小雨 于 2009-10-10 16:16 编辑

…………
我大体说下吧
伤害的基本计算都是在Game_Battler 3中
比如你要的基本攻击,就在Game_Battler 3第50行有写

暴击是58行

分散度是60行左右……

只要对变量意义足够熟悉,很容易修改。

对了,如果你添加过关于战斗算法的脚本,那就在里面找Game_Battler 3咯

还有就是你说的装备效果,
只要记住装备序号也就可以了

1,判定是否装备
2.伤害计算

举例
if $game_party.actors[角色编号].equip_id = X
atk = [attacker.atk - self.pdef / 2, 0].max
self.damage = -(atk * (20 + attacker.str) / 20)
end
以上就是一个简单的穿装备可以吸血的脚本

判定不一定正确,很久没有做过带战斗的rpg了,过去也只是做过附加一个状态吸血的……
呵呵,我只能帮到这里了
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6870
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

13
发表于 2009-10-10 16:29:49 | 只看该作者
本帖最后由 后知后觉 于 2009-10-10 18:07 编辑

LZ你一会必杀攻击  一会特技命中  一会灵巧 一会又技巧
其实这个是很简单的东西
你说得那么混乱,就算别人想给你弄 也弄不出来

必杀攻击理解为特技.技巧理解为灵巧
保留防御修正和状态修正
特技也可以防御
如果不想要自己删除
敌人没有武器.用数据库敌人属性面板中的攻击力来看作为敌人的武器攻击力
  1. #==============================================================================
  2. # ■ Game_Battler
  3. #==============================================================================

  4. class Game_Battler
  5.   #--------------------------------------------------------------------------
  6.   # ● 应用通常攻击效果
  7.   #     attacker : 攻击者 (battler)
  8.   #--------------------------------------------------------------------------
  9.   def attack_effect(attacker)
  10.     self.critical = false
  11.     # 计算命中
  12.     hzhj_hit = 100 - (attacker.dex - self.dex) * 2
  13.     hit_result = (rand(100) < hzhj_hit)
  14.    
  15.     # 命中的情况
  16.     if hit_result == true
  17.       # 如果攻击者是角色
  18.       if attacker.is_a?(Game_Actor)
  19.         # 攻击者力量 + 攻击者武器攻击力 - 被打者物理防御
  20.         self.damage = attacker.str + $data_weapons[attacker.weapon_id].atk - self.pdef
  21.       # 攻击者是敌人
  22.       else
  23.         # 攻击者力量 + 攻击者攻击力 - 被打者物理防御
  24.         self.damage = attacker.str + attacker.base_atk - self.pdef
  25.       end
  26.       
  27.       # 属性修正
  28.       self.damage *= elements_correct(attacker.element_set)
  29.       self.damage /= 100
  30.       
  31.       # 伤害符号正确的情况下
  32.       if self.damage > 0
  33.         # 暴击概率
  34.         # (攻击者灵巧 - 被打者灵巧) * 2
  35.         hzhj_baoji = (attacker.dex - self.dex) * 2
  36.         if rand(100) < hzhj_baoji
  37.           self.damage *= 2
  38.           self.critical = true
  39.         end
  40.         # 防御修正
  41.         if self.guarding?
  42.           self.damage /= 2
  43.         end
  44.       end
  45.       
  46.       # 状态冲击解除
  47.       remove_states_shock
  48.       # HP 的伤害计算
  49.       self.hp -= self.damage
  50.       # 状态变化
  51.       @state_changed = false
  52.       states_plus(attacker.plus_state_set)
  53.       states_minus(attacker.minus_state_set)
  54.     # Miss 的情况下
  55.     else
  56.       self.damage = "Miss"
  57.       self.critical = false
  58.     end
  59.     return true
  60.   end
  61.   #--------------------------------------------------------------------------
  62.   # ● 应用特技效果
  63.   #     user  : 特技的使用者 (battler)
  64.   #     skill : 特技
  65.   #--------------------------------------------------------------------------
  66.   def skill_effect(user, skill)
  67.     self.critical = false
  68.     effective = false
  69.     effective |= skill.common_event_id > 0
  70.     # 计算命中
  71.     hzhj_hit = skill.hit - (user.dex - self.dex) * 2
  72.     hit_result = (rand(100) < hzhj_hit)
  73.     effective |= hzhj_hit < 100
  74.    
  75.     # 命中的情况
  76.     if hit_result == true
  77.       # 攻击者魔力 + 特技威力 - 被打者魔法防御
  78.       self.damage = user.int + skill.power - self.mdef
  79.       
  80.       # 属性修正
  81.       self.damage *= elements_correct(user.element_set)
  82.       self.damage /= 100
  83.       
  84.       # 伤害符号正确的情况下
  85.       if self.damage > 0
  86.         # 暴击概率
  87.         # (攻击者灵巧 - 被打者灵巧) * 2
  88.         hzhj_baoji = (user.dex - self.dex) * 2
  89.         if rand(100) < hzhj_baoji
  90.           self.damage *= 2
  91.           self.critical = true
  92.         end
  93.         # 防御修正
  94.         if self.guarding?
  95.           self.damage /= 2
  96.         end
  97.         effective = true
  98.       end
  99.       
  100.       # 状态冲击解除
  101.       remove_states_shock
  102.       # HP 的伤害计算
  103.       self.hp -= self.damage
  104.       # 状态变化
  105.       @state_changed = false
  106.       effective |= states_plus(skill.plus_state_set)
  107.       effective |= states_minus(skill.minus_state_set)
  108.     # Miss 的情况下
  109.     else
  110.       self.damage = "Miss"
  111.       self.critical = false
  112.     end
  113.     return effective
  114.   end
  115. end
  116. #==============================================================================
  117. # ■ Game_Actor
  118. #==============================================================================

  119. class Game_Actor < Game_Battler
  120.   #--------------------------------------------------------------------------
  121.   # ● 取得属性修正值
  122.   #     element_id : 属性 ID
  123.   #--------------------------------------------------------------------------
  124.   def element_rate(element_id)
  125.     # 获取对应属性有效度的数值
  126.     table = [0,400,200,100,50,0,-100]
  127.     result = table[$data_classes[@class_id].element_ranks[element_id]]
  128.     # 防具能防御本属性的情况下效果减半
  129.     for i in [@armor1_id, @armor2_id, @armor3_id, @armor4_id]
  130.       armor = $data_armors[i]
  131.       if armor != nil and armor.guard_element_set.include?(element_id)
  132.         result /= 2
  133.       end
  134.     end
  135.     # 状态能防御本属性的情况下效果减半
  136.     for i in @states
  137.       if $data_states[i].guard_element_set.include?(element_id)
  138.         result /= 2
  139.       end
  140.     end
  141.     # 过程结束
  142.     return result
  143.   end
  144. end
  145. #==============================================================================
  146. # ■ Game_Enemy
  147. #==============================================================================

  148. class Game_Enemy < Game_Battler
  149.   #--------------------------------------------------------------------------
  150.   # ● 获取属性修正值
  151.   #     element_id : 属性 ID
  152.   #--------------------------------------------------------------------------
  153.   def element_rate(element_id)
  154.     # 获取对应属性有效度的数值
  155.     table = [0,400,200,100,50,0,-100]
  156.     result = table[$data_enemies[@enemy_id].element_ranks[element_id]]
  157.     # 状态能防御本属性的情况下效果减半
  158.     for i in @states
  159.       if $data_states[i].guard_element_set.include?(element_id)
  160.         result /= 2
  161.       end
  162.     end
  163.     # 过程结束
  164.     return result
  165.   end
  166. end
复制代码











你知道得太多了

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1323
在线时间
831 小时
注册时间
2007-12-25
帖子
1558
14
发表于 2009-10-10 18:14:41 | 只看该作者
用我的脚本的话,是给我挖坟。但是要我给你写脚本的话,
我没时间啦
精卫赤龙腾   
总是存在一种强大,去完成似乎不可能的事情.
无畏战乾程   
或是需要一种勇气,去挑战几乎不存在的胜利.
一味玄真魂     
这是拥有一种恒心,去化解根本没有解的困难.
烈卫开天径    
只是带着一种决心,去争取残存的最后的希望。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
2 小时
注册时间
2008-9-4
帖子
78
15
 楼主| 发表于 2009-10-10 20:50:19 | 只看该作者
由于引用了阁下的脚本,结果提示:game_Battler 3的第29行发生NoMethoderror··· ···与我类似的报错···不知道这个错误是什么原因呢···
用回忆制造新奇!!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
2 小时
注册时间
2008-9-4
帖子
78
16
 楼主| 发表于 2009-10-10 20:51:10 | 只看该作者
13# 后知后觉
由于引用了阁下的脚本,结果提示:game_Battler 3的第29行发生NoMethoderror··· ···与我类似的报错···不知道这个错误是什么原因呢···
用回忆制造新奇!!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
2 小时
注册时间
2008-9-4
帖子
78
17
 楼主| 发表于 2009-10-10 21:06:09 | 只看该作者
13# 后知后觉

阁下的脚本貌似不太正常啊···我设置的主角灵巧为60,速度60      敌人灵巧10,速度10     结果主角攻击敌人必不中,而敌人攻击主角必中且暴击机率很大:dizzy: 这是怎么回事啊??!请阁下帮忙看看!!谢谢诶~~~~
用回忆制造新奇!!
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6870
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

18
发表于 2009-10-10 21:47:53 | 只看该作者
如果我的脚本帖到新开的工程里会报告错误
那的确是我的脚本的问题
如果新开的工程里一切正常,那就不是我的脚本问题了~











你知道得太多了

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
2 小时
注册时间
2008-9-4
帖子
78
19
 楼主| 发表于 2009-10-10 21:54:46 | 只看该作者
18# 后知后觉


您确定您测试过吗?我刚才测试了一下您的脚本,主要存在的问题有:

1.速度高了反而不能击中敌人(也许是"<"要改为">")

# 计算命中  


hzhj_hit = 100 - (attacker.dex - self.dex) * 2              


hit_result = (rand(100) < hzhj_hit)


2.没有暴击。


3.当敌人防御力高于主角攻击力的时候,攻击变成对敌人“加血”

偶是新开的工程,再粘贴的您的脚本。(偶没有责备的意思,您肯帮忙我已经非常感谢了)
用回忆制造新奇!!
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6870
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

20
发表于 2009-10-10 22:22:02 | 只看该作者
你主楼写的是
3.普攻命中:100%-(A灵巧-B灵巧)x2 =A攻击命中

100-(60-10)*2=?
当然不会命中
你给的所有资料里可没有说过 速度

至于加血的确是个BUG
self.damage = [attacker.str + $data_weapons[attacker.weapon_id].atk - self.pdef, 0].max
self.damage = [attacker.str + attacker.base_atk - self.pdef, 0].max

self.damage = [user.int + skill.power - self.mdef, 0].max
这样改了后没有加血特技











你知道得太多了

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-2 02:17

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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