Project1

标题: 仿魔兽的replay(录象?) [打印本页]

作者: 雷欧纳德    时间: 2006-12-7 05:52
标题: 仿魔兽的replay(录象?)
前言:上次听叶子说的那个录象脚本,感觉很好玩。。今天就做了…… -v-

脚本:replay脚本

作用:可用于制作攻略什么的,在通关之后附带一个通关录象?? - -b

     至于其他的。。。呵呵

     理解清楚了的人就可以随便怎么做了~ 要什么效果就做什么效果~ 呵呵

说明:可参考范例工程进行菜单的制作,现在的脚本没设计制作菜单的,只提供了核心脚本,下载范例 在调式模式下选择 观看录象即可。。 选择新游戏 然后保存之后 再选择观看就可以看到自己刚才玩的了。。。 - -b


点击此处下载范例工程

  1. #==============================================================================
  2. # ■ Kernel
  3. #------------------------------------------------------------------------------
  4. #  Kernel模块。
  5. #==============================================================================

  6. module Kernel
  7.   
  8.   #--------------------------------------------------------------------------
  9.   # ● 别名
  10.   #--------------------------------------------------------------------------
  11.   if @rand_redef.nil?
  12.     alias rand_old rand
  13.     @rand_redef = true
  14.   end
  15.   
  16.   #--------------------------------------------------------------------------
  17.   # ● 重定义
  18.   #--------------------------------------------------------------------------
  19.   def rand(max)
  20.     if $record != nil and $record.mode == "播放"
  21.       return $record.pop
  22.     end
  23.     result = rand_old(max)
  24.     if $record != nil and $record.mode == "录制"
  25.       Input.deal_repeat_key
  26.       $record.push(result)
  27.     end
  28.     return result
  29.   end

  30. end

  31. #==============================================================================
  32. # ■ Input
  33. #------------------------------------------------------------------------------
  34. #  Input模块。
  35. #==============================================================================

  36. module Input
  37.   
  38.   #--------------------------------------------------------------------------
  39.   # ● 记录
  40.   #--------------------------------------------------------------------------
  41.   @press = method("press?") if @press.nil?
  42.   @trigger = method("trigger?") if @trigger.nil?
  43.   @repeat = method("repeat?") if @repeat.nil?
  44.   @dir4 = method("dir4") if @dir4.nil?
  45.   @dir8 = method("dir8") if @dir8.nil?
  46.   
  47.   #--------------------------------------------------------------------------
  48.   # ● 作用函数
  49.   #--------------------------------------------------------------------------
  50.   module_function
  51.   
  52.   #--------------------------------------------------------------------------
  53.   # ● 记数
  54.   #--------------------------------------------------------------------------
  55.   @counts = 0
  56.   
  57.   #--------------------------------------------------------------------------
  58.   # ● 处理重复键
  59.   #--------------------------------------------------------------------------
  60.   def deal_repeat_key
  61.     return if @counts == 0
  62.     $record.push(false,@counts)
  63.     @counts = 0
  64.   end
  65.   
  66.   #--------------------------------------------------------------------------
  67.   # ● 通常01
  68.   #--------------------------------------------------------------------------
  69.   def common01(kind,num)
  70.     if $record != nil and $record.mode == "播放"
  71.       return $record.pop
  72.     end
  73.     result = eval(kind).call(num)
  74.     if $record != nil and $record.mode == "录制"
  75.       if result
  76.         self.deal_repeat_key
  77.         $record.push(result)
  78.       else
  79.         @counts += 1
  80.       end
  81.     end
  82.     return result
  83.   end
  84.   
  85.   #--------------------------------------------------------------------------
  86.   # ● 重定义 press?
  87.   #--------------------------------------------------------------------------
  88.   def press?(num)
  89.     return self.common01("@press",num)
  90.   end
  91.   
  92.   #--------------------------------------------------------------------------
  93.   # ● 重定义 trigger?
  94.   #--------------------------------------------------------------------------
  95.   def trigger?(num)
  96.     return self.common01("@trigger",num)
  97.   end
  98.   
  99.   #--------------------------------------------------------------------------
  100.   # ● 重定义 repeat?
  101.   #--------------------------------------------------------------------------
  102.   def repeat?(num)
  103.     return self.common01("@repeat",num)
  104.   end
  105.   
  106.   #--------------------------------------------------------------------------
  107.   # ● 通常02
  108.   #--------------------------------------------------------------------------
  109.   def common02(kind)
  110.     if $record != nil and $record.mode == "播放"
  111.       return $record.pop
  112.     end
  113.     result = eval(kind).call
  114.     if $record != nil and $record.mode == "录制"
  115.       if result != 0
  116.         self.deal_repeat_key
  117.         $record.push(result)
  118.       else
  119.         @counts += 1
  120.       end
  121.     end
  122.     return result
  123.   end
  124.   
  125.   #--------------------------------------------------------------------------
  126.   # ● 重定义 dir4
  127.   #--------------------------------------------------------------------------
  128.   def dir4
  129.     return self.common02("@dir4")
  130.   end
  131.   
  132.   #--------------------------------------------------------------------------
  133.   # ● 重定义 dir8
  134.   #--------------------------------------------------------------------------
  135.   def dir8
  136.     return self.common02("@dir8")
  137.   end
  138.   
  139. end

  140. #==============================================================================
  141. # ■ Sub_Hash
  142. #------------------------------------------------------------------------------
  143. #  Hash的子类。
  144. #==============================================================================

  145. class Sub_Hash < Hash
  146.   
  147.   #--------------------------------------------------------------------------
  148.   # ● 初始化
  149.   #--------------------------------------------------------------------------
  150.   def initialize
  151.     @pos = 0
  152.   end
  153.   
  154.   #--------------------------------------------------------------------------
  155.   # ● push
  156.   #--------------------------------------------------------------------------
  157.   def push(value)
  158.     self[@pos] = value
  159.     @pos += 1
  160.   end
  161.   
  162.   #--------------------------------------------------------------------------
  163.   # ● shift
  164.   #--------------------------------------------------------------------------
  165.   def shift
  166.     result = self[@pos]
  167.     @pos += 1
  168.     return result
  169.   end
  170.   
  171.   #--------------------------------------------------------------------------
  172.   # ● 更改位置
  173.   #--------------------------------------------------------------------------
  174.   def pos=(pos)
  175.     @pos = pos
  176.   end
  177.   
  178.   #--------------------------------------------------------------------------
  179.   # ● 判断
  180.   #--------------------------------------------------------------------------
  181.   def empty?
  182.     return @pos == self.size
  183.   end
  184.   
  185. end
  186.    
  187. #==============================================================================
  188. # ■ Record
  189. #------------------------------------------------------------------------------
  190. #  录制的类。
  191. #==============================================================================

  192. class Record
  193.   
  194.   #--------------------------------------------------------------------------
  195.   # ● 定义实例变量
  196.   #--------------------------------------------------------------------------
  197.   attr_reader   :mode
  198.   
  199.   #--------------------------------------------------------------------------
  200.   # ● 初始化
  201.   #--------------------------------------------------------------------------
  202.   def initialize
  203.     @mode = "空"
  204.     @infos = Sub_Hash.new
  205.   end
  206.   
  207.   #--------------------------------------------------------------------------
  208.   # ● 开始录制
  209.   #--------------------------------------------------------------------------
  210.   def start
  211.     @mode = "录制"
  212.   end
  213.   
  214.   #--------------------------------------------------------------------------
  215.   # ● 开始播放
  216.   #--------------------------------------------------------------------------
  217.   def play
  218.     @mode = "播放"
  219.     @infos.pos = 0
  220.     @counts = 0
  221.     @kind = nil
  222.     @ended = false
  223.   end
  224.   
  225.   #--------------------------------------------------------------------------
  226.   # ● 播放结束
  227.   #--------------------------------------------------------------------------
  228.   def finish
  229.     @mode = "空"
  230.     p '播放结束'
  231.   end
  232.   
  233.   #--------------------------------------------------------------------------
  234.   # ● push
  235.   #--------------------------------------------------------------------------
  236.   def push(value,num = 1)
  237.     @infos.push([value,num])
  238.   end
  239.   
  240.   #--------------------------------------------------------------------------
  241.   # ● pop
  242.   #--------------------------------------------------------------------------
  243.   def pop
  244.     if @ended
  245.       self.finish
  246.       return
  247.     end
  248.     if @counts == 0
  249.       result = @infos.shift
  250.       @ended = true if @infos.empty?
  251.       @counts = result[1]
  252.       @counts -= 1
  253.       @kind = result[0]
  254.       return @kind
  255.     else
  256.       @counts -= 1
  257.       return @kind
  258.     end
  259.   end
  260.   
  261.   #--------------------------------------------------------------------------
  262.   # ● 记录
  263.   #--------------------------------------------------------------------------
  264.   def write(index = 1)
  265.     save_data(self,"Record/record#{index}.rxdata")
  266.   end
  267.   
  268.   #--------------------------------------------------------------------------
  269.   # ● 暂停
  270.   #--------------------------------------------------------------------------
  271.   def pause
  272.     @mode = "空"
  273.   end
  274.   
  275. end
复制代码


              [本贴由 柳柳 于 2006-12-12 0:14:20 进行了编辑]
作者: 雷欧纳德    时间: 2006-12-7 05:52
标题: 仿魔兽的replay(录象?)
前言:上次听叶子说的那个录象脚本,感觉很好玩。。今天就做了…… -v-

脚本:replay脚本

作用:可用于制作攻略什么的,在通关之后附带一个通关录象?? - -b

     至于其他的。。。呵呵

     理解清楚了的人就可以随便怎么做了~ 要什么效果就做什么效果~ 呵呵

说明:可参考范例工程进行菜单的制作,现在的脚本没设计制作菜单的,只提供了核心脚本,下载范例 在调式模式下选择 观看录象即可。。 选择新游戏 然后保存之后 再选择观看就可以看到自己刚才玩的了。。。 - -b


点击此处下载范例工程

  1. #==============================================================================
  2. # ■ Kernel
  3. #------------------------------------------------------------------------------
  4. #  Kernel模块。
  5. #==============================================================================

  6. module Kernel
  7.   
  8.   #--------------------------------------------------------------------------
  9.   # ● 别名
  10.   #--------------------------------------------------------------------------
  11.   if @rand_redef.nil?
  12.     alias rand_old rand
  13.     @rand_redef = true
  14.   end
  15.   
  16.   #--------------------------------------------------------------------------
  17.   # ● 重定义
  18.   #--------------------------------------------------------------------------
  19.   def rand(max)
  20.     if $record != nil and $record.mode == "播放"
  21.       return $record.pop
  22.     end
  23.     result = rand_old(max)
  24.     if $record != nil and $record.mode == "录制"
  25.       Input.deal_repeat_key
  26.       $record.push(result)
  27.     end
  28.     return result
  29.   end

  30. end

  31. #==============================================================================
  32. # ■ Input
  33. #------------------------------------------------------------------------------
  34. #  Input模块。
  35. #==============================================================================

  36. module Input
  37.   
  38.   #--------------------------------------------------------------------------
  39.   # ● 记录
  40.   #--------------------------------------------------------------------------
  41.   @press = method("press?") if @press.nil?
  42.   @trigger = method("trigger?") if @trigger.nil?
  43.   @repeat = method("repeat?") if @repeat.nil?
  44.   @dir4 = method("dir4") if @dir4.nil?
  45.   @dir8 = method("dir8") if @dir8.nil?
  46.   
  47.   #--------------------------------------------------------------------------
  48.   # ● 作用函数
  49.   #--------------------------------------------------------------------------
  50.   module_function
  51.   
  52.   #--------------------------------------------------------------------------
  53.   # ● 记数
  54.   #--------------------------------------------------------------------------
  55.   @counts = 0
  56.   
  57.   #--------------------------------------------------------------------------
  58.   # ● 处理重复键
  59.   #--------------------------------------------------------------------------
  60.   def deal_repeat_key
  61.     return if @counts == 0
  62.     $record.push(false,@counts)
  63.     @counts = 0
  64.   end
  65.   
  66.   #--------------------------------------------------------------------------
  67.   # ● 通常01
  68.   #--------------------------------------------------------------------------
  69.   def common01(kind,num)
  70.     if $record != nil and $record.mode == "播放"
  71.       return $record.pop
  72.     end
  73.     result = eval(kind).call(num)
  74.     if $record != nil and $record.mode == "录制"
  75.       if result
  76.         self.deal_repeat_key
  77.         $record.push(result)
  78.       else
  79.         @counts += 1
  80.       end
  81.     end
  82.     return result
  83.   end
  84.   
  85.   #--------------------------------------------------------------------------
  86.   # ● 重定义 press?
  87.   #--------------------------------------------------------------------------
  88.   def press?(num)
  89.     return self.common01("@press",num)
  90.   end
  91.   
  92.   #--------------------------------------------------------------------------
  93.   # ● 重定义 trigger?
  94.   #--------------------------------------------------------------------------
  95.   def trigger?(num)
  96.     return self.common01("@trigger",num)
  97.   end
  98.   
  99.   #--------------------------------------------------------------------------
  100.   # ● 重定义 repeat?
  101.   #--------------------------------------------------------------------------
  102.   def repeat?(num)
  103.     return self.common01("@repeat",num)
  104.   end
  105.   
  106.   #--------------------------------------------------------------------------
  107.   # ● 通常02
  108.   #--------------------------------------------------------------------------
  109.   def common02(kind)
  110.     if $record != nil and $record.mode == "播放"
  111.       return $record.pop
  112.     end
  113.     result = eval(kind).call
  114.     if $record != nil and $record.mode == "录制"
  115.       if result != 0
  116.         self.deal_repeat_key
  117.         $record.push(result)
  118.       else
  119.         @counts += 1
  120.       end
  121.     end
  122.     return result
  123.   end
  124.   
  125.   #--------------------------------------------------------------------------
  126.   # ● 重定义 dir4
  127.   #--------------------------------------------------------------------------
  128.   def dir4
  129.     return self.common02("@dir4")
  130.   end
  131.   
  132.   #--------------------------------------------------------------------------
  133.   # ● 重定义 dir8
  134.   #--------------------------------------------------------------------------
  135.   def dir8
  136.     return self.common02("@dir8")
  137.   end
  138.   
  139. end

  140. #==============================================================================
  141. # ■ Sub_Hash
  142. #------------------------------------------------------------------------------
  143. #  Hash的子类。
  144. #==============================================================================

  145. class Sub_Hash < Hash
  146.   
  147.   #--------------------------------------------------------------------------
  148.   # ● 初始化
  149.   #--------------------------------------------------------------------------
  150.   def initialize
  151.     @pos = 0
  152.   end
  153.   
  154.   #--------------------------------------------------------------------------
  155.   # ● push
  156.   #--------------------------------------------------------------------------
  157.   def push(value)
  158.     self[@pos] = value
  159.     @pos += 1
  160.   end
  161.   
  162.   #--------------------------------------------------------------------------
  163.   # ● shift
  164.   #--------------------------------------------------------------------------
  165.   def shift
  166.     result = self[@pos]
  167.     @pos += 1
  168.     return result
  169.   end
  170.   
  171.   #--------------------------------------------------------------------------
  172.   # ● 更改位置
  173.   #--------------------------------------------------------------------------
  174.   def pos=(pos)
  175.     @pos = pos
  176.   end
  177.   
  178.   #--------------------------------------------------------------------------
  179.   # ● 判断
  180.   #--------------------------------------------------------------------------
  181.   def empty?
  182.     return @pos == self.size
  183.   end
  184.   
  185. end
  186.    
  187. #==============================================================================
  188. # ■ Record
  189. #------------------------------------------------------------------------------
  190. #  录制的类。
  191. #==============================================================================

  192. class Record
  193.   
  194.   #--------------------------------------------------------------------------
  195.   # ● 定义实例变量
  196.   #--------------------------------------------------------------------------
  197.   attr_reader   :mode
  198.   
  199.   #--------------------------------------------------------------------------
  200.   # ● 初始化
  201.   #--------------------------------------------------------------------------
  202.   def initialize
  203.     @mode = "空"
  204.     @infos = Sub_Hash.new
  205.   end
  206.   
  207.   #--------------------------------------------------------------------------
  208.   # ● 开始录制
  209.   #--------------------------------------------------------------------------
  210.   def start
  211.     @mode = "录制"
  212.   end
  213.   
  214.   #--------------------------------------------------------------------------
  215.   # ● 开始播放
  216.   #--------------------------------------------------------------------------
  217.   def play
  218.     @mode = "播放"
  219.     @infos.pos = 0
  220.     @counts = 0
  221.     @kind = nil
  222.     @ended = false
  223.   end
  224.   
  225.   #--------------------------------------------------------------------------
  226.   # ● 播放结束
  227.   #--------------------------------------------------------------------------
  228.   def finish
  229.     @mode = "空"
  230.     p '播放结束'
  231.   end
  232.   
  233.   #--------------------------------------------------------------------------
  234.   # ● push
  235.   #--------------------------------------------------------------------------
  236.   def push(value,num = 1)
  237.     @infos.push([value,num])
  238.   end
  239.   
  240.   #--------------------------------------------------------------------------
  241.   # ● pop
  242.   #--------------------------------------------------------------------------
  243.   def pop
  244.     if @ended
  245.       self.finish
  246.       return
  247.     end
  248.     if @counts == 0
  249.       result = @infos.shift
  250.       @ended = true if @infos.empty?
  251.       @counts = result[1]
  252.       @counts -= 1
  253.       @kind = result[0]
  254.       return @kind
  255.     else
  256.       @counts -= 1
  257.       return @kind
  258.     end
  259.   end
  260.   
  261.   #--------------------------------------------------------------------------
  262.   # ● 记录
  263.   #--------------------------------------------------------------------------
  264.   def write(index = 1)
  265.     save_data(self,"Record/record#{index}.rxdata")
  266.   end
  267.   
  268.   #--------------------------------------------------------------------------
  269.   # ● 暂停
  270.   #--------------------------------------------------------------------------
  271.   def pause
  272.     @mode = "空"
  273.   end
  274.   
  275. end
复制代码


              [本贴由 柳柳 于 2006-12-12 0:14:20 进行了编辑]
作者: Yurrica    时间: 2006-12-7 05:53
好东东。。万年不来技术区的人来抢沙发~~{/hx}
作者: elwd    时间: 2006-12-7 05:54
提示: 作者被禁止或删除 内容自动屏蔽
作者: simounF    时间: 2006-12-7 06:00
提示: 作者被禁止或删除 内容自动屏蔽
作者: 柳柳    时间: 2006-12-7 06:24
哈哈~有意思~
我就说不难吗,叶子还不信~{/qiang}
作者: whbm    时间: 2006-12-7 06:27
挺有意思
作者: 两只鱼    时间: 2006-12-7 06:30
暴雪出品,必为精品(魔兽)
夏娜出品,必为精品(-__-这个脚本)
作者: link006007    时间: 2006-12-7 07:10
超强!
已经将Ruby了解道这种地步了!
作者: 依依    时间: 2006-12-7 09:05
等待了好久``这样就可以做帅帅的录象了
作者: 小徐    时间: 2006-12-7 13:28
哎~好玩好玩!~~{/se}
作者: 轮回者    时间: 2006-12-7 18:29
强悍啊{/se}
嘿嘿,可以用来做坏事{/cy}
作者: 美兽    时间: 2006-12-7 18:34
很是神奇的东西啊,可以用来做游戏帮助一类的东西.
作者: 面粉    时间: 2006-12-8 06:28
邪恶啊……

稍微修改一下子的话会变成一个超级邪恶的脚本……

这样子的话会不会被反木马软件清除掉? = =||

Just Kidding……
作者: 雷欧纳德    时间: 2006-12-8 07:10
以下引用轮回者于2006-12-7 10:29:17的发言:

强悍啊
嘿嘿,可以用来做坏事
以下引用面粉于2006-12-7 22:28:57的发言:

邪恶啊……

稍微修改一下子的话会变成一个超级邪恶的脚本……

这样子的话会不会被反木马软件清除掉? = =||

Just Kidding……

{/gg}{/gg}{/gg}啥邪恶的事.....
作者: 叶子    时间: 2006-12-8 20:39
o.o! 夏娜厉害
偶以前那个脚本弄出来的录像文件体积太大,所以丢弃了..
作者: 美兽    时间: 2007-1-9 16:20
虽有挖坟之嫌,但看到这个东西之初就产生个想法,随后尝试很长时间一直无果,不得不顶上来。
想法是:是否可以达成即时存取的效果???
作者: 雷欧纳德    时间: 2007-1-10 17:58
即时存取? - -

呃 ms挺好玩  orz

感觉可以 ~ 但要完全实现即时 ms 就比较麻烦了 ~

偶试试 ~ ms的思路呢  怎么尝试的 也说说看~ - -b
作者: 美兽    时间: 2007-1-10 23:01
这个脚本本身就没看懂,有些方法甚至都没见过,只是感觉在记录操作流程。

后来想如果只记录变量状态是否可以,发现确实变量状态返回了,但生成的精灵并没有得到释放,也就是说,回到了记录的状态,但画面的精灵因为没得到释放变的乱七八糟,只能连按回车取消掉,有的时候又卡在地图上‘
于是利用那个“RGSS一些不常用的方法~”,返回实例变量名,判断是否为bitmap对象之后释放掉再返回,从此稀里糊涂被“T”的梦魇开始了.......
作者: 雷欧纳德    时间: 2007-1-10 23:48
唔 `` 感觉其实要完全的实现即时 确定挺麻烦 ``` 因为 rgss中写入记录文件的时候  对于
Sprite、Bitmap、Proc这些对象是不能进行 序列化的,也就是不能写入文件的,所以几乎就不可能是完全的即时,只能写入一些能够序列化的对象,变量值那些,然后在读取的时候重建Sprite、Bitmap对象等

至于精灵没释放那个问题,美兽可用这个试试 。 - -b  注意:会释放所有的Bitmap对象
ObjectSpace.each_object(Bitmap) do |btm|
  btm.dispose
end
作者: 美兽    时间: 2007-1-11 18:01
郁闷

作者: 叶子的离开    时间: 2007-1-20 17:44
因为这个脚本是记录键盘按键次序,以达到录象效果,(解析脚本得出的结论)所以,只要更改一下注册表或者什么别的,就可以记录键盘,所以超级邪恶

哈哈(江民向外弹出*********了哦)
作者: oksh    时间: 2007-1-22 03:06
这个脚本在存档后记录录象,我想在读档后继续记录,也就是把第二次存档之前的所有操作都记录下来,有办法做到吗?

另外这个脚本不能记录用户自定义的按键使用。

楼主,有什么办法能解决吗?
作者: 神思    时间: 2007-1-23 22:50
-___-这个东西的原理就是把Input里的那个几个东西的返回值储存起来`
然后播放的时候就直接加载文件里的`````

所以如果是用了全键盘的话`要把全键盘里的那几个方法也加上来就好了````
作者: oksh    时间: 2007-1-24 06:01
能不能说一个实际的操作方法啊。

是把他里面3个方法加进来吗?怎么操作啊?
作者: oksh    时间: 2007-1-28 22:37
求楼主和高手解决自定义键盘和录象脚本的整合问题
附范例:
http://www.51aj.com/uwixaow/Files/2007128/142856oksh.rar
作者: 秋弦月    时间: 2007-3-20 06:24
很神奇的东西!!{/se}
有点像那个 模拟精灵。模拟精灵运行时模仿电脑的操作,鼠标移动,和行动等等。然后重复。

这个也这么强………………今天看到的强悍之作太多鸟,有点消化不良……




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