Project1

标题: 如何不依靠状态的情况下,使防具可以增加某属性技能伤害 [打印本页]

作者: 无忧谷主幻    时间: 7 天前
标题: 如何不依靠状态的情况下,使防具可以增加某属性技能伤害
本帖最后由 无忧谷主幻 于 2025-7-13 02:54 编辑

因为装备扩展,角色可能会装备2个同样的防具,这种情况还用状态法的话,只能享受1个装备的属性伤害提升
如何让装备本身附带属性的伤害提升?比如装备一个石手镯,土属性技能伤害会提升20%,若是装备2个石手镯,那么土属性技能伤害将会提升40%
整合工程
轩辕菜单 复杂物品分类.zip (486.85 KB, 下载次数: 1)

作者: 灯笼菜刀王    时间: 7 天前
本帖最后由 灯笼菜刀王 于 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不能有空格)
也可以用于状态, 在状态名称里一样用 # 隔开, 然后同样备注即可


▲#前是正常说明, @后面是分类标志, 备注就写在#和@中间, 可以复数属性加减, 此时技能如果带有复数属性, 会根据对应的设置对总倍率进行叠加计算, 注意如果计算结果小于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再说







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