じ☆ve冰风 发表于 2024-4-12 17:14:41

【原创新手自用脚本】战斗中使用物品查看敌人备注

因为很想要实现一个战斗中对某个敌人使用一个物品就能分析它的特点的效果……在p1找了一圈没找着,就干脆试试自己写了
可喜可贺,终于还是写出来了!(但是兼容性可能不是很好!我努力在用alias了呜呜 还是太菜)

如果加以改造应该还可以实现其他的效果!
比如战斗中查看队友备注(啊这……没什么用吧!)
或者能查看敌人的各项具体数值(理论上应该可以!但是我不会!)

用法是即插即用,然后在数据库里设置一下对应的几项就可以啦
对敌人附加一些伤害和状态大概也是可以的……反正我没试过(如果这样那这个道具也太逆天了吧!)

RUBY 代码
#============================================================================
# 战斗中使用物品查看敌人备注for RMVA
# by IndIX
#----------------------------------------------------------------------------

#使用方法:

#将该脚本插入Main之前,放插件脚本的位置。

#在数据库里添加一个物品,备注“”,效果范围设定“单个敌人”,使用场合
#设定为仅战斗中即可。然后在敌人的备注栏直接填写任意内容即可,战斗中使用该物品会自动
#读取写入的备注。

#可以用于设置一些可读取的敌人弱点,作为给玩家的过关提示。

#============================================================================


#----------------------------------------------------------------------------
# ● 脚本设定模块
#----------------------------------------------------------------------------

module Vocab

Investigate = "分析出了%s的特性!"#定义使用探知道具的结果语句

end


module TNWindow

Line = 5         #显示内容的行数
Width = 380      #窗口的宽度

end

#----------------------------------------------------------------------------
# ● 在战斗信息中显示使用的用语
#----------------------------------------------------------------------------
class Window_BattleLog < Window_Selectable
def display_action_results(target, item)
    if target.result.used
      last_line_number = line_number
      display_critical(target, item)
      display_damage(target, item)
      display_affected_status(target, item)
      display_failure(target, item)
      investigate_result(target, item)
      wait if line_number > last_line_number
      back_to(last_line_number)
    end
end
def display_failure(target, item)
    if target.result.hit? && !target.result.success
      returnif item.note.include?("")
      add_text(sprintf(Vocab::ActionFailure, target.name))
      wait
    end
end
def investigate_result(target, item)
    if item.note.include?("")
      add_text(sprintf(Vocab::Investigate, target.name))
      wait
    end
end
end

#----------------------------------------------------------------------------
# ● 用于显示被探知者状态的窗口
#----------------------------------------------------------------------------
class Window_TargetNote < Window_Selectable
#初始化
def initialize(line_number = TNWindow::Line)
    super(window_x, window_y(line_number), window_width, fitting_height(line_number))   
end

#设置窗口宽度和位置
def window_width
    returnTNWindow::Width
end
def window_x
    return(Graphics.width - window_width)/2
end
def window_y(line_number)
    return(Graphics.height - fitting_height(line_number)- 60)/2
end

#设置文本
def set_text(text)
    if text != @text
      @text = text
      refresh
    end
end

#清除
def clear
    set_text("")
end

#设定目标
def set_target(target)
    set_text(target ? target.enemy.note : "")
end

#刷新
def refresh
    contents.clear
    draw_text_ex(4, 0, @text)
end
end

#----------------------------------------------------------------------------
# ● 添加使用物品效果
#----------------------------------------------------------------------------
class Scene_Battle
alias indix_apply_item_effects apply_item_effects
def apply_item_effects(target, item)
    indix_apply_item_effects(target,item)
    use_investigate_item(target)if item.note.include?("")
end
def use_investigate_item(target)
    activate_targetnote_window(target)

end
end

#----------------------------------------------------------------------------
# ● 在战斗场景中添加该窗口
#----------------------------------------------------------------------------
class Scene_Battle < Scene_Base
alias indix_creat_all_windows create_all_windows
def create_all_windows
    indix_creat_all_windows
    create_targetnote_window
end
def create_targetnote_window
    @targetnote_window = Window_TargetNote.new
    @targetnote_window.hide
    @targetnote_window.set_handler(:ok,   method(:close_targetnote_window))
    @targetnote_window.set_handler(:cancel, method(:close_targetnote_window))
end
def activate_targetnote_window(target)
    @targetnote_window.show
    @targetnote_window.activate
    @targetnote_window.set_target(target)
end
def close_targetnote_window
    @targetnote_window.hide
end

#----------------------------------------------------------------------------
# ● 在战斗场景中等待该窗口关闭
#----------------------------------------------------------------------------
def update_for_only_tnwindow
    Graphics.update
    Input.update
    update_all_windows
    $game_timer.update
    $game_troop.update
    @spriteset.update
end
def wait_tnwindow(duration)
    duration.times{|i| update_for_only_tnwindow }
end
def update
    super
    if BattleManager.in_turn?
      process_event
      process_tnwindow
      process_action
    end
    BattleManager.judge_win_loss
end
def process_tnwindow
    returnif@targetnote_window.visible == false
    while@targetnote_window.visible == true
      wait_tnwindow(10)
      breakuntil Input.trigger?(:B) || Input.trigger?(:C)
    end
end
end

https://rpg.blue/data/attachment/forum/202202/22/140015w01e2fhptt1utr6r.png
https://rpg.blue/data/attachment/forum/202202/22/140016q3zsfwqfsewfedfr.png
https://rpg.blue/data/attachment/forum/202202/22/140017qiiu22yootdizybz.png
             本帖来自P1论坛作者IndigoIX,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=488767若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
页: [1]
查看完整版本: 【原创新手自用脚本】战斗中使用物品查看敌人备注