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

Project1

 找回密码
 注册会员
搜索
查看: 169|回复: 6
打印 上一主题 下一主题

[有事请教] 还是因为删除技能的问题【已解决】

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1402
在线时间
84 小时
注册时间
2017-9-5
帖子
123
跳转到指定楼层
1
发表于 2025-2-2 10:10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 间桐樱 于 2025-2-2 12:51 编辑

因为论坛回档,以前的帖子没了,连大佬的脚本都丢了一个

#==============================================================================
# ■ RPG::UsableItem
#==============================================================================
class RPG::UsableItem
  #--------------------------------------------------------------------------
  # ● 偷窃技能的技能かどうかを返す
  #--------------------------------------------------------------------------
  def steal_skill?
    [66].include?(@id)
  end
end
#==============================================================================
# ■ RPG::Item
#==============================================================================
class RPG::Item
  #--------------------------------------------------------------------------
  # ● 盗めるスキルかどうかを返す
  #--------------------------------------------------------------------------
  def can_steal?
    false
  end
end
#==============================================================================
# ■ Game_ActionResult
#==============================================================================
class Game_ActionResult
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :steal_skills
  #--------------------------------------------------------------------------
  # ● クリア
  #--------------------------------------------------------------------------
  alias tmsksteal_game_actionresult_clear clear
  def clear
    tmsksteal_game_actionresult_clear
    @steal_skills = []
  end
  #--------------------------------------------------------------------------
  # ● 何らかのステータス(能力値かステート)が影響を受けたかの判定
  #--------------------------------------------------------------------------
  alias tmsksteal_game_actionresult_status_affected? status_affected?
  def status_affected?
    tmsksteal_game_actionresult_status_affected? || !@steal_skills.empty?
  end
end
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
  #--------------------------------------------------------------------------
  # ● スキル/アイテムの効果適用
  #--------------------------------------------------------------------------
  alias tmsksteal_game_battler_item_apply item_apply
  def item_apply(user, item)
    tmsksteal_game_battler_item_apply(user, item)
    return if user.enemy?
    if item.steal_skill? && @result.hit?
      if enemy?
        enemy.actions.each do |action|
          skill = $data_skills[action.skill_id]
          next if user.skill_learn?(skill)
          @result.steal_skills.push(skill.id)
          user.learn_steal_skill(skill.id)
        end
      else
        skills.each do |skill|
          next if user.skill_learn?(skill)
          @result.steal_skills.push(skill.id)
          user.learn_steal_skill(skill.id)
        end
      end
    end
  end
end
#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● スキルの初期化
  #--------------------------------------------------------------------------
  alias tmsksteal_game_actor_init_skills init_skills
  def init_skills
    @steal_skills = []
    tmsksteal_game_actor_init_skills
  end
  #--------------------------------------------------------------------------
  # ● 追加スキルの取得
  #--------------------------------------------------------------------------
  alias tmsksteal_game_actor_added_skills added_skills
  def added_skills
    result = tmsksteal_game_actor_added_skills
    @steal_skills.each {|id| result.push(id) }
    result
  end
  #--------------------------------------------------------------------------
  # ● スキルの習得済み判定
  #--------------------------------------------------------------------------
  alias tmsksteal_game_actor_skill_learn? skill_learn?
  def skill_learn?(skill)
    return true if tmsksteal_game_actor_skill_learn?(skill)
    skill.is_a?(RPG::Skill) && @steal_skills.include?(skill.id)
  end
  #--------------------------------------------------------------------------
  # ● 盗んだスキルの習得
  #--------------------------------------------------------------------------
  def learn_steal_skill(skill_id)
    @steal_skills.push(skill_id)
  end
end
#==============================================================================
# ■ Window_BattleLog
#==============================================================================
class Window_BattleLog < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 能力強化/弱体の表示
  #--------------------------------------------------------------------------
  alias tmsksteal_window_battlelog_display_changed_buffs display_changed_buffs
  def display_changed_buffs(target)
    tmsksteal_window_battlelog_display_changed_buffs(target)
    display_steal_skill(target)
  end
  #--------------------------------------------------------------------------
  # ● 盗んだスキルの表示
  #--------------------------------------------------------------------------
  def display_steal_skill(target)
    target.result.steal_skills.each do |id|
      replace_text(sprintf("%sを盗んだ!", $data_skills[id].name))
      wait
    end
  end
end

Lv3.寻梦者

梦石
0
星屑
1402
在线时间
84 小时
注册时间
2017-9-5
帖子
123
2
 楼主| 发表于 2025-2-2 10:12:26 | 只看该作者
上边那是盗窃技能的技能,下边是删除技能的按键,但还是之前的问题,下边的脚本只能删除正常升级和学习来的技能,盗窃来的技能无法删除
#==============================================================================
# ■
#==============================================================================
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
#==============================================================================
# ■
#==============================================================================
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
    Input.update
    call_handler(:CTRL)
  end
end
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9692
在线时间
571 小时
注册时间
2017-9-28
帖子
210
3
发表于 2025-2-2 11:34:43 | 只看该作者
看起来只要从 @steal_skills 里删掉就行了,可以增加以下脚本

  1. class Game_Actor < Game_Battler
  2.   alias _forget_skill_steal forget_skill
  3.   def forget_skill(skill_id)
  4.     _forget_skill_steal(skill_id)
  5.     @steal_skills.delete(skill_id)
  6.   end
  7. end
复制代码

点评

变成长按CTRL也行OwO  发表于 昨天 18:26
大佬大佬,能再帮个小忙吗?给脚本加个计数器,按两次CTRL再删除技能,测试的时候总是误删技能(合掌)  发表于 昨天 18:23
感谢大佬,成功删掉了  发表于 2025-2-2 12:51
喵喵喵
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9692
在线时间
571 小时
注册时间
2017-9-28
帖子
210
4
发表于 昨天 22:31 | 只看该作者
按两次CTRL再删除技能

需要 UI 也做相应改动,懒得写了。在上面脚本后面增加以下代码
  1. class Window_Selectable < Window_Base
  2.   def process_ctrl
  3.     # 如果距离上一次按 ctrl 小于 1 秒, 成功触发 ctrl, 否则跳过
  4.     if Time.now - (@last_ctrl_time or Time.at(0)) < 1
  5.       Sound.play_ok
  6.       Input.update
  7.       call_handler(:CTRL)
  8.     end
  9.     @last_ctrl_time = Time.now
  10.   end
  11. end
复制代码


喵喵喵
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-2-24 05:16

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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