Project1

标题: [已解决]属性有效度设置属性相克疑问? [打印本页]

作者: miantouchi    时间: 2020-8-12 19:52
标题: [已解决]属性有效度设置属性相克疑问?
本帖最后由 miantouchi 于 2020-8-20 19:17 编辑

如图,我把这个怪物设置为水的属性有效度设置为D,通过识出,
金、木、水、火、土,如果哪个属性被标注D,则就在战斗时显示对应属性的字。
但是现在发现,这么做的话,
比如这个怪物属性是水,被土克制,完全体现不出来。只能体现出来耐水攻击50%
只能同时把土给调到B或A,再把水调到D,感觉怪怪的。
也就是说标记D的用于显示字用,并且耐受度50%,标记A/B表示相克的。

另外感觉A/B/C/D/E/F默认都是每个档位50%,这个能自由调节吗?

1.png (59.32 KB, 下载次数: 23)

1.png

2.png (73.03 KB, 下载次数: 22)

2.png

作者: 灯笼菜刀王    时间: 2020-8-12 21:25
本帖最后由 灯笼菜刀王 于 2020-8-12 21:26 编辑

只是默认的公式如此设定罢了, 你大可自己改公式, 把伤害公式改成 水A 就等于受土伤害加倍 受水伤害无效


作者: miantouchi    时间: 2020-8-12 21:44
灯笼菜刀王 发表于 2020-8-12 21:25
只是默认的公式如此设定罢了, 你大可自己改公式, 把伤害公式改成 水A 就等于受土伤害加倍 受水伤 ...

def attack_effect(attacker)
这里写?
作者: 灯笼菜刀王    时间: 2020-8-12 21:56
# 属性修正
self.damage *= elements_correct(attacker.element_set)
self.damage /= 100
作者: miantouchi    时间: 2020-8-13 21:28
灯笼菜刀王 发表于 2020-8-12 21:56
# 属性修正
self.damage *= elements_correct(attacker.element_set)
self.damage /= 100

改,Game_Actor和Game_Enemy里面的这个数组对吧
table = [0,200,150,100,50,0,-100]
作者: miantouchi    时间: 2020-8-15 16:20
miantouchi 发表于 2020-8-13 21:28
改,Game_Actor和Game_Enemy里面的这个数组对吧
table = [0,200,150,100,50,0,-100]

帮忙整个例子被,一点也不会设计这个东西。
作者: ada01    时间: 2020-8-15 18:32
之前好像有人问过相同的问题...
https://rpg.blue/thread-303762-1-1.html
作者: 灯笼菜刀王    时间: 2020-8-15 21:43
本帖最后由 灯笼菜刀王 于 2020-8-15 21:46 编辑

栗子就是这样

def 五行相克(element_set)
    return 100 if element_set.empty?
    自身属性 = self.is_a?(Game_Actor) ? $data_classes[self.class_id].element_ranks  :
    $data_enemies[self.id].element_ranks
    a = 100
    if 自身属性[3] == 4  #[nil,金,木,水,火,土], 3就是水属性为D的设置
      a /= 2 if element_set.include?(5) #土属性,双倍伤害
      a /= 50 if element_set.include?(4) #火属性,减半
      a *= 0 if element_set.include?(3)  #水属性,吸收
    end
    #下面一个一个列出属性关系
    return a
end

这样就做好一个属性相克咯, 而且是口袋妖怪式的相乘计算法, 不是XP的"取伤害最高的那个属性来计算", 不过就是只会计算前面5个属性, 后面的全部无视

不计算其他属性的好处就是, 你用属性来作为某些判断的时候(比如全体化), 不会因此干扰到伤害公式,  否则, 如果是默认的公式, 你把武器同时勾上 全体化和火 那就算是攻击 火F(火属性吸收) 的敌人, 也会因为全体化的默认C而变成普通伤害哦
作者: SailCat    时间: 2020-8-16 16:14
本帖最后由 SailCat 于 2020-8-16 16:20 编辑

五行的系统是很复杂的,因为每一个属性会同时受到其他4个属性的影响,同时还不能受到自身属性的影响
但是这个需求并不需要更改脚本中的属性修正设置
本质上只通过数据库设置就能解决了

例如:
金属性的生克关系是:金克木,火克金,金生水,土生金
从金的角度来看就是:
金克制木(攻击木属性等于攻击弱点,但被木属性攻击可以抵抗)
金被火克制(受到火属性攻击有弱点,但攻击火属性会被对方抵抗)
金生水(攻击水属性效果会被对方吸收,但被水属性攻击是普通效果)
金被土发生(受到土属性攻击能够吸收,但攻击土属性是普通效果)
体现在属性的设置上就是
金属性体质:
对金为E(受到本命属性攻击0%受伤,即无效)
对火为A(受到火属性攻击200%受伤)
对土为F(受到土属性攻击-100%受伤)
对水为C(受到水属性攻击没有加成)
对木为D(受到木属性攻击50%受伤)

体质    金   木    水    火    土
对 金   E     A     F      D     C
对 木   D     E     C     F      A
对 水   C     F     E      A     D
对 火   A     C     D     E      F
对 土   F     D     A     C      E

脚本的修改:当五行的属性某项被设置为E(5)时,显示为其本命属性。

需要记住的就是每一个特定五行的角色或者敌人都需要设置出对应的ACDEF项,不过你可以通过复制敌人模板来防止设定出错。
作者: 89444640    时间: 2020-8-16 16:36
本帖最后由 89444640 于 2020-8-16 16:39 编辑
SailCat 发表于 2020-8-16 16:14
五行的系统是很复杂的,因为每一个属性会同时受到其他4个属性的影响,同时还不能受到自身属性的影响
但是这 ...


对,确实默认是这么设置的,不过问题就是比较麻烦,万一上着班干活脑子抽了就该出错了,所以用脚本写使其绝对化,更方便吧?
比如在脚本里给敌人注释"自身属性"=>["木"],就直接调用了脚本里定义的木属性的规则,
这样就不用数据库里来回来去的勾了XD。
然后还有个问题,我觉得50%加上波动有时候伤害还是挺高的,尤其是角色魔攻上来以后,克制再继续加容易伤害破表,那么克制时候我能不能让效果更明显一些,比如木属性打金只有10%的伤害而不是50%,这样视觉上能差一位数,就不会有人拿着抵抗属性磨血去了吧?
作者: miantouchi    时间: 2020-8-20 19:05
灯笼菜刀王 发表于 2020-8-15 21:43
栗子就是这样

def 五行相克(element_set)

  研究了好长时间,好点看明白了,对了,下面这个地方是不是应该改成这样才对
a*= 2 if element_set.include?(5) #土属性,双倍伤害
a /= 2 if element_set.include?(4) #火属性,减半
a *= 0 if element_set.include?(3)  #水属性,吸收




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