这是按两次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)
@last_ctrl_time = nil
else
@last_ctrl_time = Time.now
end
end
end
#==============================================================================
# ■ 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
@last_ctrl_time = nil
else
@last_ctrl_time = Time.now
end
else
Sound.play_buzzer
end
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
本帖来自P1论坛作者间桐樱,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:
https://rpg.blue/forum.php?mod=viewthread&tid=496874 若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。