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

Project1

 找回密码
 注册会员
搜索

[已解决]属性有效度设置属性相克疑问?

查看数: 6708 | 评论数: 10 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2020-8-12 19:52

正文摘要:

本帖最后由 miantouchi 于 2020-8-20 19:17 编辑 如图,我把这个怪物设置为水的属性有效度设置为D,通过识出, 金、木、水、火、土,如果哪个属性被标注D,则就在战斗时显示对应属性的字。 但是现在发现,这么做的 ...

回复

miantouchi 发表于 2020-8-20 19:05:57
灯笼菜刀王 发表于 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)  #水属性,吸收
89444640 发表于 2020-8-16 16:36:07
本帖最后由 89444640 于 2020-8-16 16:39 编辑
SailCat 发表于 2020-8-16 16:14
五行的系统是很复杂的,因为每一个属性会同时受到其他4个属性的影响,同时还不能受到自身属性的影响
但是这 ...


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

点评

VA以上的数据库可以自由设置百分比,但是下限不能低于0,不能吸收,等于直接废了五行生克系统。 XP这边直接改element_correct里面那个表就可以了  发表于 2020-8-16 16:51

评分

参与人数 1+1 收起 理由
miantouchi + 1 我很赞同

查看全部评分

SailCat 发表于 2020-8-16 16:14:57
本帖最后由 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项,不过你可以通过复制敌人模板来防止设定出错。

点评

思路太强大了,我现在就想到克制的,如果克制的完善了,慢慢的把你说的剩下的地方完善下,应该说是就是。 这下好了,思路有了,范例刀王也给...  发表于 2020-8-20 19:16

评分

参与人数 2星屑 +40 +1 收起 理由
RyanBern + 40 我很赞同
miantouchi + 1 精品文章

查看全部评分

灯笼菜刀王 发表于 2020-8-15 21:43:15
本帖最后由 灯笼菜刀王 于 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而变成普通伤害哦

点评

谢谢,我研究下。。(#^.^#)  发表于 2020-8-15 22:45

评分

参与人数 2星屑 +80 +1 收起 理由
RyanBern + 80 认可答案
miantouchi + 1 认可答案

查看全部评分

ada01 发表于 2020-8-15 18:32:49
之前好像有人问过相同的问题...
https://rpg.blue/thread-303762-1-1.html
miantouchi 发表于 2020-8-15 16:20:38
miantouchi 发表于 2020-8-13 21:28
改,Game_Actor和Game_Enemy里面的这个数组对吧
table = [0,200,150,100,50,0,-100]

帮忙整个例子被,一点也不会设计这个东西。
miantouchi 发表于 2020-8-13 21:28:00
灯笼菜刀王 发表于 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]

点评

不只如此, 你甚至可以直接改写整个elements_correct, 用你希望的公式进行属性修正就是了,大不了用穷举的方式详细列出属性相克关系,笑  发表于 2020-8-13 21:49
灯笼菜刀王 发表于 2020-8-12 21:56:47
# 属性修正
self.damage *= elements_correct(attacker.element_set)
self.damage /= 100
miantouchi 发表于 2020-8-12 21:44:16
灯笼菜刀王 发表于 2020-8-12 21:25
只是默认的公式如此设定罢了, 你大可自己改公式, 把伤害公式改成 水A 就等于受土伤害加倍 受水伤 ...

def attack_effect(attacker)
这里写?
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-11-10 20:09

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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