查看: 3203|回复: 6

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

[复制链接]

精灵族の天使<

梦石
0
星屑
1712
在线时间
3039 小时
注册时间
2007-3-16
回帖
33092

开拓者贵宾

发表于 2014-11-4 18:16:52 | 显示全部楼层 |阅读模式

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

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

×
紫苏的脚本在这里:
彻底根除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

路人党员

梦石
0
星屑
52
在线时间
2276 小时
注册时间
2010-12-30
回帖
3011
发表于 2014-11-4 21:39:44 | 显示全部楼层
精灵好久不见
表示1.03无压力==
顺带吐槽精灵球
本人擅长XP,如果有脚本或者Ruby方面的问题欢迎发电邮到engshun@1ppl.me咨询,本人很少检查电邮所以不一定会及时回复,本人不会直接出手解决问题只会提供一个方向,所以谢绝伸手党
回复

使用道具 举报

幻想天神

梦石
0
星屑
55
在线时间
166 小时
注册时间
2012-3-24
回帖
355
发表于 2014-11-4 22:27:07 来自手机 | 显示全部楼层
版主大人解决不掉吗

点评

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

使用道具 举报

匿·蹤

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

点评

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

使用道具 举报

梦石
0
星屑
50
在线时间
3 小时
注册时间
2014-11-9
回帖
11
发表于 2014-11-10 13:33:38 | 显示全部楼层
脚本不兼容也很麻烦

回复

使用道具 举报

匿·蹤

梦石
0
星屑
65
在线时间
99 小时
注册时间
2006-3-19
回帖
404
发表于 2014-11-11 17:10:45 | 显示全部楼层
[pre lang="ruby" line="1"]
#==============================================================================
# ■  Hangup 异常根除
#    Hangup Exception Eradication
#----------------------------------------------------------------------------
#
#    Hangup 异常是 RMXP 底层引擎内置的一个异常类,游戏进程会在 Graphics.update
#    没有调用超过 10 秒时抛出这个异常。这个脚本使用了 Windows API 暴力地解除
#    了这个限制。
#    使用方法:Hangup 异常根除脚本必须插入到脚本编辑器的最顶端,所有脚本之前,无
#    例外。
#
#----------------------------------------------------------------------------
#
#    更新作者: 紫苏
#    许可协议: FSL -MEE
#    项目版本: 1.2.0827
#    引用网址:
#    http://rpg.blue/forum.php?mod=viewthread&tid=134316
#    http://szsu.wordpress.com/2010/08/09/hangup_eradication
#
#----------------------------------------------------------------------------
#
#    - 1.2.0827 By 紫苏
#      * 更改了配置模块名
#      * 更改了 FSL 注释信息
#
#    - 1.2.0805 By 紫苏
#      * 脚本开始遵循 FSL
#      * 全局范围内改变了脚本结构
#
#    - 1.1.1101 By 紫苏
#      * 修正了脚本在 Windows XP 平台下失效的问题
#
#    - 1.0.0927 By 紫苏
#      * 初始版本完成
#
#==============================================================================

$__jmp_here.call if $__jmp_here

#----------------------------------------------------------------------------
# ● 登记 FSL。
#----------------------------------------------------------------------------
$fscript = {} if !$fscript
$fscript['HangupEradication'] = '1.2.0827'

#==============================================================================
# ■ FSL
#------------------------------------------------------------------------------
#  自由RGSS脚本通用公开协议的功能模块。
#==============================================================================

module FSL
  module HangupEradication
    #------------------------------------------------------------------------
    # ● 定义需要的 Windows API。
    #------------------------------------------------------------------------
    OpenThread = Win32API.new('kernel32', 'OpenThread', 'LIL', 'L')
    CloseHandle = Win32API.new('kernel32', 'CloseHandle', 'L', 'I')
    Thread32Next = Win32API.new('kernel32', 'Thread32Next', 'LP', 'I')
    ResumeThread = Win32API.new('kernel32', 'ResumeThread', 'L', 'L')
    SuspendThread = Win32API.new('kernel32', 'SuspendThread', 'L', 'L')
    Thread32First = Win32API.new('kernel32', 'Thread32First', 'LP', 'I')
    GetCurrentProcessId = Win32API.new('kernel32', 'GetCurrentProcessId', 'V', 'L')
    CreateToolhelp32Snapshot = Win32API.new('kernel32', 'CreateToolhelp32Snapshot', 'LL', 'L')
  end
end

#==============================================================================
# ■ HangupEradication
#------------------------------------------------------------------------------
#  处理根除 Hangup 异常的类。
#==============================================================================

class HangupEradication
  include FSL::HangupEradication
  #--------------------------------------------------------------------------
  # ● 初始化对像。
  #--------------------------------------------------------------------------
  def initialize
    @hSnapShot = CreateToolhelp32Snapshot.call(4, 0)
    @hLastThread = OpenThread.call(2, 0, self.getLastThreadId)
    #@hLastThread = OpenThread.call(2097151, 0, threadID)
    ObjectSpace.define_finalizer(self, self.method(:finalize))
  end
  #--------------------------------------------------------------------------
  # ● 获取当前进程创建的最后一个线程的标识。
  #--------------------------------------------------------------------------
  def getLastThreadId
    threadEntry = [28, 0, 0, 0, 0, 0, 0].pack("L*")
    threadId = 0                                          # 线程标识
    found = Thread32First.call(@hSnapShot, threadEntry)   # 准备枚举线程
    while found != 0
      arrThreadEntry = threadEntry.unpack("L*")           # 线程数据解包
      if arrThreadEntry[3] == GetCurrentProcessId.call    # 匹配进程标识
        threadId = arrThreadEntry[2]                      # 记录线程标识
      end
      found = Thread32Next.call(@hSnapShot, threadEntry)  # 下一个线程
    end
    return threadId
  end
  #--------------------------------------------------------------------------
  # ● 根除 Hangup 异常。
  #     2       : “暂停和恢复线程访问权限”代码;
  #     2097151 : “所有可能的访问权限”代码(Windows XP 平台下无效)。
  #--------------------------------------------------------------------------
  def eradicate
    SuspendThread.call(@hLastThread)
  end
  #--------------------------------------------------------------------------
  # ● 恢复 Hangup 异常。
  #--------------------------------------------------------------------------
  def resume
    while ResumeThread.call(@hLastThread) > 1; end        # 恢复最后一个线程
  end
  #--------------------------------------------------------------------------
  # ● 最终化对像。
  #--------------------------------------------------------------------------
  def finalize
    CloseHandle.call(@hSnapShot)
    CloseHandle.call(@hLastThread)
  end
end

hangupEradication = HangupEradication.new
hangupEradication.eradicate

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

#==============================================================================
# ■ 游戏主过程
#------------------------------------------------------------------------------
#  游戏脚本的解释从这个外壳开始。
#==============================================================================

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

hangupEradication.resume
exit
[/pre]
只含紫苏大脚本的空白工程
Project1.zip (202.05 KB, 下载次数: 47)

评分

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

查看全部评分

卐忍 → 解忍 → 元忍 → 隐忍 → 卍忍 → 匿踪(最终)
完全退步到了卐忍阶段
回复 1 0

使用道具 举报

精灵族の天使<

梦石
0
星屑
1712
在线时间
3039 小时
注册时间
2007-3-16
回帖
33092

开拓者贵宾

 楼主| 发表于 2014-11-11 17:16:59 | 显示全部楼层
本帖最后由 精灵使者 于 2014-11-11 17:42 编辑

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

点评

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

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部