Project1

标题: 求插件改进 [打印本页]

作者: chen12311    时间: 2025-2-25 16:40
标题: 求插件改进
本帖最后由 chen12311 于 2025-2-26 14:31 编辑

是这样的,想做出双持武器时攻击力提升50%
然后出现了下面的情况

这是双持武器的情况

这是单手拿武器的情况
但是发现战斗时使用强化技能给自己会出现下面的情况(脱武器时的数值为17,脱武器吃了强化技能的数值为34)

这是吃了强化技能脱下武器时单手的情况

这是吃了强化技能脱下武器时双持的情况(实际上数值是正常的更上图一样但是显示是比上面低)
一时之间不知道怎么办,请大佬指点
RUBY 代码复制
  1. module NUI
  2.   Weapon=/<提升[::] (\d+),(\d+)>/
  3. end
  4. class Game_Actor < Game_Battler
  5.   alias param_change param
  6.   def param(param_id)
  7.     value = param_base(param_id) + param_plus(param_id)
  8.     if !dual_wield? && @equip_switch
  9.       if !pan
  10.         value *= param_rate(param_id) * param_buff_rate(param_id)
  11.       else
  12.         weapons.each do |i|
  13.           if i.note =~NUI::Weapon
  14.             if param_id==$1.to_i
  15.               value *= (param_rate(param_id)+($2.to_i*0.01)) * param_buff_rate(param_id)
  16.             end
  17.           else
  18.             value *= param_rate(param_id) * param_buff_rate(param_id)
  19.           end
  20.         end
  21.       end
  22.     elsif dual_wield? && !@equip_switch
  23.       if !pan
  24.         value *= param_rate(param_id) * param_buff_rate(param_id)
  25.       else
  26.         weapons.each do |i|
  27.           if i.note =~NUI::Weapon
  28.             if param_id==$1.to_i
  29.               value *= (param_rate(param_id)+($2.to_i*0.01)) * param_buff_rate(param_id)
  30.             end
  31.           else
  32.             value *= param_rate(param_id) * param_buff_rate(param_id)
  33.           end
  34.         end
  35.       end
  36.     else
  37.       value *= param_rate(param_id) * param_buff_rate(param_id)
  38.     end
  39.     [[value, param_max(param_id)].min, param_min(param_id)].max.to_i
  40.   end
  41.   def pan
  42.     $game_party.battle_members.each do |num|
  43.       if num.equips[0]== nil
  44.         return false
  45.       end
  46.     end
  47.     return true
  48.   end
  49. end

这是另一个
RUBY 代码复制
  1. class Game_BattlerBase
  2.   attr_accessor :equip_switch
  3.   def switch
  4.     @equip_switch
  5.   end
  6.   def switch_open
  7.     @equip_switch=true
  8.   end
  9.   def switch_closs
  10.     @equip_switch=false
  11.   end
  12. end
  13. class Game_Actor < Game_Battler
  14.  
  15.   #--------------------------------------------------------------------------
  16.   # ● 获取装备栏的数组
  17.   #--------------------------------------------------------------------------
  18.  
  19.   alias equip_slots_change equip_slots
  20.   def equip_slots
  21.     if switch
  22.       return [0,1,2,3,4,4,4,4] if dual_wield?
  23.       return [0,0,2,3,4,4,4,4]#装备槽
  24.     end
  25.     equip_slots_change
  26.   end
  27. end
  28.  
  29. class Window_Selectable < Window_Base
  30.   alias process_handling_change process_handling
  31.   def process_handling
  32.     process_handling_change
  33.     return process_change   if handle?(:change)   && Input.trigger?(:CTRL)
  34.   end
  35.  
  36.   def process_change
  37.     Audio.se_play("Audio/SE/Equip1", 90, 100)
  38.     Input.update
  39.     activate
  40.     call_handler(:change)
  41.   end
  42. end
  43. class Scene_Equip < Scene_MenuBase
  44.   alias create_slot_window_equip_change create_slot_window
  45.   def create_slot_window
  46.     create_slot_window_equip_change
  47.     @slot_window.set_handler(:change, method(:on_item_change))
  48.   end
  49.   def on_item_change
  50.     if !@actor.switch
  51.       @actor.switch_open
  52.       @actor.change_equip(1, nil)
  53.     elsif @actor.switch
  54.       @actor.switch_closs
  55.       @actor.change_equip(1, nil)
  56.     end
  57.     @slot_window.refresh
  58.     @item_window.refresh
  59.     @status_window.refresh
  60.   end
  61. end

代码写的太史了
发现另一个问题,就是双持武器时会发生堆叠报错

双持时堆叠错误.png (6.78 KB, 下载次数: 22)

双持时堆叠错误.png

作者: 魔法丶小肉包    时间: 2025-2-25 16:40
把两段都稍微给你改了一下优化了一下代码,按照原顺序完全覆盖你的那两段,但是你得测试一下看看有没有解决问题,我没有做战斗加状态等相关测试,测试完之后反馈给我
第一段
RUBY 代码复制
  1. module NUI
  2.   Weapon=/<提升[::] (\d+),(\d+)>/
  3. end
  4. class RPG::EquipItem
  5.   def item_param_plus
  6.     @note =~ NUI::Weapon ? [$1.to_i,$2.to_i] : nil
  7.   end
  8. end
  9. class Game_Actor < Game_Battler
  10.   def weapons_param_plus
  11.     plus = Hash.new(0)
  12.     weapons.each do |i|
  13.       next unless i.item_param_plus
  14.       plus[i.item_param_plus[0]] = i.item_param_plus[1] * 0.01
  15.     end
  16.     plus
  17.   end
  18.   def param_rate(param_id)
  19.     return super unless @equip_switch || dual_wield?
  20.     features_pi(FEATURE_PARAM, param_id) + weapons_param_plus[param_id]
  21.   end
  22. end

第二段
RUBY 代码复制
  1. class Game_BattlerBase
  2.   attr_accessor :equip_switch
  3. end
  4. class Game_Actor
  5.   alias equip_slots_change equip_slots
  6.   def equip_slots
  7.     return equip_slots_change unless @equip_switch
  8.     return [0,1,2,3,4,4,4,4] if dual_wield?
  9.     return [0,0,2,3,4,4,4,4]#装备槽
  10.   end
  11. end
  12. class Window_Selectable
  13.   alias process_handling_change process_handling
  14.   def process_handling
  15.     process_handling_change
  16.     return process_change if handle?(:change) && Input.trigger?(:CTRL)
  17.   end
  18.   def process_change
  19.     Audio.se_play("Audio/SE/Equip1", 90, 100)
  20.     Input.update
  21.     activate
  22.     call_handler(:change)
  23.   end
  24. end
  25. class Scene_Equip
  26.   alias create_slot_window_equip_change create_slot_window
  27.   def create_slot_window
  28.     create_slot_window_equip_change
  29.     @slot_window.set_handler(:change, method(:on_item_change))
  30.   end
  31.   def on_item_change
  32.     @actor.equip_switch = !@actor.equip_switch
  33.     @actor.change_equip(1, nil)
  34.     @slot_window.refresh
  35.     @item_window.refresh
  36.     @status_window.refresh
  37.   end
  38. end

作者: chen12311    时间: 2025-2-26 15:01
魔法丶小肉包 发表于 2025-2-26 14:41
把两段都稍微给你改了一下优化了一下代码,按照原顺序完全覆盖你的那两段,但是你得测试一下看看有没有解决 ...

战斗测试过程中,原本双持武器的演员用ctrl键转为单手时数值并没有降低回原来的数值,其他的都没有问题了
作者: 间桐樱    时间: 2025-2-26 15:07
帮不了忙,但咱觉得双持加攻击伤害,不如加一次攻击次数,毕竟双持等于两次攻击
作者: chen12311    时间: 2025-2-26 15:20
我稍微修改过后没问题了,感谢大佬帮忙优化的代码,没想到还有这种方式
  1. module NUI
  2.   Weapon=/<提升[::] (\d+),(\d+)>/
  3. end
  4. class RPG::EquipItem
  5.   def item_param_plus
  6.     @note =~ NUI::Weapon ? [$1.to_i,$2.to_i] : nil
  7.   end
  8. end
  9. class Game_Actor < Game_Battler
  10.   def weapons_param_plus
  11.     plus = Hash.new(0)
  12.     weapons.each do |i|
  13.       next unless i.item_param_plus
  14.       plus[i.item_param_plus[0]] = i.item_param_plus[1] * 0.01
  15.     end
  16.     plus
  17.   end
  18.   def param_rate(param_id)
  19.     return super unless (@equip_switch && !dual_wield?) || (!@equip_switch && dual_wield?)
  20.     features_pi(FEATURE_PARAM, param_id) + weapons_param_plus[param_id]
  21.   end
  22. end
复制代码

作者: 间桐樱    时间: 2025-2-28 10:47
本帖最后由 间桐樱 于 2025-3-1 12:43 编辑
魔法丶小肉包 发表于 2025-2-25 16:40
把两段都稍微给你改了一下优化了一下代码,按照原顺序完全覆盖你的那两段,但是你得测试一下看看有没有解决 ...


没事了大佬,我也在用这个切换武器的脚本,原本想知道双持怎么能追加一次攻击伤害,跟双持反手攻击的动画统一一下,结果刚反应过来是共用一个atk
作者: soulsaga    时间: 2025-2-28 23:05
间桐樱 发表于 2025-2-28 10:47
肉包佬,能不能赐我一个双持武器下攻击次数+1脚本呀,我也用了这个切换武器的脚本,只不过被我改成限定只 ...

双持攻击力UP了然后你要打两次..你真的知道双持什么意思吗?




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