赞 | 4 |
VIP | 0 |
好人卡 | 24 |
积分 | 0 |
经验 | 15951 |
最后登录 | 2016-1-17 |
在线时间 | 276 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 49
- 在线时间
- 276 小时
- 注册时间
- 2011-6-5
- 帖子
- 133
|
8楼
楼主 |
发表于 2013-5-8 20:20:20
|
只看该作者
本帖最后由 救世小树 于 2013-5-8 20:21 编辑
lirn 发表于 2013-5-8 16:10
如此详细的说明,十分感谢,又有几个补充问题。
1:((b.hp_rate
关于①:
你将 ((b.hp_rate <= 0.15)&&(b.state?(44)!=0)) 作为判断条件,
这里的 b.state?(44) 含义是判断目标是否处于44号状态, 只需要((b.hp_rate <= 0.15)&&(b.state?(44))即可,
若是按照我的例1获取对该状态的抗性,是用 b.state_rate(44),也就是 ((b.hp_rate <= 0.15)&&(b.state_rate(44)!=0))
然后是问号之后的两个式子,冒号之前的式子表示前面的两个条件都满足,
就是目标HP低于15%,且(处于44号状态)(对44号状态抗性不为零),是(a.mat-b.mdf),没问题
冒号之后的式子表示两个条件有一个不满足或都不满足:
(a.mat-b.mdf)&&add_state(45)
这么写是会出问题的:“&&”这个东西表示“且”,用它将两个式子连起来,那么最后它的返回值就一定是“真”或“假”
而我们这里写的是伤害公式,必须让它的结果是一个数字。
我猜你这里是想既造成(a.mat-b.mdf)的伤害,又附加上45号状态,但是公式里写的最后必须能算出数来。
add_state(state_id) 这个方法,是给一个战斗者加上状态用的,在脚本 Game_Battler 第80行定义,没有返回值。
也就是说,如果在公式中加入 add_state(state_id) ,是没有办法算出它的值的。
解决方法有两个:
1.修改脚本,在 Game_Battler 中,给add_state()方法(80行左右)加上返回值“0”(零)就是在 if...end 之后加一行 return 0- def add_state(state_id)
- if state_addable?(state_id)
- add_new_state(state_id) unless state?(state_id)
- reset_state_counts(state_id)
- @result.added_states.push(state_id).uniq!
- end
- return 0
- end
复制代码 然后公式可以写成
((b.hp_rate <= 0.15)&&(b.state_rate(44)!=0))?(a.mat-b.mdf):((a.mat-b.mdf)+add_state(45))
((b.hp_rate <= 0.15)&&b.state?(44))?(a.mat-b.mdf):((a.mat-b.mdf)+add_state(45))
2.进行类型转换add_state(45).to_i ,结果应该也是零,和上面一样加上去就行
((b.hp_rate <= 0.15)&&(b.state_rate(44)!=0))?(a.mat-b.mdf):((a.mat-b.mdf)+add_state(45).to_i)
((b.hp_rate <= 0.15)&&b.state?(44))?(a.mat-b.mdf):((a.mat-b.mdf)+add_state(45).to_i)
最后还有一个注意事项,公式计算是在属性修正,伤害修正,物理魔法修正等等之前的,
如果你的45号状态包含了属性弱化,物理魔法弱化等限制,最终的伤害就会将它们计算在内(减防的限制不算,因为公式里用过了。)
关于②:
复数条件不能很好地写在一行内,你需要打开脚本编辑器,找到6L所说的地方,使用 if或者case 语句进行判断吧,这里提供一个范例:
按照下脚本,只需要在公式栏写上正常的公式即可,当然特殊的公式也能写。- def make_damage_value(user, item)
- value = item.damage.eval(user, self, $game_variables)
- #---------------------------------------------------------------------------------
- #这里写一些比较长的公式
- #---------------------------------------------------------------------------------
- if item.is_a?(RPG::Skill)
- case item.id
- when 142
- value = (user.mat - self.mdf) +
- 10086 + (self.hp_rate < 0.3 ? 10086 : 0)
- when 144
- value = ((self.hp_rate <= 0.15) && (self.state_rate(1)!=0)) ?
- self.add_state(1).to_i :
- (user.mat-self.mdf)
- end
- end
- #-----------------------------------------------------------------------------------
- #这里写大类技能装备修正
- #---------------------------------------------------------------------------------
- if item.is_a?(RPG::Skill)
- case item.id
- when 122,123,124,125,126,127,128#假设这些是所谓“火系魔法”
- if user.armors.include?($data_armors[50])#火之心50号
- value *= 1.5
- end
- if user.armors.include?($data_armors[51])#冰之心51号
- value *= 0.5
- end
- when 233,234,235,236,237 #假设这些是对应的冰系技能
- if user.armors.include?($data_armors[50])#火之心50号
- value *= 0.5
- end
- if user.armors.include?($data_armors[51])#冰之心51号
- value *= 1.5
- end
- when 333,334,335
- if user.armors.include?($data_armors[55])
- value *= 1.5
- end
- when 999
- end
- end
- #----------------------------------------------------------------------------------------
- value *= item_element_rate(user, item)
- value *= pdr if item.physical?
- value *= mdr if item.magical?
- value *= rec if item.damage.recover?
- value = apply_critical(value) if @result.critical
- value = apply_variance(value, item.damage.variance)
- value = apply_guard(value)
- @result.make_damage(value.to_i, item)
- end
复制代码
③.这个就不仅仅是修一下公式就能见效的了。
其实这个东西我也一直在想。我是想做一个魔法盾的状态,有这个状态,伤害就按比例转到mp上,
mp不足就计算剩余的mp能承受多少伤害并从总伤害里扣除,然后一直不懂战斗提示信息该怎么搞。。
比起大神来我还是差得远的,至于你这里的,我可以耍耍小聪明修改一些地方来实现这个效果。。
(很坑的方法)以140号技能为例
脚本Game_ActionResult里如图所示70行左右,加些东西($开头的表示全局变量,随意命名,但注意$必须是英文输入法状态下输入的半角字符。)- if item.is_a?(RPG::Skill) && item.id == 140
- $法力燃烧hp = [@mp_damage - @battler.mp,0].max
- else
- $法力燃烧hp = 0
- end
复制代码
再往下,找到140行左右,加些东西- if $法力燃烧hp != 0
- fmt = @battler.actor? ? Vocab::ActorLoss : Vocab::EnemyLoss
- fmt = sprintf(fmt, @battler.name, Vocab::mp, @mp_damage)
- fmt += "\n" + (@battler.actor? ? Vocab::ActorDamage : Vocab::EnemyDamage)
- re=sprintf(fmt, @battler.name, $法力燃烧hp)
- $法力燃烧hp = 0
- return re
- end
复制代码
再找到 Game_Battler 图示位置,添加黄色高亮
再找到 Window_BattleLog 图示位置,添加黄色高亮- return if item.is_a?(RPG::Skill) && item.id == 140
复制代码
- if item.is_a?(RPG::Skill) && item.id == 140
- add_text(target.result.mp_damage_text)
- wait
- return
- end
复制代码
具体行数可能会有部分差异。
|
评分
-
查看全部评分
|