月度归档:2007年11月

魔兽地图修改之JASS入门篇(二)

魔兽地图修改之JASS入门篇(二)

上一章我讲解了魔兽地图的常用加密方式与解密方法,这一章我主要讲解JASS语言,首先即然是一种语言,我们当然要先了解一下语法

Jass变量类型

integer
integer(数值)是的范围在 -2147483647 和 2147483647 之间的整数, 不能有小数位

real
real是范围很大的32字节数字, 可以有小数位, 123456.33就是real

boolean
boolean的值只有true(真)和false(假), 多用于条件判断语句
if (条件==true)
then
(符合条件做某事)
else
(不符合条件就做另一件事)
endif

string
string是字符串变量, 可以是null(空值). 注意Jass的字符串是大小写区分的, 赋值时用双引号 “” 引用

handle
handle句柄, 可以是null(空值). 是用于指向Warcraft III定义的数据结构的指针. 比如上表中的location/player等除了

integer/real/boean/string外的的变量实际上就是handle类型的子变量

code
code(程序代码), 可以是null(空值). 函数可以有code类型的传递参数, 表示该函数必须要有其他函数作为参数, 如:
function RunFunctionForAllPlayers takes code theFunction returns nothing
我们可以这样调用函数: call RunFunctionForAllPlayers(function someFunction) //先运行someFunction
也可以: call RunFunctionForAllPlayers(null) //不运行其他函数

trigger
trigger为事件变量,例如trigger gg_trg_mingling01=CreateTrigger( )

Boolean boolean 布尔型(用于真/假判断)
Destructible destructable 可破坏物
Dialog dialog 对话
Dialog Button button 按钮
Floating Text texttag 漂浮文字
Integer integer 数值
Item item 物品
Leaderboard leaderboard 排行榜
Player player 玩家
Player Group force 玩家组
Point location 位置(点)
Real real 真值型数字
Region rect 地区
Special Effect effect 特效
String string 字符串
Terrain Deformation terraindeformation 地形
Timer timer 计时器
Timer Window timerdialog 计时器窗口
Unit unit 单位
Unit Group group 单位组
Player Score playerscore 积分(1.13版新类型)

全局变量声明格式:
globals
变量类型 变量名称 = 初始值 //有初始化的全局变量
变量类型 变量名称 //无初始化的全局变量
变量类型 array 变量名称 //数组全局变量, 不能再次初始化赋值

endglobals

看完语法部分之后,相信大家还不太明白,不过没关系,因为没动手改过JASS,所以当然会有不解,本章将举出实际的例子给大家动手的机会:) ,在动手之前还要讲一讲魔兽脚本文件的工作原理,我将他粗分为两部分,第一部分是”全局变量声明”也就是脚本中globals与endglobals之间的部分,这是此地图用到的所有的变量(JASS中用到的所有的变量都要求先声明,也就是写在globals与endglobals之间,定义变量的类型与数值什么的),第二部分就是函数部分,函数部分包括地图的初始化,创建单位,触发等等,全是在这里完成的,所以他是地图的灵魂。函数是从哪里开始执行的呢?无论哪个地图都有一个固定的入口函数”function main takes

nothing returns nothing”用UltraEdit-32打开war3map.j然后选中搜索->查找 在框中输入”function main”就会查找到入口函数”function main takes nothing returns nothing”函数是以function开头main是函数名(不同的函数名字不同,呵呵傻子都知道)以endfunction结束,其它的函数全是由这个函数开始,一层层的嵌套调用的.

下面我以’猛将传v2.01test1.w3x’这个地图为例,实现输入”give”后+1000钱和1000木的功能
第一,用MPQMaster提取出scripts文件夹下的war3map.j这个文件,然后用UltraEdit-32打开

第二,查找入口函数function main在这个函数中加入
call TriggerRegisterPlayerChatEvent(gg_trg_mingling01,Player(0),”give”,true)
call TriggerRegisterPlayerChatEvent(gg_trg_mingling01,Player(1),”give”,true)
call TriggerRegisterPlayerChatEvent(gg_trg_mingling01,Player(2),”give”,true)
call TriggerRegisterPlayerChatEvent(gg_trg_mingling01,Player(3),”give”,true)
call TriggerRegisterPlayerChatEvent(gg_trg_mingling01,Player(4),”give”,true)
call TriggerRegisterPlayerChatEvent(gg_trg_mingling01,Player(5),”give”,true)
call TriggerRegisterPlayerChatEvent(gg_trg_mingling01,Player(6),”give”,true)
call TriggerRegisterPlayerChatEvent(gg_trg_mingling01,Player(7),”give”,true)
call TriggerRegisterPlayerChatEvent(gg_trg_mingling01,Player(8),”give”,true)
call TriggerRegisterPlayerChatEvent(gg_trg_mingling01,Player(9),”give”,true)
call TriggerRegisterPlayerChatEvent(gg_trg_mingling01,Player(10),”give”,true)
call TriggerRegisterPlayerChatEvent(gg_trg_mingling01,Player(11),”give”,true )
call TriggerAddAction(gg_trg_mingling01,function O9981)
这段代码,语句的含义如下
call TriggerRegisterPlayerChatEvent(gg_trg_mingling01,Player(0),”give”,true)为例
call为调用函数的语句,TriggerRegisterPlayerChatEvent是对话的触发器,其中有4个参数,第一个为事件变量,在全局声明中以经建立了,第二个参数为玩家,玩家是从0到11共12个,第三个为触发的语句,也就是我们在对话中输入什么话才会响应,第四个为是否完全匹配,这里是为真,也就是只有输入give后才会响应,如果为假(false)则只要说的话中包含有’give’就可以了,12个触发有任意一个执行了,就会调用call TriggerAddAction(gg_trg_mingling01,function O9981),这个语句也是由call开始调用TriggerAddAction是事件对象,他有两个参数第一个是事件变量,它是和触发器的事件变量是对应的。第二个是调用的子程序,这里用的函数名是O9981(第一个是大写字母O) 如图:

第三,加入function O9981代码如下
function O9981 takes nothing returns nothing
call AdjustPlayerStateBJ(1000,GetTriggerPlayer(),PLAYER_STATE_RESOURCE_GOLD)
call AdjustPlayerStateBJ(1000,GetTriggerPlayer(),PLAYER_STATE_RESOURCE_LUMBER)
endfunction
含义如下AdjustPlayerStateBJ为加资源的函数,其中有三个参数,第一个是加多少资源,第三个是把资源给谁,第三个是加什么资源,其中第二个参数GetTriggerPlayer()是一个函数,他的作用是得到触发的玩家,也就是谁打的give这个命令就给谁钱,第三个参数有很多不同的值,我们这里用到的是钱和木,还有许多其它的,将在以后的文章中介绍了我是简单的把这个子程放在了入口函数的上边,如图:

第四,加入声名的变量,也就是gg_trg_mingling01代码如下:
trigger gg_trg_mingling01=CreateTrigger()
声名是加在globals与endglobals之间,trigger是事件类型,gg_trg_mingling01是变量名,CreateTrigger()是一个建立事件的函数,这条语句的意思就是建立一个事件,放在名叫gg_trg_mingling01的事件变量里.这个语句我就加在了脚本的一开头,如图:

现在脚本的编辑工作就完成了,我们点一下保存,UltraEdit-32会自动生成一个备份文件,防止改动出错时无法回复的问题发生

第五,用MPQMaster把原图中的war3map.j这个文件删除,然后再导入修改过的文件,再从新压缩一下,就大功告成了。:)

我发布了修改过的war3map.j,如果有明白的,下载后,同时用UltraEdit-32打开改前和改后的文件,然后用对比功能,可以看出两个脚本的不同,方便学习。
war3map.j
原图下载

小结:
看完这篇文章后要求独立更改一张地图的脚本,实现上述的功能

本文由小杰(SSJ)原创,转载请保留出处,谢谢合作!!

魔兽地图修改之工具与解密篇(一)

魔兽地图修改

 

-工具与解密遍

我学习改图有一段时间了,改的最成功的图是发表在万狐上的城海5.45的变态技能神器+改变归属(SSJ版),还有七龙珠的许愿版。在我学习中得到了 花开堪折 的帮助,在此谢过:)
在网上找魔兽改图的贴子有不少,但是讲JASS语言的并不多,或者说对入门者而还是太深了一点,所以出于我对改图的学习过程写一个系统的教程,现在开始说正题:)
改图必备工具:
1.MPQMaster 点击下载
2.MPQWorkshop 点击下载
3.W3MMASTER 点击下载
4.UltraEdit-32
5.DnD WE 点击下载

MPQMaster,MPQWorkshop都是MPQ文件格式的压缩工具,一看就知道怎么用了,但是要注意几点,首先替换文件是时候最好是先删除原有的同名文件,然后再加入修改后的文件,否则有可能看使地图变大,或出错。其次,导入文件后要重新压缩一下文件'操作->重新压缩'如果你改的是war3map.j文件,如果不重压一下,会让地图变成原来数倍大小。

W3MMASTER是一个可以直接修改地图的工具,比较简单,但是存在严重的BUG,所以如果只是改一些数值,还可以使用,太复杂的修改会使地图无法使用.

UltraEdit-32是一个功能强大的32位文本编辑器,用来修改war3map.j文件用的。

DnD WE地图编辑器,用他打开地图可以修改技能,物品,魔法等文件,但是对于现在的地图千万不要另存为成一张新的地图,因为如果你这么做大部分的图是无法使用的,这个工具的具体用法将在以后的文章中介绍

现在大多数的图都是加密的,但是常见的加密方式并不多,下面我将一一介绍
1.隐藏war3map.j大法
war3map.j文件是地图的核心文件,现在的地图用地图编辑器无法修改脚本的主要是因为地图的作者删除了war3map.wtg(触发器)文件,这个文件是用地图编辑器(WE)作图的时候所创建的,游戏本身并不使用这个文件,当生成地图后,编辑器会将war3map.wtg转换为war3map.j(脚本文件)。由于没有了war3map.wtg,所有改图的人无法方便的用WE(地图编辑器,以后称为WE)来修改触发器,但是可以通过war3map.j来达到修改触发器的目的,这就是为什么要隐藏这个文件。如果你用MPQMaster打开一个地图,可能看不到war3map.j,他可能是因为把这个文件放在了scriptswar3map.j。你可以通过修改MPQMasterListfilesWarcraft III.txt文件让他显形,只要在这个文件在加入一行scriptswar3map.j就行了,再重新打开地图,就看到了scripts文件夹下的war3map.j了

2.加密文件(attributes)与(listfile)
打开地图文件后如果发现存在(attributes)这个文件,将它删除,然后从新压缩,这样改过的地图才可以正常使用
(listfile)文件是一个地图中文件信息的列表,当使用软件打开地图时咱们会选用Warcraft III这个软件自带的列表,所以(listfile)这个文件没有什么大用处,只要了解一下就可以了。

3.破坏地图的头文件
如果你用MPQMaster或MPQWorkshop打开地图的时候,提示打开文件失败,那一定就是这种加密方式,对于这种加密方式可以通于下载一些还原头文件的软件进行修复,如果没有软件也可以用手工的方式进行修复,下面我主要讲解一下手工的修复方法 如图:
http://www.kumouse.com/uploads/200711/jie.jpg

附加:(地图中各文件的作用)

1.war3map.w3a 地图的自定义技能文件,主要储存地图的自定义技能信息,修改此处能实现技能的简单变化,但单独不能创造出很漂亮的自定义技能
2.war3map.w3t 地图的自定义物品文件,储存地图的自定义物品信息
3.war3map.w3b 存储树啊,门啊等可破环物的信息,没事一般不修改~~~~~~~~~
4.war3map.w3d储存装饰物的信息,没事也不弄~~~~~
5.war3map.w3q 储存自定义的科技信息,也就是升级之类的东东
6.war3map.w3h 储存自定义效果信息。很少用到~~~
7.war3map.w3i 储存地图的基本设置,也就是地图读图时的预览啊等的详细信息
8.war3map.w3e储存地图的地形信息,没什么好解释了吧~~
9.war3map.w3u 储存自定义的单位信息,与w3t,w3a,j 文件并列为修改最多的4个文件
10.war3map.wtg 事实上是触发器的j文件,地球上的加密地图都把wtg文件给删了,大家也就不用怎么了解了
11.war3map.wts 注悉文件,这年头基本上没有,因为大部分对w3u,w3a,w3t的注释都由那几个文件自带,方法是在we中把那几个文件导出~~~~
12.war3map.mmp 储存地图预览的小文件信息,耍cool用的~~~
13.war3map.shd 阴影文件信息~~
14.war3map.wpm 地图的路径信息,这两个大家基本不用弄,we会帮你搞好的
15.war3map.doo 装饰物信息
16.war3mapMisc.txt 地图的平衡常数信息,关于英雄的最大级别等的设定~~~
17.war3mapunits.doo 地图的物品摆放信息
18.war3map.shd 地层数据
19.war3map.wpm mp3,wav等媒体文件的设置
20.war3mapPreview.tga 地图缩略图
21.war3mapmap.blp 图形文件的设置
22.war3mapmisc.txt 游戏平衡常数

总结:
看完这篇文章后,要求会使用MPQMaster或MPQWorkshop解压文件和加入文件
会使用W3MMASTER的插件更改地图中物品的价格等,数值方面的内容,并能正常游戏
熟悉DnD WE菜单功能,方便日后使用.

本文由小杰(SSJ)原创,转载请保留出处,谢谢合作!!

全国DNS列表

北京:202.96.199.133 202.96.0.133 202.106.0.20 202.106.148.1 202.97.16.195 202.106.195.68 202.106.46.151 202.106.196.115
上海:202.96.199.132 202.96.199.133 202.96.209.5 202.96.209.133
天津:202.99.96.68 10.10.64.68
广东:202.96.128.143 202.96.128.68 202.96.128.110
深圳:202.96.134.133 202.96.154.8 202.96.154.15
河南:202.102.227.68 202.102.245.12 202.102.224.68
广西:202.96.128.68 202.103.224.68 202.103.225.68
福建:202.101.98.54 202.101.98.55
厦门:202.101.103.55 202.101.103.54
湖南:202.103.0.68 202.103.96.68 202.103.96.112
江苏:202.102.15.162 202.102.29.3 202.102.3.141 202.102.24.35
陕西:202.100.13.11 202.100.4.16
西安:202.100.4.15 202.100.0.68
湖北:202.103.0.68 202.103.0.117 202.103.24.68
山东:202.102.154.3 202.102.152.3 202.102.128.68 202.102.134.68
浙江:202.96.102.3 202.96.96.68 202.96.104.18
辽宁:202.98.0.68 202.96.75.68 202.96.75.64 202.96.69.38 202.96.86.18 202.96.86.24
安徽:202.102.192.68 202.102.199.68 10.89.64.5
重庆:61.128.128.68 10.150.0.1
黑龙江:202.97.229.133 202.97.224.68
河北:202.99.160.68 10.17.128.90
保定:202.99.160.68 202.99.166.4
吉林:202.98.5.68 202.98.14.18 202.98.14.19
江西:202.101.224.68 10.117.32.40 202.109.129.2 202.101.240.36
山西:202.99.192.68 202.99.198.6
新疆:61.128.97.74 61.128.97.73
贵州:202.98.192.68 10.157.2.15
云南:202.98.96.68 202.98.160.68
四川:202.98.96.68 61.139.2.69
重庆:61.128.128.68 61.128.192.4
成都:202.98.96.68 202.98.96.69
内蒙古:202.99.224.68 10.29.0.2
青海:202.100.128.68 10.184.0.1
海南:202.100.192.68 202.100.199.8
宁夏:202.100.0.68 202.100.96.68
甘肃:202.100.72.13 10.179.64.1
香港:205.252.144.228 208.151.69.65
澳门:202.175.3.8 202.175.3.3