Project1

标题: 独立公共事件执行器【已更新】 [打印本页]

作者: 九夜神尊    时间: 2011-12-15 20:38
标题: 独立公共事件执行器【已更新】
本帖最后由 九夜神尊 于 2011-12-20 01:58 编辑

好吧,好久没发帖子了,这次我用的是手机。

首先解释一下独立公共事件执行器的作用。
能够随时执行公共事件。

好吧听到这里觉得蛋痛的撤吧,因为后面更蛋痛。


其实默认的执行公共事件,只能在地图上或者战斗中,这对事件派以及绝大多数人认可,的确,它做的很对。

独立公共事件执行器实际上只是让这些公共时间能够随时执行。就这么简单。。。。

有用么?坑爹呢?忽悠人呢?
其实作用是脚本的任意地方都能调用公共事件,然后通过计算得到结果后继续执行脚本,就好像脚本里面调用了一个方法。
其实我们在写脚本的时候,有些地方是可以让作者自行设定的,但是为了脚本容易使用,有些地方就采用了自己的设定,那是因为脚本复杂,让作者去自己设定很难实现,当然,除了能用哈洗表完成的设定。
所以,某一个方法能让作者来定义,能大大增加脚本的灵活度。
所以,我就写了用公共事件当方法调用的脚本。某些需要作者自行设定的方法,就搬到公共事件上来吧。每一个作者都会用事件,有很多作者都能用事件做ARPG了,但依旧不会脚本。那么,让脚本搬到事件上来写吧。

懂?

切慢,我得告诉你们很蛋疼的,
那就是我还没写这个脚本,最近坑的厉害,先把自己的信誉压出去,这样自己就有动力写了。
然后顺便调查一下用户群大不大。

独立公共事件执行器
功能:可以随时执行公共事件,而不受公共事件只能在地图和战斗中执行的限制。

  1. #==============================================================================
  2. # ■ Game_Interpreter_Self
  3. #------------------------------------------------------------------------------
  4. # 独立公共事件执行器
  5. #==============================================================================
  6. =begin

  7. 独立公共事件执行器用于随时执行公共事件,不受公共事件调用地方的限制。
  8. □使用方法:
  9. 1。将脚本插入main前。
  10. 2。在需要使用公共事件的地方
  11. 插入、
  12. Game_Interpreter_Self.new(公共事件ID)
  13. □可能的冲突:无
  14. =end

  15. class Game_Interpreter_Self < Game_Interpreter
  16.   #--------------------------------------------------------------------------
  17.   # ● 初始化对像
  18.   #     depth : 堆置深度
  19.   #     main  : 主标志
  20.   #--------------------------------------------------------------------------
  21.   def initialize(com_id)
  22.     @com_id = com_id
  23.     common_event = $data_common_events[@com_id]
  24.     setup(common_event.list)
  25.     update
  26.     clear
  27.   end
  28.   #--------------------------------------------------------------------------
  29.   # ● 公共事件
  30.   #--------------------------------------------------------------------------
  31.   def command_117
  32.     common_event = $data_common_events[@params[0]]
  33.     if common_event != nil
  34.       @child_interpreter = Game_Interpreter_Self.new(@params[0])
  35.   #    @child_interpreter.setup(common_event.list, @event_id)
  36.     end
  37.     return true
  38.   end
  39.   
  40. end
复制代码

我也没想到就这几句就写出来了。
可以在这个类定义完以后任意地方使用该脚本。

■以下我列举一些这种脚本的用法。
模仿读图功能
可以在脚本内找到场所传送,然后判断地图ID不同,就可以执行一个公共事件。
这个公共事件用来模仿读图效果。

事件自制战斗公式
脚本作者只需要将一些战斗时需要的数据保存在一些变量里。
例如:
攻击者攻击力 → 101变量
攻击者力量 → 102变量
攻击者暴击率 → 103变量
……
被攻击者 防御力131变量
被攻击力 回避 132变量
……
这样作者就可以轻松应用这些变量按照自己的想法做运算。
然后把最后算出来的伤害保存在181号变量。
然后脚本内读取181号变量继续战斗处理。

这个脚本使用到什么地方,什么地方就相当于有了一个可以让作者自己定义的方法。
可以极大的增加脚本的自由度。

===================================================================
不过要注意,可能会有些事件在某些情况下不能使用。
比如还没进入游戏就使用角色移动。
正在传送的时候,控制怪物等等。

欢迎测试指出BUG!!!!!!!!!!


作者: 猫君的马甲    时间: 2011-12-15 21:00
提示: 作者被禁止或删除 内容自动屏蔽
作者: MSQ    时间: 2011-12-15 21:06
九夜出品,必属精品~~=W=

不过这让脚本小白的我情何以堪呀~~QAQ
作者: 姬文翔    时间: 2011-12-16 03:36
本导是不是跟乃有心灵感应呢?……平常不都没怎么来,一来就看到你发帖子。这东西我绝对期待
作者: 精灵使者    时间: 2011-12-16 17:15
一般的公共事件其实是……在map里执行的,能在其他地方执行就太好了。
作者: rainfly    时间: 2011-12-16 17:29
不管是什么Scene,只要在update里面加上$game_system.map_interpreter.update这一句,就可以在当前Scene执行公共事件了
作者: sai90306    时间: 2011-12-16 21:49
這個功能似乎不錯 想學習!
作者: 九夜神尊    时间: 2011-12-16 23:00
rainfly 发表于 2011-12-16 17:29
不管是什么Scene,只要在update里面加上$game_system.map_interpreter.update这一句,就可以在当前Scene执行 ...

这样貌似可行,但是会产生未知错误。
就我想到的就是会覆盖掉本来在准备执行的公共事件。以及嵌套公共事件能否执行不清楚。

PS,这两天狂加班。就纠结。。。
作者: 各种压力的猫君    时间: 2011-12-17 06:54
本帖最后由 各种压力的猫君 于 2011-12-17 06:55 编辑

事件解释器的效率 = = b 创意是有了实用性呢?
感觉这东西就是想用用户的不一定会用(脚本0基础),会用的用户不一定想用(还不如自己写脚本了)
作者: 九夜神尊    时间: 2011-12-17 19:41
标题: RE: 写给脚本作者的脚本-独立公共事件执行器。
各种压力的猫君 发表于 2011-12-17 06:54
事件解释器的效率 = = b 创意是有了实用性呢?
感觉这东西就是想用用户的不一定会用(脚本0基础),会用的 ...

效率很差,估计只有脚本一半的效率,或者还不到,然后本来0.1秒能算好的东西,要0.3秒,极大的耽误了玩家玩游戏的速度。
其实学不会脚本并不是因为基础,而是出于对自己的不自信和对脚本的恐惧,于是就安慰说事件党都是很有能力的,能用有限的资源做无穷的创意。的确,他们思路绝对到家。
一次我看到一篇帖子,使用技能消耗物品,然后他采用了冲突最少的哈洗表方法让作者设置,然后我就想到了全域条件技能。意思就是一个技能能否释放,可以和游戏内任何事物关联。比如地图,角色,开关,物品,进程,乃至金钱等等,这些条件在脚本内设置,还真得会脚本了。我当时想,如果能把技能ID交给作者,让作者自行应用这个ID然后通过分歧来实现技能条件,岂不是一切皆有可能。
然后我很兴奋的写出来,发现不行,原因 公共事件执行不是随时的。
将某个方法交给作者,让作者用事件完成定义,,这是这个脚本的目的,比方说让作者设定战斗公式,或者会心几率,或者战斗中回血等等等等。
实用性在哪?不在这个脚本里,在用这个脚本的脚本里。

作者: 阿尔西斯的马甲    时间: 2011-12-17 21:11
万年大坑?我前天就看这个帖子现在还没更新。。
作者: 越前リョーマ    时间: 2011-12-18 14:33
我发现我看了半天不知道你想表达什么
作者: 九夜神尊    时间: 2011-12-20 01:59
终于做好了,用时1小时,我也没想到这么简单。
作者: 阿尔西斯的马甲    时间: 2012-1-28 10:17
嘛~VA移植:
  1. #==============================================================================
  2. # ■ Game_Interpreter_Self
  3. #------------------------------------------------------------------------------
  4. # 独立公共事件执行器
  5. #==============================================================================
  6. =begin

  7. 独立公共事件执行器用于随时执行公共事件,不受公共事件调用地方的限制。
  8. □使用方法:
  9. 1。将脚本插入main前。
  10. 2。在需要使用公共事件的地方
  11. 插入、
  12. Game_Interpreter_Self.new(公共事件ID)
  13. □可能的冲突:无
  14. =end

  15. class Game_Interpreter_Self < Game_Interpreter
  16.   #--------------------------------------------------------------------------
  17.   # ● 初始化对像
  18.   #     depth : 堆置深度
  19.   #     main  : 主标志
  20.   #--------------------------------------------------------------------------
  21.   def initialize(com_id)
  22.     @com_id = com_id
  23.     common_event = $data_common_events[@com_id]
  24.     setup(common_event.list)
  25.     update
  26.     clear
  27.   end
  28.   def command_117
  29.     common_event = $data_common_events[@params[0]]
  30.     if common_event
  31.       child = Game_Interpreter_Self.new(@params[0])
  32.       child.run
  33.     end
  34.   end
  35. end
复制代码

作者: 杂兵天下    时间: 2012-8-30 14:14
  1. #==============================================================================
  2. # ■ ggsj
  3. #------------------------------------------------------------------------------
  4. # 独立公共事件执行器
  5. #==============================================================================
  6. =begin

  7. 独立公共事件执行器用于随时执行公共事件,不受公共事件调用地方的限制。
  8. □使用方法:
  9. 1。将脚本插入main前。
  10. 2。在需要使用公共事件的地方
  11. 插入、
  12. ggsj(公共事件ID)
  13. □可能的冲突:无
  14. =end
  15. def ggsj(com_id)
  16.   cm = Interpreter.new
  17.   if $data_common_events[com_id] != nil
  18.     cm.setup($data_common_events[com_id].list, @event_id)
  19.   end
  20.   cm.update
  21. end
复制代码
以上是XP版




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