注册 | 登录

游侠NETSHOW论坛





查看: 29276|回复: 32
打印 上一主题 下一主题

[原创] Warcraft III World Editor教程 [复制链接]

Annerose von Grünewald
游侠剑阁工作组【问答】
熾天使
黑暗执政官
2009.7最佳问答

活跃勋章荣誉勋章大头像勋章2012年度优秀版主勋章剑阁工作组资深组员勋章白金会员勋章

帖子
15144
精华
7
积分
13894
金钱
26919
荣誉
492
人气
10
评议
0

跳转到指定楼层
楼主
发表于 2009-4-30 21:24:32 |只看该作者 |倒序浏览
第一章 相关的名词及概念
        1什么是WE?WE就是World Editor的简写,译做中文叫做世界编辑器,这个东西是大多数地图制作者的工具了,任何一个魔兽副本的安装目录下都能它。它在第一次运行时,会强制进行用户协议的确认!
        2什么是T?T也是一个简写,Trigger,也就是触发事件编辑器,它的功能十分强大,对战地图时开局每个玩家都有一定的资源和单位,都是如此出品,还有RPG地图里的剧情对话等等,包括开始时选择英雄也全部都是用它来实现的,可以说,只要是一张RPG地图的话,T就是整个地图的精髓与灵魂所在。
        3关于JASS。JASS是魔兽3的程式语言,用于控制游戏和地图的进行,也是魔兽游戏和地图的基础。 地图编辑器中摆放的部队(Unit),区域(Region) ,触发(Trigger)……等,最终都会被翻译成JASS语言存在地图档裡,在游戏时被使用。JASS在语法结构上比较接近Basic,同时也引用了许多C的东西。如果读者有接触过这二种程式语言, 应该能更快上手!

第二章  基本面板部分

        1.地形面板,最好理解的一个,能看到的地图的地形。包括平地,坡地,水,草地和悬崖等都是使用这部分功能。     
        2.地形装饰物面板,这个内容很多,地图上的树花鸟等不属于地形的生成物则是归属这部分。

        3.单位面板:事先放置单位的面版,地图上生物,建筑和金矿由这个面板管理。

        4.地区面板:用以提供一个比坐标更为直观的图层确定地图区域,多用于触发器中。

        5.镜头面板:用在交待剧情时使用。

这里需要说明的部分只有一点
放置在地图上的物体 可以对其双击 获得其的细节属性
这部分属性由于物体的不同而改变
比如金矿 就有包括储量 生物 就有技能掉落


第三章 物体编辑器部分
物体编辑器相当于一个数据库,包括本地图中的几乎所有数据类。打开物体编辑器后会有各种选项。包括建筑,单位,物品,可损坏物,地形装饰,技能等。

如图所示,死亡骑士的技能属性的值
其中每个属性的意义,在WE的帮助中包括的说明文件里都有说明。由于数量很大,不便全部复制,请自行翻阅。


 
第四章 使用经验
好吧,这才是重头戏。这才是帮助文件里找不到的东西,完全是使用经验的总结。
        第一节 一般

        1 画图的时候可以先大致决定好座标,这样画出的图会比较准。尤其是在画一张对称的地图时,定座标的动作更是必要步骤。

        2 善用剪切(Ctrl+X)、复制(Ctrl+C)、粘贴(Ctrl+V)、删除(Delete):这些Windows常用指令在WE也可使用,可以省下很多时间。

        3 用键盘快速寻址。例如目前在:


        输入“玩”之后就能立刻跳到首字为“玩”的部分:


        然后再配合上下方向键,就能快速找到你想要的东西。
        如果是英文也一样,输入首字母,就能跳到以它为首的地方。

        4 Ctrl+↑↓可拉远拉近镜头(如果鼠标有滚轮,旋转滚轮也一样);Ctrl+←→可左右旋转镜头

        5 在WE中复制粘贴中文时,应当先转成中文输入法再执行。在英文状态则可能会出现乱码。但是值得注意的是触发器中文版的关键字输出基本上肯定是乱码。

        6 WE可以同时打开多个地图,进行地图间的资料转移。可以从菜单的窗口项目选择地图,然后选定要复制的东西并复制,再从窗口项目选择要贴上的地图贴上东西。

        7 WE常会有为数不少的功能要测试,建议大家自己设计一张小型的、测试功能专用的地图来测试。不要每次想测什么都直接加到自己写的一张很大的地图里测试。

        第二节 物件摆设

        1 选取部队后,按住Ctrl再用滑鼠点击一个地方,可以直接改变部队的面对方向。

        2 选取饰物按PageUp或PageDown可以垂直的上下移动。

        3 选取饰物并按下小键盘的数字键可微调饰物位置,甚至放到鼠标不容易放到的地方。  

        4 不同种类的区域可以设成不同的颜色以利辨识。

        5 可以用物件管理器(F11)找寻物件,并且做检查确认和删除。

        第三节 物件编辑

        1 种族、战役(Campaign)、特殊(Special)这些类别可以利用来为单位分类;物品或其它同理。

        2 选取一个物件,直接复制再粘贴,就可以快速地以它为基底(相同的BASE和修改属性)创造出一个新物件。

        第四节 触发和JASS

        1 中文最好只写在注释里。

        2 暂时不用的触发或触发中的一行指令可以先停用(Ctrl+I、Ctrl+F)而不必急于删除。

        3 可以用物件管理器(F11)找寻你要的触发或变量,并且检查它们相互调用的情形,尤其可以轻易看出是否有变量未被触发使用。这在研究他人的地图时尤其有用。

        4 可以设计一些作弊码以利测试;作弊码建议限制单机使用以免你忘了停用而让别人发现和滥用:
  1. Init
  2.         Events
  3.                 Map initialization
  4.         Conditions
  5.         Actions
  6.                 Custom script: set udg_IsSingleGame = bj_isSinglePlayer  
复制代码


        这是判断是否为单人游戏的设定,其中IsSingleGame是自己定的变数。这里是直接用B社已判断好的变量,如果你要自己计算玩家数也可以。
  1. Debug Level Up
  2.         Events
  3.                 Player - Player 1 (Red) types a chat message containing -level as An exact match
  4.         Conditions
  5.                 IsSingleGame Equal to True
  6.         Actions
  7.                 Unit Group - Pick every unit in (Units currently selected by (Triggering player)) and do (Hero - Set (Picked unit) Hero-level to 99, Show level-up graphics)
复制代码


这是典型的作弊码写法。 当然直接用bj_isSinglePlayer 做判断也是没问题的。
还有就是
  1. Custom script: call Cheat("whosyourdaddy")
复制代码

相当于执行whosyourdaddy作弊码
 
       
        5 利用函数:Trigger - Run <Trigger> (checking conditions)和Trigger - Run <Trigger> (ignoring conditions)可以用来在不同触发器之间互相调用。利用这个语句,可以把常用的模块设计成没有Events的触发器当作函数模块使用。然后在主要的触发用Trigger - Run <Trigger>进行呼叫,以增加便利性,也较方便修改。

        6 Add Event可以用来要把一些特定的部队加入日后的事件。最典型的如精确时间的树木复活。


        本组触发器的功能是让夏树墙和白杨树墙(好吧,这是什么烂翻译。知道这是两种树就行了)在死亡后180秒重生。

        7 使用单行JASS设定区域变量,以解决一般变量在等待中被修改的问题。要这么做只要学三个函数就够了:

  1. local [变量名称]................................必须写在函数开头
  2. local [变量名称] = [变量初始值]........必须写在函数开头
  3. set [变量名称] = [变量值]
复制代码


        8 使用单行JASS设定「本机玩者」以便对特定玩者播放音效或者执行类似动作。

        9 在暂时不用的JASS语句前加上//以达到停用单行JASS的目的。

        10对于一些想在GUI触发中直接使用,但是必须用JASS取得的函数值,可以用在初始化时记录在变数中,例如:
  1. Init
  2.         Events
  3.                 Map initialization
  4.         Conditions
  5.         Actions
  6.                 Custom script: set udg_IsSingleGame = bj_IsSinglePlayer
  7.                 Custom script: set udg_LocalPlayer = GetLocalPlayer()
  8.                 Custom script: set udg_Locust = 'Aloc'
复制代码


        如此要用的时候就轻松很多:
  1. Unit - Add Locust to (Triggering unit)
  2. If (LocalPlayer Equal to Player 1 (Red)) then do (Sound - Play BlizzardTarget1 <gen>) else do (Do nothing)
复制代码

        程度高一点的可以学习有关记忆体漏失的问题,以优化地图,减低不必要的延迟和资源浪费。

        *第四节可能有部分可能需要一定基础才能看懂

第五章        World Editor地图修改实例说明

        说了这么多,我们来实际的做一张地图,演示一下World Editor的强大功能。

第一节        (4)TwistedMeadowsMF.w3x
        TwistedMeadows是一张大家都很熟悉的B社原装图,此图MF点矿点都十分丰富,有许多玩法,深得玩家喜爱。但是美中不足的就是掉落的物品不够丰富,总之,我现在对其不满,我要动刀了。
        首先双击打开TwistedMeadows


        然后就会看到这些(B社的图为了给大家做范例使用,全都没有加密,但是一旦被修改,会失去B社认证标志)


        拖动地图来到左下,看,这个就是玩家的出生点


        好,我们现在要改什么呢? 对,物品掉落。
        第二章已经说过,只要在一个单位身上双击就会显示物体的细节。
        现在我们从最强大的开始吧,让我们看看可爱的红龙:


        打这么大只东西才掉这么低级的东西,太不爽了,让我们删掉重新设


        掉落随机8级物品吧,几率当然是100%,按下确定,真是值得YY的事情啊,就要实现了。
        只掉一个东西还不爽?没问题,我们可以再加上新设置。


        现在这样,这只红龙哥哥归西的时候,就会100%的掉落1个随机的8级物品和1个超级经验书,第三件物品则也是一定会掉落,却各有一半机会是4级和5级。这里解说一下物品设置和物品的区别,物品设置是指一个掉落机会,物品就是其中所包含的。我们可以理解为物品设置是一个抽奖箱子,物品是其中可能出现的奖品各自的概率,所有的奖品的概率之和必须小于等于100%。
        我们已经修改了左下角的红龙,但是TM一共有4只红龙,于是劳碌命的我们只得跑去左上角右上角右下角都改一次。
        现在我们觉得麻烦了,而且万一我们并不熟悉这张地图,怎么才能找齐这些红龙呢?万一3只掉落跟1只不一样,这地图不是很郁卒。
        如果你之前的部分已经认真看过了,你一定会想起来(提示一下:第四章第二节5),对了,物体管理器。


        选择中立敌对→单位,噢我们看到了4只红龙了,在这里我们就可以直接编辑每一只红龙的属性。


        但同时熟悉的地图的就发现了,TM上有6只树魔首领,其中4只是4个主城的出生点,另2只是商店的守卫。我们很可能把他们划属不同的掉落阵营。那如何区别呢,没问题,右键菜单第一项察看物体就可以立刻在地图面版看到单位的位置了。
        这样我们就可以快速的打造了一张MF非常high的TM,另存为一个新地图,就可以去high了。(附件(4)TwistedMeadowsMF.w3x)

第二节        (4)TwistedMeadowsUD.w3x
        改完了物品,可是万一技术很烂,抢不过电脑,他拿的东西越多玩家不是越惨,那可不行。
        这样吧,我们给自己点优待。我们再打开物体编辑器。
        我们先给自己点钱吧,反正电脑采钱也是作弊的。


        新建一个采矿技能,然后找到每次采钱数,就改15吧。加个后缀,是为了容易分辨。(新制造的技能记得要选择原来的单位,把技能改成新的)


        用相同的步骤,给英雄们制作了强大的技能


        到单位里找到各位英雄,给他们加上新制作的技能,如果还希望地图完美,还应该修改一下tips


        英雄强了,兵是不是也强一点?不然带出去给老大丢脸啊
        我们找到了可爱的小蜘蛛,改什么呢,其实蜘蛛很强了,就血多一点,造的快一点就行了


        附上修改过的新地图,可以直接打开参照着看。(附件(4)TwistedMeadowsUD.w3x)


        *本文部分例子引自Danny大神



[ 本帖最后由 安妮罗杰 于 2009-5-3 23:11 编辑 ]
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
已有 1 人评分金钱 收起 理由
bullfrog_x + 120 + 6 更新综合评分

总评分: 金钱 + 120  + 6   查看全部评分

使用道具 举报

Annerose von Grünewald
游侠剑阁工作组【问答】
熾天使
黑暗执政官
2009.7最佳问答

活跃勋章荣誉勋章大头像勋章2012年度优秀版主勋章剑阁工作组资深组员勋章白金会员勋章

帖子
15144
精华
7
积分
13894
金钱
26919
荣誉
492
人气
10
评议
0

沙发
发表于 2009-4-30 21:26:54 |只看该作者

Trigger篇

Trigger,也就是触发事件编辑器,它的功能十分强大,专门编辑游戏所有的人事物的事件,例如部队进入指定区域发生怪物出现的事件,就是所谓的游戏事件。对战地图时开局每个玩家都有一定的资源和单位,都是如此出品,还有RPG地图里的剧情对话等等,包括开始时选择英雄也全部都是用它来实现的,可以说,只要是一张RPG地图的话,Trigger就是整个地图的精髓与灵魂所在。

虽然编程的基础会非常有利于触发器的使用,但是所有人都有能力使用和编辑触发,如果你没有程序经验,你可以把触发是当作"拼图游戏"。

由于触发器的范围太过于庞大
所以给出一个建议的学习路线
触发器事件基本原理→变量(数组),延迟,循环(For、Pick)的概念→触发器中英对照表→算法练习→JASS
本篇将仅包括前两部分的内容
*本篇默认你已经读过“Warcraft III World Editor教程
http://game.ali213.net/thread-2693121-1-1.html
或者你已经了解该文的内容,以能够理解本篇的部分内容。


第一章        基本操作

第一节        界面介绍

如果你对触发器的使用界面完全不了解,建议你先阅读官方说明手册,或者动手去熟悉它。
这里只给出一个简单解释。



这里只简单介绍一下功能区,这个部分最为常用。



前三组        一般操作,都是最普通的常用操作。
第四组        唯一的一个按钮用来管理变量的,按下它可以开启变量管理器,用于变量的新增、修改、移除。
第五组        第一个文件夹管理。其实一个触发器被放在哪里没有任何影响,只是做为分类用而已。
        *文件夹有注解形式,注解形式的外观会有改变。可以当做分隔线。
        第二个        创建触发器。也可以复制粘贴已存在的触发器再修改名称和内容。
        第三个        创建注解,注解可以用做分隔或者分类,但是有字节限制。
第六组        分别是在一个触发器中加入新的事件(Event)条件(Condition)动作(Action)。



从上往下数
第四组        用来移动触发语句。

第五组        功能开关
        允许触发器用                确定选定的触发器是否生效。失效的触发器不会出现在最终编译的JASS文件。
        初始化触发器打开        选中此项则触发器将在游戏初始化时被打开。未打开的触发器也可以由其他触发器在某些条件下打开。
        允许功能                确定选定的功能语句是否生效。
        分类是注释                设定文件佳是否为注解。

第六组        该选择将触发器转换为JASS码,虽然会变得较为难懂,但功能比触发器要多。但是显然,转换的经常很没效率。
        *转换是不可逆的,除非使用还原功能。

第二节        触发器操作

一个文字版的触发如何转换成触发器呢?
假设现在网上找到了一条触发如下
  1. Creep Drop Item
  2.         Events
  3.                 Unit - A unit owned by Neutral Hostile Dies
  4.         Conditions
  5.                 (Random integer number between 1 and 10) Less than or equal to 3
  6.         Actions
  7.                 Item - Create (Random level (Level of (Dying unit)) item-type) at (Position of (Dying unit))
复制代码
1        首先,按下创建新触发按钮创造触发,并且把它命名为Creep Drop Item

2        按下创建新事件,创造一个事件,你会看到下图

        在Map Initialization那一栏里往下找,直到找到你要的为止。
        也可以在全部那里往下拉到部队(Unit)分类,以便使下面那栏只显示出部队类别的事件,再从中找寻。

        按下OK,Event就完成添加了。

3        接着加入条件。很明显,这是一个Integer Comparison

        选择图中下划线部分,选择我们想要的部分。

        这是触发编辑器的结构特色,每一个事件、条件、动作下或多或少有用到函数(Function)。
        每一个函数可回传一个值,其内可能又有别的函数,就是像这样一层一层地往下推。

4        这样就行了,照样加入动作就可以了。


第三节        变量操作
有时候我们会看到这样的触发:
  1. Set Barrack Count
  2.         Events
  3.                 Unit - Barracks 0001 <gen> Dies
  4.         Conditions
  5.         Actions
  6.                 Set BarracksCount = (BarracksCount - 1)
  7.                 Multiboard - Set the text for (Last created multiboard) item in column 1, row 1 to (String(BarracksCount))
复制代码
上面的Barracks 0001 <gen>后会有写个<gen>(中文版就是“情报”),代表那是指向一个地图预置的东西,而编号是由WE自动产生的。
在事件裡选到Unit - Specific Unit Event,下面的Unit按下去之后,电脑会让你选取一个已经被摆在地图上的部队,你可以摆一个兵营然后选取它,
编号或许不是0001,但是那不要紧,只要你知道那代表的是哪一个兵营即可。


下面的Set BarracksCount = (BarracksCount - 1)可在动作的Set Variable那栏找到,
可是当我们按下变量(Variable)时,可能会像下图一样,发现一个选项都没有:

这表示你尚未建立变量,按下编辑变量(Edit Variables)以后,会出现一个让你设定变量的视窗,
按下建立新变数,输入你要的名称和类型。
建立一个整数(Integer)变量后按OK,此时变量那个视窗就会出现选择项目了。

第二章        事件条件行为

事件(Event)
        事件表示触发的启动条件。
        一个触发器相当于 “当Event时,如果满足Condition,则做Action”
        所有的Event之间,是或的关系。任何一个Event发生,都会启动触发器。

        事件中如果含有“Map initialization”(近战初始化),都会在游戏载入(loading)时执行。当开始一个游戏,出现一个Loading画面和一个在动的Loading光条时,电脑就是在载入地形、放置饰物、摆设部队,同时执行这些被设定要在初始化执行的触发。
        *请注意有些触发是无法在载入时执行的,可以用Time - Elapsed game time is 0.00 seconds让它在游戏开始之后立刻执行。

条件(Condition)
        条件是触发器的需求,决定行动的运作与否。
        条件之间是与关系,所有的条件必须都是“True”(真) ,才能让一个触发的行动运作。
        大部分事件所涵盖的范围过于广泛,但不是所有类似的事情你都想要做C,所以条件存在的意义就是要过滤出想要的事件,来决定是否执行行为部分。

举个例子来说,有个触发是这样的:
  1. Complement
  2.         Events
  3.                 Unit - A unit Dies
  4.         Conditions
  5.                 ((Dying unit) is A Hero) Equal to True
  6.         Actions
  7.                 Player - Add 100 to (Owner of (Dying unit)) Current gold
复制代码
((Dying unit) is A Hero) Equal to True这个条件可以判断死亡的部队是否为英雄。
        这样的话一个部队死亡了,而它刚好是个英雄,则条件((Dying unit) is A Hero) Equal to True符合,就成功启动触发会给死者100黄金做为补偿。
        而如果死亡的部队不是英雄,则条件((Dying unit) is A Hero) Equal to True就不能成立,那启动失败,就什么也不会做。

行为(Action)
        Action是一个触发的主要内容,它指明了触发成功启动后要做哪些事。
        可以是杀死某部队、在某两点间制造效果、调整某个玩家的属性等。
        行为可以让设计者全面控制游戏中所发生的事。

        Action是触发中唯一的必要内容。(一个没有Action的触发什么也不做,写出来做什么?)
        而且触发器不是一定要从事件启动,触发可以直接被其他的触发器直接调用。
  1.         *Trigger - Run (checking conditions)
  2.         *Trigger - Run (ignoring conditions)
复制代码
第三章        程序概念

第一节        变量

        变量是程序中数据的临时存放场所。在代码中可以只使用一个变量,也可以使用多个变量,变量中可以存放单词、数值、日期以及属性。由于变量让你能够把程序中准备使用的每一段数据都赋给一个简短、易于记忆的名字,因此它们十分有用。
        通俗的讲,内存可以当作一条街。
        定义一个变量就是给街上一间房子挂上门牌。(很明显门牌是不能重复的,不然邮递员会抗议的)
        设置变量呢,就是找到那间房子,把东西放进房子里去。
        修改变量的值,就好像去找到那间房子,把原来的东西丢弃,再放进一个新的东西。
        最特殊的是取出,因为电脑的世界和现实世界不太一样,电脑拿完东西使用以后,东西并不会消失,房子里仍然永远还有一份。

        OK,那变量做什么呢?
        简单的讲,变量是一个暂存区。
        如果我要在4分钟的时候创造一个英雄,10分钟的时候要给他一个伴读。那么10分钟的时候,我怎么告诉电脑我6分钟前创造的是哪个英雄呢?
        如果不找个地方把英雄的名字写下来,除非时间倒流,不然是肯定找不到了。
        so,写下来,放进一个变量,10分钟终于到来,我就可以去那间房子里找我之前做过些什么了。
        触发器中的变量,有些是我们手动设立的,也有一些是自动建立的。比如Last created Unit、Last created special effect等等。当用触发器创造部队时,B社内部的函数会自动的创造一个部队,并且把它存到Last created Unit,以便接下来对它进行操作。假设创造了一个大法,Last created Unit指的是那个大法,我再创造一个大法,这时Last created Unit指的是那个新的大法,此时我就无法对之前的那个大法操作了,除非在他被创造后先用一个变量记下来: Set xxx = Last created Unit,再创造新的单位,就可以用xxx找到那个旧的大法了。

第二节        数组
        在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。
        用前面的例子来说明,就是有复数的房子属于同一个业主,于是业主给自己的房子挂上门牌以后还要在内部给它们一间一个索引。
        数组可以用于某些固定的存储结构(比如真三中每个玩家的的英雄),也可以配合循环和随机数。
  1. 比如要制作“每1分钟,就在基地随机产生1个 步兵、火枪兵、骑士、或法师”,可以先建立一个部队类型的阵列UnitType[],并且在初始化时,分别设定UnitTypeArr[0]=步兵、UnitTypeArr[1]=火枪兵、UnitTypeArr[2]=骑士、UnitTypeArr[3]=法师、...。然后就能写“每1分,在基地产生1个UnitTypeArr[Random integer number between 0 and 3] ”;如果要它轮流产生,可以写“每分,设定i = i mod 4 + 1,在主堡产生1个UnitTypeArr[i] ”;要每分钟4种都出,可以用循环:“每分钟,for Integer i = 0 to 3,在主堡产生1个UnitTypeArr[i] ”。
复制代码
上例中UnitTypeArr[]就像是一个Table, 可以抽取其中一个或几个,甚至全部:
编号012345...
资料  步兵 火枪兵 骑士 法师 (空)  (空)  ...


        触发器阵列标号是从0开始(几乎所有程序都从0开始,同一般人的习惯不同,请注意),8191结束,即xxx[0..8191],总共8192个。

第三节        分支
        to be or not to be.
        简单的讲。这6个单词13个字母,就是分支。
        就像是在道路上遇到了分叉,是直行还是右拐?就取决于程序走到分叉时所碰上的条件了。
        这里我们还是用上一文使用的树木重生的例子。(前文已有连接)
        Condition是条件,只要满足条件,就是to be,否则就是不满足条件,也就是not to be。
        当选中的物体“不是白杨树而且不是夏树” 就会执行THEN中的子句,在本例就是nothing。
        当是其中任何一种时,条件失败,此时执行ELSE中的子句,也就是将这个物体加入复活记数的Trigger Res中。
        Trigger的分支包括两个功能语句,它们功能其实是一样的,区别仅仅在于他们的表现形式。
        前文例子中的是多条件的版本,但实际上也可以利用单条件版本和逻辑式实现,如下

        但是可以很明显的看出如果这个条件无限制的扩大,结果就是这个语句会非常的繁琐。
        多条件IF的存在就是为了这样的情景准备的。
        *但请注意的是多条件IF的Condition之间是AND关系,而不象单句时可以选择。
        *同时单句IF的THEN和ELSE都只能执行一条功能语句。


第四节        循环
        在不少实际问题中有许多具有规律性的重复操作,因此在程序中就需要重复执行某些语句。
        一组被重复执行的语句称之为循环体,能否继续重复,决定循环的终止条件。
        循环语句是由循环体及循环的终止条件两部分组成的。
        在Trigger中,B社提供了2种循环,分别是FOR和PICK。从这里开始涉及部分JASS入门知识

1        FOR循环
Loop Test
        Events
                Player - Player 1 (Red) types a chat message containing -test as An exact match
        Conditions
        Actions
                Visibility - Disable fog of war
                For each (Integer A) from 0 to 3, do (Actions)
                        Loop - Actions
                                Game - Display to (All players) the text: (String((Integer A)))
                Visibility - Disable black mask

        这个程序在输入-test时启动执行0到3一共4次Game - Display to (All players) the text: (String((Integer A)))
        可以看看转换成JASS的情况如下
function Trig_Loop_Test_Actions takes nothing returns nothing
 call FogEnableOff( )
 set bj_forLoopAIndex = 0   //FOR的初值赋给循环控制记数器
 set bj_forLoopAIndexEnd = 3   //FOR的结束值

 loop   //循环体
  exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd   //相当于break,当循环控制记数器超过结束值结束循环
  call DisplayTextToForce( GetPlayersAll(), I2S(GetForLoopIndexA()) )
  set bj_forLoopAIndex = bj_forLoopAIndex + 1   //递增循环控制记数器
 endloop   //循环体的结束标志
 call FogMaskEnableOff( )
endfunction

//===========================================================================
function InitTrig_Loop_Test takes nothing returns nothing
 set gg_trg_Loop_Test = CreateTrigger( )
 call TriggerRegisterPlayerChatEvent( gg_trg_Loop_Test, Player(0), "-test", true )
 call TriggerAddAction( gg_trg_Loop_Test, function Trig_Loop_Test_Actions )
endfunction


2        PICK循环
        这是一个由B社提供的特殊循环,它可以寻找到一群满足相同条件的单位或者玩家或者饰物。
        它的格式类似如下
Pick Test
        Events
                Player - Player 1 (Red) types a chat message containing -test as An exact match
        Conditions
        Actions
                Visibility - Disable fog of war
                Unit Group - Pick every unit in (Units in (Playable map area)) and do (Actions)
                        Loop - Actions
                                Unit - Kill (Picked unit)
                Visibility - Disable black mask

        当转换成JASS时Loop - Actions所包括的功能语句会被打包进一个子函数模块,
        而Pick every unit in (Units in (Playable map area)) and do (Actions)转换结果则是
  1. call ForGroupBJ( (PICK的单位),(Loop - Actions包含的行为))
复制代码
  1. call ForGroupBJ( GetUnitsInRectAll(GetPlayableMapRect()), function Trig_Pick_Test_Func002A )
复制代码
function Trig_Pick_Test_Func002A takes nothing returns nothing
 call KillUnit( GetEnumUnit() )
endfunction

function Trig_Pick_Test_Actions takes nothing returns nothing
 call FogEnableOff( )
 call ForGroupBJ( GetUnitsInRectAll(GetPlayableMapRect()), function Trig_Pick_Test_Func002A )
 call FogMaskEnableOff( )   
//                                                                             ↑单位                                  ↑执行打包的子函数模块
endfunction

//===========================================================================
function InitTrig_Pick_Test takes nothing returns nothing
 set gg_trg_Pick_Test = CreateTrigger( )
 call TriggerRegisterPlayerChatEvent( gg_trg_Pick_Test, Player(0), "-test", true )
 call TriggerAddAction( gg_trg_Pick_Test, function Trig_Pick_Test_Actions )
endfunction

[ 本帖最后由 安妮罗杰 于 2009-5-3 23:20 编辑 ]

使用道具 举报

AC米兰 最佳新人

帖子
5723
精华
0
积分
2932
金钱
7784
荣誉
7
人气
4
评议
0

板凳
发表于 2009-5-1 14:59:26 |只看该作者
消灭零回复 ~~
PS: 。。。             [害怕]
已有 1 人评分金钱 收起 理由
bullfrog_x -3 回复帖子请不要偏离主题~

总评分: 金钱 -3   查看全部评分


(~'.')~(~'.')~

使用道具 举报

帖子
6861
精华
0
积分
3460
金钱
6399
荣誉
0
人气
297
评议
0
地板
发表于 2009-5-1 15:13:36 |只看该作者
怎么汉化

使用道具 举报

帖子
190
精华
1
积分
446
金钱
453
荣誉
15
人气
0
评议
0
5#
发表于 2009-5-1 17:21:11 |只看该作者
走过 路过 看见 顶起 楼山地 编辑器本身就是中文的啊

[ 本帖最后由 fwin 于 2009-5-1 17:22 编辑 ]
爱情就像玫瑰 远观,很美;走近,很香;
深陷其中,却很痛。。。

使用道具 举报

帖子
836
精华
0
积分
449
金钱
2743
荣誉
3
人气
0
评议
0
6#
发表于 2009-5-1 17:38:12 |只看该作者
LZ你最近好像喜欢跑这里来 !!!!

使用道具 举报

帖子
226
精华
0
积分
113
金钱
634
荣誉
0
人气
0
评议
0
7#
发表于 2009-5-1 18:22:01 |只看该作者
三年前发来是好东西,是为星际2的编辑器做准备吗
your magic is mine

使用道具 举报

Annerose von Grünewald
游侠剑阁工作组【问答】
熾天使
黑暗执政官
2009.7最佳问答

活跃勋章荣誉勋章大头像勋章2012年度优秀版主勋章剑阁工作组资深组员勋章白金会员勋章

帖子
15144
精华
7
积分
13894
金钱
26919
荣誉
492
人气
10
评议
0

8#
发表于 2009-5-1 19:14:38 |只看该作者

回复 #7 icywreck 的帖子

基本上 星际2的应该差不多
当初星际1用的就已经是JASS脚本了

使用道具 举报

帖子
2665
精华
0
积分
1356
金钱
4556
荣誉
2
人气
8
评议
0

9#
发表于 2009-5-1 20:19:27 |只看该作者
LZ我对你的头像有很大怨念...为什么我被警告,你没有...[伤心啊]
已有 1 人评分金钱 收起 理由
bullfrog_x -5 讨论请勿偏离主题

总评分: 金钱 -5   查看全部评分

使用道具 举报

帖子
1186
精华
0
积分
603
金钱
7972
荣誉
1
人气
0
评议
0
10#
发表于 2009-5-2 11:44:19 |只看该作者
lz

骗分的

我就知道 看这架势就知道
………………………………………………6666
小狸子,人可以走,衣服留下。。。。。。

使用道具 举报

~ § Koizumi § ~
游侠元老版主
『光荣游戏区』
SOS団·微笑刺客
闇王·貓作


★★★★★★★★★

youki贡献勋章元老版主勋章版主勋章活跃勋章荣誉勋章特色头衔勋章资深版主勋章大头像勋章2012年度优秀版主勋章剑阁工作组资深组员勋章2013年度杰出版主勋章白金会员勋章

帖子
11289
精华
5
积分
8398
金钱
32280
荣誉
175
人气
29
评议
0
11#
发表于 2009-5-2 23:29:32 |只看该作者
安妮同學碼字大爆發

使用道具 举报

~Miss You~
游侠元老版主
『PC游戏综合区』
青銅聖鬥士·天馬流星拳
雖萬千人吾往矣◇少帥
★★★★★★★★

youki贡献勋章元老版主勋章版主勋章活跃勋章资深版主勋章大头像勋章2013年度杰出版主勋章SIMS梦工厂季度勋章

帖子
11549
精华
7
积分
8534
金钱
27820
荣誉
134
人气
145
评议
0
12#
发表于 2009-5-3 23:48:06 |只看该作者
支持下精华帖

使用道具 举报

☆ 希尔瓦娜斯亲卫 ☆
游侠元老版主
『欧美战略游戏区』
费伍德森林·复仇天神·追风者
吴·主簿
★★★★★★★★

元老版主勋章版主勋章资深版主勋章大头像勋章

帖子
4997
精华
1
积分
3563
金钱
784
荣誉
86
人气
41
评议
0

13#
发表于 2009-5-3 23:49:47 |只看该作者
正好学习一下,虽然手头有些资料,不过有人能解释一下的时候更好~支持下jj

使用道具 举报

游侠资深版主
魏 折沖校尉
★★★★★★★

版主勋章资深版主勋章勤劳之证

帖子
3254
精华
1
积分
2084
金钱
25838
荣誉
25
人气
49
评议
6

14#
发表于 2009-5-4 14:44:37 |只看该作者
膜拜下技术贴    安妮精华贴里留念~
额   突然发现这里回帖管理的好严格~

使用道具 举报

积尸气鬼苍焰
2010游侠T恤主创
游侠资深版主
『光荣游戏区』
游侠剑阁工作组【美工】
奥州王
軍神 正四位下 刑部卿


★★★★★★★★

版主勋章资深版主勋章白金会员勋章活跃勋章荣誉勋章特色头衔勋章剑阁工作组资深组员勋章

帖子
12536
精华
8
积分
11875
金钱
36626
荣誉
398
人气
247
评议
5

15#
发表于 2009-5-4 17:00:43 |只看该作者
过来支持了

使用道具 举报

梟雄滅世‧血雨開章
游侠元老版主
游侠剑阁工作组 副组长
海皇七將軍·海魔女
短笛大魔恩

2013年度杰出版主勋章元老版主勋章版主勋章女性版主勋章资深版主勋章大头像勋章白金会员勋章精华勋章活跃勋章荣誉勋章特色头衔勋章勤劳之证写手之证剑阁工作组资深组员勋章youki贡献勋章

帖子
10554
精华
9
积分
11877
金钱
17839
荣誉
468
人气
1176
评议
15

16#
发表于 2009-5-4 17:04:46 |只看该作者
图文并貌,學習到了。

使用道具 举报

no king rulus forever
浪漫神族 提卡斯芬得利
白银圣斗士·猎犬座
★★★★
安格里斯委员会【会长】

版主勋章大头像勋章

帖子
5124
精华
3
积分
4413
金钱
35910
荣誉
121
人气
408
评议
4
17#
发表于 2009-5-4 17:05:42 |只看该作者
星际2和魔兽的地图编辑器不同....星际2可以通过脚本文件来实现所有操作也可以通过脚本编辑来做地图..不一定需要在到地图编辑器里面进行了...而且兵种设置也会更简单.

使用道具 举报

☆才华横溢之极限☆
游侠元老版主
游侠剑阁工作组【翻译】
GBC☆口袋妖怪 梦幻
魏 吏部尚书

★★★★★

元老版主勋章版主勋章资深版主勋章大头像勋章《三国志12》汉化贡献勋章特色头衔勋章勤劳之证剑阁工作组资深组员勋章

帖子
4631
精华
2
积分
4178
金钱
16096
荣誉
144
人气
202
评议
2

18#
发表于 2009-5-4 17:05:55 |只看该作者
剑阁众集体来此顶贴支持        

使用道具 举报

~ § Lelouch ·Vi ·Britannia § ~
游侠资深版主
『PC游戏综合区』
能天使
硬件权威
★★★★★★★★

版主勋章资深版主勋章大头像勋章白金会员勋章活跃勋章youki贡献勋章

帖子
10548
精华
4
积分
6925
金钱
3611
荣誉
78
人气
663
评议
0

19#
发表于 2009-5-4 17:21:15 |只看该作者
[害怕] [害怕] [害怕]

牛蛙是不是把我昨天的回复分割了?那我今天又来了。。。

我只是一个SneakerHead

使用道具 举报

Annerose von Grünewald
游侠剑阁工作组【问答】
熾天使
黑暗执政官
2009.7最佳问答

活跃勋章荣誉勋章大头像勋章2012年度优秀版主勋章剑阁工作组资深组员勋章白金会员勋章

帖子
15144
精华
7
积分
13894
金钱
26919
荣誉
492
人气
10
评议
0

20#
发表于 2009-5-4 17:31:19 |只看该作者
原帖由 疯子太 于 2009-5-4 17:05 发表
星际2和魔兽的地图编辑器不同....星际2可以通过脚本文件来实现所有操作也可以通过脚本编辑来做地图..不一定需要在到地图编辑器里面进行了...而且兵种设置也会更简单. ...

魔兽也可以直接写脚本=v= 话说我基本上大部分时间也是开UE不开WE的

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

手机版|Archiver|游侠NETSHOW论坛 ( 苏ICP备2023007791号 )

GMT+8, 2025-9-2 12:56 , Processed in 0.384253 second(s), 13 queries , Gzip On, Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

分享到