查看: 1379|回复: 13

[已经解决] 求插件改进

[复制链接]
梦石
0
星屑
719
在线时间
124 小时
注册时间
2024-4-13
回帖
25
发表于 2025-2-25 16:40:25 | 显示全部楼层 |阅读模式
悬赏50星屑已解决
本帖最后由 chen12311 于 2025-2-26 14:31 编辑

是这样的,想做出双持武器时攻击力提升50%
然后出现了下面的情况
1.png
这是双持武器的情况
2.png
这是单手拿武器的情况
但是发现战斗时使用强化技能给自己会出现下面的情况(脱武器时的数值为17,脱武器吃了强化技能的数值为34)
吃了强化技能脱下武器时单手的情况.png
这是吃了强化技能脱下武器时单手的情况
吃了强化技能脱下武器时双持的情况.png
这是吃了强化技能脱下武器时双持的情况(实际上数值是正常的更上图一样但是显示是比上面低)
一时之间不知道怎么办,请大佬指点
[pre lang="ruby" line="1"]module NUI
  Weapon=/<提升[::] (\d+),(\d+)>/
end
class Game_Actor < Game_Battler
  alias param_change param
  def param(param_id)
    value = param_base(param_id) + param_plus(param_id)
    if !dual_wield? && @equip_switch
      if !pan
        value *= param_rate(param_id) * param_buff_rate(param_id)
      else
        weapons.each do |i|
          if i.note =~NUI::Weapon
            if param_id==$1.to_i
              value *= (param_rate(param_id)+($2.to_i*0.01)) * param_buff_rate(param_id)
            end
          else
            value *= param_rate(param_id) * param_buff_rate(param_id)
          end
        end
      end
    elsif dual_wield? && !@equip_switch
      if !pan
        value *= param_rate(param_id) * param_buff_rate(param_id)
      else
        weapons.each do |i|
          if i.note =~NUI::Weapon
            if param_id==$1.to_i
              value *= (param_rate(param_id)+($2.to_i*0.01)) * param_buff_rate(param_id)
            end
          else
            value *= param_rate(param_id) * param_buff_rate(param_id)
          end
        end
      end
    else
      value *= param_rate(param_id) * param_buff_rate(param_id)
    end
    [[value, param_max(param_id)].min, param_min(param_id)].max.to_i
  end
  def pan
    $game_party.battle_members.each do |num|
      if num.equips[0]== nil
        return false
      end
    end
    return true
  end
end[/pre]
这是另一个
[pre lang="ruby" line="1"]class Game_BattlerBase
  attr_accessor :equip_switch
  def switch
    @equip_switch
  end
  def switch_open
    @equip_switch=true
  end
  def switch_closs
    @equip_switch=false
  end
end
class Game_Actor < Game_Battler

  #--------------------------------------------------------------------------
  # ● 获取装备栏的数组
  #--------------------------------------------------------------------------

  alias equip_slots_change equip_slots
  def equip_slots
    if switch
      return [0,1,2,3,4,4,4,4] if dual_wield?
      return [0,0,2,3,4,4,4,4]#装备槽
    end
    equip_slots_change
  end
end

class Window_Selectable < Window_Base
  alias process_handling_change process_handling
  def process_handling
    process_handling_change
    return process_change   if handle?(:change)   && Input.trigger?(:CTRL)
  end
  
  def process_change
    Audio.se_play("Audio/SE/Equip1", 90, 100)
    Input.update
    activate
    call_handler(:change)
  end
end
class Scene_Equip < Scene_MenuBase
  alias create_slot_window_equip_change create_slot_window
  def create_slot_window
    create_slot_window_equip_change
    @slot_window.set_handler(:change, method(:on_item_change))
  end
  def on_item_change
    if !@actor.switch
      @actor.switch_open
      @actor.change_equip(1, nil)
    elsif @actor.switch
      @actor.switch_closs
      @actor.change_equip(1, nil)
    end
    @slot_window.refresh
    @item_window.refresh
    @status_window.refresh
  end
end[/pre]
代码写的太史了
发现另一个问题,就是双持武器时会发生堆叠报错
双持时堆叠错误.png

最佳答案

查看完整内容

把两段都稍微给你改了一下优化了一下代码,按照原顺序完全覆盖你的那两段,但是你得测试一下看看有没有解决问题,我没有做战斗加状态等相关测试,测试完之后反馈给我 第一段 [pre lang="ruby"]module NUI Weapon=// end class RPG::EquipItem def item_param_plus @note =~ NUI::Weapon ? [$1.to_i,$2.to_i] : nil end end class Game_Actor < Game_Battler def weapons_param_plus plus = Hash.new(0) weapo ...
好累,想摸鱼.......
梦石
0
星屑
6375
在线时间
1473 小时
注册时间
2015-7-25
回帖
609

极短25参与开拓者

发表于 2025-2-25 16:40:26 | 显示全部楼层
把两段都稍微给你改了一下优化了一下代码,按照原顺序完全覆盖你的那两段,但是你得测试一下看看有没有解决问题,我没有做战斗加状态等相关测试,测试完之后反馈给我
第一段
[pre lang="ruby"]module NUI
  Weapon=/<提升[::] (\d+),(\d+)>/
end
class RPG::EquipItem
  def item_param_plus
    @note =~ NUI::Weapon ? [$1.to_i,$2.to_i] : nil
  end
end
class Game_Actor < Game_Battler
  def weapons_param_plus
    plus = Hash.new(0)
    weapons.each do |i|
      next unless i.item_param_plus
      plus[i.item_param_plus[0]] = i.item_param_plus[1] * 0.01
    end
    plus
  end
  def param_rate(param_id)
    return super unless @equip_switch || dual_wield?
    features_pi(FEATURE_PARAM, param_id) + weapons_param_plus[param_id]
  end
end[/pre]
第二段
[pre lang="ruby"]class Game_BattlerBase
  attr_accessor :equip_switch
end
class Game_Actor
  alias equip_slots_change equip_slots
  def equip_slots
    return equip_slots_change unless @equip_switch
    return [0,1,2,3,4,4,4,4] if dual_wield?
    return [0,0,2,3,4,4,4,4]#装备槽
  end
end
class Window_Selectable
  alias process_handling_change process_handling
  def process_handling
    process_handling_change
    return process_change if handle?(:change) && Input.trigger?(:CTRL)
  end
  def process_change
    Audio.se_play("Audio/SE/Equip1", 90, 100)
    Input.update
    activate
    call_handler(:change)
  end
end
class Scene_Equip
  alias create_slot_window_equip_change create_slot_window
  def create_slot_window
    create_slot_window_equip_change
    @slot_window.set_handler(:change, method(:on_item_change))
  end
  def on_item_change
    @actor.equip_switch = !@actor.equip_switch
    @actor.change_equip(1, nil)
    @slot_window.refresh
    @item_window.refresh
    @status_window.refresh
  end
end[/pre]
笨肉包的游戏讨论群932812135 (实时更新) 喜欢的话欢迎加入~
目前的坑
??? #像素风OC游戏 准备中 短篇-约5小时
花城梦之心 #像素风OC游戏 系统开发+素材绘制中
【不可思议的迷宫】幽灵契约外传:歌莉娅 v0.4 游戏文件已更新
同时更新中~ (沉迷摸鱼中~更新速度较慢请见谅w)
这是属于笨肉包一个人的旅行~(这只肉包又在摸鱼!
旅途的最终目标~ ???(保密~
回复

使用道具 举报

梦石
0
星屑
719
在线时间
124 小时
注册时间
2024-4-13
回帖
25
 楼主| 发表于 2025-2-26 15:01:48 | 显示全部楼层
魔法丶小肉包 发表于 2025-2-26 14:41
把两段都稍微给你改了一下优化了一下代码,按照原顺序完全覆盖你的那两段,但是你得测试一下看看有没有解决 ...

战斗测试过程中,原本双持武器的演员用ctrl键转为单手时数值并没有降低回原来的数值,其他的都没有问题了

点评

把战斗中切换的相关脚本发上来  发表于 2025-2-26 15:13
好累,想摸鱼.......
回复

使用道具 举报

梦石
0
星屑
1966
在线时间
112 小时
注册时间
2017-9-5
回帖
157
发表于 2025-2-26 15:07:05 | 显示全部楼层
帮不了忙,但咱觉得双持加攻击伤害,不如加一次攻击次数,毕竟双持等于两次攻击
回复

使用道具 举报

梦石
0
星屑
719
在线时间
124 小时
注册时间
2024-4-13
回帖
25
 楼主| 发表于 2025-2-26 15:20:31 | 显示全部楼层
我稍微修改过后没问题了,感谢大佬帮忙优化的代码,没想到还有这种方式
  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
复制代码
好累,想摸鱼.......
回复

使用道具 举报

梦石
0
星屑
1966
在线时间
112 小时
注册时间
2017-9-5
回帖
157
发表于 2025-2-28 10:47:20 | 显示全部楼层
本帖最后由 间桐樱 于 2025-3-1 12:43 编辑
魔法丶小肉包 发表于 2025-2-25 16:40
把两段都稍微给你改了一下优化了一下代码,按照原顺序完全覆盖你的那两段,但是你得测试一下看看有没有解决 ...


没事了大佬,我也在用这个切换武器的脚本,原本想知道双持怎么能追加一次攻击伤害,跟双持反手攻击的动画统一一下,结果刚反应过来是共用一个atk
回复

使用道具 举报

梦石
0
星屑
39236
在线时间
11155 小时
注册时间
2009-3-15
回帖
4768
发表于 2025-2-28 23:05:28 | 显示全部楼层
间桐樱 发表于 2025-2-28 10:47
肉包佬,能不能赐我一个双持武器下攻击次数+1脚本呀,我也用了这个切换武器的脚本,只不过被我改成限定只 ...

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

点评

啊......伤害是共用一个atk的,算了,还是不改了  发表于 2025-3-1 12:17
主副武器各打一次,不是更难了吗  发表于 2025-3-1 11:57
人傻,没反应过来,之前就想着两把同样的武器了  发表于 2025-3-1 11:56
当然..你要说我双持了速度爆炸的提高能打两下也不是不可以  发表于 2025-3-1 11:43
不是..你装了两把武器就有两把武器的攻击力了...理讹冮来说应该是算主手的武器攻击打一下再算副手武器的攻击打一下  发表于 2025-3-1 11:42
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部