Project1

标题: 写了一段技能公式,但大有问题,求大大修改。 [打印本页]

作者: 银色子夜    时间: 2015-5-31 13:14
标题: 写了一段技能公式,但大有问题,求大大修改。
a.state?(79) ? a.atk * 10 - b.def : a.atk - b.def;a.remove_state(79)

原本想实现一个隐身背刺的效果,即当使用者处于79号状态(隐身)时,使用该技能则必然暴击(但不知道怎么写必然暴击,只好写成atk * 10),否则普通伤害。然后将自身的隐身状态移除。
结果不知道是不是程序本身的逻辑只会获取最后一条语句的数值,如果最后一条语句没有数值,那么技能就不会产生伤害。
我的写法会导致光执行最后一句remove_state,不产生伤害。去掉remove则正常产生伤害。


脚本几乎不懂,还望大大指教,怎么写才能实现我要的隐身状态下使用该技能攻击必然暴击,并移除隐身状态,否则普通攻击伤害。
作者: VIPArcher    时间: 2015-5-31 13:17
本帖最后由 VIPArcher 于 2015-5-31 13:22 编辑

把移除状态放到技能效果里面,技能公式请务必注意最终的返回值必须是数值。
然后技能的使用效果里移除使用者自身的79号状态,可以利用技能触发公共事件来达成
或者公式改成这样
  1. a.state?(79) ? (a.remove_state(79);a.atk * 10 - b.def) : a.atk - b.def
复制代码
未测试
作者: 银色子夜    时间: 2015-5-31 17:06
VIPArcher 发表于 2015-5-31 13:17
把移除状态放到技能效果里面,技能公式请务必注意最终的返回值必须是数值。
然后技能的使用效果里移除使用 ...

大大知道怎么写才能让这一击的暴击率是100%么?
如果单纯是使atk倍率翻十倍,打出暴击的话伤害会暴表。。。不太合理。。。
作者: howhow1314    时间: 2015-6-1 11:13
本帖最后由 howhow1314 于 2015-6-1 11:14 编辑

RUBY 代码复制
  1. class Game_Battler
  2.   def crit(v)
  3.     @result.critical = (rand < v)
  4.   end
  5. end

插在main前,然後在技能公式前加上
  1. b.crit(1);
复制代码
就可以必然暴擊,也可以
  1. b.crit(0.5);
复制代码
50%暴擊(不受攻擊方的暴擊率和被攻擊方的迴避暴擊率影響)
作者: 银色子夜    时间: 2015-6-1 21:03
howhow1314 发表于 2015-6-1 11:13
class Game_Battler
  def crit(v)
    @result.critical = (rand < v)

饿。。。这么写的话不知为何不会移除隐身状态,也不会暴击。。。
作者: 银色子夜    时间: 2015-6-2 01:35
本帖最后由 银色子夜 于 2015-6-2 01:39 编辑

一开始以为是忘记插入脚本,但确认插入后
a.state?(79) ? (a.remove_state(79);b.crit(1);a.atk - b.def;) : a.atk - b.def
试着写成则怪物不会受到伤害
写成
a.state?(79) ? (b.crit(1);a.remove_state(79);a.atk - b.def;) : a.atk - b.def
则状态也不会移除了
似乎公式执行到b.crit(1);就不会继续执行了?
作者: howhow1314    时间: 2015-6-2 08:39
银色子夜 发表于 2015-6-2 01:35
一开始以为是忘记插入脚本,但确认插入后
a.state?(79) ? (a.remove_state(79);b.crit(1);a.atk - b.def;)  ...

你寫錯了……首先你得知道;是幹嘛用的
作者: 银色子夜    时间: 2015-6-3 10:30
howhow1314 发表于 2015-6-2 08:39
你寫錯了……首先你得知道;是幹嘛用的

(b.crit(1);a.remove_state(79)) if a.state?(79);a.atk - b.def
也是同样的情况呀。。。
作者: 银色子夜    时间: 2015-6-4 12:29
howhow1314 发表于 2015-6-2 08:39
你寫錯了……首先你得知道;是幹嘛用的

mian前面 其他脚本后面
作者: howhow1314    时间: 2015-6-4 14:31
银色子夜 发表于 2015-6-4 12:29
mian前面 其他脚本后面

你把這腳本插到main前,再試試

RUBY 代码复制
  1. class RPG::UsableItem::Damage
  2.   def eval(a, b, v)
  3.     [Kernel.eval(@formula), 0].max * sign
  4.   end
  5. end


插了技能公式出錯會報錯,你把報錯內容發上來
作者: morningboo    时间: 2015-6-4 22:11
本帖最后由 morningboo 于 2015-6-4 22:17 编辑

奇了怪了,为什么不在 ● 计算技能/物品的必杀几率那里做文章,反而纠结这个伤害公式,只要判断技能发动者是否处于隐身状态下,如果处于直接应用暴击不就行了?
RUBY 代码复制
  1. if user.state?(79)     # 如果技能使用者处于79状态下
  2.      return 1     #暴击率100%
  3.      else
  4.      user.cri * (1 - cev)

未测试
作者: 银色子夜    时间: 2015-6-10 21:48
。。。。特神奇。。。我试着插入你的那段脚本之后,不但没有报错,而且技能公式突然正常运作了。。。
ORZ。。。。
删掉这段脚本之后仍然正常。。。
之前难道是软件BUG




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1