Project1

标题: 如何制作一个特定状态下会有额外效果的技能 [打印本页]

作者: 进击の呆呆兽    时间: 2017-7-16 21:12
标题: 如何制作一个特定状态下会有额外效果的技能
比如设置一个叫“食梦”的技能,当对方处于睡眠状态时,会造成伤害然后恢复自身血量,当对方没有处于睡眠状态时,只会造成伤害。就像是这样的效果。
作者: 鑫晴    时间: 2017-7-17 03:11
本帖最后由 鑫晴 于 2017-7-17 03:13 编辑


有一种解决办法,但是效果不太好:

而且只适用在单个敌人的场景

设计2个技能:  

公共事件
分支条件 - 敌人 的状态是  睡眠 时
强制战斗指令:食梦(睡眠状态),上一个目标

修改状态:
关闭受到伤害时解除状态
因为受伤后解除状态的判断时机是“受到伤害马上解除”,而不是“这个回合受到了伤害,回合结束时接触”。






作者: 紫苍焰    时间: 2017-7-17 09:54
……
吸血效果不好做……
伤害差别倒是简单……
作者: 300英雄    时间: 2017-7-17 10:46
Game_Battler里面def make_damage_value(user, item)这一块@result.make_damage(value.to_i, item)<造成伤害,上面都是判定>上面    value = item.damage.eval(user, self, $game_variables)<设置基础伤害,这个是赋值,写在它上面会被覆盖>下面
就行
我的写法
  def make_damage_value(user, item)
    value = item.damage.eval(user, self, $game_variables) #基础伤害(赋值)
    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) #(防御,也就是2号技能的影响)(赋值)
    #因为有好几项赋值建议写在这里

#固定值(目标存在1号状态)
if self.state?(1) (判定目标是否有1号状态)
user.hp += 100#(100随你改变成公式user.atk什么的,TXET那边的100和他对应最好,虽然不冲突。但是你明明扣除了那些,显示却是100,很迷。)
text = sprintf("%s被食梦了\\C[3]%s\\C[0]点血量", self.name, 100) #(解释下%s<跟","后面的一个对一个 第一个对应self.name 第二个对应100.多加按格式填写即可>)(可不加)(只是定义内容是什么,相当于变量=X)
SceneManager.scene.instance_variable_get(:@log_window).add_text(text)#(可不加,不加这一行和上一行两行都删了,不然没意义。)<这行是加入战斗日志>
end

#公式(用攻击力来回复,伤害公式脚本里面的a就是user,b就是self)(目标存在2号状态)
if self.state?(2)
user.hp += user.atk
text = sprintf("%s被食梦了\\C[3]%s\\C[0]点血量", self.name,user.atk)
SceneManager.scene.instance_variable_get(:@log_window).add_text(text)
end

#最简单的,没任何特效(攻击者回复100血量,但是却不显示)
if self.state?(2)
user.hp += 100
end

    @result.make_damage(value.to_i, item)
  end

最后的结尾:a=user b=self
%s相关(简单的理解)text = sprintf(%sA  %sB  %sC,1,2,3)最后的显示是1A 2B 3C为了让你看懂格式我空格了。
X.state?(Y) 判定X是否拥有Y号状态,角色来判断就是$game_actors[1].state?(2) 1号角色是否拥有2号状态 X还可以是$game_troop.members[ID](这个是敌群的位置,0是1,1是2)
一个if 跟一个end,其中多了或者少了会报错。依据事件的如果,结束 else是否则(就是选择了不符合执行其他内容格式(if else end)
所有符号均英文状态,比如你弄了中文(),。那么抱歉,无效且报错
脚本无效相关:全局搜索 def make_damage_value(user, item),前面的脚本会被覆盖
解决方法:
新建脚本
class Game_Battler < Game_BattlerBase
  def make_damage_value(user, item)
    value = item.damage.eval(user, self, $game_variables)
    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
end
就是把这个局部脚本拿出来。加了类(新建很多或者放的很前面被覆盖,均无效)

话说三种挑一种即可。还有什么问题加Q1286124843即可,只要你这个能看懂。我都能解答。不然很难沟通
听说很难。伤害公式都应该知道吧
作者: 300英雄    时间: 2017-7-17 10:49
本帖最后由 300英雄 于 2017-7-17 10:56 编辑

@VIPArcher 。我能不能依据伤害公式脚本做一个教程给他们,下次他们有这种问题可以叫他们看看这个
每一次他们问这个范围里面的东西,我都要复制然后具体给他们做一下。然后讲解。太麻烦的说
状态判定
装备判定
角色判定
敌人判定
属性判定
开关判定
变量判定
具体的效果类
user.hp +=
value +=
add_state()
$game_variables[10086]
rand
额外判定——希亿大大的技能库脚本发现拿来加个user self这样都可以用了
这样真的挺多的。
每次复制讲解也是蛮烦的事情,一次性在一个帖子说明比较的好
顺便问一句:怎么建帖子交流,我现在很想做一个伤害公式脚本的讲解。以后我可以直接说:见伤害公式脚本讲解就行
@VIPArcher
作者: 是猪别乱叫    时间: 2017-7-18 18:40
本帖最后由 是猪别乱叫 于 2017-7-18 18:42 编辑


伤害公式里的(6)是指状态,   b.state?(6)?b.mhp * 0.3 : 1
如果对方处于6号状态,则造成对方HP上限30%的伤害,否则只有1点伤害
作者: 300英雄    时间: 2017-7-18 19:30
相当于我的
if self.state?(6)
user.hp += self.mhp * 0.3
end
为什么没有else的理由是,不存在状态就是原值伤害:不做任何处理
进击の呆呆兽大大可以采用我的伤害公式。如果判定过于麻烦就可以采用,这三行需要伤害公式脚本。然后扔你连接在下方。不懂意思可以看看教程贴,再看不懂你可以去我空间加我QQ
伤害公式教程贴
作者: jianyulei    时间: 2017-7-19 14:15
本帖最后由 jianyulei 于 2017-7-19 14:17 编辑

伤害公式里写入      a.hp+=(a.mhp*0.2).to_i if self.state?(6); a.mat*2-b.mdf
这里设你要回复的HP量为a.mhp*0.2  , 睡眠的ID是6, 技能伤害为a.mat*2-b.mdf
作者: 进击の呆呆兽    时间: 2017-7-29 18:39
300英雄 发表于 2017-7-18 19:30
相当于我的
if self.state?(6)
user.hp += self.mhp * 0.3

最近事情太多,大佬的脚本我有空再试试吧。总之先谢谢帮助了。
作者: 紫苍焰    时间: 2017-9-18 09:49
本帖最后由 紫苍焰 于 2017-9-18 09:50 编辑
是猪别乱叫 发表于 2017-7-18 18:40
伤害公式里的(6)是指状态,   b.state?(6)?b.mhp * 0.3 : 1
如果对方处于6号状态,则造成对方HP上限30% ...


用这个就好做了。处于睡眠状态时给一个变量1赋值1,否则赋值2.
然后技能的使用效果那里选择公共事件,公共事件里先判断条件,如果变量1赋值为1则强制发动技能2回复HP,然后共工事件强制发动技能3造成伤害,如果赋值为2,则直接发动技能3。
作者: 骷髅岛遗老    时间: 2017-9-18 12:59
https://rpg.blue/thread-307316-1-1.html?_dsign=5a9bad8f
跟你讲,这个帖子,赞




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