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

Project1

 找回密码
 注册会员
搜索
楼主: 间桐樱
打印 上一主题 下一主题

[有事请教] 我又跳出来了,关于双持【已解决】

[复制链接]

Lv5.捕梦者

梦石
0
星屑
36196
在线时间
10725 小时
注册时间
2009-3-15
帖子
4826
11
发表于 2025-2-24 23:14:01 | 只看该作者
srwjrevenger 发表于 2025-2-24 21:58
怎么能放弃啊!?
我们掉进过的坑必须得把它埋了(滑稽)

大佬你埋吧
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
283
在线时间
79 小时
注册时间
2024-4-13
帖子
27
12
发表于 2025-2-25 20:10:06 | 只看该作者
本帖最后由 chen12311 于 2025-2-25 20:28 编辑

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

点评

感谢大佬,完美解决了  发表于 2025-2-25 20:31
现在还有一点点小问题,就是没双持的剑盾队友虽然不会切换到双持,但是盾会被卸下来......  发表于 2025-2-25 20:20
不需要道歉,本来就是咱在求助大佬  发表于 2025-2-25 20:19
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1772
在线时间
100 小时
注册时间
2017-9-5
帖子
176
13
 楼主| 发表于 2025-2-25 21:21:09 | 只看该作者
chen12311 发表于 2025-2-25 20:10
class Game_BattlerBase
  attr_accessor :equip_switch
  def switch

大佬,有时间能帮我改一下连续按两次CTRL再切换武器风格吗?
下边这个是我之前请教遗忘技能的时候,某位大佬写的脚本,一秒内按两次CTRL才触发
我试着改了一下加到切换装备里,然而没成功
  def process_ctrl
    Sound.play_ok
    if Time.now - (@last_ctrl_time || Time.at(0)) < 1
      Sound.play_ok
      Input.update
      call_handler(:CTRL)
    end
    @last_ctrl_time = Time.now
  end
end
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
283
在线时间
79 小时
注册时间
2024-4-13
帖子
27
14
发表于 2025-2-26 08:01:29 | 只看该作者
本帖最后由 chen12311 于 2025-2-26 09:50 编辑
  1.   def process_change
  2.     if Time.now - (@last_ctrl_time || Time.at(0)) < 1
  3.       Audio.se_play("Audio/SE/Equip1", 90, 100)
  4.       Input.update
  5.       activate
  6.       call_handler(:change)
  7.     end
  8.     @last_ctrl_time = Time.now
  9.   end
复制代码

#已更新
你那个道具丢出的插件我能看看吗

点评

但是我还加了两次CTRL键呼出道具扔掉的脚本,这个跟遗忘技能脚本就没冲突QAQ  发表于 2025-2-26 09:47
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1772
在线时间
100 小时
注册时间
2017-9-5
帖子
176
15
 楼主| 发表于 2025-2-26 09:36:34 | 只看该作者
本帖最后由 间桐樱 于 2025-2-26 09:40 编辑


还是只按一次就切换武器,不过我找到问题所在了,出在技能遗忘脚本,不知道冲突原因在哪儿,这两个都是按两次CTRL生效,删掉技能遗忘脚本,装备切换就变成正常两次生效,但我又不可能删
#==============================================================================
# ■ Scene_Skill
#==============================================================================
class Scene_Skill < Scene_ItemBase
  #--------------------------------------------------------------------------
  # ● アイテムウィンドウの作成
  #--------------------------------------------------------------------------
  def create_item_window
    wx = 0
    wy = @status_window.y + @status_window.height
    ww = Graphics.width
    wh = Graphics.height - wy
    @item_window = Window_SkillList.new(wx, wy, ww, wh)
    @item_window.actor = @actor
    @item_window.viewport = @viewport
    @item_window.help_window = @help_window
    @item_window.set_handler(:ok,     method(:on_item_ok))
    @item_window.set_handler(:cancel, method(:on_item_cancel))
    @item_window.set_handler(:CTRL,   method(:on_item_del))
    @command_window.skill_window = @item_window
  end
  #--------------------------------------------------------------------------
  # ● スキルを忘れる
  #--------------------------------------------------------------------------
  def on_item_del
    if !item.nil?
      skill_id = item.id
      @actor.forget_skill(skill_id)
      @item_window.refresh
    end
  end
end
#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● スキルを忘れる
  #--------------------------------------------------------------------------
  alias _forget_skill_copy forget_skill
  def forget_skill(skill_id)
    _forget_skill_copy(skill_id)
    @copy_skills.delete(skill_id)
  end
end
#==============================================================================
# ■ Window_Selectable
#==============================================================================
class Window_Selectable < Window_Base
  #--------------------------------------------------------------------------
  # ● 決定やキャンセルなどのハンドリング処理
  #--------------------------------------------------------------------------
  def process_handling
    return unless open? && active
    return process_ok       if ok_enabled?        && Input.trigger?(:C)
    return process_cancel   if cancel_enabled?    && Input.trigger?(:B)
    return process_pagedown if handle?(:pagedown) && Input.trigger?(:R)
    return process_pageup   if handle?(:pageup)   && Input.trigger?(:L)
    return process_ctrl     if Input.trigger?(:CTRL)
  end
  #--------------------------------------------------------------------------
  # ● CTRL ボタン(CTRL)が押されたときの処理
  #--------------------------------------------------------------------------
  def process_ctrl
    Sound.play_ok
    if Time.now - (@last_ctrl_time || Time.at(0)) < 1
      Sound.play_ok
      Input.update
      call_handler(:CTRL)
    end
    @last_ctrl_time = Time.now
  end
end
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1772
在线时间
100 小时
注册时间
2017-9-5
帖子
176
16
 楼主| 发表于 2025-2-26 10:26:53 | 只看该作者
chen12311 发表于 2025-2-26 08:01
#已更新
你那个道具丢出的插件我能看看吗

这个就是道具丢弃的脚本,和遗忘脚本一样都是两次CTRL,但不知道为什么不冲突
#==============================================================================
# ■ Window_ItemList
#==============================================================================
class Window_ItemList < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 決定やキャンセルなどのハンドリング処理
  #--------------------------------------------------------------------------
  def process_handling
    return unless open? && active
    return call_handler(:append_ctrl) if handle?(:append_ctrl) && Input.trigger?(:CTRL)
    super
  end
end
#==============================================================================
# ■ Window_ItemNumber
#==============================================================================
class Window_ItemNumber < Window_ShopNumber
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_reader   :number                   # 入力された個数
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    x = (Graphics.width - window_width) / 2
    super(x, 200, line_height * 2 + 32)
    @item = nil
    @Max = 1
    @number = 1
  end
  #--------------------------------------------------------------------------
  # ● アイテム、最大個数の設定
  #--------------------------------------------------------------------------
  def set(item, max)
    @item = item
    @max = max
    @number = 1
    refresh
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    contents.draw_text(0, 0, 200, line_height, "捨てる数:")
    draw_item_name(@item, 4, line_height)
    draw_number
  end
  #--------------------------------------------------------------------------
  # ● アイテム名表示行の Y 座標
  #--------------------------------------------------------------------------
  def item_y
    line_height
  end
end
#==============================================================================
# ■ Scene_Item
#==============================================================================
class Scene_Item < Scene_ItemBase
  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  alias start_dump start
  def start
    start_dump
    create_item_dump_window
  end
  #--------------------------------------------------------------------------
  # ● アイテムウィンドウの作成
  #--------------------------------------------------------------------------
  alias create_item_window_dump create_item_window
  def create_item_window
    create_item_window_dump
    @item_window.set_handler(:append_ctrl, method(:on_item_dump))
  end
  #--------------------------------------------------------------------------
  # ● アイテム数選択ウィンドウの作成
  #--------------------------------------------------------------------------
  def create_item_dump_window
    @number_window = Window_ItemNumber.new
    @number_window.viewport = @viewport
    @number_window.hide
    @number_window.set_handler(:ok,     method(:on_number_ok))
    @number_window.set_handler(:cancel, method(:on_number_cancel))
  end
  #--------------------------------------------------------------------------
  # ● アイテム[捨てる]
  #--------------------------------------------------------------------------
  def on_item_dump
    if item_dumpable?
      Sound.play_ok
      if Time.now - (@last_ctrl_time || Time.at(0)) < 1
        Sound.play_ok
        @number_window.set(item, max_item)
        @number_window.show.activate
        @item_window.deactivate
      else
        Sound.play_buzzer
      end
    end
    @last_ctrl_time = Time.now
  end
  #--------------------------------------------------------------------------
  # ● 個数入力[決定]
  #--------------------------------------------------------------------------
  def on_number_ok
    Sound.play_ok
    do_item_dump(@number_window.number)
    @number_window.hide
    activate_item_window
  end
  #--------------------------------------------------------------------------
  # ● 個数入力[キャンセル]
  #--------------------------------------------------------------------------
  def on_number_cancel
    Sound.play_cancel
    @number_window.hide
    activate_item_window
  end
  #--------------------------------------------------------------------------
  # ● 捨てるの実行
  #--------------------------------------------------------------------------
  def do_item_dump(number)
    $game_party.lose_item(item, number)
  end
  #--------------------------------------------------------------------------
  # ● アイテムを捨てる判定
  #--------------------------------------------------------------------------
  def item_dumpable?
    item.is_a?(RPG::Item) ? !item.key_item? : (!item.nil?)
  end
  #--------------------------------------------------------------------------
  # ● 所持数の取得
  #--------------------------------------------------------------------------
  def max_item
    $game_party.item_number(item)
  end
end
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
283
在线时间
79 小时
注册时间
2024-4-13
帖子
27
17
发表于 2025-2-26 10:34:36 | 只看该作者
本帖最后由 chen12311 于 2025-2-26 11:35 编辑
间桐樱 发表于 2025-2-26 10:26
这个就是道具丢弃的脚本,和遗忘脚本一样都是两次CTRL,但不知道为什么不冲突
#======================== ...


因为所用到的地方不一样
一个是Scene_Equip
另一个是Scene_Item
#好吧,放错了,实际上还得看新手教程
放错了,我的问题
再根据游戏设置,这是所对应的,还有就是不要整与其产生冲突的键位,比如上下左右确认取消键
esc不行是因为他对应的键位为B,而b是取消
在Window_Selectable有写
  1.   #--------------------------------------------------------------------------
  2.   # ● “确定”和“取消”的处理
  3.   #--------------------------------------------------------------------------
  4.   def process_handling
  5.     return unless open? && active
  6.     return process_ok       if ok_enabled?        && Input.trigger?(:C)
  7.     return process_cancel   if cancel_enabled?    && Input.trigger?(:B)
  8.     return process_pagedown if handle?(:pagedown) && Input.trigger?(:R)
  9.     return process_pageup   if handle?(:pageup)   && Input.trigger?(:L)
  10.   end
复制代码

1.png (88.08 KB, 下载次数: 5)

1.png

2.png (7.06 KB, 下载次数: 5)

2.png

点评

大佬,我再多问一句,切换完成后添加个冷却一秒要怎么做,技能遗忘和双持切换都有这个问题,需要连续两次按键触发,但后续继续按都会连上  发表于 2025-2-26 14:56
谢谢大佬,我把切换放到ALT键上了,这下舒服了  发表于 2025-2-26 11:36
Esc我也试过,不知道为什么不成功  发表于 2025-2-26 11:26
我把技能遗忘扔到del键失败,是不是要加那个全键位脚本,不知道怎么用  发表于 2025-2-26 11:10
只能改键位了吗,va的键位本来就少......  发表于 2025-2-26 11:05
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
283
在线时间
79 小时
注册时间
2024-4-13
帖子
27
18
发表于 2025-2-26 15:35:47 | 只看该作者
本帖最后由 chen12311 于 2025-2-26 16:22 编辑

这样子
这个是你的忘掉技能的插件
  1.   def on_item_del
  2.     if !item.nil?
  3.       skill_id = item.id
  4.       @actor.forget_skill(skill_id)
  5.       @item_window.refresh
  6.       sleep(1)
  7.     end
  8.   end
复制代码

切换装备的
  1.   def on_item_change
  2.     if [email protected]
  3.       @actor.switch_open
  4.     elsif @actor.switch
  5.       @actor.switch_closs
  6.     end
  7.     @slot_window.refresh
  8.     sleep(1)
  9.   end
复制代码

替换掉就行

点评

确实有问题,这个是武器切换速度,不是切换后的冷却速度......  发表于 2025-2-26 15:54
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6065
在线时间
1439 小时
注册时间
2015-7-25
帖子
611

极短25参与开拓者

19
发表于 2025-2-26 16:17:36 | 只看该作者
强制按两次才能触发切换
RUBY 代码复制
  1. def process_change
  2.     if Time.now - (@last_ctrl_time || Time.at(0)) < 1
  3.       Audio.se_play("Audio/SE/Equip1", 90, 100)
  4.       Input.update
  5.       activate
  6.       call_handler(:change)
  7.       @last_ctrl_time = nil
  8.     else
  9.       @last_ctrl_time = Time.now
  10.     end
  11.   end

点评

是sleep的问题,删掉后成功了  发表于 2025-2-26 16:28
换个干净的工程测试  发表于 2025-2-26 16:26
无法触发,按多少次都没有反应  发表于 2025-2-26 16:23
目前的坑
??? #像素风OC游戏 准备中 短篇-约5小时
花城梦之心 #像素风OC游戏 系统开发+素材绘制中
【不可思议的迷宫】幽灵契约外传:歌莉娅 v0.31 (但文件尚未上传,请稍等...
同时更新中~
这是属于笨肉包一个人的旅行~(再见了...蚊子湯,七重酱,笨肉包永远想你们!TwT
旅途的最终目标~ ???(保密~
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
283
在线时间
79 小时
注册时间
2024-4-13
帖子
27
20
发表于 2025-2-26 16:24:53 | 只看该作者
可能是因为sleep,把sleep删除再试试

点评

删掉了,成功了  发表于 2025-2-26 16:30
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2025-4-2 06:04

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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