魔兽争霸3地图编辑器编辑器如何做制作一个不用材料只要钱够就能直接购买合成的物品的触发

魔兽地图编辑器如何保持区域内不超过一个单位
在魔兽地图编辑器中,有的玩家是不是有碰到这样的情况?这个区域本来是空的,可以进去一个人,再进去一个人就会弹出来。原来的人走了,别人才能进去。这个触发怎么弄?由小编告诉你:步骤:1、先用区域面板画2区域&假设区域001是你说的只能有一个单位的区域,把多余的人弹到区域000的位置&2、开触发器,创建2个变量&&然后再用几个触发这个触发还要关掉初始打开:这样,问题就得以解决啦!那又该怎么设置让一个区域里的怪永远保持相同的数量,一波死了才刷下一波,并且掉落物品呢?步骤:1、首先,打开魔兽地图编辑器(WE)按F4,进入触发器编辑器,接着就是调一个触发器,下面有详细介绍。事件:时间 - Periodic Event(周期性事件)- Every *** seconds of game time(***表示你要的时间,即每多少秒出一次怪)环境:没有动作:(***表示触发器中的蓝字)第一个:单位 - Create Unit Facing Angle(创建单位并指定面向角度)Create *(出怪的数量)***(出怪的种类)for ***(创建给的玩家,最好是给电脑)at ***(创建的位置,一般是center of ***(一个区域))facing 默认的建筑朝向 degrees备注:在“创建的位置”里,你要先设定一个区域在地图中,这个应该会弄吧。第二个:单位组 - Pick Every Unit In Unit Group And Do Multiple Actions(选择单位组中全部单位并执行多个动作)Pick Every Unit In ***(功能 - Units In Region Owned By Player,选完后,有Units In Playable map area owned by ***(创建给的玩家,刚才那个)2、回到主对话框,接着是and do ***(单位 - Issue Order Targeting A Point,选完后,有Order ***(功能 - Picked Unit) to ***(攻击―移动到)***(Center of ***(攻击到的区域,也是要事先设定一个)3、最后,一直按确定就行了。备注:如果你想出的怪是很多种且的话,多设定几个第一个动作就行了(在出怪的数量和种类那里调)。如果你想出的怪按顺序出的话,就在每个动作之间多设定一个动作,是全部 - Wait ***(等待的秒数)seconds若你想在多个路口刷怪的话,就要多设定几个区域,在照着上面的方法弄就行了。全部弄完后,进入地图测试,刷怪就完成了。下面还有一些汉书中英文对照:事件:Map Initialization 地图初始化Destructible Doodad - Destructible Doodad Dies 可破坏物体被摧毁Destructible Doodad - Within Region Dies 在区域中被摧毁Dialog - Dialog Button Click 按下对话按钮Game - Time Of Day 游戏中时间Game - Value Of Real Variable 实数变量Real数值Game - Load 读取Game - Save 保存Game - Hero Abilities Button Clicked 按下英雄升级技能按钮Game - Build Structure Button Clicked 按下建造按钮Player - Chat Message 聊天信息Player - Cinematic Skipped 跳过电影Player - Selection Event 选择事件Player - Keyboard Event 键盘事件Player - Properties 资源Player - Alliance Change(Any) 同盟改变 (任何)Player - Alliance Change(Specific) 同盟改变 (指定)Player - Victory 胜利Player - Defeat 失败Time - Time Elapsed 时间经过Time - Periodic Event 周期性事件Time - Timer Expires 计时器过期Unit - Specific Unit Event 特定单位事件Unit - Player-Owned Unit Event 拥有单位事件Unit - Generic Unit Event 一般单位事件Unit - Unit Enters Region 单位进入区域Unit - Unit Leaves Region 单位离开区域Unit - Unit Within Range 单位在范围中Unit - Life 生命Unit - Mana 法力环境:Boolean Comparison 布尔值Boolean判断Ability Comparison 技能判断Destructible Comparison 可破坏物体判断Destructible-Type Comparison 可破坏物体类型判断Dialog Button Comparison 对话按钮判断Game Difficulty Comparison 游戏难度判断Game Speed Comparison 游戏速度判断Hero Skill Comparison 英雄技能判断Integer Comparison 整数Integer判断Item Comparison 物品判断Item-Class Comparison 物品种类判断Item-Type Comparison 物品类型判断Melee AI Comparison 多人对战AI判断Order Comparison 命令判断Player Comparison 玩家判断Player Color Comparison 玩家颜色判断Player Controller Comparison 玩家控制判断Player Slot Status Comparison 玩家在线状态判断Race Comparison 种族判断Real Comparison 实数Real判断String Comparison 字符串String判断Tech-Type Comparison 科技类型判断Trigger Comparison 触发器判断Unit Comparison 单位判断Unit-Type Comparison 单位类型判断And 与Or, Multiple Conditions 或,多个条件动作:普通 一些基本的未分类指令AI AI 设定计算机控制的单位的人工智能Animation 动画 单位所能做出的动作Camera 镜头 设定摄像机的位置及改变方式Cinematic 电影 设定游戏中即时演算的过场动画Countdown Timer 倒数计时器 又称定时器或计时器,用于倒数计时或定时发生事件Destructible Doodad 可破坏的 设定可破坏物体的状态Dialog 对话 设定对话框的显示/隐藏、标题、按钮、内容及清除Environment 环境 设定天气和环境Floating Text 飘浮文字 可以飘浮在屏幕上任何位置的文字Game 游戏 设定游戏相关属性Game Cache 游戏缓存 将对象当前状态储存在文件中,可用于其他地图调用Hero 英雄 设定英雄的所有状态Item 物品 设定物品的使用及状态Leader Board 排行榜 悬浮在右上角的文本框Melee Game 对战游戏 设顶多人对战游戏的初始状态Neutral Building 中立建筑 设定中立建筑的状态Player 玩家 设定玩家拥有单位的属性及状态Player Group 玩家组 设定玩家组中各个玩家的属性及状态Quest 任务 设定任务提示窗口及主次任务Region 地区 设定规划区域内触发的事件及环境Selection 选择 设定选择选项Sound 声音 设定游戏进行中声音的控制Special Effect 特效 设定显示特效Trigger 触发器 设定触发器的状态Unit 单位 设定单位的属性及状态Unit Group 单位组 设定单位组的属性及状态Visibility 可见 设定区域可见模式单位:Create Unit Facing Angle 创建单位并指定面向角度 创建单位,并指定其面向角度Create Unit Facing Point 创建单位并指定面向点 创建单位,并指定其面向点Create Corpse 创建尸体 创建单位的尸体Create Permanent Corpse 创建永久的尸体 创建永久存在的尸体Kill 杀死 杀死单位Remove 移除 从游戏中移除单位Explode 爆炸 使单位以炸开形式死亡Replace 替换 用一个单位替换现有单位Hide 隐藏 隐藏单位Unhide 解除隐藏 解除隐藏单位Change Color 改变颜色 改变单位颜色,控制权不会改变Change Owner 改变所有者 改变单位的所有者Shared Vision 分享视野 玩家分享单位的视野Move Unit (Instantly) 移动单位 (立即) 让单位瞬间移动到另一位置Move Unit And Face Angle (Instantly) 移动单位并指定面向角度 (立即) 让单位瞬间移动到另一位置,并指定面向角度Move Unit And Face Point (Instantly) 搬移单位并指定面向点 (立即) 让单位瞬间移动到另一位置,并指定面向点Set Life(To Percentage) 设置生命 (百分比) 以百分比方式设置生命值Set Mana(To Percentage) 设置法力 (百分比) 以百分比方式设置法力值Set Life(To Value) 设置生命 (数值) 设置生命值Set Mana(To Value) 设置法力 (数值) 设置法力值Make Invulnerable/Vulnerable 成为无敌的/可被攻击的 设定单位为无敌的/可被攻击的状态Pause/Unpause 暂停/解除暂停 暂停/解除暂停单位的动作,玩家将不可控制单位Pause/Unpause All Unit 暂停/解除暂停所有单位 暂停/解除暂停所有单位的动作,玩家将不可控制单位Pause/Unpause Expiration Timer 暂停/解除暂停到期的定时器 暂停/解除暂停到期的定时器Add Expiration Timer 增加到期的定时器 增加到期的定时器Make Unit Explode On Death 成为爆炸式死亡单位 使单位死亡方式成为以炸开形式死亡Suspend Corpse Decay 暂缓尸体腐烂 让尸体腐烂暂缓Reset Ability Cooldowns 重设技能冷却 恢复技能冷却到默认值Set Building Construction Progress 设置建造建筑物进度 设置建造建筑物所要消耗的时间Set Building Upgrade Progress 设置建造升级进度 设置建筑升级所要消耗的时间Make Unit Sleep 成为睡眠单位 使单位处于睡眠状态Make Unit Sleep At Night 成为夜间睡眠单位 使单位在夜晚的时候处于睡眠状态Wake Up 醒来 使睡眠中的单位醒过来Turn Alarm Generation On/Off 警戒范围开/关 打开/关闭单位警戒范围Rescue Unit 营救单位 设置单位被营救Make Rescuable 成为可营救的 设置单位为可营救单位,玩家接触时营救单位将加入玩家阵营Set Rescue Range 设置营救范围 设置进入范围后单位即被营救Set Rescue Behavior For Units 设置单位营救行为 设置营救后单位颜色是否变化Set Rescue Behavior For Buildings 设置建筑营救行为 设置营救后建筑颜色是否变化Enable/Disable Supply Usage 开启/关闭人口上限 开启/关闭人口上限Make Unit Face Unit 使单位面向单位 使单位面向单位Make Unit Face Point 使单位面向地点 使单位面向地点Make Unit Face Angle 使单位面向角度 使单位面向角度Set Movement Speed 设置移动速度 设置移动单位速度Turn Collision On/Off 碰撞开/关 设置单位是否可与其他单位重叠Set Acquisition Range 设置获得范围 设置单位的获得物品范围Set Custom Value 设置自定义数值 设置自定义数值Remove Buffs 移除持续性魔法 移除单位上的持续性魔法Remove Buffs By Type 移除持续性魔法类型 按类型移除单位上的持续性魔法Add Ability 增加技能 增加单位的技能Remove Ability 移除技能 移除单位的技能Issue Order Targeting A Unit 当前目标是一个单位的命令 让单位执行目标是单位的命令Issue Order Targeting A Point 当前目标是一个点的命令 让单位执行目标是地点的命令Issue Order Targeting A Destructible 当前目标是一个可破坏物体的命令 让单位执行目标是可破坏物体的命令Issue Order With No Target 没有目标的命令 让单位执行没有目标的命令Issue Train/Upgrade Order 训练/升级的命令 执行训练/升级的命令Issue Research Order 研究科技的命令 执行研究科技的命令Issue Build Order 建造的命令 执行建造的命令
阅读本文后您有什么感想? 已有
人给出评价!
注:您的评论需要经过审核才会显示出来
没有查询到任何记录。
Copyright &
PC6下载().All Rights Reserved
备案编号:湘ICP备号魔兽地图编辑器如何弄多个物品合成-中国学网-中国IT综合门户网站-提供健康,养生,留学,移民,创业,汽车等信息
> 信息中心 >
魔兽地图编辑器如何弄多个物品合成
来源:互联网 发表时间: 16:48:04 责任编辑:鲁晓倩字体:
为了帮助网友解决“魔兽地图编辑器如何弄多个物品合成”相关的问题,中国学网通过互联网对“魔兽地图编辑器如何弄多个物品合成”相关的解决方案进行了整理,用户详细问题包括:RT,我想知道:魔兽地图编辑器如何弄多个物品合成,具体解决方案如下:解决方案1:请附图例子就是:DOTA中振魂石的合成(精气之球+活力之球+能量之球)再给一个有卷轴的合成(BKB的)解决方案2:就这样,升级装备也差不多
相关文章:
最新添加资讯
24小时热门资讯
Copyright © 2004- All Rights Reserved. 中国学网 版权所有
京ICP备号-1 京公网安备02号魔兽地图编辑器某类物品只可拥有一样和物品合成的触发方法_百度知道DotA是只使用了war3的地图编辑器制作出来的吗?还是自己也要写代码?war3提供了相应的API吗?
按时间排序
留个名,最近把13w行的dotaai读了一遍,也就那么回事
魔兽地图DotA的代码全部使用了魔兽3地图编辑器所开放的api(加入额外的API需要安装诸如JAPI一类的补丁,并且需要平台支持)。美术和声音资源主要使用魔兽自带素材,也有少量导入的素材(集成在8M中)。魔兽地图文件本身是使用暴雪早期的MPQ压缩技术的资源压缩包,可以用MPQ查看器打开,和wow(6.0以前)的资源查看器几乎完全兼容。但DotA的地图文件不能用地图编辑器(World Editor)打开,因为地图编辑器的图形界面的触发编辑器需要读取额外的文件(记得是w3t还是w3g)。而保存地图时,地图编辑器会把这个触发编辑器里的内容编译为游戏本身的脚本代码,即jass(*.j文件),并在游戏运行时使用,因此这个触发编辑器的对应文件其实不是地图运行的必需品。值得一提的是jass是“Just Another Script System”的缩写。所有Jass可用的API都在魔兽3资源里的common.j(简称CJ)文件中列出。除此之外,暴雪还编写了blizzard.j(简称BJ)基于CJ提供的API,把对战初始化及一些常用的函数(比如组选取)整合起来。由于不少BJ函数本身存在泄漏问题(使用新建句柄而不回收),甚至存在正确性问题(比如组中随机选取多个对象的函数存在代码遗漏),因此多数we使用者都使用WE MOD来做图,导入修正过的BJ覆盖魔兽自带的文件等。国内这一块做的最好的,应该就是YDWE了。理论上只使用地图编辑器是可以做出DotA这样的地图的。但许多Jass里的功能难以在触发编辑器中实现,移植性和维护成本也不同,所以多数资深作者还是选用了Jass为主导的脚本来制作地图。YDWE的开发初衷之一,就是允许使用者在完全不会jass的条件下也能实现原本jass才能实现的内容。除此之外,由于触发编辑器本身可以在GUI里插入或者转化为自定义代码,因此你也完全可以在we里实现纯jass代码的制作。DotA虽然不能用we打开,但这不代表它就完全不是用we做的了。制作者完全可以用we所见即所得的编辑方式来更改地形地貌和物体属性(也可能是直接更改的slk文件),然后把编辑器生成的对应文件(比如w3e地形文件)直接提取出放入地图中,并撰写相关脚本。DotA的脚本中的变量与函数命名也经过了特殊处理,命名都是一些随机字母数字组合,毫无可读性,应该是经过命名替换处理的。DotA为什么要这么做让玩家手中的地图文件难以打开和编辑呢?这当然是为了避免玩家篡改地图,甚至利用某些版本的漏洞制作互通图。当然,由于魔兽地图本身的限制,可读性再差的代码也能被资深地图开发者所理解,但这些“加密”手段多多少少提升了破解的门槛,提升了破解的成本,对魔兽地图的反改图起到了一定的作用。
我这么说吧,你新建一张图(它自带原始技能,原始物品,原始科技树),他的大小微乎其微,也就几百k,然后你稍微写点触发,自定义点技能,就能接近1m,我曾经自定义了200多个技能,50左右物品,触发简单,就一个物品合成,地图文件就成了3m左右,然后进行加密,优化,去掉重复语句,它的大小小了近一半。这些都是铺垫,我想说的是什么呢,dota一张图7-10m左右,当然肯定是优化加密后,所以我当时就想,他得有多少语句才能有这么大的体积,后来想想他的技能并不是原技能简单的修改,物品也是那么的完美,也就不难解释了。所以,dota是张神图。我曾经拿到过icefrog改之前的一个上古版本的未加密的dota,它的大小在3m左右,我小心的打开它,才发现它是多么的精妙,虽然方式的版本英雄少,但这并不影响它是一张神图,几乎每个技能都是触发语句写的,并不是简单的新建-自定义技能,它的物品合成也是那么的精妙,我无耻的承认后来我写图有的编码也是借鉴此图的。后来转手蛙神手后,这张图迸发出强大的活力,因为它里面的技能,触发变的更为精确,物品合成变得更为方便(比如身上满六格也能买卷轴合成)。综上,dota绝对是一张神图,并且不是简单的一个人就能搞定的,icefrog也是个团队,并不是简单的一个人,这张图绝对付出了制作者的心血。
DotA这个地图,除了几位少数的一些技能,基本上都被替换成了IF自己写的技能方法了。至于原因是因为魔兽原声技能缺陷实在太多,而且十分简单。比如早期穿刺技能不仅会重置单位面朝方向,还会让单位在滞空的时候成为无敌状态。于是现在的穿刺技能实际是靠模拟来实现的。所谓模拟就是用代码来重新实现这个技能的效果,利用各种马甲,触发还有jass几乎可以模拟出一切想要的技能效果,于是现在DOTA里各种各样的仅能都一一脱出了原生技能的外衣(早期的DOTA基本就是对战里各个机能的数值修改,从6.60开始,各种各样的有趣的技能就层出不穷了)最为夸张的就是DOTA当中的物品合成机制了,魔兽平台本身的限制是当物品栏满的时候是不可以拾取物品的,这也就造成了合成装备变得十分的麻烦,if利用了某个游戏原生功能实现了更为友好的物品合成系统(具体记不太清了,不敢乱答,欢迎补充),并且重写了所有物品的合成,共享,使用机制,可谓劳模…不过频繁的用触发器还有创造删除马甲有时候运行效率不高,比如某个版本水人第一次释放E技能(变体攻击)游戏就会卡一下,早期版本玩家首选卡尔之后预读技能非常卡等等,现在都已经修复了。DOTA地图占用空间很大的一部分是loading图,把那个压缩压缩其实还能塞下很多代码,但是魔兽这引擎确实太老了,有好的技能构思即使用模拟,触发器强行实现了,各种bug还有超低的运行效率同样会毁掉游戏体验,所以现在版本停留在6.83也就不难理解了。
只有非常简单的判定和少数触发需要自己写,其它的都非常非常简单,你要是想了解,最好的方式是用帝国时代2的地图编辑器来体会一下。dota地图难度不在地图,而是在极度有限的资源里实现高品质判定和角色及物品平衡性调试。很多国产的rpg都死在平衡性上的。
3留个名,前rpg地图改图者找找老软件,晚点来答题---------------------------首先提一下地图工具的问题很多杀软和游戏平台扫描到改图工具会当作作弊为了账号不被罚分请不要开着平台改图请不要使用改图登陆平台请不要散播有bug的改图请不要恶意使用改图工具请不要诋毁原作者请不要在改图上删除原作者名或者假自己名字所有war3原始安装文件版权属于暴雪公司所有rpg地图所有权属于原作者请在阅读以下内容前对dota和计算机常识有基本了解------------------------------推荐的工具是魔兽改图一条龙,搜关键词百度很多这是基本 的界面我们选择第一个软件HWM--------------------------------------------------HWM中找到在war3目录maps下面download下面的dota地图以之前11更新的旧地图6.83-mu1为例打开地图以后首先修复文件头再选择分析文件得到所有的地图内文件--------------------------------------------------------------------------------------------------------------------------------------------得到分析文件以后可以使用“筛选文件”来筛选一些我们需要的东西其中blp和mdx为贴图,对游戏本质内容影响不大,可惜忽略slk为数据文件,所有基本数据都储存其中内容如字面,比如itemdata就是物品unitblance就是平衡性不详细解释我们仅仅打开一个看看这是itemdata,我们用excel打开这是itemdata,我们用excel打开最上方就能看到各个列的名称下面是不同物品的数值比如drop是控制是否不能丢弃比如盾圣剑等等但是这个slk表中我们看到的诸如是否能丢弃(drop),是否能叠加(stockmax)比如眼吃树,物品的贴图位置(file)还有物品冷却时间对应的id(cooldownid)等等,并没有看到物品具体属性,此时看表有一列ablitydata,对应的是另一个ablitydada.slk,那么相关修改再去这个slk中找,介于这几个slk关联非常复杂,不细说,有兴趣的自己挖掘-------------------------------------------------slk在普通地图中使用非常普遍,但大多数rpg地图已经不再靠修改slk实现游戏特色---------------------------------------------------再看看hwm解压出来的txt类文件大多数名字和slk命名方式一样,使用起来并不复杂但其中最有趣的是war3mapmisc.txt这是一个杂项控制解压这个txt打开看看有什么[Misc]HeroFactorXP=100,100,100,100,100GlobalExperience=0BuildingKillsGiveExp=1MaxUnitSpeed=522.0MinUnitSpeed=100.0TradingIncLarge=0TradingIncSmall=0AttackNotifyRange=1000.0DamageBonusMagic=1.25,0.75,2.00,0.35,1.00,0.75,0.05,1.00DamageBonusNormal=1.00,1.50,1.25,0.70,1.00,0.75,0.05,1.00DamageBonusPierce=2.00,0.75,0.75,0.35,1.00,0.50,0.05,1.50DamageBonusSiege=1.00,0.50,1.25,1.50,1.00,0.75,0.05,1.00BoneDecayTime=12.0DrainUsesEtheralBonus=1AgiAttackSpeedBonus=0.01AgiDefenseBase=-1.0AgiDefenseBonus=0.14StrRegenBonus=0.03StrHitPointBonus=19.0IntManaBonus=13.0IntRegenBonus=0.04AgiMoveBonus=0.0HeroAwakenLifeFactor=1.0HeroAwakenManaFactor=1.0MaxHeroLevel=25HeroExpRange=0.0ReviveBaseFactor=0.3ReviveLevelFactor=0.0ReviveMaxFactor=0.0ReviveMaxTimeFactor=4.5ReviveTimeFactor=0.1GrantNormalXPFormulaC=6.0EtherealHealBonus=1.4FrostAttackSpeedDecrease=0.2FrostMoveSpeedDecrease=0.3DayLength=300.0MaxUnitLevel=25MagicImmunesResistLeech=0EtherealDamageBonus=1.40,1.00,1.00,1.40,1.00,1.40,1.00GuardDistance=600.0MaxGuardDistance=600.0GuardReturnTime=3.0MoveSpeedBonusesStack=0CanDeactivateAvatar=0HeroReviveManaFactor=1.0HeroAwakenManaStart=0HeroReviveManaStart=0DamageBonusChaos=1.00,1.00,1.00,0.40,1.00,1.00,1.00,1.00UpkeepUsage=,,,FollowRange=0.0MagicImmunesResistDamage=1FoggedAttackRevealRadius=200.0FlyingHeroesBestowAuras=1PawnItemRange=150.0DisplayBuildingStatus=1PolymorphedUnitsBestowAuras=1HeroFactorXP=100,100,100,100,100GlobalExperience=0BuildingKillsGiveExp=1 以上控制经验增长修改这几个数字可以让升级更快MaxUnitSpeed=522.0最高移动速度,522这也是-ms能看到的玩家最快速度(无论相位对剑风杖等怎样叠加),但白牛显然超过这个速度,白牛c技能的实现是另一种方式,另外500以上移动速度在imba中还是一个成就DamageBonusMagic=1.25,0.75,2.00,0.35,1.00,0.75,0.05,1.00DamageBonusNormal=1.00,1.50,1.25,0.70,1.00,0.75,0.05,1.00DamageBonusPierce=2.00,0.75,0.75,0.35,1.00,0.50,0.05,1.50DamageBonusSiege=1.00,0.50,1.25,1.50,1.00,0.75,0.05,1.00这个是控制伤害的,但dota中玩家可控制的都是英雄攻击英雄甲所以基本不具有参考意义,但在普通对战地图中非常有用,为什么攻城单位打建筑伤害高,为什么穿刺打英雄伤害低,都是这些参数AgiAttackSpeedBonus=0.01AgiDefenseBase=-1.0AgiDefenseBonus=0.14敏捷加成,每点敏捷加1%攻速,太低了,即便小黑三级大90敏捷也加90%而已,这个参数是所有累计I以后一次计算,对一般物理输出英雄,堆敏捷显然不如直接堆攻速基础护甲为-1,每点点敏捷加0.14护甲,所以7点敏捷加一点护甲StrRegenBonus=0.03StrHitPointBonus=19.0IntManaBonus=13.0IntRegenBonus=0.04AgiMoveBonus=0.0每点力量0.03点回血,30点力量加一点回血,这也是够慢的了,每点力量19点血,每点智力13点蓝,每点智力0.04回蓝,敏捷不增加移动速度NeedHeroXP=200,500,900,00,00,00,,,,,,升级经验,另外小兵经验随着游戏时间也是增加的---------------------------------------------------------------------下面是重头戏,大家所说的jass语言,这是暴雪使用的一种简单的编程语言,和暴雪的游戏一样,易于上手,难于精通,我们在分析文件中筛选文件选择筛选文件类型 和搜索slk或者txt一样,只要搜索
文件就可以搜到,有且仅有一个j 文件,dota目前的j文件已经有2.8mb,解压这个地图并且可以使用一条龙软件中的c文本编辑软件,这里我使用的是emedit 也是一个非常好用的文本编辑软件打开的j文件大约有十万行的代码!!!我们不求甚解仅仅想大致看看的话,举个栗子!!!function DB2 takes nothing returns nothinglocal string DC2=StringCase(GetEventPlayerChatString(),false)local boolean R4O=DC2=="-random"or DC2=="-random int"or DC2=="-random agi"or DC2=="-random str"local boolean DD2=DC2=="-repick"local boolean DE2=DC2=="-gameinfo"local boolean DF2=SubString(DC2,0,5)=="-swap"local boolean DG2=DC2=="-recreate"local boolean DH2=DC2=="-unstuck"local boolean DZ2=DC2=="-matchup"or DC2=="-ma"local boolean DV2=DC2=="-movespeed"or DC2=="-ms"local boolean DW2=DC2=="-msa"local boolean DX2=DC2=="-disablehelp"local boolean DY2=DC2=="-enablehelp"local boolean DJ2=DC2=="-creepstats"or DC2=="-cs"local boolean DK2=DC2=="-cson"or DC2=="-csoff"local boolean DL2=DC2=="-hidemsg"local boolean DM2=DC2=="-showmsg"local boolean DN2=DC2=="-weather snow"or DC2=="-weather rain"or DC2=="-weather off"or DC2=="-weather random"or DC2=="-weather wind"or DC2=="-weather moonlight"local boolean DS2=DC2=="-showdeny"or DC2=="-hidedeny"local boolean DT2=DC2=="-denyinfo"or DC2=="-di"local boolean DR2=DC2=="-don"or DC2=="-deathon"or DC2=="-doff"or DC2=="-deathoff"local boolean DP2=SubString(DC2,0,5)=="-roll"and DC2!="-rollhero"local boolean DQ2=DC2=="-hhn"or DC2=="-hideheronames"local boolean DU2=DC2=="-mute"local boolean E02=DC2=="-afk"local boolean EI2=SubString(DC2,0,8)=="-kickafk"local boolean E12=DC2=="-apm"local boolean EO2=DC2=="-clear"local boolean BPO=DC2=="-courier"local boolean AH=DC2=="-ah"local boolean E22=DC2=="-invokelist"or DC2=="-il"local boolean E32=DC2=="-list"local boolean E42=DC2=="-rolloff"local boolean E52=DC2=="-rollon"local boolean E62=SubString(DC2,0,6)=="-music"local boolean E72=SubString(DC2,0,6)=="-water"local boolean E82=SubString(DC2,0,6)=="-quote"local boolean E92=SubString(DC2,0,3)=="-cm"local boolean EA2=SubString(DC2,0,9)=="-itemswap"local boolean EB2=DC2=="-bonus"local boolean EC2=DC2=="-rollhero"or DC2=="-rh"local boolean ED2=SubString(DC2,0,9)=="-rickroll"local boolean NoSwitch=DC2=="-noswitch"local boolean EE2=SubString(DC2,0,7)=="-switch"or DC2=="-ok"or DC2=="-no"local boolean Terrain=DC2=="-terrain"or DC2=="-terrain default"or DC2=="-terrain snow"local boolean EF2=DC2=="-tips"local boolean EG2=DC2=="-ii"or DC2=="-iteminfo"local boolean EH2=DC2=="-center"or DC2=="-centeroff"or DC2=="-c"or DC2=="-co"local boolean EZ2=DC2=="-unlock"local boolean EV2=DC2=="-disableselection"or DC2=="-ds"local boolean EW2=DC2=="-enableselection"or DC2=="-es"local boolean EX2=DC2=="-sleep"local boolean EY2=DC2=="-calm"local boolean R4I=DC2=="-st"local boolean EJ2=DC2=="-nosanta"call PMI("EK2",R4O)call PMI("EL2",DD2)call PMI("EM2",DE2)call PMI("EN2",DF2)call PMI("ES2",DG2)call PMI("ET2",DH2)call PMI("ER2",DZ2)call PMI("EP2",DV2)call PMI("EQ2",DW2)call PMI("EU2",DX2)call PMI("F02",DY2)call PMI("FI2",DJ2)call PMI("F12",DK2)call PMI("FO2",DL2)call PMI("F22",DM2)call PMI("F32",DN2)call PMI("F42",DS2)call PMI("F52",DT2)call PMI("F62",DR2)call PMI("F72",DP2)call PMI("F82",DQ2)call PMI("F92",DU2)call PMI("FA2",E02)call PMI("FB2",EI2)call PMI("FC2",E12)call PMI("FD2",EO2)call PMI("FE2",BPO)call PMI("FF2",AH)call PMI("FG2",E22)call PMI("FH2",E32)call PMI("FZ2",E42)call PMI("FV2",E52)call PMI("FW2",E62)call PMI("FY2",E72)call PMI("FJ2",E82)call PMI("FK2",E92)call PMI("FL2",EA2)call PMI("FM2",EB2)call PMI("FN2",EC2)call PMI("FS2",ED2)call PMI("FT2",EE2)call PMI("FR2",EG2)call PMI("FP2",EF2)call PMI("FQ2",EH2)call PMI("FU2",EZ2)call PMI("G02",EV2)call PMI("GI2",EW2)call PMI("G12",EX2)call PMI("GO2",R4I)call PMI("G22",EY2)call PMI("G32",EJ2)endfunction这是一个function,所用是当玩家在聊天窗口打出以上字符时的过程其中最最常用就是
-random了 当玩家打出 -random 或者 -random int agi str 等命令会执行function EK2,那么这个EK2是做什么的呢?搜索function EK2function EK2 takes nothing returns nothinglocal player T4I=GetTriggerPlayer()local trigger tset L2=T4Iif G52()and F3[GetPlayerId(T4I)]==false thenset F3[GetPlayerId(T4I)]=truecall TFI(T4I)call DisplayTimedTextToPlayer(T4I,0,U2,10,GetObjectName())set t=CreateTrigger()call TriggerRegisterTimerEvent(t,6,false)call TriggerAddCondition(t,Condition(function G62))call SavePlayerHandle(LY,(GetHandleId(t)),(54),(T4I))call SaveStr(LY,(GetHandleId(t)),(146),(StringCase(GetEventPlayerChatString(),false)))endifset t=nullendfunction这里已经调用了大量的触发,如果不一一查找下去,我们已经看不懂了。只能看到添加了一个G62的触发 再来试试看看这G62是做什么的,搜索这个functionfunction G62 takes nothing returns booleanlocal trigger t=GetTriggeringTrigger()local integer S5I=GetHandleId(t)local player p=(LoadPlayerHandle(LY,(S5I),(54)))local string G72=(LoadStr(LY,(S5I),(146)))set L2=pif G52()thenset S0[GetPlayerId(p)]=trueif G72=="-random int"thencall RAI(p)call SetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD)-100)elseif G72=="-random str"thencall REI(p)call SetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD)-100)elseif G72=="-random agi"thencall RFI(p)call SetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD)-100)elsecall SetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD)-50)call RGI(p)endifelsecall DisplayTimedTextToPlayer(p,0,U2,10,GetObjectName())endifset t=nullset p=nullreturn falseendfunction这里又出现了RAI REI RGI RFI G52等几个触发,我们也不去管他了,只看不继续触发的内容if G72=="-random int"thencall RAI(p)call SetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD)-100)elseif G72=="-random str"thencall REI(p)call SetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD)-100)elseif G72=="-random agi"thencall RFI(p)call SetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD)-100)elsecall SetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD)-50)call RGI(p)endif这几个if语句还是很好理解的,根据这四个玩家输入的命令,分别扣掉玩家gold100或者50话说我第一次知道还可以仅随机力量或者智力敏捷英雄以上所有代码仅仅为了执行一个工作当玩家敲了-random 时扣除50块钱当然还执行了其他一些工作,不过还有其他的触发,我们已经没有一一深入下去了如果仅仅就这一段进行修改也是可以的比如我们将这里的50 改成0出门 就可以多一个树枝了,对于有些英雄,差距就是出门更早出一个大魔棒了再看一个ifif S0[GetPlayerId(Me)]==true and D0[GetPlayerId(Me)]==false and RZ0[GetPlayerId(Me)]==0 thenset RZ0[GetPlayerId(Me)]=1call SetPlayerState(Me,PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(Me,PLAYER_STATE_RESOURCE_GOLD)-100)endifif S0[GetPlayerId(GH2)]==true and D0[GetPlayerId(GH2)]==false and RZ0[GetPlayerId(GH2)]==0 thenset RZ0[GetPlayerId(GH2)]=1call SetPlayerState(GH2,PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(GH2,PLAYER_STATE_RESOURCE_GOLD)-100)endif这里可以通过修改实现-repick不花钱所以基本上可以说整个jass除了已经定义好的变量十万行代码里基本都是这些无数个function组成的因此有答主说jass是个面向触发的编辑器也是很有道理的一个简单的功能或者技能需要几十个上百个function实现在此向历代dota作者表示由衷的钦佩这里的栗子只解释了如何修改-random和-repick时减少的金钱,更复杂的修改技能等内容,需要大量时间摸索,本人经历有限就不描述了像mimiya这样能实现dota imba的修改的优秀改图者,是消耗了大量的时间精力的-------------------------------------------------------------本人并未修改或研究过任何版本的dota地图,仅以提供的工具解释修改地图的基本过程,修改的程度是极浅的本人并未完整学习过任何计算机编程语言,有专用词语使用上的错误,请诸位码农谅解本人认为在j语言的使用上,dota已经达到一个相当复杂的高度,针对题主的问题,我的直接答案是:仅仅使用自带的worldedit编辑器不可能实现dota,历代作者多年修改必定涉及到代码层,也就是j文件暴雪方面是否有提供给几位作者专门的api不得而知但仅仅worldedit编辑器的话,尽管在安装war3时的用户协议声明会提供技术支持,但是在每次运行世界编辑器时有一个直接的提示!暴雪是不提供任何技术支持的!是的,暴雪爸爸你最屌!
这问题是09问的吗
魔兽自带脚本jass多半都是用那个写的另外,如果题主对魔兽地图创作感兴趣,安利下载YDWE这个软件,其中的功能使你能在不会jass也能完成大部分程序
题主你可以稍微百度一下地图编辑器新手教学就知道了。
DOTA 的图没有使用任何奇怪的技术,代码是魔兽的脚本语言 JASS 写的。DOTA 这图很牛叉,几乎把所有的魔兽技能都用代码重制了,而且为了比如满物品栏合成这样的 feature,所有的物品都有若干个副本。
看到这个问题想到了我高中的岁月啊,像DotA这种显然是要自己写代码了,魔兽自己有一种语言叫做jass,是一种四不像语言。因为虽然理论上你可以在触发器里面完成所有工作但是触发器的效率远没有jass高
用war3地图编辑器开发Dota分为很多部分,单位属性技能属性等一般用物体编辑器,还有包括触发编辑器,声音编辑器,AI编辑器,地形编辑器等部分。回到题主的问题上,我把只要用编辑器理解为不用写代码,如果是开发类Dota地图的话,是有可能的,触发编辑器通过简单的图形化事件编程(event-condition-action)可以自动生成需要的代码,事实上大部分人都是这样开头的。回到Dota上,Dota作者冰蛙使用了编辑器提供的更高效的脚本语言jass,当然编辑器肯定要提供api的(jass语法类似vb,不过不是面向对象的),代码量超过了9W行,具体大小(指拆图出来的war3map.j文件)在2.7m左右(我拆的图是6.80版本的,包括定义的全局变量)
就是简单的脚本语言+所见即所得的编辑~不过里面的API很坑爹~原始API封装了就变成带有那个BI还是什么开头的API,带有那个啥字样的再封装就是Trigger效率极其低下,如果纯用trigger做 DOTA几乎随时崩,魔兽地图大小就只允许那么1,5M还是多少哦 忘了。然后一张地图的代码只存在了script.txt文件里 ,非常不利于协同开发和调试。里面是事件机制的,给单位注册事件。写代码一不注意就要memory leak!恶心!另外补充下 DOTA就 5K左右的代码~ ICE FROG自己写了一个引用计数的东西来管理内存,然后你能看到的就是一堆触发!可以总结成 :面向触发编程~
大部分可视内容是直接通过war3地图编辑器实现,一部分核心内容是代码实现,据说是C语言网上放出过一个解密版的DOTA地图可以研究一下
已有帐号?
无法登录?
社交帐号登录

我要回帖

更多关于 魔兽编辑器触发器汉化 的文章

 

随机推荐