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

Project1

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

[已经解决] 紫苏的10s异常脚本与RMXP1.03冲突!

[复制链接]

Lv3.寻梦者 (暗夜天使)

精灵族の天使

梦石
0
星屑
1697
在线时间
3038 小时
注册时间
2007-3-16
帖子
33731

开拓者贵宾

跳转到指定楼层
1
发表于 2014-11-4 18:16:52 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
紫苏的脚本在这里:
彻底根除10s异常
在RMXP1.03下运行出错。
基于现在论坛里都是RM1.03。
那么强烈需要更新此脚本与其兼容。
那么特别呼叫
@紫苏  

点评

精灵大,脚本已发  发表于 2014-11-11 17:12
帮我发一份紫苏的脚本吧,我这里一打开紫苏的页面就卡死  发表于 2014-11-11 17:04
精灵建立的是默认工程,应该没其他脚本来着。等等,莫非我的版本太低?!  发表于 2014-11-11 17:00
精灵大,还是那句话——求截图…… m(_ _)m 辛苦精灵大了  发表于 2014-11-11 16:53
对了,你使用的1.03么?  发表于 2014-11-11 16:52

Lv1.梦旅人

路人党员

梦石
0
星屑
52
在线时间
2276 小时
注册时间
2010-12-30
帖子
3225
2
发表于 2014-11-4 21:39:44 | 只看该作者
精灵好久不见
表示1.03无压力==
顺带吐槽精灵球
本人擅长XP,如果有脚本或者Ruby方面的问题欢迎发电邮到[email protected]咨询,本人很少检查电邮所以不一定会及时回复,本人不会直接出手解决问题只会提供一个方向,所以谢绝伸手党
回复 支持 反对

使用道具 举报

Lv1.梦旅人

幻想天神

梦石
0
星屑
55
在线时间
166 小时
注册时间
2012-3-24
帖子
404
3
发表于 2014-11-4 22:27:07 手机端发表。 | 只看该作者
版主大人解决不掉吗

点评

恩,这个脚本的黑科技超过了我的解决范围,不过这也是我的核心脚本之一,所以必须要解决口牙!  发表于 2014-11-5 14:51
回复 支持 反对

使用道具 举报

Lv1.梦旅人

匿·蹤

梦石
0
星屑
65
在线时间
99 小时
注册时间
2006-3-19
帖子
456
4
发表于 2014-11-10 10:08:58 | 只看该作者
精灵大大,貌似我新建一个空工程,然后将紫苏大的脚本插入,并放在编辑器的最顶端,运行的时候没有问题啊。
精灵大大是否可以给个出错的截图啥的?m(_ _)m

点评

WIN7系统下不报错 XP系统会异常(好像139行是Nil)  发表于 2014-11-10 21:46
1.03报错如下:  发表于 2014-11-10 21:42
卐忍 → 解忍 → 元忍 → 隐忍 → 卍忍 → 匿踪(最终)
完全退步到了卐忍阶段
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
3 小时
注册时间
2014-11-9
帖子
11
5
发表于 2014-11-10 13:33:38 | 只看该作者
脚本不兼容也很麻烦

回复 支持 反对

使用道具 举报

Lv1.梦旅人

匿·蹤

梦石
0
星屑
65
在线时间
99 小时
注册时间
2006-3-19
帖子
456
6
发表于 2014-11-11 17:10:45 | 只看该作者
RUBY 代码复制
  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. #    [url]http://rpg.blue/forum.php?mod=viewthread&tid=134316[/url]
  19. #    [url]http://szsu.wordpress.com/2010/08/09/hangup_eradication[/url]
  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.  
  39. $__jmp_here.call if $__jmp_here
  40.  
  41. #----------------------------------------------------------------------------
  42. # ● 登记 FSL。
  43. #----------------------------------------------------------------------------
  44. $fscript = {} if !$fscript
  45. $fscript['HangupEradication'] = '1.2.0827'
  46.  
  47. #==============================================================================
  48. # ■ FSL
  49. #------------------------------------------------------------------------------
  50. #  自由RGSS脚本通用公开协议的功能模块。
  51. #==============================================================================
  52.  
  53. module FSL
  54.   module HangupEradication
  55.     #------------------------------------------------------------------------
  56.     # ● 定义需要的 Windows API。
  57.     #------------------------------------------------------------------------
  58.     OpenThread = Win32API.new('kernel32', 'OpenThread', 'LIL', 'L')
  59.     CloseHandle = Win32API.new('kernel32', 'CloseHandle', 'L', 'I')
  60.     Thread32Next = Win32API.new('kernel32', 'Thread32Next', 'LP', 'I')
  61.     ResumeThread = Win32API.new('kernel32', 'ResumeThread', 'L', 'L')
  62.     SuspendThread = Win32API.new('kernel32', 'SuspendThread', 'L', 'L')
  63.     Thread32First = Win32API.new('kernel32', 'Thread32First', 'LP', 'I')
  64.     GetCurrentProcessId = Win32API.new('kernel32', 'GetCurrentProcessId', 'V', 'L')
  65.     CreateToolhelp32Snapshot = Win32API.new('kernel32', 'CreateToolhelp32Snapshot', 'LL', 'L')
  66.   end
  67. end
  68.  
  69. #==============================================================================
  70. # ■ HangupEradication
  71. #------------------------------------------------------------------------------
  72. #  处理根除 Hangup 异常的类。
  73. #==============================================================================
  74.  
  75. class HangupEradication
  76.   include FSL::HangupEradication
  77.   #--------------------------------------------------------------------------
  78.   # ● 初始化对像。
  79.   #--------------------------------------------------------------------------
  80.   def initialize
  81.     @hSnapShot = CreateToolhelp32Snapshot.call(4, 0)
  82.     @hLastThread = OpenThread.call(2, 0, self.getLastThreadId)
  83.     #@hLastThread = OpenThread.call(2097151, 0, threadID)
  84.     ObjectSpace.define_finalizer(self, self.method(:finalize))
  85.   end
  86.   #--------------------------------------------------------------------------
  87.   # ● 获取当前进程创建的最后一个线程的标识。
  88.   #--------------------------------------------------------------------------
  89.   def getLastThreadId
  90.     threadEntry = [28, 0, 0, 0, 0, 0, 0].pack("L*")
  91.     threadId = 0                                          # 线程标识
  92.     found = Thread32First.call(@hSnapShot, threadEntry)   # 准备枚举线程
  93.     while found != 0
  94.       arrThreadEntry = threadEntry.unpack("L*")           # 线程数据解包
  95.       if arrThreadEntry[3] == GetCurrentProcessId.call    # 匹配进程标识
  96.         threadId = arrThreadEntry[2]                      # 记录线程标识
  97.       end
  98.       found = Thread32Next.call(@hSnapShot, threadEntry)  # 下一个线程
  99.     end
  100.     return threadId
  101.   end
  102.   #--------------------------------------------------------------------------
  103.   # ● 根除 Hangup 异常。
  104.   #     2       : “暂停和恢复线程访问权限”代码;
  105.   #     2097151 : “所有可能的访问权限”代码(Windows XP 平台下无效)。
  106.   #--------------------------------------------------------------------------
  107.   def eradicate
  108.     SuspendThread.call(@hLastThread)
  109.   end
  110.   #--------------------------------------------------------------------------
  111.   # ● 恢复 Hangup 异常。
  112.   #--------------------------------------------------------------------------
  113.   def resume
  114.     while ResumeThread.call(@hLastThread) > 1; end        # 恢复最后一个线程
  115.   end
  116.   #--------------------------------------------------------------------------
  117.   # ● 最终化对像。
  118.   #--------------------------------------------------------------------------
  119.   def finalize
  120.     CloseHandle.call(@hSnapShot)
  121.     CloseHandle.call(@hLastThread)
  122.   end
  123. end
  124.  
  125. hangupEradication = HangupEradication.new
  126. hangupEradication.eradicate
  127.  
  128. callcc { |$__jmp_here| }                                  # F12 后的跳转标记
  129.  
  130. #==============================================================================
  131. # ■ 游戏主过程
  132. #------------------------------------------------------------------------------
  133. #  游戏脚本的解释从这个外壳开始。
  134. #==============================================================================
  135.  
  136. for subscript in 1...$RGSS_SCRIPTS.size
  137.   begin
  138.     eval(Zlib::Inflate.inflate($RGSS_SCRIPTS[subscript][2]))
  139.   rescue Exception => ex
  140.     # 异常发生并抛出给解释器时恢复线程。
  141.     hangupEradication.resume unless defined?(Reset) and ex.class == Reset
  142.     raise ex
  143.   end
  144. end
  145.  
  146. hangupEradication.resume
  147. exit

只含紫苏大脚本的空白工程
Project1.zip (202.05 KB, 下载次数: 47)

评分

参与人数 2星屑 +250 梦石 +1 收起 理由
RyanBern + 150 认可答案+凑整
精灵使者 + 100 + 1 认可答案

查看全部评分

卐忍 → 解忍 → 元忍 → 隐忍 → 卍忍 → 匿踪(最终)
完全退步到了卐忍阶段
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

精灵族の天使

梦石
0
星屑
1697
在线时间
3038 小时
注册时间
2007-3-16
帖子
33731

开拓者贵宾

7
 楼主| 发表于 2014-11-11 17:16:59 | 只看该作者
本帖最后由 精灵使者 于 2014-11-11 17:42 编辑

测试出来了。

很神奇的BUG。
从博客黏贴过来的,难道会吃掉?
更新:新浪的BLOG居然没有脚本模式,即使是复制过来的也会很神奇的吃掉?
好吧,这次看起来只能用txt了
新浪的BLOG会自动过滤一些脚本……看起来精灵必须用txt保存他们了
很奇怪的事情。
脚本里明明写着eval,结果保存会自动编辑成eval_r
哎哎哎哎哎哎?
好吧,这样结贴吧。
原来是渣浪的错!

点评

没有脚本模式的精灵已经躺枪好多次了。尤其是API什么的。  发表于 2014-11-11 19:43
晕死了…特意去渣浪做了下测试,渣浪这是什么情况,为啥一粘贴就多了很多不该有的东西……晕死了……啊,我醉了!!……  发表于 2014-11-11 18:54
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-24 00:57

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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