设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 5249|回复: 7
打印 上一主题 下一主题

RPG录像脚本

 关闭 [复制链接]

Lv2.观梦者

傻♂逼

梦石
0
星屑
369
在线时间
1605 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

跳转到指定楼层
1
发表于 2008-11-24 21:41:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
玩过网游没有?
没有?你丫死开。
玩过,好!知道网游的录像功能吗?
不知道?!- -|||(擦汗)
知道。那知道这个脚本干麻用吗?
不知道?哦,对我没说。
这个脚本就是提供 录像功能的脚本。
使用方法:
插入到Main以前。
按F5 (任意场合)录像!
注意!
这个程序只提供F5 录像。
播放必须要:
$notgc = RedOle.new(文件名,循环?)
update 里
$notgc.update




脚本内容:
  1. module Graphics
  2.   LoaderFPS = 30
  3. end
  4. #Graphics::LoaderFPS
  5. class Font
  6. def marshal_dump;end
  7. def marshal_load(obj);end
  8. end
  9. class Bitmap
  10. # 传送到内存的API函数
  11. RtlMoveMemory_pi = Win32API.new('kernel32', 'RtlMoveMemory', 'pii', 'i')
  12. RtlMoveMemory_ip = Win32API.new('kernel32', 'RtlMoveMemory', 'ipi', 'i')
  13. def _dump(limit)
  14. data = "rgba" * width * height
  15. RtlMoveMemory_pi.call(data, address, data.length)
  16. [width, height, Zlib::Deflate.deflate(data)].pack("LLa*") # 压缩
  17. end
  18. def self._load(str)
  19. w, h, zdata = str.unpack("LLa*"); b = new(w, h)
  20. RtlMoveMemory_ip.call(b.address, Zlib::Inflate.inflate(zdata), w * h * 4); b
  21. end
  22. # [[[bitmap.object_id * 2 + 16] + 8] + 16] == 数据的开头
  23. #
  24. def address
  25. buffer, ad = "xxxx", object_id * 2 + 16
  26. RtlMoveMemory_pi.call(buffer, ad, 4); ad = buffer.unpack("L")[0] + 8
  27. RtlMoveMemory_pi.call(buffer, ad, 4); ad = buffer.unpack("L")[0] + 16
  28. RtlMoveMemory_pi.call(buffer, ad, 4); return buffer.unpack("L")[0]
  29. end
  30. end

  31. class << Graphics
  32.   #--------------------------------------------------------------------------
  33.   # ● 更新处理
  34.   #--------------------------------------------------------------------------
  35.   alias  old_update  update
  36.   def update
  37.     @c = 0 if @c.nil?
  38.     @ot = Time.now if @ot.nil?
  39.     if (Time.now - @ot) >= 1
  40.       @c = 0
  41.       @ot = Time.now if @ot.nil?
  42.     end
  43.     old_update
  44.     $cut_loop = false if $cut_loop == nil
  45.     if ($cut_loop)
  46.       $cc = []if $cc == nil
  47.       if Input.trigger?(Input::F5)
  48.         end_cut
  49.       end
  50.       
  51. #     if @c <= Graphics::LoaderFPS
  52.         Marshal.dump(Graphics.snap_to_bitmap,@f) if $cut_loop
  53.   #    end
  54.    #   @c = @c+1
  55.       
  56.     else
  57.       if Input.trigger?(Input::F5)
  58.         begin_cut
  59.       end
  60.     end
  61.   end
  62.   def begin_cut
  63.     @f = File.open("Lop" + (Dir["Lop*.dvi"].size+1).to_s + ".dvi","wb")
  64.     $cut_loop = true
  65.     print "开始录像!"
  66.     #$cc = []
  67.   end
  68.   def end_cut
  69.     $cut_loop = false
  70.     #print "开始保存!"
  71.     @f.close   
  72.     print "保存完毕!"
  73.     #$cc = []
  74.   end
  75. end
  76. class RedOle
  77.   def initialize(fn="er",repeat=false)
  78.     if fn=="er"
  79.       p "ERROR"
  80.       exit
  81.     end
  82.     @repeat = repeat
  83.     @s = Sprite.new#(v)
  84.     @f = File.open(fn,"rb")
  85.     @pc = Marshal.load(@f)
  86.     @fn = fn
  87.     @s.bitmap = @pc
  88.   end
  89.   def update
  90.     @c = 0 if @c.nil?
  91.     @ot = Time.now if @ot.nil?
  92.     if (Time.now - @ot) >= 1
  93.       @c = 0
  94.       @ot = Time.now if @ot.nil?
  95.     end
  96.     begin
  97.       if @c <= Graphics::LoaderFPS
  98.         @pc = Marshal.load(@f)
  99.         @s.bitmap = @pc
  100.         @c += 1
  101.       end
  102.       
  103.     rescue
  104.       dispose(true)
  105.     end
  106.   end
  107.   def dispose(f=false)
  108.     @pc = nil
  109.     @s.bitmap.dispose
  110.     @s.dispose
  111.     begin
  112.       @f.close
  113.     rescue
  114.       if @repeat and f
  115.         initialize(@fn,true)
  116.       end
  117.     end
  118.     GC.start
  119.   end
  120.   def dispose?
  121.     return @pc.nil?
  122.   end
  123. end
复制代码

但是这个程序有个缺点。
录像具反馈FPS=0~5
播放=20~40(50)
还有就是文件大小偏大(高保真,32位的拉{/gg}总之播放效果很好)
哎呀,蛋疼什么的最有爱了

Lv1.梦旅人

欠扁头像持有者

梦石
0
星屑
114
在线时间
16 小时
注册时间
2005-10-22
帖子
423
2
发表于 2008-11-25 20:45:46 | 只看该作者
我提个意见好吗?
用这东西,卡得要命~生成的播放文件大得要命~
要做录像的话,可以参照星际争霸那款游戏的录像提系统哟~它的录像文件也只有几十KB左右~
水兵土星--死亡之星!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

彩色的银子

梦石
0
星屑
50
在线时间
190 小时
注册时间
2006-6-13
帖子
1361

贵宾

3
发表于 2008-11-25 23:19:28 | 只看该作者
其实不需要真的把图片保存下来的```
只句要记录操作就好了``
然后在播放的时候把操作模拟出来```
-.-
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1 小时
注册时间
2005-10-22
帖子
519
4
发表于 2008-11-25 23:26:57 | 只看该作者
以下引用神思于2008-11-25 15:19:28的发言
其实不需要真的把图片保存下来的```
只句要记录操作就好了``<br>
然后在播放的时候把操作模拟出来```


有个问题啊……思思
如果只是保存并重现玩家的操作那还算容易。
但是如果算上脚本内含关于敌人操作所形成的随机数和变量,每次都要生成一个快照,光是记录就已经比较麻烦了。如果制作者再添加了影响行动的脚本那就变得更麻烦了。
虽然可以简化:不使用储存变量,而只是在重现时读取对应时刻或者回合NPC的的动作和伤害,并显示出来。但即使这样子在重现部分还是很麻烦,现有的程序结构要作很大变动。

dvi的话……只要知道文件构成的结构就可以了呢……-v-
3rd chapter ==> 55% 完工日期===>202X年?

跳不跳呢跳不跳呢跳不跳呢……下个项目死磕HQ……
回复 支持 反对

使用道具 举报

Lv2.观梦者

傻♂逼

梦石
0
星屑
369
在线时间
1605 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

5
 楼主| 发表于 2008-11-26 02:10:55 | 只看该作者
以下引用宾少于2008-11-25 12:45:46的发言:

我提个意见好吗?
用这东西,卡得要命~生成的播放文件大得要命~
要做录像的话,可以参照星际争霸那款游戏的录像提系统哟~它的录像文件也只有几十KB左右~

要文件小可意,但是会更卡
哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

炎发灼眼的讨伐者

梦石
0
星屑
50
在线时间
1707 小时
注册时间
2007-8-4
帖子
904
6
发表于 2008-11-26 02:46:38 | 只看该作者
以下引用面粉于2008-11-25 15:26:57的发言:


以下引用神思于2008-11-25 15:19:28的发言
其实不需要真的把图片保存下来的```
只句要记录操作就好了``<br>
然后在播放的时候把操作模拟出来```



有个问题啊……思思
如果只是保存并重现玩家的操作那还算容易。
但是如果算上脚本内含关于敌人操作所形成的随机数和变量,每次都要生成一个快照,光是记录就已经比较麻烦了。如果制作者再添加了影响行动的脚本那就变得更麻烦了。
虽然可以简化:不使用储存变量,而只是在重现时读取对应时刻或者回合NPC的的动作和伤害,并显示出来。但即使这样子在重现部分还是很麻烦,现有的程序结构要作很大变动。

dvi的话……只要知道文件构成的结构就可以了呢……-v-


[本贴由作者于 2008-11-25 15:31:21 最后编辑]

重定义 rand Input里的方法不就可以了 - -?{/gg}
RMXP&amp;RMVX通用Web化完成- -|||
回复 支持 反对

使用道具 举报

Lv2.观梦者

傻♂逼

梦石
0
星屑
369
在线时间
1605 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

7
 楼主| 发表于 2008-11-26 03:14:14 | 只看该作者
以下引用灼眼的夏娜于2008-11-25 18:46:38的发言:


以下引用面粉于2008-11-25 15:26:57的发言:


以下引用神思于2008-11-25 15:19:28的发言
其实不需要真的把图片保存下来的```
只句要记录操作就好了``<br>
然后在播放的时候把操作模拟出来```



有个问题啊……思思
如果只是保存并重现玩家的操作那还算容易。
但是如果算上脚本内含关于敌人操作所形成的随机数和变量,每次都要生成一个快照,光是记录就已经比较麻烦了。如果制作者再添加了影响行动的脚本那就变得更麻烦了。
虽然可以简化:不使用储存变量,而只是在重现时读取对应时刻或者回合NPC的的动作和伤害,并显示出来。但即使这样子在重现部分还是很麻烦,现有的程序结构要作很大变动。

dvi的话……只要知道文件构成的结构就可以了呢……-v-


[本贴由作者于 2008-11-25 15:31:21 最后编辑]


重定义 rand Input里的方法不就可以了 - -?

{/fd}用的着吗...
哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1624
在线时间
1609 小时
注册时间
2007-8-28
帖子
3253

第3届短篇游戏大赛主流游戏组冠军第1届Title华丽大赛新人奖

8
发表于 2008-11-26 06:52:00 | 只看该作者
每次游戏前自动生成一个乱数表,乱数固定,记录操作。
这样才能变小,但是会对目前的系统加以更改。
要不是做卡牌,战略游戏,我是不会用录像功能的。
就是用,还得自己改{/dy}
“我推荐你一个游戏吧,avg的,剧情特感人”
“我擦,都是文字图片的游戏有啥好玩的,连个战斗都没有!”
“我推荐你一个游戏吧,rpg的,战斗也新颖”
“我擦,怎么米有作i弊器?“
”你不是喜欢战斗么?”
“不,我是剧情党!!”

继续阅读请点击
http://rpg.blue/blog-53316-10027.html
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-20 19:01

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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