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

Project1

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

[已经解决] 技能杀死不死之身的敌人如何实现?【+50经验】

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
211
在线时间
905 小时
注册时间
2010-9-6
帖子
3229
跳转到指定楼层
1
发表于 2011-7-11 20:49:19 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 fux2 于 2011-7-12 17:46 编辑

听说有一种方法能让不死之身的敌人死掉,是在某技能的使用后调用事件脚本:
$game_troop.enemies[0].immortal = false
但是,当我设置队伍当中某个敌人不死的时候,会突然卡住……无语!
于是我就在那句脚本的下面增加了:$game_troop.enemies[1].immortal = false
然后就不卡了。
但是当我在一个敌人队伍里只有一个这样的敌人的时候,系统直接报错!更无语……
在网上搜到了一些办法,据说“精灵使者”大人有一个办法,看起来挺好,可是,敌人都已经战斗不能了,却还和我打得生龙活虎的,超崩溃啊……
到底有木有办法解决啊!啊啊啊!!!先谢谢各位啦!

`%[BXJK_{%[email protected] (39.03 KB, 下载次数: 0)

`%[BXJK_{%$1$H36P@WFT8I.jpg

G42Z_V03YAK~$WLU[E[IG1F.jpg (24.89 KB, 下载次数: 0)

G42Z_V03YAK~$WLU[E[IG1F.jpg

Lv1.梦旅人

虱子

梦石
0
星屑
121
在线时间
1782 小时
注册时间
2010-6-19
帖子
3597
2
发表于 2011-7-11 21:19:48 | 只看该作者
LZ确定战斗不能这个状态是数据库默认那个么- -

点评

确定及其肯定  发表于 2011-7-12 14:06

http://rpg.blue/thread-175056-1-2.html
PVZ型塔防物一个
http://rpg.blue/thread-155199-1-2.html
RMXP技术讨论区手动认可帖,得到答案请认可
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
211
在线时间
905 小时
注册时间
2010-9-6
帖子
3229
3
 楼主| 发表于 2011-7-12 14:13:24 | 只看该作者
Wind2010 发表于 2011-7-11 21:19
LZ确定战斗不能这个状态是数据库默认那个么- -

具体情况是:
1.当加入了带有脚本$game_troop.enemies[0].immortal = false的技能后,对于队伍里某个不死之身的敌人能够被杀死。但是面对单个不死之身的敌人,系统会报错。
2.当按照精灵使者的说法,直接对敌人附加“战斗不能”状态时,单个不死之身的敌人会被立刻消灭。但是面对队伍当中存在不死之身的敌人,就会出现图片上的情况,怎么也打不死了。
回复

使用道具 举报

Lv1.梦旅人

虱子

梦石
0
星屑
121
在线时间
1782 小时
注册时间
2010-6-19
帖子
3597
4
发表于 2011-7-12 14:28:24 | 只看该作者
本帖最后由 Wind2010 于 2011-7-12 18:20 编辑

$game_troop.enemies[0].immortal = false
0改下吧


LZ改标题后或许这样可以:
  1. class Game_Battler
  2.   L_KILL_IMMORTAL = [66] # 66号技能能杀死不死之身的敌人
  3.   def skill_effect(user, skill)
  4.     # 清除会心一击标志
  5.     self.critical = false
  6.     # 特技的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  7.     # 或者特技的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  8.     if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
  9.        ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
  10.       # 过程结束
  11.       return false
  12.     end
  13.     # 清除有效标志
  14.     effective = false
  15.     # 公共事件 ID 是有效的情况下,设置为有效标志
  16.     effective |= skill.common_event_id > 0
  17.     # 第一命中判定
  18.     hit = skill.hit
  19.     if skill.atk_f > 0
  20.       hit *= user.hit / 100
  21.     end
  22.     hit_result = (rand(100) < hit)
  23.     # 不确定的特技的情况下设置为有效标志
  24.     effective |= hit < 100
  25.     # 命中的情况下
  26.     if hit_result == true
  27.       # 计算威力
  28.       power = skill.power + user.atk * skill.atk_f / 100
  29.       if power > 0
  30.         power -= self.pdef * skill.pdef_f / 200
  31.         power -= self.mdef * skill.mdef_f / 200
  32.         power = [power, 0].max
  33.       end
  34.       # 计算倍率
  35.       rate = 20
  36.       rate += (user.str * skill.str_f / 100)
  37.       rate += (user.dex * skill.dex_f / 100)
  38.       rate += (user.agi * skill.agi_f / 100)
  39.       rate += (user.int * skill.int_f / 100)
  40.       # 计算基本伤害
  41.       self.damage = power * rate / 20
  42.       # 属性修正
  43.       self.damage *= elements_correct(skill.element_set)
  44.       self.damage /= 100
  45.       # 伤害符号正确的情况下
  46.       if self.damage > 0
  47.         # 防御修正
  48.         if self.guarding?
  49.           self.damage /= 2
  50.         end
  51.       end
  52.       # 分散
  53.       if skill.variance > 0 and self.damage.abs > 0
  54.         amp = [self.damage.abs * skill.variance / 100, 1].max
  55.         self.damage += rand(amp+1) + rand(amp+1) - amp
  56.       end
  57.       # 第二命中判定
  58.       eva = 8 * self.agi / user.dex + self.eva
  59.       hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
  60.       hit = self.cant_evade? ? 100 : hit
  61.       hit_result = (rand(100) < hit)
  62.       # 不确定的特技的情况下设置为有效标志
  63.       effective |= hit < 100
  64.     end
  65.     # 命中的情况下
  66.     if hit_result == true
  67.       # 威力 0 以外的物理攻击的情况下
  68.       if skill.power != 0 and skill.atk_f > 0
  69.         # 状态冲击解除
  70.         remove_states_shock
  71.         # 设置有效标志
  72.         effective = true
  73.       end
  74.       # HP 的伤害减法运算
  75.       last_hp = self.hp
  76.       self.hp -= self.damage
  77.       if L_KILL_IMMORTAL.include?(skill.id)
  78.         self.immortal = false if self.hp <= 0
  79.       end
  80.       effective |= self.hp != last_hp
  81.       # 状态变化
  82.       @state_changed = false
  83.       effective |= states_plus(skill.plus_state_set)
  84.       effective |= states_minus(skill.minus_state_set)
  85.       # 威力为 0 的场合
  86.       if skill.power == 0
  87.         # 伤害设置为空的字串
  88.         self.damage = ""
  89.         # 状态没有变化的情况下
  90.         unless @state_changed
  91.           # 伤害设置为 "Miss"
  92.           self.damage = "Miss"
  93.         end
  94.       end
  95.     # Miss 的情况下
  96.     else
  97.       # 伤害设置为 "Miss"
  98.       self.damage = "Miss"
  99.     end
  100.     # 不在战斗中的情况下
  101.     unless $game_temp.in_battle
  102.       # 伤害设置为 nil
  103.       self.damage = nil
  104.     end
  105.     # 过程结束
  106.     return effective
  107.   end
  108. end
复制代码

点评

把0改成其他数字然后弄一个全部不死身旳队伍测试就知道了  发表于 2011-7-12 14:41
那个0,代表什么意思呢?不知道该怎么改的。  发表于 2011-7-12 14:30

http://rpg.blue/thread-175056-1-2.html
PVZ型塔防物一个
http://rpg.blue/thread-155199-1-2.html
RMXP技术讨论区手动认可帖,得到答案请认可
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
88
在线时间
331 小时
注册时间
2010-10-24
帖子
778
5
发表于 2011-7-14 10:58:09 | 只看该作者
在战斗的时候设置战斗事件
当使用XXX时 敌人01死亡
除此以外的场合 敌人01HP=9999

评分

参与人数 1星屑 +2 收起 理由
stevenrock + 2 谢谢参与~

查看全部评分

回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
211
在线时间
905 小时
注册时间
2010-9-6
帖子
3229
6
 楼主| 发表于 2011-7-14 12:48:37 | 只看该作者
Wind2010 发表于 2011-7-12 14:28
$game_troop.enemies[0].immortal = false
0改下吧


原来这样也可以啊~哈哈,谢谢!
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-26 10:45

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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