查看: 2384|回复: 6

[已经解决] 公共事件不够用了,求破限脚本

[复制链接]
梦石
0
星屑
582
在线时间
310 小时
注册时间
2016-2-29
回帖
149
发表于 2016-11-7 11:17:48 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

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

×
公共事件999个不够用啊,搜了一圈也没找到这脚本,大神求救~~~

评分

参与人数 1星屑 +50 收起 理由
RaidenInfinity + 50 结贴

查看全部评分

梦石
0
星屑
3557
在线时间
2337 小时
注册时间
2015-8-25
回帖
928

开拓者

发表于 2016-11-7 12:25:48 | 显示全部楼层
我没有用过破限那个,如果只是公共事件不够用。

睡工房的tes脚本其实不错的,就是要花点时间学。

点评

破限脚本,里面也写了使用方法了。  发表于 2016-11-7 15:47
http://rm.66rpg.com/forum.php?mod=viewthread&tid=389743  发表于 2016-11-7 15:46
......  发表于 2016-11-7 13:29

评分

参与人数 2星屑 +210 收起 理由
VIPArcher + 200 认可答案
是猪别乱叫 + 10 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
513
在线时间
1479 小时
注册时间
2011-9-17
回帖
1266

开拓者贵宾

发表于 2016-11-7 22:03:51 | 显示全部楼层

说实话我不太理解公共事件破限制了有什么用,物品使用公共事件的时候编辑器一样是选不到的呀
要是需要物品绑上公共事件的话,估计又要在备注上捣腾了

单独针对公共事件的突破限制写了一个小脚本:
支持执行模式和触发开关,事件调用做了专门的脚本接口

[pre lang="ruby"]=begin

所谓的破限脚本一般都是这种思想,如何在有限中生成无限

指定几个公共事件,多个事件的内容都合入到这些事件中,
使用一定的方法将List分割,让他们能够“分裂”出多个额外的公共事件


使用方法
在事件内容前加上注释
<Add Event Name K01 N>
这个注释内容前面和后面可以任意增加字符标记方便自己查找之类的
Name就是事件的名称,
K+数字表示开关的ID(可以省略,省略时为0),
最后的是执行标记(可以省略,省略时默认为正常执行)
然后后面就是事件的内容了,一直到下一个这样的标记或者整个内容完结

而在事件中调用这些额外的公共事件的时候
使用脚本命令为
event_group_call(ID)
这里的ID是按顺序数出来的
同样也可以使用
event_group_ncall("name")
使用事件的名称来使用,所以事件的名称尽量不要重复

=end


module IISNOW_COMMONEVENT_SET_ADD
  
  EVENT_GROUP_ID          = [997]             #事件组使用的公共事件ID数组
  
  EVENT_GAP_CHAR_HEAD     = "<"               #额外事件标识头
  EVENT_GAP_STR           = "Add Event"       #额外事件标记字符
  EVENT_GAP_CHAR_BACK     = ">"               #额外事件标识尾
  
  EVENT_GAP_TRIGGER_FLAG  = "K"               #额外事件触发开关标识
  
  EVENT_TYPE_NORMAL       = "N"               #额外事件——正常执行标记
  EVENT_TYPE_AUTO         = "A"               #额外事件——自动执行标记
  EVENT_TYPE_CURRENT      = "C"               #额外事件——并行执行标记
  
  #额外事件注释的正则表达式(不懂请不要随意修改)
  EVENT_GAP_PATTERN       = /#{EVENT_GAP_CHAR_HEAD}#{EVENT_GAP_STR}\s+(.+?)(\s+#{EVENT_GAP_TRIGGER_FLAG}(\d+))?(\s+(\w))?\s*#{EVENT_GAP_CHAR_BACK}/
  
end

module DataManager

  include IISNOW_COMMONEVENT_SET_ADD
  
  def self.load_database
    if $BTEST
      load_battle_test_database
    else
      load_normal_database
      check_player_location
    end
    read_add_events
  end
  
  def self.read_add_events
    $data_common_add_events = [nil];
    normal_set = []
    for id in EVENT_GROUP_ID
      normal_set += $data_common_events[id].list
    end
   
    headFlag = true
    addFlag = false
    addEvent = RPG::CommonEvent.new
   
    for list in normal_set do
      getInfo = check_add_event(list)
      if(headFlag)
        headFlag = getInfo.nil?
        if !headFlag
          setCommandEvent(addEvent,getInfo)
        end
      elsif list.code !=0
        if getInfo.nil?
          addEvent.list << list
        else
          addEvent.list << RPG::EventCommand.new
          $data_common_add_events << addEvent.clone
          setCommandEvent(addEvent,getInfo)
        end
      else
        addEvent.list << RPG::EventCommand.new
        $data_common_add_events << addEvent.clone
      end
    end
   
  end
  
  def self.setCommandEvent(event,info)
    event.id = $data_common_add_events.size
    event.name = info[:name]
    event.switch_id = info[:switch_id]
    event.trigger = info[:trigger]
    event.list = []
  end
  
  def self.check_add_event(list)
    if list.code == 108
      comstr = list.parameters[0]
      return nil unless comstr =~ EVENT_GAP_PATTERN
      name = $1
      switch_id = 0
      switch_id = $3.to_i unless $3.nil?
      trigger = 0
      case $5
      when EVENT_TYPE_NORMAL
        trigger = 0
      when EVENT_TYPE_AUTO
        trigger = 1
      when EVENT_TYPE_CURRENT
        trigger = 2
      end
      
      return {:name=>name,:switch_id =>switch_id,:trigger=>trigger}
    end
    return nil
  end
  
end

class Game_Interpreter
  def event_group_call(id)
    event_get = $data_common_add_events[id]
    if event_get
      child = Game_Interpreter.new(@depth + 1)
      child.setup(event_get.list, same_map? ? @event_id : 0)
      child.run
    end
  end
  
  def event_group_ncall(name)
    event_get = $data_common_add_events.find do |event|
      event && event.name == name
    end
    if event_get
      child = Game_Interpreter.new(@depth + 1)
      child.setup(event_get.list, same_map? ? @event_id : 0)
      child.run
    end
  end
end

class Game_Add_CommonEvent < Game_CommonEvent
  def initialize(common_event_id)
    @event = $data_common_add_events[common_event_id]
    refresh
  end
end

class Game_Map
  
  alias :iisnow_add_event_setup_autorun_common_event :setup_autorun_common_event
  def setup_autorun_common_event
    nevent = iisnow_add_event_setup_autorun_common_event
    return nevent if nevent
    event = $data_common_add_events.find do |event|
      event && event.autorun? && $game_switches[event.switch_id]
    end
    @interpreter.setup(event.list) if event
    event
  end
  
  alias :iisnow_add_event_setup_events :setup_events
  def setup_events
    iisnow_add_event_setup_events
    @common_events += $data_common_add_events.select {|event| event && event.parallel? }.collect do |common_event|
      Game_Add_CommonEvent.new(common_event.id)
    end
  end
  
end[/pre]

用法都写注释里面了
脚本几乎没有考虑任何兼容性,也没有什么注释,只是DEBUG了一遍,不好用请@我谢谢

范例
Project2.rar (1.43 MB, 下载次数: 50)


点评

害怕,这ID好久没见  发表于 2016-11-9 13:11

评分

参与人数 1星屑 +50 收起 理由
RaidenInfinity + 50 尝试回答

查看全部评分

我帖子中要有是不HX的空白,请Ctrl + A
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部