查看: 1469|回复: 2

[有事请教] 如何不依靠状态的情况下,使防具可以增加某属性技能伤害

[复制链接]

素材区好人

梦石
5
星屑
12559
在线时间
4345 小时
注册时间
2011-7-21
回帖
2264

超评测参与极短28参与极短27参与极短26参与极短25参与极短24参与极短23参与极短22参与极短21参与

发表于 2025-7-12 07:07:21 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 无忧谷主幻 于 2025-7-13 02:54 编辑

因为装备扩展,角色可能会装备2个同样的防具,这种情况还用状态法的话,只能享受1个装备的属性伤害提升
如何让装备本身附带属性的伤害提升?比如装备一个石手镯,土属性技能伤害会提升20%,若是装备2个石手镯,那么土属性技能伤害将会提升40%
整合工程
轩辕菜单 复杂物品分类.zip (486.85 KB, 下载次数: 7)
11.png
梦石
0
星屑
42235
在线时间
6017 小时
注册时间
2006-11-10
回帖
6966
发表于 2025-7-12 10:38:52 | 显示全部楼层
本帖最后由 灯笼菜刀王 于 2025-7-12 11:02 编辑
  1. module RPG
  2.   class Weapon
  3.     def description
  4.       description = @description.split(/#/)[0]
  5.       return description != nil ? description : ''
  6.     end
  7.     def 属强(ele_id)
  8.       @description =~ /E#{ele_id}([-+0-9]+)/ ;return $1.to_i
  9.     end
  10.   end
  11.   class Armor
  12.     def description
  13.       description = @description.split(/#/)[0]
  14.       return description != nil ? description : ''
  15.     end
  16.     def 属强(ele_id)
  17.       @description =~ /E#{ele_id}([-+0-9]+)/ ;return $1.to_i
  18.     end
  19.   end
  20.   class State
  21.     def name
  22.       name = @name.split(/#/)[0]
  23.       return (name || @name)
  24.     end
  25.     def 属强(ele_id)
  26.       @name =~ /E#{ele_id}([-+0-9]+)/ ;return $1.to_i
  27.     end
  28.   end
  29. end

  30. class Game_Actor < Game_Battler
  31.   def 属强(ele_list)
  32.     m = 100 ; f = [] ;7.times{|i| eval("f.push(@armor#{i + 1}_id)")}
  33.     ele_list.each{|i| if (a=$data_weapons[@weapon_id]) != nil ;m += a.属强(i) ;end ;
  34.     7.times{|j| if (a=$data_armors[f[j]]) != nil ;m += a.属强(i) ;end} ;
  35.     @states.each{|j| m += $data_states[j].属强(i)}}
  36.     return m / 100.0
  37.   end
  38. end

  39. class Game_Enemy < Game_Battler
  40.   def 属强(ele_list)
  41.     m = 100 ;ele_list.each{|i| @states.each{|j| m += $data_states[j].属强(i)}}
  42.     return m / 100.0
  43.   end
  44. end
复制代码


把这个脚本塞到main前, 你的道具分类脚本以下

然后在武器和防具的说明里, 用 #隔开, 然后写上 E1+20   这样表示 1号属性伤害 + 20%;  E8-10 这样表示 8号属性伤害 - 10% (E1+10不能有空格)
也可以用于状态, 在状态名称里一样用 # 隔开, 然后同样备注即可

未标题-1.jpg
▲#前是正常说明, @后面是分类标志, 备注就写在#和@中间, 可以复数属性加减, 此时技能如果带有复数属性, 会根据对应的设置对总倍率进行叠加计算, 注意如果计算结果小于0%就会变吸收了

然后, 到你的伤害公式里, 默认的话就搜索 def skill_effect(user, skill)  ; 找到 self.hp -= self.damage 这句, 上面加上  self.damage = (self.damage * user.属强(skill.element_set)).round

普通攻击搜索 def attack_effect(attacker) , 同样找到 self.hp -= self.damage,  上面加上 self.damage = (self.damage * attacker.属强(attacker.element_set)).round

没做测试, 有BUG再说


点评

感谢,一下子就解决了  发表于 2025-7-13 19:47

评分

参与人数 1赞 +1 收起 理由
无忧谷主幻 + 1 认可答案

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部