扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 114|回复: 0

[转载发布] 传染病状态脚本

[复制链接]
累计送礼:
0 个
累计收礼:
1 个
  • TA的每日心情
    开心
    前天 02:22
  • 签到天数: 193 天

    连续签到: 1 天

    [LV.7]常住居民III

    2604

    主题

    789

    回帖

    2万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    7
    卡币
    17608
    OK点
    16
    推广点
    0
    同能卷
    50
    积分
    21031

    灌水之王

    发表于 前天 02:37 | 显示全部楼层 |阅读模式
    RUBY 代码
    1. #==============================================================================
    2. # ★ RGSS3 - 传染病状态脚本
    3. #==============================================================================
    4. # 功能说明:
    5. #   在状态的备注栏中写入 ,即可让该状态每过指定回合传染给一名队友。
    6. #   例如: 表示每3回合传染一次(无限循环,直到状态解除)。
    7. #
    8. # 使用说明:
    9. #   1. 将此脚本放在 "▼ 插件脚本" 部分,Main 之前。
    10. #   2. 在数据库“状态”选项卡中,为目标状态的备注栏添加 。
    11. #   3. 自定义下方的 PLAGUE_SE 更改传染音效。
    12. #==============================================================================
    13. module PlagueState
    14.   # 传染时播放的音效(文件名,音量,音调)
    15.   PLAGUE_SE = ["Water5", 80, 100]
    16. end
    17. #==============================================================================
    18. # ■ RPG::State
    19. #==============================================================================
    20. classRPG::State < RPG::BaseItem
    21.   #--------------------------------------------------------------------------
    22.   # ● 获取瘟疫传染回合数
    23.   #--------------------------------------------------------------------------
    24.   def plague_turns
    25.     return@plague_turnsunless@plague_turns.nil?
    26.     load_plague_notetag
    27.     return@plague_turns
    28.   end
    29.   #--------------------------------------------------------------------------
    30.   # ● 判断是否为瘟疫状态
    31.   #--------------------------------------------------------------------------
    32.   def plague_state?
    33.     return plague_turns > 0
    34.   end
    35.   #--------------------------------------------------------------------------
    36.   # ● 从备注中加载瘟疫标签
    37.   #--------------------------------------------------------------------------
    38.   def load_plague_notetag
    39.     @plague_turns = 0
    40.     ifself.note =~ /plague:\s*(\d+)/i
    41.       @plague_turns = $1.to_i
    42.     end
    43.   end
    44. end
    45. #==============================================================================
    46. # ■ Game_Battler
    47. #==============================================================================
    48. class Game_Battler < Game_BattlerBase
    49.   #--------------------------------------------------------------------------
    50.   # ● 别名:添加状态
    51.   #--------------------------------------------------------------------------
    52.   alias plague_add_state add_state
    53.   def add_state(state_id)
    54.     plague_add_state(state_id)
    55.     state = $data_states[state_id]
    56.     if state && state.plague_state?
    57.       @plague_counters ||= {}
    58.       @plague_counters[state_id] = state.plague_turns
    59.     end
    60.   end
    61.   #--------------------------------------------------------------------------
    62.   # ● 别名:移除状态
    63.   #--------------------------------------------------------------------------
    64.   alias plague_remove_state remove_state
    65.   def remove_state(state_id)
    66.     plague_remove_state(state_id)
    67.     @plague_counters.delete(state_id)if@plague_counters
    68.   end
    69.   #--------------------------------------------------------------------------
    70.   # ● 获取瘟疫计数器
    71.   #--------------------------------------------------------------------------
    72.   def plague_counter(state_id)
    73.     @plague_counters ||= {}
    74.     return@plague_counters[state_id] || 0
    75.   end
    76.   #--------------------------------------------------------------------------
    77.   # ● 设置瘟疫计数器
    78.   #--------------------------------------------------------------------------
    79.   def set_plague_counter(state_id, value)
    80.     @plague_counters ||= {}
    81.     @plague_counters[state_id] = value
    82.   end
    83.   #--------------------------------------------------------------------------
    84.   # ● 回合结束时的瘟疫处理
    85.   #--------------------------------------------------------------------------
    86.   def process_plague_turn_end
    87.     returnunless@plague_counters && !@plague_counters.empty?
    88.     @plague_counters.each_keydo |state_id|
    89.       nextunless state?(state_id)
    90.       counter = @plague_counters[state_id]
    91.       if counter > 0
    92.         counter -= 1
    93.         @plague_counters[state_id] = counter
    94.         if counter == 0
    95.           spread_plague(state_id)
    96.         end
    97.       end
    98.     end
    99.   end
    100.   #--------------------------------------------------------------------------
    101.   # ● 传播瘟疫给队友(重置计数器实现周期传染)
    102.   #--------------------------------------------------------------------------
    103.   def spread_plague(state_id)
    104.     returnunless actor?
    105.     targets = $game_party.members.selectdo |member|
    106.       member.alive? && !member.state?(state_id)
    107.     end
    108.     returnif targets.empty?
    109.     target = targets.sample
    110.     # 为目标添加状态(目标会获得新计数器)
    111.     target.add_state(state_id)
    112.     # 播放传染音效
    113.     se = PlagueState::PLAGUE_SE
    114.     RPG::SE.new(se[0], se[1], se[2]).play
    115.     # 显示战斗日志
    116.     if SceneManager.scene_is?(Scene_Battle)
    117.       state_name = $data_states[state_id].name
    118.       text = "#{target.name} 被传染了 #{state_name} !"
    119.       log_win = nil
    120.       if SceneManager.scene.respond_to?(:log_window) && SceneManager.scene.log_window
    121.         log_win = SceneManager.scene.log_window
    122.       else
    123.         log_win = SceneManager.scene.instance_variable_get(:@log_window)
    124.       end
    125.       log_win.add_text(text)if log_win
    126.     end
    127.     state = $data_states[state_id]
    128.     if state && state.plague_state?
    129.       @plague_counters[state_id] = state.plague_turns
    130.     end
    131.   end
    132.   #--------------------------------------------------------------------------
    133.   # ● 清除所有瘟疫计数器
    134.   #--------------------------------------------------------------------------
    135.   def clear_plague_counters
    136.     @plague_counters = {}
    137.   end
    138.   #--------------------------------------------------------------------------
    139.   # ● 别名:完全恢复时清除计数器
    140.   #--------------------------------------------------------------------------
    141.   alias plague_recover_all recover_all
    142.   def recover_all
    143.     plague_recover_all
    144.     clear_plague_counters
    145.   end
    146. end
    147. #==============================================================================
    148. # ■ Scene_Battle
    149. #==============================================================================
    150. class Scene_Battle < Scene_Base
    151.   alias plague_turn_end turn_end
    152.   def turn_end
    153.     all_battle_members.eachdo |battler|
    154.       battler.process_plague_turn_end
    155.     end
    156.     plague_turn_end
    157.   end
    158. end
    159. #==============================================================================
    160. # ■ Game_Party
    161. #==============================================================================
    162. class Game_Party < Game_Unit
    163.   alias plague_increase_steps increase_steps
    164.   def increase_steps
    165.     plague_increase_steps
    166.     process_plague_on_map
    167.   end
    168.   def process_plague_on_map
    169.     members.eachdo |actor|
    170.       actor.process_plague_turn_end
    171.     end
    172.   end
    173. end
    复制代码




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

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

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

    本版积分规则

    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

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

    GMT+8, 2026-4-23 07:42 , Processed in 0.119733 second(s), 59 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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