魔兽地编辑器完整教程

RPG地图 *** 教程

魔兽地编辑器完整教程
(图片来源网络,侵删)

教你如何做自己的RPG-----制图教学说到魔兽争霸3大家肯定不会陌生,那么各位在玩过特色各异的地图以后有没有想过自己动手做一张地图?摇头拒绝的家伙们听我把话说完,其实做一张地图并不是各位想象的那么困难。下面我将会简单介绍一下 *** 了几种常见功能的地图的 *** *** ,有兴趣的朋友不妨跟着做做。

这次要做的是一个3C中的人物选择功能,也就是当小精灵进入能量圆的时候选择对应的英雄,这是一个3C最普通的选人功能。那么动手了。

首先找到地图编辑器,编辑器位于魔兽目录下,名为WorldEditor.exe(世界编辑器),双击打开。之一次使用地图编辑器,系统会自动为我们创建一张64*64大小,环境为罗丹仑的夏天的新地图。如果想要手动创建新地图,可以通过点击菜单栏的文件 - 新地图/File - New Map来创建。如果想要关闭在打开编辑器的同时创建新地图的功能,可以同过选择文件 - 参数设置 - 常规 - 打开时创建新地图/File - Preferences - General - Create a new map on start_up,将前面的勾去掉来实现。

地图创建完毕以后看见的就是这个地图编辑器的组成了,按2下G关闭坐标格的显示。在 *** 上面提到的功能以前,让我们先做点准备工作。首先既然是选择英雄,那么英雄自然是必不可少的,按U打开单位编辑面板,在这里可以选择我们所希望的单位放置到地图上,我选择了恶魔猎人(Demon Hunter),血巫师(Blood Mage)和巫妖王(Lich King),当然各位如果看上其他英雄请随意,这并不会影响后面的 *** 。顺便说说在单位面板中切换种族的 *** 是在第三行左边的那个扩展菜单里面选择希望的种族,由于选择英雄的时候所看见的英雄是不被我们控制的,必须选择了以后才能控制,因此一般的做法是将英雄更改为中立单位,更改的 *** 是双击放置在地图上的英雄,选择常规 - 玩家 - 中立无敌意/General - Player - Neutral Passive。注意各英雄之间不要间隔太远,否则让小精灵跑来跑去的很麻烦。放好英雄以后当然还要在英雄面前放个能量圆作为小精灵进入选择用,能量圆可以在单位面板的中立敌对分支中找到。最后再放上选英雄用的小精灵,由于多个玩家的选择英雄的原理是相同的,所以这里我们只做3个玩家的选择,因此只放属于3个势力玩家的小精灵。如

工作就算是完毕了,接着开始做功能部分,要用到触发器。

由于是初次介绍,为了不扰乱大家的思维,所以我对触发器的原理不做太多的介绍,大家只需要知道触发器的作用就是可以以事件的方式来实现一些功能就可以了。按F4打开触发器编辑器/Trigger Editor,删除默认的那个触发器,那是为MEELE准备的。可以看见在魔兽地图编辑器中,一个触发器是由事件(Events),环境(Conditions),动作(Actions)三部分左右,这三个部分之间的关系可以用一个简单的例子说明:“火药接触火以后爆炸”。在这里,火药与火接触就是事件,只有二者接触才会发生以后的动作;而火药接触的对象必须是火才会爆炸,所以火在这里作为环境,限制火药爆炸需要的条件;火药爆炸就是动作,是在与火接触以后引发的动作。在触发器里面我们可以根据需要自己修改事件,环境,动作这三部分的内容,比如可以将火药与火接触爆炸改为与水接触爆炸。那么有了以上概念,来看看选择英雄的 *** *** ,首先英雄必须在发生了一个事件以后才会被选择,而这个事件在这里就是:小精灵进入能量圆;但是在这里必须限制只有小精灵进入能量圆的时候英雄才会被选择,其他种类的单位进入则什么都不会发生,于是整个触发的环境 - 也就是限制条件也有了,就是:进入能量圆的单位类型是“小精灵”;最后就是动作了,英雄被选择,其实选择英雄的动作就是把英雄的从中立单位更改为玩家势力控制的单位。把上面所说的步骤以触发的方式写出来就是这样的:

事件(Events)

一个单位进入能量圆范围内

环境(Conditions)

进入的单位的类别是“小精灵”

动作(Actions)

把能量圆对应的英雄的控制者改为选择英雄的玩家

现在再按照写出来的触发在地图编辑器中寻找对应的选项。

创建一个新的触发/New Trigger, *** 是在触发编辑器右方的窗口中按鼠标右键选择新<触发器/New Trigger>,新触器发会被自动命名为“为命名触发00X”,触发器的名字可以通过在选择触发以后按F2来修改。然后点击新建的那个触发,在右下方的触发编辑窗口中鼠标右键,选择 新事件/New Event,在出现的选单中选择 单位 - 单位进入区域/Unit - Unit Enters Region,接着点击红色字体部分 - 选择区域/- Select Region,这时候窗口会自动切换到大地图,要求我们选择一个区域,这里要解释一下在魔兽中,我们平时所看见的例如进入能量圆,或者进入花园,进入洞穴诸如此类“进入某个地点”的情况,其实并不是进入了我们看见的地方,而是进入了事先放置在能量圆,花园,洞穴等位置上的一个区域(Region)。而现在我们要做的正是放置这么一个区域并且在事件中选择他作为小精灵进入的区域,在大地图上可以看见

面板已经自动切换到区域面板(直接打开区域面板的快截键是R),点击面板上坐标样的按钮使之处于按下的状态,按住右键拖动鼠标在能量圆上画一个和能量圆大小差不多的区域出来,再次点击面板上的按钮使之处于弹起的状态,然后点选刚才放置的区域,会自动切换回触发编辑窗,红色字体部分也会被刚才所选的区域的名字取代,连续确定2次,事件便做好了。

接着是环境/Condition,选择<新环境 - 单位类型判断/New Conditions - Unit Type Comparison>,将进入区域的单位类型限制为“小精灵”

其中Entering Unit的意思是“进入单位”这里指进入区域的单位,Equal to的意思是“等同于”。

最后是动作/Actions, 在这里先整理一下有哪些动作需要执行:

1,由于选择好英雄以后小精灵会消失,所以在动作的开头要从游戏中移除小精灵。

2,更改被选英雄所属的势力为玩家操纵的势力。

3,将选好的英雄移动到指定位置,也就是3C中的基地。

4,由于英雄只能被选择一次,所以在动作的最后要关闭整个触发使之不再执行。

对应以上4条的动作分别是:

1,新动作 - 单位 - 移除 - 从游戏中移除进入单位/New Action - Unit - Remove - Unit - Remove (Entering unit) from the game

2,<新动作 - 单位 - 改变拥有者 - 改变恶魔猎人的拥有者为进入单位的拥有者并且改变颜色/New Action - Unit - Change owner - Unit - Change ownership of Demon Hunter 0002 to (Owner of (Entering unit)) and Change color

3,新动作 - 单位 - 移动 - 移动恶魔猎人到区域001的中心/New Action - Unit - Move Demon Hunter 0002 instantly to (Center of Region 001 )当然区域001也是自己创建的区域;

4,新动作 - 触发 - 关闭此触发/New Action - Trigger - Turn off (This trigger)

这样整个触发就完成了,对照这个触发再将选择另外2个英雄的也完成。最后保存地图,保存的时候会提醒你为每个势力放置开始点,如果没有放置,会自动为你在地图任意区域放置,手动放置的 *** 是在单位面板中选择开始点的图标然后进行放置。保存地图以后按Ctrl + F9测试一下吧~。另外别忘记在菜单栏设定 - 玩家/Scenario - Player>中将势力2和3的控制者设置为玩家/User,否则在游戏里就不能选择势力2,3了。

刷兵(有的地方把这个叫做孵蛋,我完全不能理解…………)。简单解释就是每隔一定时间产生一些单位在基地附近,那么废话不多说,下面开始介绍怎样 *** 。

大家都知道在3C中兵是每隔一定时间就会自动产生的,在触发器中,我们将这种每隔固定时间就会自动发生一次的事件叫做“周期性事件”,一般来说经常通过以下两种途径来实现事件的周期发生:

==========================*** 1=========================================

之一种是通过触发器中的循环事件来实现的(也有将这个叫做回圈的),在触发器中新建一个Action(动作),在下拉菜单中找到这样的句子——For Each Integer A,Do Multiple Actions(对于所有的整数数值A,执行若干动作),点击确定以后会看见在Actions(动作)这个类下面已经增加了这样的一个Action(动作):

For each (Integer A) from 1 to 10, do (Actions)

Loop - Actions

(对于所有的整数值A,从1到10,执行动作 循环 - 动作)

我详细解释一下这个Action的作用,For each (Integer A) from 1 to 10(对于所有的整数值A,从1到10)的意思是重复执行10次Loop -

Actions(循环 - 动作)中指定的Actions(动作),同样的道理如果将后面的from 1 to 10(从1到10)改成from 1 to 20(从1到20)那么就

会重复执行20次动作,假设是from 5 to 10则只会执行5次动作,至于为什么不直接用from 1 to 5来代替from 5 to 10,这是在某些时候必须

用到的功能,至于具体使用的时机,为了不使大家头脑混乱,现在暂时不做解释,等到实际使用中遇到类似情况再做说明。

--------------------------范例-------------------------------------

现在为了更形象的说明这个功能,我们来做个简单的范例,按F4打开触发器编辑器,新键一个Event(事件):Player - Player 1 (Red)

skips a cinematic sequence“玩家 - 玩家 1(红色)跳过一段**序列”,这个事件的建立 *** 是鼠标右键 - New Event(新事件) -

Player(玩家) - Cinematic Skipped(**被跳过),这个事件的作用是当玩家1按下ESC键的时候就会触发动作。接着增加一个动作

For each (Integer A) from 1 to 10, do (Actions)

Loop - Actions

这样就将需要重复执行动作的次数定为10次,然后在Loop - Actions下面依次添加这些动作:

Game - Display to (All players) the text:(String((Integer A)))

(游戏 - 向所有玩家显示信息 :将作为循环序列的整数A的值转换为字符串类型[关于数据类型,这里不多做解释,大家只需要知道只有字符串类型的数据才能被作为信息显示出来就可以了]。在这里“作为循环序列的整数A”其实就是用来记录已经重复执行了多少次动作的一个数值。)添加这个动作的顺序为New Action(新动作) - Game(游戏) - TextMessage(Auto-Timed)(显示信息,自动调整信息显示时间)

Wait 1.00 seconds

(等待1.00秒,这样在每次执行动作以后都会间隔1秒才执行下一次动作)添加这个动作的顺序为New Action(新动作) - All(所有) - Wait(等待)。

然后在整个循环Action(动作)的后面(注意,是在整个For Each Integer的后面,不要添加到Loop - Actions下面去了)添加这个

Action(动作):

Game - Display to (All players) the text:(finish)

作用是在整个循环结束以后显示一句话以标明循环结束了。当然其中的finish大家可以随自己爱好随意更改。

最后将Melee Initialization(地图初始化)这个触发删除掉,在地图上放置玩家开始点,按Ctrl + F9进游戏测试,可以看见在游戏中当按下ESC键以后会分10次每秒一次依次显示数字1~10,最后则会显示finish。通过这个例子可以很清楚的看出。For each (Integer A) from 1 to 10, do (Actions)这个动作可以让位于Loop - Actions下面的动作重复执行from 1 to 10中后面数字+1减去前面数字的次数,而当所有的重复次数被执行完毕以后,则会继续执行整个循环后面的动作。这样就很简单方便的实现了周期性事件的执行,但是用这个Action(动作)实现的周期性事件有两个弊端,之一是循环执行的次数有限,大家也看见了,在这个Action中无论如何也要求输入2个数字以确定执行次数;第二是每次执行动作之间的时间间隔有最小限制,在上面的例子中,大家将Wait 1.00 seconds(等待1秒)改为Wait 0.00 seconds(等待0秒)以后进入游戏测试,会发现即使是0秒,也会有微小的等待时间(大概0.1~0.4秒左右,视电脑配置而定),这样在执行某些重复时间间隔很小的周期性事件的时候,就完全无法实现了,对于必须排除以上两种限制的周期事件,就必须用到另外一种 *** ,periodic event(周期循环事件),和For each Integer不同的是,这是一个Event(事件)而不是一个Action(动作)。

==========================*** 2=========================================

添加这个事件的 *** :New Event(新事件) - Time(时间) - Periodic Event(周期事件),添加完成以后可以看见在Event这一类下面出现了这样的Event(事件):

Time - Every 1.00 seconds of game time

(时间-每1.00秒游戏时间)作用很明显,就是每1秒都会执行一次Actions(动作)中包含的所有动作,Every 1.00 seconds中的数字用于指定每多少秒执行动作。对于这个事件的功能,我们仍然可以用1个简单的范例来说明。

--------------------------范例-------------------------------------

新建一个触发器,Event(事件)就用上面那个事件,将1.00调整为0.50,也就是每0.5秒执行1次,然后按下Ctrl+B打开变量编辑面板,(由于变量是之一次接触,所以我暂时不详细说明,大家按照我说的做就是了,以后会对变量和数据类型做详细介绍。)点击面板上方的绿叉按钮,在出现的窗口中下方的下拉菜单选择Integer(整数)然后在上面的输入栏中为这个变量随便起一个名字,[图:var.gif]这里我用的名字是i1便于下面统一介绍,这样就建立好了一个类型为“整数”型的变量。暂时将这个变量放在这里备用,回到刚才建的触发,在Actions(动作)类中添加如下动作:

Set i1=(i1 + 1)

添加顺序:New Action(新动作) - All(所有) - Set Varible(设置变量)

这个Action(动作)的作用是每次循环执行动作的时候让i1这个整数的值等于它当前的值+1,比方i1当前的值是5那么执行动作以后i1的值就是

5+1,也就是6。

接着添加:

Game - Display to (All players) the text:(String(i1))

添加 *** 同上,作用是显示i1的值。

然后进入游戏测试,会看见在游戏中将自动以每0.5秒的速度显示数字,数值为上一次显示的数字+1。由此总结出Periodic Event(周期循环事件)的特点是会在激活触发以后以Event(事件)中规定的时间间隔来重复执行Actions(动作)中包含的所有动作,并且只要该触发没有被关闭,就会一直执行下去。

========================================================================

以上就是两种最常见的周期性事件的实现 *** ,那么在此理论基础上我简单叙述一下刷兵触发的原理。

刷兵触发就是一个周期事件,其动作的内容就是在指定位置创建单位,下面我简单的将这个触发写一下,并且加上少许说明。相信大家在对上面所讲的内容理解了的情况下应该立刻明白其中的道理。

Untitled Trigger 003

Events

Time - Every 3.00 seconds of game time [这个就是前面讲到的周期事件,在这里将周期的时间间隔设置为3秒]

Conditions

(Farm 0009 is alive) Equal to True [这里Farm 0009 是一个农场,整个Condition(条件)的意思是,如果农场0009仍然生存,则继续执行Actions(动作)中的指令]添加这个Condition的 *** 是New Conditions(新条件) - Boolean Comparison(布尔判断,也就是逻辑判断) - 选择图示位置[图:boolean.gif] - Unit-Unit is Alive(单位 - 单位仍然生存)

Actions

Unit - Create 1 Giant Wolf for Player 1 (Red) at (Position of Farm 0009 ) facing Default building facing degrees

[单位 - 为玩家1(红色)创建一只狼在农场0009所在的位置面向系统默认的方向]

整个触发如果用语言表达的意思就是,每隔3秒钟只要农场0009依然存活,就创建一只狼在农场所在的位置。

进入游戏进行测试以后,大家应该不难发现这个触发有这样一个弊端:创建的单位没有数量限制,哪怕地图上已经有了几百,几千只狼,只要农场0009仍然存活,就会不断有新的狼产生,对于这种情况,我们可以通过加入如下的一个简单条件来给予限制:

(Number of units in (Units in (Playable map area) matching (((Unit-type of (Matching unit)) Equal to Giant Wolf) and (((Matching unit) is alive) Equal to True)))) Less than 5

整句条件的意思是,如果地图上所有存活的狼的数量小于5只,则继续执行Actions(动作)类中指定的动作。其中units in Units in (Playable map area) 就是指整个地图上的单位,而(Unit-type of (Matching unit)) Equal to Giant Wolf是指符合“单位类型为狼”这个条件的所有单位,(Matching unit) is alive) Equal to True是指所有“仍然存活”的单位。由于这个条件比较复杂,下面列出详细的添加 *** :

New Conditions(新条件) - Integer Comparison(整数判断)

- 在下拉菜单中选择“Unit in Region Matching Condition(区域内匹配条件的单位)”

- 在下拉菜单中选择“And” - 点击“Condition1(条件1)” - 在下拉菜单中选择“Unit-Type Comparison(单位-类型判断)”

- 点击“Triggering Unit(触发单位)”将之改为“Matching Unit(匹配单位)” - 连续确定2次,点击“FootMan(步兵)”将之改为你在Action(动作)中所指定的生产单位种类,在这里我选择的是“狼” 接下来点击“Condition2(条件2)” - 点击图示位置[图bolc.gif] - 在下拉菜单中选择“Unit is Alive(单位仍然存活)” - 点击“Triggering Unit(触发单位)”将之改为“Matching Unit(匹配单位)”,连续确定2次

最后一直点击确定回到之一层菜单将中间的“Equal to(等同于)”改为“Less Than(小于)”,再点击最后那个0将其改为你所希望的更大出兵数量,到此整个Condition(条件)就完成了

以上就是一个限制了出兵更大数量的刷兵触发的基本原理,但是在实际 *** 中并不是这么简单,对应很多情况需要做出调整,有兴趣的可以自己去研究研究。

Q:什么是Object Editor?

Object Editor就是对象编辑器,其中包含了单位编辑器,技能编辑器,装饰物编辑器,科技编辑器等,可以允许地图 *** 者修改已有的上述对象或者建立新的对象。

打开对象编辑器的 *** 是在地图编辑窗口按F6或者点击快截工具栏中的头盔样按钮。

Q:什么是Trigger?

Trigger就是触发器,在地图编辑窗口按F4或者点击快截工具栏中的带有a字的按钮即可打开Trigger Editor(触发器编辑器)。

触发器是地图编辑器中用于控制地图中所发生的事件的工具,一个基本的触发器由Event(事件),Condition(环境/条件),Action(动作)三部分组成。下面用一个简单的例子来说明这三部分之间的关系:“你在此论坛提出的有价值的问题都会得到解答”

如果将上面这句话看做一个触发器,那么“你提出问题”就是整个触发器的Event(事件),接下来要发生的一切,不管是“我们为你解答问题”或者“我们不理会你”,都是在“你提出问题”之后发生的。

而限制你所提出的问题是否会得到解答的条件则是“你提出的问题有价值”,也就是整个触发器的条件,这个条件直接影响你“是否得到我们的解答”。

最后,当你提出的问题满足“有价值”这个条件的时候,就会发生“我们为你解答问题”这个动作,也就是整个触发器的动作。

Q:什么是JASS?

JASS是用于编辑地图的一种简单的语言,可以说是文本化以后的触发器(地图脚本:MAP scriptS),但是由于触发器并没有提供JASS所具备的

所有功能,所以可以说JASS在某种意义上是触发器功能的扩展。

编辑JASS可以通过以下三种途径:

1, 在触发编辑器(TRIGGER EDITOR)中,通过 MENU -> EDIT -> ConVERT TO CUSTOM TEXT 可以将当前选定的触发转换成脚本模式,也就是以JASS编辑的模式。

2,在触发编辑器中点击触发树(TRIGGER TREE,就是最左边列出所有触发的地方)的最顶端地图名,可以进入自定义脚本功能块,在这里可以用 JASS 写需要的函数,并且在其他的触发器中通过命令来调用。

3,使用 ACTIONS 中的 CUSTOM script 动作可以在触发中插入一行 JASS 脚本代码。

Q:什么是“高级-游戏平衡常数”(英文名称Advanced - Gameplay Constants)

最上方菜单左起第7个菜单上数第4个选择,这个选项里面包括了很多不能用T修改但是很有用的设置。比如买卖东西的距离,各种攻击类型对防御类型的伤害,英雄的等级经验复活数据等等。

Q:地图扩展名中的w3m,w3x,w3n,w3g分别是什么意思?

w3m:混乱之制(roc)版本的地图。

w3x:冰封王座(tft)版本的地图。

w3n:战役地图,这类地图必须放在War3(魔兽)目录下的Campaigns(战役)文件夹中才能使用。

w3g:游戏录象,位于War3(魔兽)目录下的Replay文件夹下。

E:地图类型解释

Melee - 对战地图,即 War3 默认的游戏方式,BN Ladder 指定游戏类型。

Non-Melee - 除了 melee 以外的所有类型统称。

Custom - 非官方地图,但是通常表示 非官方的 non-melee 地图。

RPG - Role Play Games(角色扮演)~~但是现在很多人把所有 Non-Melee 地图都叫成 RPG。

Mini - 迷你游戏,通常指没有突出剧情 、快节奏 、游戏周期短的地图,没有固定的游戏方式,不含 rpg 。

Offence - 通常是对抗性地图统称,有时也表示一些进攻npc为主题的地图。

3C - Offence 的一种,本来只是一个地图的名称,通常是指 有 3条进攻路线的 Offence 。

Arena - Offence 一种,竞技场,通常是指选定英雄后在固定区域内进行决斗的地图。

Defence - 通常是指防守性地图统称,有时候也表示一些在非平衡的 NPC进攻前提下的防守与反攻。

TD - Defence 的一种,建造 Tower(炮台) 防守 NPC 有规律的进攻。

Cutscene - 通常是指剪辑影片,内容比较简单。(非 CG )

Cinematic - 通常是指完整影片,内容比较丰富。(非 CG )

常见问题解答

Q:我已经把Player 1 的种族设成Human,为什麽进入地图的时候又变回Random?

A:把Scenario=> Force Properties=> Fixed Player Settings打勾,如此一来,前面Player Properties设定的种族 、操控者 、颜色,都会被锁定

Q:如何在WE中的Object Editor输入负数而不会自动归零?

A:因为B社担心一些非法数值会对游戏稳定度造成影响,因此限制了数值的范围。进入WE后,工具列File=> Preferences=> Allow negative real value in the Object Editor 打勾,就能在Object Editor中输入real负数而不会自动归零(Integer仍会自动归零)。另外,按住shift+enter再修改数值,不会受到任何限制。请注意,虽然可以输入数值而不被限制,不过如果因为非法的数值导致电脑读不出来,玩游戏时可能会当机。

Q:如何提升世界编辑器的速度?

A:

关掉笔刷--把工具列的Windows=> Brush List关掉。可以大幅提升速度。

减少自订资料--在Object Editor(物件编辑器)允许自订物件,但是自订的物件越多,WE就会越lag,其中尤以自订单位的影响最严重。笔者曾经建立200多个自订单位,结果WE速度大约慢到剩1/3,而且按什麽钮都会lag一下;后来把自订单位删掉,直接修改内建的单位,速度就大幅地改善了。所以,尽量直接修改内建的物件(含单位 、可破坏物件 、物品 、技能 、……等),少用自订物件。减少预置的物件--放置的单位 、物品 、可破坏物件和饰物放得越多,WE的速度就越慢(但是并不明显)。区域 、摄影机和地形的影响则很小,几乎可以忽略。

Q:为什麽在测试地图时,所有的随机数值都一样?例如武士(Footman, dmg=12~13)之一次攻击一定是12?

A:进入WE后,工具列File=> Preferences=> Test Map=> Use Fixed Random Seed取消打勾。

Q:如何把英雄等级上限设定超过10级?Q:如何使英雄5级后打中立怪还有经验值?Q:TFT版本中英雄即使不在战场,也会吸到经验值,如

现在的RPG地图大多做过防盗措施,地图编辑器是无法打开它们的

魔兽地图加密原理

什么是地图加密

地图加密就是通过特殊 *** 破坏地图文件,使它可以在魔兽中运行,却不能被World Editor读取。

目前有哪些加密 ***

现在已有很多种加密War3地图的 *** 。

1:破坏 MPQ 文件头大小信息

魔兽争霸III的地图就像一个Zip文件。 首先是一个 512 字节大小的地图文件头,它记录了一些信息。然后附带一个MPQ 档案,

这个MPQ 档案中包含了一个地图所需的全部文件。 MPQ 文件的前4个字节是一个标识符。它可以被识别为 ’MPQ’。接下来的4个字节

是文件头大小,通常是16进制 hex 0x20 00 00 00的形式。 有些加密者将 0x20 00 00 00 改成一个随机数值,例如hex 0xF6 6E BA 76这个

样子。 目前多数 MPQ 程序因为大小错误而无法打开这样的 MPQ 档案。而 Warcraft3 似乎忽略了这种错误的文件头大小,所以这些地图

仍可以在魔兽中运行。

这种加密只要把数值改回 0x20 00 00 00就可以轻易破解掉。

为了能够正常打开地图并提取文件信息,本网站(wc3sear.ch)将自动修复这类加密文件。

(译者:这一段的术语翻译可能并不正确,因为我对文件结构本就知之甚少。望谅解)

2:删除地图内的 war3map.wtg文件

war3map.wtg 文件中包含了地图中所用到的变量,触发,数组等必需信息。但这个文件只对World-Editor有用。

war3map.wtg 文件丢失或者被改动都将导致 World-Editor 无法读取地图。

当然,这种加密也可以完美地解除。 通过一个小程序你就可以利用war3map.j 文件中存储的信息来重建 war3map.wtg 文件。

本网站忽略掉war3map.wtg 文件,而是直接从war3map.j 文件中提取诸如触发数目,变量数目等信息。

你可能注意到,既然一个简单的 PHP 脚本就可以提取出 war3map.j,那么使用其它脚本就有可能重建war3map.wtg 文件。

2b:删除 war3map.w3c, war3map.w3s, war3map.w3r 文件

war3map.w3c 存储了world editor的镜头设置。 war3map.w3s 存储了world editor在地图中所设置的声音。 war3map.w3r 存储了world editor中的区域设定。

这几个文件同样只对World Editor有用,而且同样可以通过 war3map.j 文件进行重建。参见上面的 “删除地图内的 war3map.wtg 文件“ 。

3:隐藏 war3map.j 文件

有些耍小聪明的加密者找到了隐藏 war3map.j 的办法,这样我们就无法用一个网页脚本来轻易将它解出了。

正规的地图中 war3map.j 是直接保存在根目录里的。而这些加密者发现把它移动到 “scripts\“下面也可以正常运行。

只要知道了这一点,就很容易破解这种加密 ;-) 非常感谢 BahamutZERO 和Quantam 帮我解决这种 *** 。

4:打乱war3map.j 文件

有些加密者认为自己很聪明,他们用随机数字重命名了所有的变量和函数。这使常人很难读懂 war3map.j 文件。但这对脚本是不起作用的。

我为这个网站所写的脚本根本不在乎关键字,它只搜索模式,所以我仍然可以从地图中提取我所需要的信息 ;-)

只要借助能够重建 war3map.wtg 的脚本,这种加密 *** 同样可以破解。恐怕你唯一没法改变的就是已经重命名的变量和函数。

但这并不重要,因为你仍然可以用world editor打开它。 ;-)

加密的安全性如何

正如你所读到的,地图加密也许可以避免菜鸟们用world editor打开你的地图。

但事实是只要魔兽可以运行你的地图,就有办法修复它,从而可以用 World Editor打开它。

地图加密的利弊

有利面:

- 让菜鸟们不能打开你的地图并篡改它。

- 让你显得很聪明

- 因为删除了某些文件而使地图变小。

不利面:

- 它实际上是没用的

- 大家不能研究你的地图

- 自己丢失原版后将无法对地图进行修改

就我所知,魔兽地图还有很多加密 *** ,解密的 *** 也各不相同.这个只是范例.

主要分3种加密

谈加密地图的原理, 破解加密地图的可能及研究加密地图的 ***

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即可还原

最后讲一下如何研究加密的地图:

1.学会Jass语言

2.用mpq工具解压出war3map.j(如果没有则参见上面的第二条解压scripts\war3map.j), 注意如果mpq工具如果不能读取则按照上面第3条的做法修复文件头

3.结合所学的Jass看war3map.j, 就能知道对方地图的处理过程

4.关于地形的获得我还没有好办法, 我把别人的地形文件导进自己的地图会出现读取错误, 估计是有些选项必须符合, 考虑到有些人加密地图就是为了保护地形不让别人"盗版", 所以我也没有多做研究, 只要知道war3map.j的内容就可以学习别人所有的地图处理过程了

总结一下:

解密是很难的, 但是可以通过解压war3map.j来分析别人的地图, 希望这篇文章对大家关于加密解密的争论能给出一个理论依据

游戏作品版权归原作者享有,如无意之中侵犯了您的版权,请您来信告知( 联系邮箱:97883232@qq.com),本网站将应您的要求删除。发布者:admin,转转请注明出处:https://ynzqlly.com/archives/ceping/871673/.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年04月21日下午22:22
下一篇 2024年04月21日下午22:22

相关推荐

  • *** 缴械是什么意思

    网上有关“ *** 缴械是什么意思”话题很是火热,小编也是针对 *** 缴械是什么意思寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。(图片来源网...

    2024年04月22日
    00
  • 龙骑士传说完美攻略之一章「龙骑士传说完美攻略之一章」

    《龙骑士传说完美攻略之一章》提供详细游戏指南,涵盖角色、技能、任务和地图等内容,助你成为顶级龙骑士。(图片来源网络,侵删)龙骑士传说完美攻略之一章在龙骑士传说的之一章中,我们将...

    2024年04月22日
    00
  • 龙骑士传说关于愿之石

    竜骑士传说星尘石的获得,星尘石别名许愿石;一共有五十个。(图片来源网络,侵删)收集一定的数量会获得一些珍贵道具,收集满五十个;会获得消幻石,这样可以开启隐藏迷宫和魔老发生战斗。...

    2024年04月22日
    00
  • 龙腾世纪起源剧情攻略

    《龙腾世纪:起源》是一款充满探险与冒险的的角色扮演游戏。本攻略将带领玩家深入了解游戏剧情,提供实用的任务攻略、角色培养建议和道具装备解析,让玩家在起源的世界里畅游无忧。(图片来...

    2024年04月22日
    00
  • 龙珠大冒险的出招表

    悟空 (图片来源网络,侵删)操作:{↑ + A} 取得物品 11 后,伸长如意棒向上升 {↑ + B} 旋转如意棒,能反弹子弹 {→ → + B} 疾步冲撞 {L + R} 消耗一格气槽的特殊攻击:向前疾冲一小段距...

    2024年04月22日
    00