相信很多网友遇到3dsmax中毒症状,比如,做着做着卡死,突然崩溃,撤退时突然崩溃,打开自动删除灯光,创建灯光崩溃等等情况。
有可能你会去网上找杀毒的办法,但是转了一圈会发现全部没用,不能彻底解决!!!
比如下面这篇文章:
「必看」近期爆发的3D max病毒特征情况和解决方案

比如:下面这个杀毒的插件,还是不能解决,等你购买了已经不好退钱了。




还有无数的清理插件和号称杀毒,永久有效的标语,这些插件全部都有一个特点:
都是基于官方的杀毒脚本套一个UI,你会发现这些Ui不仅丑陋臃肿,还不能彻底解决问题
网上杀毒清理脚本绝大部分都有下面这个清理追踪路径的节点的代码
(t=trackviewnodes;n=t[#Max_MotionClip_Manager];deleteTrackViewController t n.controller)还有加入了这2个脚本里面的内容

上面的脚本早已过时,这些脚本被用来换装骗钱,这些开发者绝大部分人没有开发能力,对于新生的病毒毫无抵抗能力,只能一味抄袭,糊弄广大网友,而且还有更蠢的办法就是直接不启用脚本加载方式防毒或者删除所有回调函数,掩耳盗铃,竟然还有那么多人上当,认为确实有效,这也就是为什么你得一直使用他们的脚本杀毒,一停就恢复原样了
有段时间CRP 和ALC病毒疯狂肆虐,用户疯狂吐槽autodesk官方,不得已,官方临时紧急发出CRP_fixup.ms和ALC_fixup.ms去清理恶意脚本,但是这2个清理脚本源码写的很死只能清理这两个,被有心人发现后又变种了,随后才有autodesk官方出了这个杀毒工具并封装了的,就是今天介绍的

Security Tools for Autodesk® 3ds Max® 2020-2015
直接在autodesk官网搜索antivirus 或者在bing搜索引擎中输入antivirus 3dsmax搜索也有,但是不要使用百度,里面太多广告了。
官方插件有个好处就是不需要你像某些国内的插件开发商要你安装客户端,得联网注册账号才能使用,而且安全干净利索。
官方还给出了检查你max有没有中毒的办法
针对CRP类型中断撤退崩溃或者删除灯光现象,在脚本侦听器输入下面代码,然后按回车(enter)
(globalVars.isGlobal #CRP_BScript)(globalVars.isGlobal #ADSL_BScript)
检查是否中了CRP病毒
返回结果如果得出false表明没有毒,true表明中毒
针对ALC2型的文件中断崩溃,因第三方脚本导致max恢复到默认设置界面的,快捷键失灵的
(globalVars.isGlobal #AutodeskLicSerStuckAlpha)
检查是否中了ACL2病毒
返回结果如果得出false表明没有毒,true表明中毒
针对ALC型的文件崩溃,给错误控制器的脚本,不能撤退的,在脚本侦听器输入下面代码,然后按回车
(globalVars.isGlobal #AutodeskLicSerStuckCleanBeta)
检查是否中了ACL病毒
针对官方只支持到2015,所以小改了官方脚本支持max2014杀毒,功能较弱,只是解决了自己碰到的毒,用户可以将下面代码保存为任何名字+.ms后缀的文件就可以了,比如ALC1111_fixup.ms,拖入max就能用。
-- ALC persistent global variable and callback removal script-- version 1.0fn test_for_ALC_startup_scripts =(format "Testing for ALC startup scripts"local ALC_startup_scripts = #()local ALC_scripts = #(@"$userStartupScriptsvrdematcleanbeta.ms", @"$userStartupScriptsvrdematcleanbeta.mse", @"$userStartupScriptsvrdematcleanbeta.msex")for f in ALC_scripts do(if doesFileExist f doappend ALC_startup_scripts (pathconfig.resolvePathSymbols f))if (ALC_startup_scripts.count != 0) do(local msg = "Following ALC startup scripts found."msg += "Note that these files may have their Hidden and System file attributes set, and not be visible in Explorer."for f in ALC_startup_scripts domsg += (" " + f + "")msg += "Remove these files?"local res = trueif (not GetQuietMode()) dores = queryBox msg title:"ALC Scripts Found"if res do(-- remove the filesfor f in ALC_startup_scripts dodeleteFile fformat "ALC scripts removed")))fn test_for_ALC_globals =(format "Testing for ALC persistent globals and callbacks"callbacks.removeScripts #animationRangeChange id:#fix_ALC_startup--print "=========================================================================================================="--callbacks.show()--persistents.show()--print "=========================================================================================================="local the_ALC_globals = #(#physXCrtRbkInfoCleanBeta, #checkLicSerSubCleanBeta, #checkLicSerMainCleanBeta, #CleanBetabaseCC64enc, #CleanBetabaseCC64dec, #runMainCleanBeta, #PointNodeCleanBeta, #px_HiddenNodeCleanBeta, #getNetUpdateCleanBeta, #AutodeskLicSerStuckCleanBeta, #px_SimulatorForModifyCleanBeta, #px_SimulatorForStateCleanBeta, #px_SimulatorSaveCleanBeta)local the_ALC_callback_ids= #(#RenderLicCleanBeta,#PhysXCleanBetaRBKSysInfo,#AutodeskLicCleanBeta)local the_ALC_node_names= #("", " "," ", " "," "," "," ","Rectangles135","","", "x3000xe813xe811", "xe814xe812")local found_ALC_global = falsefor g in the_ALC_globals while (not found_ALC_global) do found_ALC_global = globalVars.isGlobal gif found_ALC_global do(format "found ALC global variable(s). The following is a list of the ALC callbacks found:"local logFileName = @"$tempALC_callbacks.txt"openLog logFileName mode: "w" outputOnly:truefor id in the_ALC_callback_ids docallbacks.show id:id closelog()local found_ALC_callbacks = falselocal f = openfile logFileNamewhile not eof f and not found_ALC_callbacks do(local l = readline fif l != "OK" do found_ALC_callbacks = true)close fdeletefile logFileNamelocal msg = "ALC global variables found.ALC callbacks "if not found_ALC_callbacks do msg += "not "msg += "found.The presence of these global variables and callbacks"msg += "will cause data loss and improper operation of 3ds Max."msg += "Remove ALC global variables and callbacks?"local res = trueif (not GetQuietMode()) dores = queryBox msg title:"ALC Callbacks Found"if res do(-- remove the callbacksfor id in the_ALC_callback_ids dotry(callbacks.removeScripts id:id)catch() -- remove the globalsfor g in the_ALC_globals do globalVars.remove gformat "ALC global variables and callbacks removed"))local found_ALC_node = falsefor n in the_ALC_node_names while (not found_ALC_node) do found_ALC_node = (getnodebyname n) != undefinedif found_ALC_node do(local msg = "Found ALC nodes(s). The following is a list of the ALC nodes found:"for n in the_ALC_node_names do (local theNodes = getnodebyname n all:truefor theNode in theNodes do(msg += (n + "")))msg += "Remove ALC nodes?"local res = trueif (not GetQuietMode()) dores = queryBox msg title:"ALC Nodes Found"if res do(-- remove the nodesfor n in the_ALC_node_names do (local theNodes = getnodebyname n all:truefor theNode in theNodes do(with undo off (local newPRS = prs()newPRS.value = matrix3 1theNode.controller = newPRSdelete theNode)))format "ALC nodes removed"))local scaleScripts = getclassinstances scale_script processAllAnimatables:truelocal numCleaned = 0for scaleScript in scaleScripts do (local expr = scaleScript.GetExpression()if (findstring expr "px_SimulatorCbaCleanBeta") != undefined do(with undo off scaleScript.SetExpression "[1,1,1]"numCleaned += 1))if numCleaned != 0 do(local msg = "Contents of " + numCleaned as string + " scripted controllers containing ALC script cleaned"messagebox msg title:"ALC Scripted Controllers Cleaned"format "%" msg))fn test_for_ALC =(test_for_ALC_globals()test_for_ALC_startup_scripts()ok)test_for_ALC()callbacks.removeScripts id:#fix_ALC -- #animationRangeChange notification fired after loading mxs persistents, but before the #filePostOpen notification is firedcallbacks.addScript #animationRangeChange "test_for_ALC()" id:#fix_ALCcallbacks.addScript #filePostMerge "test_for_ALC()" id:#fix_ALCcallbacks.addScript #mtlLibPostOpen "test_for_ALC()" id:#fix_ALC_startup ADSL_AScript = " ADSL_WriteBScript = x22 try( x5cnx22 ADSL_WriteBScript += x22 ADSL_fName = (getDir #startupScripts)+x5cx22x5cx5c*.msx5cx22 x5cnx22 ADSL_WriteBScript += x22 ADSL_oneScript = getFiles ADSL_fName x5cnx22 ADSL_WriteBScript += x22 ADSL_oneScript = ADSL_oneScript[1] x5cnx22 ADSL_WriteBScript += x22 ADSL_BSfull = x5cx22x5cx5crx5cx5cnx5cx22 x5cnx22 ADSL_WriteBScript += x22 ADSL_BSfull += x5cx22 ADSL_AScript = x5cx5cx5cx22 x5cx22 x5cnx22 ADSL_WriteBScript += x22 ADSL_BSfull += (substituteString (substituteString ADSL_AScript x5cx22x5cx5cx5cx5cx22 x5cx22x5cx5cx5cx5cx5cx22) x5cx22x5cx5cx22x5cx22 x5cx22x5cx5cx5cx22x5cx22) x5cnx22 ADSL_WriteBScript += x22 ADSL_BSfull += x5cx22 x5cx5cx5cx22 x5cx22 x5cnx22 ADSL_WriteBScript += x22 ADSL_BSfull += x5cx22x5cx5crx5cx5cnx5cx22 x5cnx22 ADSL_WriteBScript += x22 ADSL_BSfull += x5cx22 ADSL_BScript = x5cx5cx5cx22 x5cx22 x5cnx22 ADSL_WriteBScript += x22 ADSL_BSfull += (substituteString (substituteString ADSL_BScript x5cx22x5cx5cx5cx5cx22 x5cx22x5cx5cx5cx5cx5cx22) x5cx22x5cx5cx22x5cx22 x5cx22x5cx5cx5cx22x5cx22) x5cnx22 ADSL_WriteBScript += x22 ADSL_BSfull += x5cx22 x5cx5cx5cx22 x5cx22 x5cnx22 ADSL_WriteBScript += x22 ADSL_BSfull += x5cx22x5cx5crx5cx5cnx5cx22 x5cnx22 ADSL_WriteBScript += x22 ADSL_BSfull += x5cx22 execute ADSL_BScript x5cx22 x5crx5cnx22 ADSL_WriteBScript += x22 ADSL_BSfull += x5cx22x5cx5crx5cx5cnx5cx22 x5cnx22 ADSL_WriteBScript += x22 ADSL_BSfull += x5cx22 setINISetting (getMAXIniFile()) x5cx5cx5cx22 MAXScript x5cx5cx5cx22 x5cx5cx5cx22 LoadStartupScripts x5cx5cx5cx22 x5cx5cx5cx22 1 x5cx5cx5cx22 x5cx22 x5crx5cnx22 ADSL_WriteBScript += x22 ADSL_BSfull += x5cx22x5cx5crx5cx5cnx5cx22 x5cnx22 ADSL_WriteBScript += x22 ADSL_BSfull += x5cx22 setINISetting (getMAXIniFile()) x5cx5cx5cx22 MAXScript x5cx5cx5cx22 x5cx5cx5cx22 LoadSaveSceneScripts x5cx5cx5cx22 x5cx5cx5cx22 1 x5cx5cx5cx22 x5cx22 x5crx5cnx22 ADSL_WriteBScript += x22 ADSL_BSfull += x5cx22x5cx5crx5cx5cnx5cx22 x5cnx22 ADSL_WriteBScript += x22 ADSL_BSfull += x5cx22 setINISetting (getMAXIniFile()) x5cx5cx5cx22 MAXScript x5cx5cx5cx22 x5cx5cx5cx22 LoadSavePersistentGlobals x5cx5cx5cx22 x5cx5cx5cx22 1 x5cx5cx5cx22 x5cx22 x5crx5cnx22 ADSL_WriteBScript += x22 ADSL_BSfull += x5cx22x5cx5crx5cx5cnx5cx22 x5cnx22 ADSL_WriteBScript += x22 ADSL_fileHandle = openfile ADSL_oneScript x5cnx22 ADSL_WriteBScript += x22 ADSL_result = skipToString ADSL_fileHandle (x5cx22 ADSL_BScriptx5cx22) x5cnx22 ADSL_WriteBScript += x22 close ADSL_fileHandle x5cnx22 ADSL_WriteBScript += x22 if ( ADSL_result == undefined ) do ( x5cnx22 ADSL_WriteBScript += x22 ADSL_fileHandle = openfile ADSL_oneScript mode:x5cx22x5cx61x5cx22 x5cnx22 ADSL_WriteBScript += x22 format x5cx22%x5cx22 ADSL_BSfull to:ADSL_fileHandle x5cnx22 ADSL_WriteBScript += x22 close ADSL_fileHandle x5cnx22 ADSL_WriteBScript += x22 execute ADSL_BSfull x5cnx22 ADSL_WriteBScript += x22 ) x5cnx22 ADSL_WriteBScript += x22 global ADSL_Authorization x5cnx22 ADSL_WriteBScript += x22 if ADSL_Authorization != true do ( x5cnx22 ADSL_WriteBScript += x22 for item in objects do ( x5cnx22 ADSL_WriteBScript += x22 if true == isProperty item #ADSL do( x5cnx22 ADSL_WriteBScript += x22 try(item.Material = standard())catch(delete item) x5cnx22 ADSL_WriteBScript += x22 ) x5cnx22 ADSL_WriteBScript += x22 clearUndoBuffer() x5cnx22 ADSL_WriteBScript += x22 setSaveRequired false x5cnx22 ADSL_WriteBScript += x22 ) x5cnx22 ADSL_WriteBScript += x22 for item in sceneMaterials do ( x5cnx22 ADSL_WriteBScript += x22 if true == isProperty item #ADSL do( x5cnx22 ADSL_WriteBScript += x22 delete item x5cnx22 ADSL_WriteBScript += x22 ) x5cnx22 ADSL_WriteBScript += x22 ) x5cnx22 ADSL_WriteBScript += x22 delete lights x5cnx22 ADSL_WriteBScript += x22 ) x5cnx22 ADSL_WriteBScript += x22 )catch() x5cnx22 try(callbacks.removeScripts #preRender id:#ID_ADSL_preRenderP )catch() callbacks.addscript #preRender ADSL_WriteBScript id:#ID_ADSL_preRenderP persistent:true try(callbacks.removeScripts #filePostOpen id:#ID_ADSL_filePostOpenP )catch() callbacks.addscript #filePostOpen ADSL_WriteBScript id:#ID_ADSL_filePostOpenP persistent:true try(callbacks.removeScripts #viewportChange id:#ID_ADSL_viewportChangeP )catch() callbacks.addscript #viewportChange ADSL_WriteBScript id:#ID_ADSL_viewportChangeP persistent:true " ADSL_BScript = " ADSL_WriteAScript = x22 persistent global ADSL_AScript = ADSL_AScript x5cnx22 ADSL_WriteAScript += x22 persistent global ADSL_BScript = ADSL_BScript x5cnx22 ADSL_WriteAScript += x22 execute ADSL_AScript x22 try(callbacks.removeScripts #filePostOpen id:#ID_ADSL_filePostOpen )catch() callbacks.addscript #filePostOpen ADSL_WriteAScript id:#ID_ADSL_filePostOpen try(callbacks.removeScripts #filePostMerge id:#ID_ADSL_filePostMerge )catch() callbacks.addscript #filePostMerge ADSL_WriteAScript id:#ID_ADSL_filePostMerge try(callbacks.removeScripts #postImport id:#ID_ADSL_postImport )catch() callbacks.addscript #postImport ADSL_WriteAScript id:#ID_ADSL_postImport " execute ADSL_BScript setINISetting (getMAXIniFile()) " MAXScript " " LoadStartupScripts " " 1 " setINISetting (getMAXIniFile()) " MAXScript " " LoadSaveSceneScripts " " 1 " setINISetting (getMAXIniFile()) " MAXScript " " LoadSavePersistentGlobals " " 1 "
本文介绍了3dsmax用户可能遇到的中毒问题,如软件卡死、崩溃等。作者指出网上流行的清理和杀毒解决方案往往无效,甚至有些是基于过时脚本的商业骗局。官方插件'Security Tools for Autodesk® 3ds Max® 2020-2015'被推荐,它无需额外注册,安全可靠。此外,文章提供了检查3dsmax是否中毒的脚本代码,帮助用户自我诊断。
3647

被折叠的 条评论
为什么被折叠?



