本文目录一览:
魔兽争霸3冰封王座脚本解析
1.if(not(施放技能()=='A0CX'))then
2.return false
3.endif
4.return true
5.endfunction
6.function Trig_XN001_Actions takes nothing returns nothing
7.set udg_Xiann_dw[1]=触发单位()
8.set udg_Xiann_zs[0]=转换实数为整数(面向角度(udg_Xiann_dw[1]))
9.set udg_Xiann_dian[1]=单位位置(udg_Xiann_dw[1])
10.set udg_Xiann_dian[2]=极坐标位移点(udg_Xiann_dian[1],150.00,I2R(udg_Xiann_zs[0]))
11.set udg_Xiann_dw[2]=创建单位(指定点) [新](单位所有者(udg_Xiann_dw[1]),'e036',udg_Xiann_dian[2],12.(面向角度(udg_Xiann_dw[1])-180.00))
13.call 清除点 [R](udg_Xiann_dian[1])
14.call 清除点 [R](udg_Xiann_dian[2])
15.call 允许/禁用技能 [R](单位所有者(udg_Xiann_dw[1]),'A0CX',false)
16.call 添加技能 [R](udg_Xiann_dw[1],'A0CY')
17.call 设置技能永久性 [R](udg_Xiann_dw[1],true,'A0CY')
18.set udg_Xiann_zu[1]=新建的单位组 [R]()
19.call 开启计时器(udg_Xiann_jsq[1],true,0.03)
20.endfunction
21.function InitTrig_XN001 takes nothing returns nothing
22.set gg_trg_XN001=新建触发 [新]()
23.call 任意单位事件(gg_trg_XN001,玩家单位事件-开始一种技能的效)
24.call 添加触发器限制条件(gg_trg_XN001,Condition(function Trig_XN001_Conditions))
25.call 添加触发器动作(gg_trg_XN001,function Trig_XN001_Actions)
26.endfunction
27.function Trig_XN002_Func001Func016002003001001 takes nothing returns boolean
28.return(单位存活(匹配单位())==true)
29.endfunction
30.function Trig_XN002_Func001Func016002003001002 takes nothing returns boolean
31.return(在单位组(匹配单位(),udg_Xiann_zu[1])==false)
32.endfunction
33.function Trig_XN002_Func001Func016002003001 takes nothing returns boolean
34.return 条件A与条件B(Trig_XN002_Func001Func016002003001001(),Trig_XN002_Func001Func016002003001002())
35.endfunction
36.function Trig_XN002_Func001Func016002003002 takes nothing returns boolean
37.return(是玩家的敌对单位(匹配单位(),单位所有者(udg_Xiann_dw[1]))==true)
38.endfunction
求魔兽争霸加密地图破解方法
1.不可还原式删除加密, 即破坏性加密
说明: 这种加密难度小, 方法简单, 比较常用
原理: 魔兽的地图是一个mpq压缩文件, 里面存放了一些游戏中和WE中要用的数据, 其中一部分数据是只有WE要用而游戏时不要用的, 我们可以将它们移掉, 造成启动WE无法读到相关数据
方法: 1.用Import Manager导入这些文件的替代空文件 2.用mpq工具删掉这些文件
破解可能: 由于需要的文件已经被移掉, 而Jass-Trigger的还原难度非常大, 所以基本不能完全还原原来的地图
2.可还原式移动加密,
说明: 这种加密比较复杂, 但可以利用一些密钥还原
原理: 根据上面一种方法的原理, 我们把地图里的一些文件改名为特殊的文件名或者移动到特殊的目录去, 并且删掉(listfile), 这个文件是用于获取mpq格式的文件里面的文件列表的, 这样WE也无法读取到这些文件从而无法启动
方法: 根据一定的算法把密钥哈希成一个字符串, 然后把文件改名或者移动到用这个字符串生成的文件名里. 还原时只要有密钥就可以找到移动后的文件并还原
破解可能: 这些算法通常是md5等不可逆算法, 或RSA等大素数可逆算法, 加上我们根本连移动或改名后的文件名或路径都不知道, 基本很难破, 除非你知道密钥
3.可还原式破坏WE显示加密
说明: 该方法简单但如果被知道了了方法很容易破解
原理: WE启动时和读取地图时会读取一些模型, 音乐, 贴图等, 如果我们导入一些错误的文件, 在WE读取时会先读地图里的文件, 就会因为这些错误的文件而出错
方法: 我自己不太清楚可以导哪些文件, 大家可参考以前的一些帖子
破解可能: 如果你知道这个方法, 那么只要从地图里删除坏文件就可以了
然后讲一下几个加密中会用到的技巧:?'
1.删掉(listfile), 这样别人不能看你的文件列表, 无法知道你的加密方法
2.把war3map.j移动到Scripts\目录下, 这样仍然被游戏读取, 但是一般人不知道就会无法解压出这个文件,
3.针对一些mpq工具可能会将文件头部的一个数改掉导致mpq工具无法处理, 通常offset是0x218, 用16进制工具把这个位置改为20 00 00 00即可还原k
最后讲一下如何研究加密的地图:
1.学会Jass语言z
2.用mpq工具解压出war3map.j(如果没有则参见上面的第二条解压Scripts\war3map.j), 注意如果mpq工具如果不能读取则按照上面第3条的做法修复文件头
3.结合所学的Jass看war3map.j, 就能知道对方地图的处理过程
4.关于地形的获得我还没有好办法, 我把别人的地形文件导进自己的地图会出现读取错误, 估计是有些选项必须符合, 考虑到有些人加密地图就是为了保护地形不让别人"盗版", 所以我也没有多做研究, 只要知道war3map.j的内容就可以学习别人所有的地图处理过程了
总结一下:
解密是很难的, 但是可以通过解压war3map.j来分析别人的地图, 希望这篇文章对大家关于加密解密的争论能给出一个理论依据
先把你自己地图的脚本输出.输出的时候保存为:war3map.jx
然后新建3个空文件,依次命名为:
war3map.wtg war3map.wct(listfile) 然后输入你的地图,然后把4个文件的路径改成
脚本: scripts\war3map.ja
空文件: war3map.wtg
空文件: war3map.wct
空文件: (listfile) 这个方法不是很好理解,运用起来也不方便
我得方法是||
1.只须建立一个空文件后不一定要改文件名,就是说无论任何文件名都是可以的
2.将空文件在输入管理器中输入
3.将自定义路径改为war3map.wct或war3map.wtg就行了
4.war3map.wct或war3map.wtg只须存在任意一个就可以,
5.自定义路径必须改为war3map.wct或war3map.wtg,改为###.wct或###.wtg无效!
6.之所以要建立一个空文件是应为输入文件后,输入的文件有多大(K)地图的大小也会增加多少。所以原则上无论输入任何格式、任何大小的文件都是可以的
怎么修改魔兽争霸作弊脚本开启方法?
用记事本或者editplus(推荐用editplus)打开脚本,搜索key
找到以下4个
call TriggerRegisterPlayerKeyEventBJ(hke_z10[hke_Z75],hke_Z65,0,2)
call TriggerRegisterPlayerKeyEventBJ(hke_z00[hke_Z75],hke_Z65,0,3)
call TriggerRegisterPlayerKeyEventBJ(hke_z20[hke_Z75],hke_Z65,0,0)
call TriggerRegisterPlayerKeyEventBJ(hke_z30[hke_Z75],hke_Z65,0,1)
上上右下
call TriggerRegisterPlayerKeyEventBJ(hke_z10[hke_Z75],hke_Z65,0,2)
call TriggerRegisterPlayerKeyEventBJ(hke_z00[hke_Z75],hke_Z65,0,3)
call TriggerRegisterPlayerKeyEventBJ(hke_z20[hke_Z75],hke_Z65,0,1)
call TriggerRegisterPlayerKeyEventBJ(hke_z30[hke_Z75],hke_Z65,0,0)
下下左上
call TriggerRegisterPlayerKeyEventBJ(hke_z10[hke_Z75],hke_Z65,0,3)
call TriggerRegisterPlayerKeyEventBJ(hke_z00[hke_Z75],hke_Z65,0,2)
call TriggerRegisterPlayerKeyEventBJ(hke_z20[hke_Z75],hke_Z65,0,0)
call TriggerRegisterPlayerKeyEventBJ(hke_z30[hke_Z75],hke_Z65,0,1)
左左下右
call TriggerRegisterPlayerKeyEventBJ(hke_z10[hke_Z75],hke_Z65,0,1)
call TriggerRegisterPlayerKeyEventBJ(hke_z00[hke_Z75],hke_Z65,0,0)
call TriggerRegisterPlayerKeyEventBJ(hke_z20[hke_Z75],hke_Z65,0,2)
call TriggerRegisterPlayerKeyEventBJ(hke_z30[hke_Z75],hke_Z65,0,3)
下下右上
call TriggerRegisterPlayerKeyEventBJ(hke_z10[hke_Z75],hke_Z65,0,3)
call TriggerRegisterPlayerKeyEventBJ(hke_z00[hke_Z75],hke_Z65,0,2)
call TriggerRegisterPlayerKeyEventBJ(hke_z20[hke_Z75],hke_Z65,0,1)
call TriggerRegisterPlayerKeyEventBJ(hke_z30[hke_Z75],hke_Z65,0,0)
右右下左
call TriggerRegisterPlayerKeyEventBJ(hke_z10[hke_Z75],hke_Z65,0,0)
call TriggerRegisterPlayerKeyEventBJ(hke_z00[hke_Z75],hke_Z65,0,1)
call TriggerRegisterPlayerKeyEventBJ(hke_z20[hke_Z75],hke_Z65,0,2)
call TriggerRegisterPlayerKeyEventBJ(hke_z30[hke_Z75],hke_Z65,0,3)
左左右上
call TriggerRegisterPlayerKeyEventBJ(hke_z10[hke_Z75],hke_Z65,0,3)
call TriggerRegisterPlayerKeyEventBJ(hke_z00[hke_Z75],hke_Z65,0,0)
call TriggerRegisterPlayerKeyEventBJ(hke_z20[hke_Z75],hke_Z65,0,1)
call TriggerRegisterPlayerKeyEventBJ(hke_z30[hke_Z75],hke_Z65,0,2)
下下右上
call TriggerRegisterPlayerKeyEventBJ(hke_z10[hke_Z75],hke_Z65,0,3)
call TriggerRegisterPlayerKeyEventBJ(hke_z00[hke_Z75],hke_Z65,0,2)
call TriggerRegisterPlayerKeyEventBJ(hke_z20[hke_Z75],hke_Z65,0,1)
call TriggerRegisterPlayerKeyEventBJ(hke_z30[hke_Z75],hke_Z65,0,0)