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

Project1

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

[已经解决] 脚本已被备份?

 关闭 [复制链接]

Lv3.寻梦者

梦石
0
星屑
1120
在线时间
381 小时
注册时间
2010-10-9
帖子
386

开拓者

跳转到指定楼层
1
发表于 2011-2-20 12:39:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
“脚本已被备份”以前遇到过此问题。。这是咋回事啊。。该不会是某些脚本的作者在脚本里加了数值改变就会提示“脚本已被备份”吧。。。

Lv1.梦旅人

虱子

梦石
0
星屑
121
在线时间
1782 小时
注册时间
2010-6-19
帖子
3597
2
发表于 2011-2-20 13:09:55 | 只看该作者
10秒没有执行Graphics.update

http://rpg.blue/thread-175056-1-2.html
PVZ型塔防物一个
http://rpg.blue/thread-155199-1-2.html
RMXP技术讨论区手动认可帖,得到答案请认可
回复 支持 反对

使用道具 举报

Lv2.观梦者

虚構歪曲

梦石
0
星屑
339
在线时间
1197 小时
注册时间
2010-12-18
帖子
3928

贵宾

3
发表于 2011-2-20 13:15:16 | 只看该作者
  1. #==============================================================================
  2. # ■  Hangup 异常根除
  3. #    Hangup Exception Eradication
  4. #----------------------------------------------------------------------------
  5. #
  6. #    Hangup 异常是 RMXP 底层引擎内置的一个异常类,游戏进程会在 Graphics.update
  7. #    没有调用超过 10 秒时抛出这个异常。这个脚本使用了 Windows API 暴力地解除
  8. #    了这个限制。
  9. #    使用方法:Hangup 异常根除脚本必须插入到脚本编辑器的最顶端,所有脚本之前,无
  10. #    例外。
  11. #
  12. #----------------------------------------------------------------------------
  13. #
  14. #    更新作者: 紫苏
  15. #    许可协议: FSL -MEE
  16. #    项目版本: 1.2.0827
  17. #    引用网址:
  18. #    http://rpg.blue/forum.php?mod=viewthread&tid=134316
  19. #    http://szsu.wordpress.com/2010/08/09/hangup_eradication
  20. #
  21. #----------------------------------------------------------------------------
  22. #
  23. #    - 1.2.0827 By 紫苏
  24. #      * 更改了配置模块名
  25. #      * 更改了 FSL 注释信息
  26. #
  27. #    - 1.2.0805 By 紫苏
  28. #      * 脚本开始遵循 FSL
  29. #      * 全局范围内改变了脚本结构
  30. #
  31. #    - 1.1.1101 By 紫苏
  32. #      * 修正了脚本在 Windows XP 平台下失效的问题
  33. #
  34. #    - 1.0.0927 By 紫苏
  35. #      * 初始版本完成
  36. #
  37. #==============================================================================

  38. $__jmp_here.call if $__jmp_here

  39. #----------------------------------------------------------------------------
  40. # ● 登记 FSL。
  41. #----------------------------------------------------------------------------
  42. $fscript = {} if !$fscript
  43. $fscript['HangupEradication'] = '1.2.0827'

  44. #==============================================================================
  45. # ■ FSL
  46. #------------------------------------------------------------------------------
  47. #  自由RGSS脚本通用公开协议的功能模块。
  48. #==============================================================================

  49. module FSL
  50.   module HangupEradication
  51.     #------------------------------------------------------------------------
  52.     # ● 定义需要的 Windows API。
  53.     #------------------------------------------------------------------------
  54.     OpenThread = Win32API.new('kernel32', 'OpenThread', 'LIL', 'L')
  55.     CloseHandle = Win32API.new('kernel32', 'CloseHandle', 'L', 'I')
  56.     Thread32Next = Win32API.new('kernel32', 'Thread32Next', 'LP', 'I')
  57.     ResumeThread = Win32API.new('kernel32', 'ResumeThread', 'L', 'L')
  58.     SuspendThread = Win32API.new('kernel32', 'SuspendThread', 'L', 'L')
  59.     Thread32First = Win32API.new('kernel32', 'Thread32First', 'LP', 'I')
  60.     GetCurrentProcessId = Win32API.new('kernel32', 'GetCurrentProcessId', 'V', 'L')
  61.     CreateToolhelp32Snapshot = Win32API.new('kernel32', 'CreateToolhelp32Snapshot', 'LL', 'L')
  62.   end
  63. end

  64. #==============================================================================
  65. # ■ HangupEradication
  66. #------------------------------------------------------------------------------
  67. #  处理根除 Hangup 异常的类。
  68. #==============================================================================

  69. class HangupEradication
  70.   include FSL::HangupEradication
  71.   #--------------------------------------------------------------------------
  72.   # ● 初始化对像。
  73.   #--------------------------------------------------------------------------
  74.   def initialize
  75.     @hSnapShot = CreateToolhelp32Snapshot.call(4, 0)
  76.     @hLastThread = OpenThread.call(2, 0, self.getLastThreadId)
  77.     #@hLastThread = OpenThread.call(2097151, 0, threadID)
  78.     ObjectSpace.define_finalizer(self, self.method(:finalize))
  79.   end
  80.   #--------------------------------------------------------------------------
  81.   # ● 获取当前进程创建的最后一个线程的标识。
  82.   #--------------------------------------------------------------------------
  83.   def getLastThreadId
  84.     threadEntry = [28, 0, 0, 0, 0, 0, 0].pack("L*")
  85.     threadId = 0                                          # 线程标识
  86.     found = Thread32First.call(@hSnapShot, threadEntry)   # 准备枚举线程
  87.     while found != 0
  88.       arrThreadEntry = threadEntry.unpack("L*")           # 线程数据解包
  89.       if arrThreadEntry[3] == GetCurrentProcessId.call    # 匹配进程标识
  90.         threadId = arrThreadEntry[2]                      # 记录线程标识
  91.       end
  92.       found = Thread32Next.call(@hSnapShot, threadEntry)  # 下一个线程
  93.     end
  94.     return threadId
  95.   end
  96.   #--------------------------------------------------------------------------
  97.   # ● 根除 Hangup 异常。
  98.   #     2       : “暂停和恢复线程访问权限”代码;
  99.   #     2097151 : “所有可能的访问权限”代码(Windows XP 平台下无效)。
  100.   #--------------------------------------------------------------------------
  101.   def eradicate
  102.     SuspendThread.call(@hLastThread)
  103.   end
  104.   #--------------------------------------------------------------------------
  105.   # ● 恢复 Hangup 异常。
  106.   #--------------------------------------------------------------------------
  107.   def resume
  108.     while ResumeThread.call(@hLastThread) > 1; end        # 恢复最后一个线程
  109.   end
  110.   #--------------------------------------------------------------------------
  111.   # ● 最终化对像。
  112.   #--------------------------------------------------------------------------
  113.   def finalize
  114.     CloseHandle.call(@hSnapShot)
  115.     CloseHandle.call(@hLastThread)
  116.   end
  117. end

  118. hangupEradication = HangupEradication.new
  119. hangupEradication.eradicate

  120. callcc { |$__jmp_here| }                                  # F12 后的跳转标记

  121. #==============================================================================
  122. # ■ 游戏主过程
  123. #------------------------------------------------------------------------------
  124. #  游戏脚本的解释从这个外壳开始。
  125. #==============================================================================

  126. for subscript in 1...$RGSS_SCRIPTS.size
  127.   begin
  128.     eval(Zlib::Inflate.inflate($RGSS_SCRIPTS[subscript][2]))
  129.   rescue Exception => ex
  130.     # 异常发生并抛出给解释器时恢复线程。
  131.     hangupEradication.resume unless defined?(Reset) and ex.class == Reset
  132.     raise ex
  133.   end
  134. end

  135. hangupEradication.resume
  136. exit
复制代码

评分

参与人数 1星屑 +332 收起 理由
fux2 + 332 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
32 小时
注册时间
2011-2-28
帖子
5
4
发表于 2011-2-28 14:00:02 | 只看该作者
可能遇到内存溢出漏洞了,查看下改动的脚本有没有跳出条件可能造成溢出,常见于条件和循环中
回复 支持 反对

使用道具 举报

Lv1.梦旅人

路人党员

梦石
0
星屑
52
在线时间
2276 小时
注册时间
2010-12-30
帖子
3225
5
发表于 2011-2-28 14:03:50 | 只看该作者
请将您的工程发上,否则无法鉴定问题所在。
本人擅长XP,如果有脚本或者Ruby方面的问题欢迎发电邮到[email protected]咨询,本人很少检查电邮所以不一定会及时回复,本人不会直接出手解决问题只会提供一个方向,所以谢绝伸手党
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1120
在线时间
381 小时
注册时间
2010-10-9
帖子
386

开拓者

6
 楼主| 发表于 2011-5-22 17:26:39 | 只看该作者
忧雪の伤 发表于 2011-2-20 13:15

直接不响应了

点评

该段脚本要放在所有脚本上面  发表于 2011-5-22 23:48
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-9-22 08:30

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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