您尚未登录,请登录后浏览更多内容! 登录 | 注册
 找回密码
 注册
查看: 67709|回复: 71

[ 教程 ] dota2地图编辑器进阶教程第三讲—代码

[复制链接]

8

主题

0

好友

324

积分

大杀特杀

Rank: 2

帖子
19
金币
137
胜场
0
灵魂
123
在线时间
10 小时
发表于 2015-10-28 23:51:45 |显示全部楼层
    想必对于各位初入门的作者们来说,最关心的既不是地形,也不是音效,或者别的什么,而是程序方面吧,那么本篇将对程序部分进行一定的教学。

    d2wt的程序部分涵盖到了你游戏的方方面面,v社的官方是这么定义的:地图的脚本代码定义了游戏规则,这个游戏规则就包含你的单位,物品,技能,以及所有的事件(对于曾经war3的作者来说也可称为触发器)。

    首先我要强调的是,也是之前说过的,d2wt的编程语言为lualua之所以能被称为编程语言,是因为......好吧其实我也不知道,但是其非常优越的易扩展性,简单小巧并且高效率,就足以让它活跃在各个领域,当然我所知道的也就是游戏领域了,但是你们或许想不到,wow功能极为强大的宏就是lua,还有你们每个人手机上的手游的大部分可见性功能均为lua编写,以及很多端游的部分功能,均可以使用lua编辑更新,它的强大功能暂不赘述,后面会提供lua的学习文档,前十章学完即可让你顺利的在d2wt里实现你的想法(本人只用了6个小时将前十章学完,即可上手),下面开始正文。
上文也说过,d2wt的程序部分分为单位,物品,技能,事件,那么将一一讲之:

单位:

    V社为大家在制作单位时提供了很大的方便,使用kvKeysValue(键值)),大家可以把kv理解成一张excel表,相信excel大家都不陌生,对,它就是一张表,作者们需要做的就是把对应的值填进去即可,很难吗?我都填了十几年的表了,一点都不难对不对~介绍下这个表:
   
    无论是英雄也或者是单位,都需要KV表,只不过不在一个文本文档里面而已,分别是npc_heroes_customnpc_units_custom,但是你只需要填你想更改的值,而不是必须全部都要填写,就像这样:



  1. "npc_dota_hero_juggernaut"
  2.         {
  3.                 "override_hero"                                "npc_dota_hero_juggernaut"
  4.                 "AttackCapabilities"                        "DOTA_UNIT_CAP_NO_ATTACK"
  5.                 "Ability1"                                                "juggernaut_slash"
  6.                 "Ability2"                                                "juggernaut_cleave"
  7.                 "Ability3"                                                ""
  8.                 "Ability4"                                                ""
  9.                 "AttackDamageMin"                                "0"
  10.                 "AttackDamageMax"                                "0"
  11.                 "AttackRate"                                        "1000"
  12.                 "AttackAnimationPoint"                "1000"
  13.                 "MovementTurnRate"                        "4.0"
  14.                 "StatusHealthRegen"                        "1.0"
  15.                 "StatusManaRegen"                                "1.0"
  16.                 "VisionDaytimeRange"                        "1200"
  17.                 "VisionNighttimeRange"                "700"
  18.         }
复制代码
对了,大部分的01都是是否的意思,0为否,1为是


技能:

    和上面的单位kv设置其实差不多,至于区别,大家可以在官方WIKI上查看

    当然你也可以制作lua技能,lua技能会更为有趣好玩,因为它不是固定填表了,只是需要发挥你的想象力

物品:

    其实我想说物品也是填表,真的区别也不大,不同的是有些常量不同以及填写的文件不同(npc_items_custom),在前面的内容写完后,后面填写键值的时候填上你需要定义的即可,下面附上物品常量表:
   
再来一发栗子:

  1. "item_orb_of_passage"
  2.         {
  3.                 "BaseClass"                                        "item_branches"
  4.                 "AbilityTextureName"                        "item_gem"
  5.                 "AbilityBehavior"                                "DOTA_ABILITY_BEHAVIOR_PASSIVE"
  6.                 "Model"                                                "models/props_gameplay/gem01.vmdl"
  7.                 "ItemCost"                                                "0"
  8.                 "ItemShopTags"                                ""
  9.                 "ItemQuality"                                        "component"
  10.                 "ItemAliases"                                        ""
  11.                 "ItemPurchasable"                                "0"
  12.                 "ItemSellable"                                "0"
  13.                 "ItemShareability"                        "ITEM_FULLY_SHAREABLE"
  14.                 "AbilitySpecial"
  15.                 {
  16.                         "01"
  17.                         {
  18.                                 "var_type"                                "FIELD_INTEGER"
  19.                                 "bonus_all_stats"                "0"
  20.                         }
  21.                 }
  22.         }
复制代码



触发器(事件):

    请各位在上文贴的官方wiki链接里自行食用,这里只举个基本栗子供大家参考:
  1. function CRPGExample:GrantItemDrop( hDeadUnit )
  2.         if hDeadUnit.itemTable == nil then
  3.                 return
  4.         end
  5.         local flMaxHeight = RandomFloat( 300, 450 )
  6.         if RandomFloat( 0, 1 ) > 0.6 then
  7.                 local sItemName = GetRandomElement( hDeadUnit.itemTable )
  8.         self:LaunchWorldItemFromUnit(sItemName,flMaxHeight,0.5,hDeadUnit )
  9.         end
  10. end
复制代码
    这个例子的意思是定义一个函数xxx,如果某个单位没死则返回,如果死亡了,则随机一个数,如果这个数字大于0.6,则掉落某个物品,对,就是这样。

    看到这里你也许会茫然,因为你什么都还不知道,我便这么简单的讲完了,这里我只能很抱歉的说明一下,学过程序或者lua的作者们应该能看懂上面这些例子,这些只是简单的实现某个功能,而如何实现这些功能则需要大量调用官方api,至于api在哪,仍在上文贴的wiki链接中,所以如果你想实现酷炫的技能或者叼炸天的单位什么的,请去背所有的相关api,或者在做这些的时候打开那个网站,去找你需要的东西。

    至于程序这方面的东西,如果真的要放开讲,我讲几天几夜也讲不完,最重要的是设计核心,而设计核心存在于你的作图灵感中,我无法获取,当然我也不可能把自己还没上线的地图的设计核心讲出来,所以如果需要熟悉这一点,只能自己去摸索,有什么问题欢迎提问,我可以抽时间解答,我曾经有一名老师这样讲过,学习最快的办法是问,你不问不实践只看书什么都不可能会。

    lua学习文档
    自动补全d2wt常量的lua编辑器

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

已有 1 人评分金币 智力 灵魂 收起 理由
hot43 + 30 + 30 + 30 很给力!点赞好评!

总评分: 金币 + 30  智力 + 30  灵魂 + 30   查看全部评分

回复

使用道具 举报

0

主题

2

好友

4

积分

第一滴血

Rank: 1

帖子
2
金币
2
胜场
0
灵魂
2
在线时间
2 小时
发表于 2015-12-15 10:14:04 |显示全部楼层
好东西,支持
回复

使用道具 举报

0

主题

0

好友

8

积分

第一滴血

Rank: 1

帖子
6
金币
1
胜场
0
灵魂
6
在线时间
1 小时
发表于 2015-12-28 14:04:30 |显示全部楼层
咋没有金币 回复试试看
回复

使用道具 举报

0

主题

0

好友

8

积分

第一滴血

Rank: 1

帖子
6
金币
1
胜场
0
灵魂
6
在线时间
1 小时
发表于 2015-12-28 14:04:40 |显示全部楼层

咋没有金币 回复试试看 为了下载
回复

使用道具 举报

0

主题

0

好友

8

积分

第一滴血

Rank: 1

帖子
6
金币
1
胜场
0
灵魂
6
在线时间
1 小时
发表于 2015-12-28 14:04:51 |显示全部楼层
为了下载 刷屏见谅
回复

使用道具 举报

0

主题

0

好友

8

积分

第一滴血

Rank: 1

帖子
6
金币
1
胜场
0
灵魂
6
在线时间
1 小时
发表于 2015-12-28 14:04:54 |显示全部楼层
为了下载 刷屏见谅
回复

使用道具 举报

0

主题

0

好友

8

积分

第一滴血

Rank: 1

帖子
6
金币
1
胜场
0
灵魂
6
在线时间
1 小时
发表于 2015-12-28 14:05:04 |显示全部楼层
为了下载 刷屏见谅a
回复

使用道具 举报

0

主题

0

好友

8

积分

第一滴血

Rank: 1

帖子
6
金币
1
胜场
0
灵魂
6
在线时间
1 小时
发表于 2015-12-28 14:07:44 |显示全部楼层
为了下载 刷屏见
回复

使用道具 举报

0

主题

0

好友

23

积分

第一滴血

Rank: 1

帖子
8
金币
28
胜场
2
灵魂
6
在线时间
0 小时
发表于 2016-3-13 17:39:31 |显示全部楼层
真是好人啊~~
回复

使用道具 举报

0

主题

0

好友

17

积分

第一滴血

Rank: 1

帖子
2
金币
7
胜场
0
灵魂
2
在线时间
0 小时
发表于 2016-3-17 11:49:45 |显示全部楼层
谢谢楼主分享~
回复

使用道具 举报

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

发布主题 !fastreply! !return_list! 联系我们 官方QQ群

GMT+8, 2020-6-7 02:22 , Processed in 0.127445 second(s), 19 queries .

© 2001-2011 Powered by Discuz! X2.5

回顶部