#==============================================================================
# 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
#==============================================================================
# 本脚本原作者“柳之一”,用于XP与VX的‘错误脚本详细提示和添加错误日志’。
# 本脚本由“寒冷魔王(Chill)”修改为VA版。标记## Chill的为修改处。
module ERRSettings
#▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
#请设置以下东东
# 游戏测试的时候,是否保存错误信息?(true是false不是)
SaveErrorData = false
# 回溯跟踪错误的文件名
BackTraceFileName = "Backtrace.txt"
# 触发系统错误
CallSystemError = false
#▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
end
module RPG
module_function
def version
3.0 ## Chill
end
def debug?
$TEST ## Chill
end
end
class Reset < Exception
end
class ScriptInterpreter
include ERRSettings
def run
SceneManager.run ## Chill
rescue RGSSReset => exp ## Chill
raise
rescue SystemExit => exp
raise
rescue Exception => exp
exception(exp)
exit
end
private
def exception(exp)
save_backtrace(exp) if SaveErrorData or RPG.debug?
msgbox(get_error_message(exp)) ## Chill
raise if CallSystemError and RPG.debug?
end
def get_error_message(exp)
if RPG.debug?
bt = BackTrace.get_backtraces(exp.backtrace)
if exp.class.to_s=="SyntaxError"
$outexp="语法错误"
elsif exp.class.to_s=="NameError"
$outexp="变量未定义"
elsif exp.class.to_s=="NoMethodError"
$outexp="方法未定义"
elsif exp.class.to_s=="NoMemoryError"
$outexp="内存占有过大"
elsif exp.class.to_s=="ArgumentError"
$outexp="参数错误" #如果愿意此处可以自定义添加
else
$outexp=exp.class.to_s
end
msg = "◆ 发生错误\n"
msg += "\n66RPG提醒您:请养成备份游戏文件的习惯。\n \n"
msg += "错误类型 :\n\t#{$outexp}\n"
msg += "错误信息 :\n\t#{exp.message}\n" if exp.message
msg += "错误可能发生的相关位置 :"
bt.each do |i|
msg += " \n\t#{i.name} : 第 #{i.line_no} 行"
msg += " : #{i.method_name}" if i.method_name
end
msg += " \n非常荣幸能为您发送错误报告\n"
else
msg = "内部发生错误强制结束。\n"
msg += "66RPG提醒您:请养成备份游戏文件的习惯。\n"
msg += "▲错误报告文件「#{BackTraceFileName}」已经保存。\n\n"
msg += " 非常荣幸能为您发送错误报告\n"
end
msg
end
def save_backtrace(exp)
bt = BackTrace.get_backtraces(exp.backtrace)
if exp.class.to_s=="SyntaxError"
$outexp="语法错误"
elsif exp.class.to_s=="NameError"
$outexp="变量未定义"
elsif exp.class.to_s=="NoMethodError"
$outexp="方法未定义"
elsif exp.class.to_s=="NoMemoryError"
$outexp="内存占有过大"
elsif exp.class.to_s=="ArgumentError"
$outexp="参数错误" #如果愿意此处可以自定义添加
else
$outexp=exp.class.to_s
end
msg = "◆ #{Time.now.strftime('%Y-%m-%d %H:%M:%S')}\n"
msg += "错误类型 :\n\t#{$outexp}\n"
msg += "错误信息 :\n\t#{exp.message}\n" if exp.message
msg += "错误可能发生的相关位置 :"
bt.each do |i|
msg += " \n\t#{i.name} : 第 #{i.line_no} 行"
msg += " : #{i.method_name}" if i.method_name
end
msg += "\n-------------66RPG-------------------\n"
File.open(BackTraceFileName, "a") do |file|
file.write(msg)
end
end
end
# 回溯跟踪错误的类
class BackTrace
BacktraceRegexp = /^{([0-9]+)}:([0-9]+)(:in `(.+)')?$/ ## Chill
BacktraceRegexp2 = /^(\(eval\)):([0-9]+)(:in `(.+)')?$/ ## Chill
BacktraceRegexp3 = /^(.*):([0-9]+)(:in `(.+)')?$/ ## Chill
def self.get_backtraces(bt)
r = []
bt.each do |i|
r << self.new(i)
end
r
end
def initialize(line)
## Chill 以下
if ((mat = BacktraceRegexp.match(line)))
name, @line_no, @method_name = mat.to_a.values_at(1,2,4)
@name = get_section_name(name)
elsif ((mat = BacktraceRegexp2.match(line)))
name, @line_no, @method_name = mat.to_a.values_at(1,2,4)
@name = "eval"
elsif ((mat = BacktraceRegexp3.match(line)))
name, @line_no, @method_name = mat.to_a.values_at(1,2,4)
@name = name
end
## Chill 以上
end
attr_accessor :name
attr_accessor :line_no
attr_accessor :method_name
private
def get_section_name(index)
$RGSS_SCRIPTS[index.to_i][1]
end
end
#==============================================================================
# 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
#==============================================================================