因为很想要实现一个战斗中对某个敌人使用一个物品就能分析它的特点的效果……在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
复制代码
本帖来自P1论坛作者IndigoIX,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址: https://rpg.blue/forum.php?mod=viewthread&tid=488767 若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。 |