查看: 65|回复: 0

[转载发布] 【7.20更新】仅用一个状态就能制作数十层的状态层数脚本

[复制链接]
  • TA的每日心情
    开心
    前天 00:56
  • 签到天数: 33 天

    连续签到: 1 天

    [LV.5]常住居民I

    2022

    主题

    32

    回帖

    7144

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    0
    卡币
    5074
    OK点
    16
    积分
    7144
    发表于 同元一千年二月十八日(春) | 显示全部楼层 |阅读模式
    其实也不能算是完全原创吧,也是自己参考了一些状态堆叠脚本写出来的脚本
    时常会觉得制作层数太累太累了,而且有些手游现在还经常能看见那种30层,100层,甚至更多层数的状态,如果真的复制粘贴那么多那真的人都要没了,那为什么不让状态拥有一个层数的值呢?
    [Ruby] 纯文本查看 复制代码
    # =============================================================================
    # 状态层数脚本 By Akahara
    # =============================================================================
    # 是否时常因为制作层数状态需要复制粘贴好几个无法制作数十层而感到苦恼?
    # 为状态新增了max_level和state_levels的概念
    # 在状态的备注中填写,即该状态上限x层,未填写默认为1层
    # 可以通过state_levels(state_id)来制作每层增加数值的效果
    # 具体使用方法可以查阅https://rpg. blue/thread-486408-1-1.html
    # =============================================================================
    class RPG::State < RPG::BaseItem
      attr_accessor :max_level
     
      def load_level
        @max_level = 1
        note.split(/[]+/).each do |line|
          if line =~ //i
            @max_level = $1.to_i
          end
        end
      end
     
    end
     
    class << DataManager
     
      alias theo_levelstate_load_db load_database
      def load_database
        theo_levelstate_load_db
        load_levelstate_db
      end
     
      def load_levelstate_db
        $data_states.compact.each do |state|
          state.load_level
        end
      end
     
    end
     
    class Game_BattlerBase
      attr_reader   :state_levels  
      alias clear_states_levels clear_states
      def clear_states
        clear_states_levels
        @state_levels = {}
      end
     
      alias erase_state_levels erase_state
      def erase_state(state_id)
        erase_state_levels(state_id)
        reset_state_levels(state_id)
      end
     
      def reset_state_levels(state_id)
        @state_levels ||= {}
        @state_levels.delete(state_id)
      end  
     
      def set_state_levels(state_id)
        @state_levels ||= {}
        @state_levels[state_id] ||= 0    
      end
     
      def state_levels(state_id)
        @state_levels ||= {}
        d = @state_levels[state_id]
        d ? d : 0
      end
    end
     
    class Game_Battler < Game_BattlerBase
      alias akahara_r_20210719 remove_state
      def remove_state(state_id)
        akahara_r_20210719(state_id)
        reset_state_levels(state_id)
      end 
     
      alias akahara_20210719 add_state
      def add_state(state_id)
        akahara_20210719(state_id)
        set_state_levels(state_id)
        if state_addable?(state_id)
          return if $data_states[state_id].max_level <= 1
          if @state_levels[state_id] < 1
            @state_levels[state_id] = 1 
            return ;
          end
          if state?(state_id)
            @state_levels[state_id] += 1 if @state_levels[state_id] != $data_states[state_id].max_level
          end
        end
      end
    end

    本帖子中包含更多资源

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

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

    使用道具 举报

    ahome_bigavatar:guest
    ahome_bigavatar:welcomelogin
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

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

    GMT+8, 2024-4-30 10:09 , Processed in 0.092269 second(s), 46 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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