【巨坑慎入】DOTA2 RPG制作教程

大家好,我是来自AMHC的Xavier,可能有些人知道我,可能有些人不知道,但是知道不知道,这并不重要。重要的是,我希望我所讲的这些,能够起到抛砖引玉的作用,能够让更多的人进入到DOTA2 RPG的研究工作中去。
可以毫不夸张的说,离开了WE,魔兽争霸不可能活到现在。同时,我很高兴我们能看到V社在RPG方面的努力,而在我心目中,在不远的将来,RPG对于DOTA2的意义,甚至可能会超越DOTA2这个游戏本身。
在我写这个之前,有人跟我们说,要注意保护自己的知识产权啊,现在V社不是还没对地图加密么?
我是这么回答的:保护个鬼,不能抛弃门户之见,不能跟随时代的潮流,只是自己闭门造车,能有什么作为,不想着把蛋糕做大的后果只能是所有人一起饿死。我们现在要做的,就是尽可能地,把自己所知道的一切,在第一时间分享出去,让更多的人能够喜欢上RPG这个内容。




废话就不多说了,本教程将会分为N章书写:


第一章 迈出第一步
与其感慨路难行,不如马上出发。

楼主 残枫之殇  发布于 2014-01-20 22:26:00 +0800 CST  
第一章 迈出第一步
与其感慨路难行,不如马上出发。
但是也有话说,磨刀不误砍柴工,就让我们先做一下准备工作吧。
为了完成第一卷的内容,我们要做的准备工作其实是很简单的:
1、找到你的ADDONS文件夹:他一般在steamapps/common/dota2 beta/dota这个文件夹中,之后,在里面找到自己的frostivus文件夹吧,本卷教程都将会以这个文件夹里面的东西为例。


2、找一个趁手的,能编辑txt文档的东西,当然,系统自带的记事本就够了,如果觉得不趁手不够高大上的话,那就去下载一个notepad++,或者更洋气点弄一个eclipse也行。当然了,有句话说得好,真正高端的程序猿向来都是只用记事本编程的,记事本才是最高大上的IDE,哈哈。
3、为了节省一些工作,请退回到dota2beta/dota这个文件夹,之后打开cfg文件夹,并右键创建一个新建文本文档.txt,之后把它改名为frostivus.cfg,并在里面输入这些内容:


dota_local_custom_enable"1"
dota_local_custom_game"holdout"
dota_local_custom_map"dota"
dota_force_gamemode"15"
update_addon_paths
dota_wait_for_players_to_load"0"
dota_wait_for_players_to_load_timeout"10"
map"frostivus"

之后,打开自己的dota2,在控制台输入:exec frostivus.cfg,如果你的dota2黑屏卡死了!少年啊!有点耐心好不好!多等一会…如果你看到了选人界面。
那么恭喜你,你已经完成了所有的准备工作。

第二章 令人欣喜的创造
正所谓,每次迈出第一步总是最难的,那,就让我们把这第一步弄得简单一些吧。
1、编辑你的addon信息:
Addoninfo(addon信息),可以在frostivus这个文件夹的根目录中找到(为了方便以后描述,我将会把dota2beta/dota/addons/frostivus这个文件夹,成为Frostivus根目录,而把dota2beta/dota这个文件夹,称为dota根目录。)
打开之后,我们可以发现里面定义了一些东西:


816:dota2的app id
addontitle:插件的标题
Addonversion: 插件的版本
addontagline:插件简介
addonauthor:插件的作者
addonSteamGroupName:插件的玩家组
addonauthorSteamID:插件作者的steam id
addonContent_Campaign:插件是否提供多个地图
addonURL0:插件的网站
addonDescription:插件介绍

这些东西有什么用?这些东西在目前的dota2中,一!点!用!都!没!有!
这个东西是做什么用的呢? 请大家注意这一句话:
short descriptionthat appears in the Add-on list screen…这个是在插件列表里面显示的一个简介。
也就是说,这个东西,将会和同样在frostivus文件夹中的addonimage
一起,成为今后游戏大厅中,向玩家展示的地图列表里面显示出来的内容。
SO,我们的第一次编辑,就从这里开始吧:


OK,如此这般,编辑完成,别忘记按CTRL+ASS保存您的工作哟。
只是改这个是不是太简单了?
那就让我们多做一些吧!
大家是否还记得frostivus的时候,有一次更新,大牛啊,女王啊,什么的,就突然来加入了保护骷髅王的任务中来了?
接下来,我们就来看看要做到这个到底有多容易! 也揭穿下V社到底有多偷懒。
请大家打开frostivus根目录/scripts/npc/herolist.txt这个文件夹。


接下来,就让我们给冥魂之夜加个新英雄吧!
在最后一行后面回车,加入这么一行内容:"npc_dota_hero_invoker" "1",按CTRL+S保存一下~


之后,让我们检验下效果,和之前一样,在控制台输入exec frostivus.cfg。
你就会看到,我们已经给冥魂之夜加入了一个新英雄:卡尔。


好的! 迈出第一步到此结束。
在看完这一部分之后,我希望大家可以打开frostivus根目录,把每个文件夹都打开看看,把每个文件都打开瞄一眼~为今后的教程打好基础!

楼主 残枫之殇  发布于 2014-01-20 22:32:00 +0800 CST  
第三章 进一步的创意


只是把卡尔弄出来了,是不是太简单了点? 咕~~(╯﹏╰)b,确实是比较简单,那就来点难的吧,接下来,我们要给这个卡尔弄几个自定义技能。
为了迎合frostivus塔防的主题,我们决定,要把卡尔的技能做出如下改变:
1、卡尔现在不太需要用球什么的来切技能了。他现在拥有六个技能:阳炎冲击,熔炉精灵,灵动迅捷,寒冰之墙,声波爆轰,群体急速冷却,六个技能。
2、在frostivus中,阳炎冲击的范围增加到500
3、在frostivus中,卡尔一次能召唤六个火人。
3、在frostivus中,灵动迅捷能使目标附带吸血效果。


OK,接下来,就让我们开始制作卡尔的这六个自定义技能吧!
我们先来看看卡尔的原版天火:


接下来,我们要制作自己的天火,(如果真的有去看frostivus文件夹的应该就能知道哪个是自定义的文件了吧?)
如果没有的话,那么,就请打开frostivus根目录/scripts/npc/npc_abilities_custom.txt这个文件。
打开之后,可以看到,里面定义了一大堆的自定义技能:


我们把我们的技能试着加在最前面,依葫芦画瓢:


我们的效果是让天火技能的范围变成500:
额,让我先把代码都打出来给大家:





当然,这里我并不只是改了范围为500而已,改动还有不少。
接下来我来一个一个解释改动内容:
BaseClass:是一个自定义技能可以说是最重要内容,如果缺少了他,在载入地图的时候,便会报警:attempt to create unkown...之后你的dota2就会闪退。这时候可能会有一些之前玩WE,或者其他同学会问,如果我想弄一个整个DOTA都没出现过的技能怎么办?对于这个问题,V社也早 有解决方案,他给出了一个名叫ability_datadriven的技能做模板给大家用当然,这是后话,关于这个神奇的BassClass,如果接触过一些面向对象编程的同学,可能会知道,这就是告诉引擎,我们的invoker_sun_strike_holdout,其实就是基于invoker_sun_strike这个技能的,如果有一些东西我们没有特别定义,那么,他就会继承invoker_sun_strike的所有属性,例如,技能快捷键,技能图标什么的。
AbilityBehavior:这个定义了技能的属性,这个属性包含了很多东西,他和AbilityType,AbilityunitTargetType这些东西,都在这个图里面说明了:


AbilityBehavior,可以重复定义,这里就是定义了天火是一个对点(点地板)释放的技能,是个AOE,同时无视施法后摇。小强从12Ban变成冷板凳,就只不过是穿刺删掉了AbilityBehavior里面DOTA_ABILITY_BEHAVIOR_UNIT_TARGET这个属性了而已。
之后CastRange施法距离,我这里改成了2000.AbilityCooldown改成了8,这些都很好理解。
AbilitySpecial里面则是定义了这个技能的一些参数,这些参数,都是那些会显示在英雄技能提示(就是你鼠标移上去之后会出现的那个技能面板)下方的参数。
这里改动的内容:
area_of_effect:AOE范围,改成了500
delay:延迟,改成0,马上生效(这里需要注意的是数据类型,要求浮点数你打了一个整形上去可能没事,但是如果要是要求整形你打个了小数上去会发生什么呢?欢迎有兴趣的同学研究研究)
damage:伤害,300 400 500 600(注意,本来的天火是一个七级的技能,这里这么定义,就是把这个天火变成了一个最多四级的技能了)
vision_distance:视野距离。vision_duration视野持续时间。


OK,编辑好了这个技能,怎么看呢?
那就让我们马上编辑下卡尔这个英雄吧:
打开frostivus根目录/scripts/npc/npc_heros_custom:
定义一下卡尔:


一样是依葫芦画瓢~依然是继承各种invoker的属性,1技能变成我们自定义的天火!


保存一下,进游戏看一眼吧!


你会看到,你的卡尔,其他都没变,1技能变成了天火~ 而且还是施法范围那么大的天火!


OK,其他技能的实现,给我一点时间~ 我把他们都弄出来,给大家作参考~

楼主 残枫之殇  发布于 2014-01-20 23:10:00 +0800 CST  
OK…老毛病了… 写代码老是看不清花括号,耽搁了点时间:


让我们来看看这个叫做召唤六个小怪物的技能吧~(注意下这个自定义的技能图标哟~)


借着这个自定义技能的机会,说说在DOTA2里面怎么自定义一个技能的图标:
1、用画图等等工具打开任何一张现有图标文件——你可以在frostivus/resource/flash3/images/spellicons里面找到他们。
2、画出你想要的图标。
3、再次以PNG的格式保存到frostivus/resource/flash3/images/spellicons这个文件夹中。
之后,只要像我这样:
"invoker_forge_spirit_holdout"
{
"AbilityBehavior""DOTA_ABILITY_BEHAVIOR_NO_TARGET|DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL"

"BaseClass""ability_datadriven" //如上文所说,这里使用的就是ability_datadriven作为BaseClass,这个很好用
"AbilityTextureName""test1" //只要这么一定义,技能图标就是你的名叫test1的png文件咯,是不是很简单方便?
"AbilityCooldown""1.0"
"AbilityManaCost""0"


"OnSpellStart" //在技能开始的时候
{
"SpawnUnit" //召唤单位
{
"UnitName""npc_dota_invoker_forged_spirit" //单位名称
"UnitCount""6" //单位数量
"SpawnRadius""128" //单位召唤范围
}
}//这一小段便是召唤6个小火人的代码咯~其实只要有点英文基础,应该就能看懂他们吧~就算没英文基础,看了我的翻译,应该也能看懂到底是什么吧?
}

楼主 残枫之殇  发布于 2014-01-20 23:40:00 +0800 CST  
OK,今天(14年1月20日)就到这里了!大家晚安~
剩下的坑明天继续填~
希望大家多收藏多关注!


密集恐惧症患者们! 受死吧!! 哇哈哈哈哈!!!!

楼主 残枫之殇  发布于 2014-01-20 23:46:00 +0800 CST  
第四章: 让一切有声有色~
不知道昨天大家有没有真的把卡尔这个英雄的六个技能都完成了呢?
就像是这样:


图标的创意神马的,我才不想黑什么影魔呢。(论秀饰品的10000种方法!)


之后,让大家试用一下自己的召唤火人的技能,是不是总觉得少了点什么?你就按一下技能,然后英雄就躺地上了,之后两个火人出来了,一点都不高端大气上档次,对吧?


因此,我们之后要想着,怎么给这个技能,加一些
施法动作、
特效、还有
音效呢?

楼主 残枫之殇  发布于 2014-01-21 14:17:00 +0800 CST  
果然是帖子太技术=没人看的节奏么……

楼主 残枫之殇  发布于 2014-01-21 14:46:00 +0800 CST  
接下来这些都将会基于我们昨天制作的——Invoker_forge_spirit_holdout这个技能
1、施法动作:
怎么给技能加一个施法动作? 很简单:


在我们的技能里面加上这么一行:"AbilityCastAnimation" "动画名称",就可以给技能施法加上一个动画了。他的位置呢,是和BaseClass同一级别的,就是在BaseClass下面一回车,打上这段,就可以了。


2、技能特效:
假设,我们要让卡尔释放这个技能的时候,身上腾起一股火焰,额,火焰么~ 小骷髅隐身的时候的火焰就很漂亮~低调的华丽~
首先,我们先找到小骷髅的粒子特效路径:particles/units/heroes/hero_clinkz.pcf
并且把他预载到我们的技能中:
"precache" //写在和BaseClass同一级
{
"particlefile" "particles/units/heroes/hero_clinkz.pcf"
}
在这个pcf文件中,有个小骷髅的隐身特效:
clinkz_windwalk,也就是隐身的特效~ 他里面包含了clinkz_windwalk_ember升起的那团火焰,clinkz_windwalk_smoke,四周四散的烟雾等等,不过我们不管他,我们要引用的就只有小骷髅的隐身这个整体特效而已。


在onSpellStart里面加上FireEffect:目标——施法者,特效名——克林克姿——疾风步,特效点——原点。
OK,之后开游戏看看特效:

(截图总是没法太好表现动画~ 做GIF又太浪费时间,大家注意卡尔四周的烟雾和身上腾起的火焰就好了……)


3、技能音效:
在DOTA2里面做技能音效也是很简单的。
首先,准备好你的音效文件,当然,你可以自己录音,或者随便网上找一段你喜欢的音乐什么的~~都可以~
这里为了简便,我就使用官方的sound_vo_english里面DP开大的那个:come,my beautiful ladies,come!(来吧,我亲爱的姐妹们,来吧!XD)做一下马甲吧~

把你的音效文件拷贝到你的frostivus根目录/sound里面去吧:


之后,我们在frostivus根目录/scripts/game_sound/下面新建一个新的文本文档,并命名为:ability_forge_spirit_holdout,并在里面输入如下内容:


"Ability.SummonForgeSpirit"
{
"channel""CHAN_STATIC"
"volume""1.0"
"soundlevel" "SNDLVL_81dB"
"pitch""90, 100"
"rndwave"
{
"mp3""dpro_exorcism_01.mp3"
"mp3""dpro_exorcism_02.mp3"
"mp3""dpro_exorcism_03.mp3"
"mp3""dpro_exorcism_04.mp3"
"mp3""dpro_exorcism_05.mp3"
"mp3""dpro_exorcism_06.mp3"
"mp3""dpro_exorcism_07.mp3"
}
}

注意这个rndwave的用法哟~ 他是很好用的~
之后回到我们的npc_aility_custom,在onSpellStart里面加入这段内容


当然,在上面我们所说,预载粒子特效的地方,也需要预载声音文件:
"precache"
{
"particlefile""particles/units/heroes/hero_clinkz.pcf" //粒子文件
"soundfile""scripts/game_sounds/ability_forge_spirit_holdout.txt" //声音文件
}


OK,保存下你的ability_forge_spirit_holdout.txt,npc_abilities_custom,打开你的DOTA2,输入exec frostivus.cfg,使用下召唤熔炉精灵的技能,看看效果如何吧!

楼主 残枫之殇  发布于 2014-01-21 16:44:00 +0800 CST  
放一个最后完成的Forge_spirit_holdout给大家作参考:


看不清的话请看大图~

楼主 残枫之殇  发布于 2014-01-21 16:46:00 +0800 CST  
到这里,如果有细心的同学的话,应该会发现:
我们早换出来的小火人,其实是一点攻击力都没有的:


查看下小火人的源代码,也可以发现,小火人确实属于没攻击的:AttackDamageMin/AttackDamageMax攻击下限/上限都是0

(这是因为小火人的攻击力啊,攻击距离啊,都要受到冰火两个球的技能等级影响的嘛,作为基础的小火人,没攻击力也是对的。)


因此,我们需要对小火人进行下修改,这就涉及到DOTA2的单位编辑。
做下任务:
1、为了让火人更NB,我们想让他的普通攻击带有敌法师四级消蓝的效果,并且拥有1000的攻击距离和1000点的攻击力。
2、为了满足弱受卡尔的生♂理♂需♂求,我们希望召唤出来的小火人可以随时变身成为真男人SVEN。

楼主 残枫之殇  发布于 2014-01-21 20:06:00 +0800 CST  
OK,说干就干:
我们首先打开DOTA2的自定义单位文件:
frostivus根目录\scripts\npc\npc_units_custom.txt
然后我们编辑一个新单位:
npc_dota_invoker_forged_spirit_holdout
最后编辑出来的单位应该是这个样子的(基本原则,打开官方的npc_unit.txt,依葫芦画瓢):


"npc_dota_invoker_forged_spirit_holdout"
{
"BaseClass""npc_dota_invoker_forged_spirit"//设定单位基于卡尔的熔炉精灵
"Model""models/heroes/invoker/forge_spirit.mdl"// Model.
"SoundSet""Creep_Good_Range"// Name of sound set.
"ModelScale""1.0"
"Level""3"

"Ability1""forge_spirit_mana_break"// Ability 1.//技能1为forge_spirit_mana_break
"Ability2""what_does_invoker_truely_need"// Ability 2.//技能2为what_does_invoker_truely_need
// Attack
//----------------------------------------------------------------
"AttackCapabilities""DOTA_UNIT_CAP_RANGED_ATTACK"
"AttackDamageMin""1000"// Damage range min.//攻击下限1000
"AttackDamageMax""1000"// Damage range max..//攻击上限1000
"AttackDamageType""DAMAGE_TYPE_ArmorPhysical"
"AttackRate""1.5"// Speed of attack.
"AttackAnimationPoint""0.2"// Normalized time in animation cycle to attack.
"AttackAcquisitionRange""1000"// Range within a target can be acquired.//攻击保留1000
"AttackRange""1000"// Range within a target can be attacked.//攻击距离1000

// Movement
//----------------------------------------------------------------
"MovementCapabilities""DOTA_UNIT_CAP_MOVE_GROUND"// Type of locomotion - ground, air
"MovementSpeed""260"// Speed
"MovementTurnRate""0.5"// Turning rate.
}//以上为自定义的熔炉精灵的代码
注意到这里,我们给这个熔炉精灵自定义了两个技能,技能1、熔炉精灵消蓝2、卡尔真正需要的是什么?
我们自然需要到我们之前编辑过的Npc_abilities_custom里面去定义这两个技能:




对于这两个技能,我就不多做说明了,因为只要前面有认真看的同学,做出这两个技能都很容易。
哦,唯一需要说明以下的就是
"SpawnUnit"产生单位,之前说过了 和"RemoveUnit"移除单位。
通过添加一个单位同时移除一个单位,这个简单的小伎俩,把熔炉精灵变成了卡尔真♂正♂需♂要的SVEN:
最后完成图:




这个SVEN就是通过熔炉精灵“变出来”的了。


OK,关于英雄、单位和技能的编辑,我就说到这里了。
其实对于技能编辑,有非常多更为复杂的使用方法,建议大家有兴趣的,可以多去研究npc_abilities_custom.txt这个文件,特别是那些带有modifiers的内容。
而对于这个modifiers,我将会在第二部的时候讲。

楼主 残枫之殇  发布于 2014-01-21 20:21:00 +0800 CST  
OK,第一部的教程就到此结束吧,作为一个入门教程,个人觉得这样向大家介绍,可能不会那么难理解。
同时,个人表达能力有限,个别问题要是不理解的,也欢迎向我提问。
也欢迎大家加入AMHC啊哈利姆魔法隐修议会:283355127
当然了,不是研究的技术党也欢迎加入~ 现在群里面一大把每天玩RPG玩的很HIGH的人…

楼主 残枫之殇  发布于 2014-01-21 20:25:00 +0800 CST  
这个帖子已经很久远了!
现在制作的方式和当初不太一样了~
请大家不要再使用这个帖子的方法制作!

楼主 残枫之殇  发布于 2014-07-25 18:51:00 +0800 CST  

楼主:残枫之殇

字数:9054

发表时间:2014-01-21 06:26:00 +0800 CST

更新时间:2016-03-10 17:06:32 +0800 CST

评论数:454条评论

帖子来源:百度贴吧  访问原帖

 

热门帖子

随机列表

大家在看