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

Project1

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

[已经解决] 战斗处理部分是怎么工作的啊……

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
96 小时
注册时间
2013-9-21
帖子
112
跳转到指定楼层
1
发表于 2013-10-22 09:40:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 耀眼的毛玉 于 2013-10-23 21:33 编辑

自己看脚本研究ing,但至今不清楚battler和actor、enemy是怎么联系起来的……
是战斗处理的时候会把对应的actors和enemies里面的内容都移动到battler里的某个数组?
那战斗的时候敌人有对应的id么?表示我在东方年代记的真·控制台里面实验了很长时间也没找到表示战斗中的敌人的方法……

评分

参与人数 1星屑 -1 收起 理由
铃仙·优昙华院·因幡 -1 请不要随意修改标签

查看全部评分

Lv2.观梦者

狂気の月兔

梦石
0
星屑
276
在线时间
1245 小时
注册时间
2009-4-7
帖子
879

贵宾

2
发表于 2013-10-22 10:14:20 | 只看该作者
Scene_Battle 都是从 $game_troop 和 $game_party 获取敌人和主角的数据的.

在战斗开始之前, 比如用事件启动战斗的话, 会有这么一句:
  1. $game_troop.setup(troop_id)
复制代码
这里的 troop_id 就是敌人队伍ID, 然后从这个队伍ID 里就可以找到敌人 ID 了.

评分

参与人数 1星屑 +70 收起 理由
Password + 70 精品文章

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
96 小时
注册时间
2013-9-21
帖子
112
3
 楼主| 发表于 2013-10-23 17:32:21 | 只看该作者
本帖最后由 耀眼的毛玉 于 2013-10-23 18:15 编辑
铃仙·优昙华院·因幡 发表于 2013-10-22 10:14
Scene_Battle 都是从 $game_troop 和 $game_party 获取敌人和主角的数据的.

在战斗开始之前, 比如用事件 ...


那如果想在某个troop中为某个特定敌人设定特殊脚本(比如其某技能伤害是正常的二倍),需要在Game_Battler里面设法表示这个敌人时,怎么表示啊?(要求只有在这个troop中有这个效果)


补充:现在使用的是
if not (user.actor?) and user.enemy_id == $data_troops[troop_id].members[member_id].enemy_id and user.letter == 'enemy_letter'
比如if not (user.actor?) and user.enemy_id == $data_troops[31].members[0].enemy_id and user.letter == '一'
虽然理论来讲不会出现BUG吧,但是这样写感觉很山寨……有没有更简单正式的方法

再补充:忘了加上队伍id判断了……需按楼下方法加上
回复 支持 反对

使用道具 举报

Lv2.观梦者

狂気の月兔

梦石
0
星屑
276
在线时间
1245 小时
注册时间
2009-4-7
帖子
879

贵宾

4
发表于 2013-10-23 18:00:48 | 只看该作者
耀眼的毛玉 发表于 2013-10-23 17:32
那如果想在某个troop中为某个特定敌人设定特殊脚本(比如其某技能伤害是正常的二倍),需要在Game_Battle ...


你可以从 Game_Battler 的 make_obj_damage_value 动手脚.

比如说要判断队伍 ID 为 2, 敌人ID 为 3, 技能 ID 为 4 的时候, 伤害加倍. 那么可以这么写:

RUBY 代码复制
  1. class Game_Troop < Game_Unit
  2.   attr_reader :troop_id
  3. end
  4.  
  5. def make_obj_damage_value(user, obj)
  6.   damage = 0
  7.    unless user.actor?   # 如果攻击者不是角色, 也就是 敌人的话
  8.      if $game_troop.troop_id == 2   # 如果 敌人队伍的 ID 为 2
  9.        if user.enemy.id == 3 # 攻击者是三号敌人, 那么
  10.          if obj.id == 4    # 技能 ID 是 4
  11.             damage = obj.base_damage * 2                        # 基础计算 * 2
  12.         end
  13.       end
  14.     end
  15.    end
  16.    damage = obj.base_damage if  damage ==  0                  # 基础计算
  17.     if damage > 0                                   # 若伤害为正
  18.       damage += user.atk * 4 * obj.atk_f / 100      # 使用者攻击力关系度
  19.       damage += user.spi * 2 * obj.spi_f / 100      # 使用者精神力关系度
  20.       unless obj.ignore_defense                     # 除非无视防御力
  21.         damage -= self.def * 2 * obj.atk_f / 100    # 目标攻击力关系度
  22.         damage -= self.spi * 1 * obj.spi_f / 100    # 目标精神力关系度
  23.       end
  24.       damage = 0 if damage < 0                      # 设负数伤害为0
  25.     elsif damage < 0                                # 若伤害为负
  26.       damage -= user.atk * 4 * obj.atk_f / 100      # 使用者攻击力关系度
  27.       damage -= user.spi * 2 * obj.spi_f / 100      # 使用者精神力关系度
  28.     end
  29.     damage *= elements_max_rate(obj.element_set)    # 属性校正
  30.     damage /= 100
  31.     damage = apply_variance(damage, obj.variance)   # 分散度
  32.     damage = apply_guard(damage)                    # 防御校正
  33.     if obj.damage_to_mp  
  34.       @mp_damage = damage                           # 伤害魔力
  35.     else
  36.       @hp_damage = damage                           # 伤害体力
  37.     end
  38.   end


写法上为了好理解, 所以代码上有点绕.
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
96 小时
注册时间
2013-9-21
帖子
112
5
 楼主| 发表于 2013-10-23 18:21:32 | 只看该作者
本帖最后由 耀眼的毛玉 于 2013-10-23 18:22 编辑
铃仙·优昙华院·因幡 发表于 2013-10-23 18:00
你可以从 Game_Battler 的 make_obj_damage_value 动手脚.

比如说要判断队伍 ID 为 2, 敌人ID 为 3, 技 ...


if user.enemy.id == 3 这一句貌似和if user.enemy_id == 3一样……这样如果这个队伍中有2个或以上3号敌人的话这两个敌人都会得到同样的效果,如果想只让其中一个获得效果是不是只能用def letter啊……?
回复 支持 反对

使用道具 举报

Lv2.观梦者

狂気の月兔

梦石
0
星屑
276
在线时间
1245 小时
注册时间
2009-4-7
帖子
879

贵宾

6
发表于 2013-10-23 18:38:12 | 只看该作者
耀眼的毛玉 发表于 2013-10-23 18:21
if user.enemy.id == 3 这一句貌似和if user.enemy_id == 3一样……这样如果这个队伍中有2个或以上3号敌 ...

差不多就是.

多个可以用数组, 比如 1 3 5 9 ID 的判断, 可以这样:

[1, 3, 5, 9].inlude?(user.enemy.id)

评分

参与人数 1梦石 +1 收起 理由
Luciffer + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-22 11:56

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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