Project1

标题: 公共事件不够用了,求破限脚本 [打印本页]

作者: 是猪别乱叫    时间: 2016-11-7 11:17
标题: 公共事件不够用了,求破限脚本
公共事件999个不够用啊,搜了一圈也没找到这脚本,大神求救~~~
作者: 七重    时间: 2016-11-7 12:25
我没有用过破限那个,如果只是公共事件不够用。

睡工房的tes脚本其实不错的,就是要花点时间学。
作者: iisnow    时间: 2016-11-7 22:03

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

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

RUBY 代码复制
  1. =begin
  2.  
  3. 所谓的破限脚本一般都是这种思想,如何在有限中生成无限
  4.  
  5. 指定几个公共事件,多个事件的内容都合入到这些事件中,
  6. 使用一定的方法将List分割,让他们能够“分裂”出多个额外的公共事件
  7.  
  8.  
  9. 使用方法
  10. 在事件内容前加上注释
  11. <Add Event Name K01 N>
  12. 这个注释内容前面和后面可以任意增加字符标记方便自己查找之类的
  13. Name就是事件的名称,
  14. K+数字表示开关的ID(可以省略,省略时为0),
  15. 最后的是执行标记(可以省略,省略时默认为正常执行)
  16. 然后后面就是事件的内容了,一直到下一个这样的标记或者整个内容完结
  17.  
  18. 而在事件中调用这些额外的公共事件的时候
  19. 使用脚本命令为
  20. event_group_call(ID)
  21. 这里的ID是按顺序数出来的
  22. 同样也可以使用
  23. event_group_ncall("name")
  24. 使用事件的名称来使用,所以事件的名称尽量不要重复
  25.  
  26. =end
  27.  
  28.  
  29. module IISNOW_COMMONEVENT_SET_ADD
  30.  
  31.   EVENT_GROUP_ID          = [997]             #事件组使用的公共事件ID数组
  32.  
  33.   EVENT_GAP_CHAR_HEAD     = "<"               #额外事件标识头
  34.   EVENT_GAP_STR           = "Add Event"       #额外事件标记字符
  35.   EVENT_GAP_CHAR_BACK     = ">"               #额外事件标识尾
  36.  
  37.   EVENT_GAP_TRIGGER_FLAG  = "K"               #额外事件触发开关标识
  38.  
  39.   EVENT_TYPE_NORMAL       = "N"               #额外事件——正常执行标记
  40.   EVENT_TYPE_AUTO         = "A"               #额外事件——自动执行标记
  41.   EVENT_TYPE_CURRENT      = "C"               #额外事件——并行执行标记
  42.  
  43.   #额外事件注释的正则表达式(不懂请不要随意修改)
  44.   EVENT_GAP_PATTERN       = /#{EVENT_GAP_CHAR_HEAD}#{EVENT_GAP_STR}\s+(.+?)(\s+#{EVENT_GAP_TRIGGER_FLAG}(\d+))?(\s+(\w))?\s*#{EVENT_GAP_CHAR_BACK}/
  45.  
  46. end
  47.  
  48. module DataManager
  49.  
  50.   include IISNOW_COMMONEVENT_SET_ADD
  51.  
  52.   def self.load_database
  53.     if $BTEST
  54.       load_battle_test_database
  55.     else
  56.       load_normal_database
  57.       check_player_location
  58.     end
  59.     read_add_events
  60.   end
  61.  
  62.   def self.read_add_events
  63.     $data_common_add_events = [nil];
  64.     normal_set = []
  65.     for id in EVENT_GROUP_ID
  66.       normal_set += $data_common_events[id].list
  67.     end
  68.  
  69.     headFlag = true
  70.     addFlag = false
  71.     addEvent = RPG::CommonEvent.new
  72.  
  73.     for list in normal_set do
  74.       getInfo = check_add_event(list)
  75.       if(headFlag)
  76.         headFlag = getInfo.nil?
  77.         if !headFlag
  78.           setCommandEvent(addEvent,getInfo)
  79.         end
  80.       elsif list.code !=0
  81.         if getInfo.nil?
  82.           addEvent.list << list
  83.         else
  84.           addEvent.list << RPG::EventCommand.new
  85.           $data_common_add_events << addEvent.clone
  86.           setCommandEvent(addEvent,getInfo)
  87.         end
  88.       else
  89.         addEvent.list << RPG::EventCommand.new
  90.         $data_common_add_events << addEvent.clone
  91.       end
  92.     end
  93.  
  94.   end
  95.  
  96.   def self.setCommandEvent(event,info)
  97.     event.id = $data_common_add_events.size
  98.     event.name = info[:name]
  99.     event.switch_id = info[:switch_id]
  100.     event.trigger = info[:trigger]
  101.     event.list = []
  102.   end
  103.  
  104.   def self.check_add_event(list)
  105.     if list.code == 108
  106.       comstr = list.parameters[0]
  107.       return nil unless comstr =~ EVENT_GAP_PATTERN
  108.       name = $1
  109.       switch_id = 0
  110.       switch_id = $3.to_i unless $3.nil?
  111.       trigger = 0
  112.       case $5
  113.       when EVENT_TYPE_NORMAL
  114.         trigger = 0
  115.       when EVENT_TYPE_AUTO
  116.         trigger = 1
  117.       when EVENT_TYPE_CURRENT
  118.         trigger = 2
  119.       end
  120.  
  121.       return {:name=>name,:switch_id =>switch_id,:trigger=>trigger}
  122.     end
  123.     return nil
  124.   end
  125.  
  126. end
  127.  
  128. class Game_Interpreter
  129.   def event_group_call(id)
  130.     event_get = $data_common_add_events[id]
  131.     if event_get
  132.       child = Game_Interpreter.new(@depth + 1)
  133.       child.setup(event_get.list, same_map? ? @event_id : 0)
  134.       child.run
  135.     end
  136.   end
  137.  
  138.   def event_group_ncall(name)
  139.     event_get = $data_common_add_events.find do |event|
  140.       event && event.name == name
  141.     end
  142.     if event_get
  143.       child = Game_Interpreter.new(@depth + 1)
  144.       child.setup(event_get.list, same_map? ? @event_id : 0)
  145.       child.run
  146.     end
  147.   end
  148. end
  149.  
  150. class Game_Add_CommonEvent < Game_CommonEvent
  151.   def initialize(common_event_id)
  152.     @event = $data_common_add_events[common_event_id]
  153.     refresh
  154.   end
  155. end
  156.  
  157. class Game_Map
  158.  
  159.   alias :iisnow_add_event_setup_autorun_common_event :setup_autorun_common_event
  160.   def setup_autorun_common_event
  161.     nevent = iisnow_add_event_setup_autorun_common_event
  162.     return nevent if nevent
  163.     event = $data_common_add_events.find do |event|
  164.       event && event.autorun? && $game_switches[event.switch_id]
  165.     end
  166.     @interpreter.setup(event.list) if event
  167.     event
  168.   end
  169.  
  170.   alias :iisnow_add_event_setup_events :setup_events
  171.   def setup_events
  172.     iisnow_add_event_setup_events
  173.     @common_events += $data_common_add_events.select {|event| event && event.parallel? }.collect do |common_event|
  174.       Game_Add_CommonEvent.new(common_event.id)
  175.     end
  176.   end
  177.  
  178. end


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

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







欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1