查看: 128|回复: 0

[转载发布] 【原创新手自用脚本】战斗中使用物品查看敌人备注

[复制链接]
  • TA的每日心情
    开心
    昨天 10:15
  • 签到天数: 73 天

    连续签到: 1 天

    [LV.6]常住居民II

    2044

    主题

    86

    回帖

    8602

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    -2
    卡币
    6460
    OK点
    16
    积分
    8602
    发表于 2024-4-12 23:22:36 | 显示全部楼层 |阅读模式
    因为很想要实现一个战斗中对某个敌人使用一个物品就能分析它的特点的效果……在p1找了一圈没找着,就干脆试试自己写了
    可喜可贺,终于还是写出来了!(但是兼容性可能不是很好!我努力在用alias了呜呜 还是太菜)

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

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

    RUBY 代码
    1. #============================================================================
    2. # 战斗中使用物品查看敌人备注  for RMVA
    3. # by IndIX
    4. #----------------------------------------------------------------------------
    5. #使用方法:
    6. #将该脚本插入Main之前,放插件脚本的位置。
    7. #在数据库里添加一个物品,备注“”,效果范围设定“单个敌人”,使用场合
    8. #设定为仅战斗中即可。然后在敌人的备注栏直接填写任意内容即可,战斗中使用该物品会自动
    9. #读取写入的备注。
    10. #可以用于设置一些可读取的敌人弱点,作为给玩家的过关提示。
    11. #============================================================================
    12. #----------------------------------------------------------------------------
    13. # ● 脚本设定模块
    14. #----------------------------------------------------------------------------
    15. module Vocab
    16.   Investigate = "分析出了%s的特性!"  #定义使用探知道具的结果语句
    17. end
    18. module TNWindow
    19.   Line = 5         #显示内容的行数
    20.   Width = 380      #窗口的宽度
    21. end
    22. #----------------------------------------------------------------------------
    23. # ● 在战斗信息中显示使用的用语
    24. #----------------------------------------------------------------------------
    25. class Window_BattleLog < Window_Selectable
    26.   def display_action_results(target, item)
    27.     if target.result.used
    28.       last_line_number = line_number
    29.       display_critical(target, item)
    30.       display_damage(target, item)
    31.       display_affected_status(target, item)
    32.       display_failure(target, item)
    33.       investigate_result(target, item)
    34.       wait if line_number > last_line_number
    35.       back_to(last_line_number)
    36.     end
    37.   end
    38.   def display_failure(target, item)
    39.     if target.result.hit? && !target.result.success
    40.       returnif item.note.include?("")
    41.       add_text(sprintf(Vocab::ActionFailure, target.name))
    42.       wait
    43.     end
    44.   end
    45.   def investigate_result(target, item)
    46.     if item.note.include?("")
    47.       add_text(sprintf(Vocab::Investigate, target.name))
    48.       wait
    49.     end
    50.   end
    51. end
    52. #----------------------------------------------------------------------------
    53. # ● 用于显示被探知者状态的窗口
    54. #----------------------------------------------------------------------------
    55. class Window_TargetNote < Window_Selectable
    56.   #初始化
    57.   def initialize(line_number = TNWindow::Line)
    58.     super(window_x, window_y(line_number), window_width, fitting_height(line_number))     
    59.   end
    60.   #设置窗口宽度和位置
    61.   def window_width
    62.     returnTNWindow::Width
    63.   end
    64.   def window_x
    65.     return(Graphics.width - window_width)/2
    66.   end
    67.   def window_y(line_number)
    68.     return(Graphics.height - fitting_height(line_number)- 60)/2
    69.   end
    70.   #设置文本
    71.   def set_text(text)
    72.     if text != @text
    73.       @text = text
    74.       refresh
    75.     end
    76.   end
    77.   #清除
    78.   def clear
    79.     set_text("")
    80.   end
    81.   #设定目标
    82.   def set_target(target)
    83.     set_text(target ? target.enemy.note : "")
    84.   end
    85.   #刷新
    86.   def refresh
    87.     contents.clear
    88.     draw_text_ex(4, 0, @text)
    89.   end
    90. end
    91. #----------------------------------------------------------------------------
    92. # ● 添加使用物品效果
    93. #----------------------------------------------------------------------------
    94. class Scene_Battle
    95.   alias indix_apply_item_effects apply_item_effects
    96.   def apply_item_effects(target, item)
    97.     indix_apply_item_effects(target,item)
    98.     use_investigate_item(target)if item.note.include?("")
    99.   end
    100.   def use_investigate_item(target)
    101.     activate_targetnote_window(target)
    102.   end
    103. end
    104. #----------------------------------------------------------------------------
    105. # ● 在战斗场景中添加该窗口
    106. #----------------------------------------------------------------------------
    107. class Scene_Battle < Scene_Base
    108.   alias indix_creat_all_windows create_all_windows
    109.   def create_all_windows
    110.     indix_creat_all_windows
    111.     create_targetnote_window
    112.   end
    113.   def create_targetnote_window
    114.     @targetnote_window = Window_TargetNote.new
    115.     @targetnote_window.hide
    116.     @targetnote_window.set_handler(:ok,     method(:close_targetnote_window))
    117.     @targetnote_window.set_handler(:cancel, method(:close_targetnote_window))
    118.   end
    119.   def activate_targetnote_window(target)
    120.     @targetnote_window.show
    121.     @targetnote_window.activate
    122.     @targetnote_window.set_target(target)
    123.   end
    124.   def close_targetnote_window
    125.     @targetnote_window.hide
    126.   end
    127.   #----------------------------------------------------------------------------
    128.   # ● 在战斗场景中等待该窗口关闭
    129.   #----------------------------------------------------------------------------
    130.   def update_for_only_tnwindow
    131.     Graphics.update
    132.     Input.update
    133.     update_all_windows
    134.     $game_timer.update
    135.     $game_troop.update
    136.     @spriteset.update
    137.   end
    138.   def wait_tnwindow(duration)
    139.     duration.times{|i| update_for_only_tnwindow }
    140.   end
    141.   def update
    142.     super
    143.     if BattleManager.in_turn?
    144.       process_event
    145.       process_tnwindow
    146.       process_action
    147.     end
    148.     BattleManager.judge_win_loss
    149.   end
    150.   def process_tnwindow
    151.     returnif@targetnote_window.visible == false
    152.     while@targetnote_window.visible == true
    153.       wait_tnwindow(10)
    154.       breakuntil Input.trigger?(:B) || Input.trigger?(:C)
    155.     end
    156.   end
    157. end
    复制代码




                 本帖来自P1论坛作者IndigoIX,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=488767  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
    天天去同能,天天有童年!
    回复 论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2024-9-21 14:27 , Processed in 0.046253 second(s), 38 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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