Project1
标题:
还是因为删除技能的问题【已解决】
[打印本页]
作者:
间桐樱
时间:
2025-2-2 10:10
标题:
还是因为删除技能的问题【已解决】
本帖最后由 间桐樱 于 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
作者:
间桐樱
时间:
2025-2-2 10:12
上边那是盗窃技能的技能,下边是删除技能的按键,但还是之前的问题,下边的脚本只能删除正常升级和学习来的技能,盗窃来的技能无法删除
#==============================================================================
# ■
#==============================================================================
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
作者:
hyrious
时间:
2025-2-2 11:34
看起来只要从 @steal_skills 里删掉就行了,可以增加以下脚本
class Game_Actor < Game_Battler
alias _forget_skill_steal forget_skill
def forget_skill(skill_id)
_forget_skill_steal(skill_id)
@steal_skills.delete(skill_id)
end
end
复制代码
作者:
hyrious
时间:
昨天 22:31
按两次CTRL再删除技能
需要 UI 也做相应改动,懒得写了。在上面脚本后面增加以下代码
class Window_Selectable < Window_Base
def process_ctrl
# 如果距离上一次按 ctrl 小于 1 秒, 成功触发 ctrl, 否则跳过
if Time.now - (@last_ctrl_time or Time.at(0)) < 1
Sound.play_ok
Input.update
call_handler(:CTRL)
end
@last_ctrl_time = Time.now
end
end
复制代码
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1