標籤:

如何製作dota2自定義地圖?


---------------------(2015年6月30日更新)---------------------------------------

Valve已在2015年6月更新了DOTA2reborn,舊版本的D2WT已失效,想作圖的朋友需要安裝Dota2Reborn(Dota2重生)並且運行《Dota 2 Reborn Tools》

(32位系統暫時看不見)

---------------------(2015年5月13日更新)--------------------------------------

有沒有英語好時間多熱情可愛努力勤快的兄弟抬一手啊,私信我,好多教程需要翻譯啊

----------------------------------------------------------------------------------------------

做地圖當然是要用Dota2開發者工具包《dota2 workshop tools(以下簡稱 D2WT)》

如果你打算第一時間就嘗試進行DOTA2自定義遊戲製作,首先你要確定一下自己的開發環境是否符合要求。

官方系統配置要求是:GPU 至少支持 DX11

內存最好要8G(內存8G 非必須 但如果沒有足夠的內存 在使用編輯器時會頻繁死機)

在現階段要成為一名地圖開發者,需要有一定的英文水平,因為整個編輯器界面是英文的。

同時還得有一定的代碼編寫能力,目前沒有一個GUI化的物體編輯器和觸發編輯器。編寫單位、技能、遊戲規則等等數據時,要使用LUA腳本來編輯。

遊戲界面內的HUD,支持使用Flash的Action Script。所以如果你會用AS3.0,在經過一段時間的學習和研究,就可以製作自定義地圖裡的HUD。(2015年6月起,AS已被Valve拋棄,你需要選擇使用Panorama來製作HUD,這是一個CSS+HTML+JS的UI製作編譯系統)

沒有基礎,不代表不能做,只是上手會很慢。

如果擁有以下幾點,你的上手速度會比大部分人更快:

1、熱情和時間,這個最重要,有了它,就意味著你可以學會任何東西。

2、如果你會任何版本的C語言,經過很短時間的學習,就可以掌握LUA的寫法(目前自定義地圖編程主要是LUA)

3、如果你會CsshtmlJava Script,那麼就可以編寫自定義地圖的HUD。

4、任何人經過一段時間的學習,都可以掌握VALVE KV文件的寫法[下面附上單位的寫法範例],這樣你就可以編輯英雄、單位、技能和物品。(沒有單位、技能編輯工具界面,請用文本文檔來寫KV文件吧~)

5、有CS系列地圖編輯器(hammer)使用經驗。D2WT的地形界面和Hammer很類似,擁有Hammer經驗可以更快的學會地形編輯。

6、如果你有建模的基礎,那麼你製作一些房屋橋樑將會很容易(如圖

丟出重磅的官方文檔(這個文檔大部分頁面已經由AMHC團隊漢化成中文):

Dota 2 Workshop Tools:zh-cn

這個幾乎是必讀的,對了如果想看英文原版可以在右上的國旗按鈕那兒切換

1、下載Dota2開發者工具包《dota2 workshop tools》 以下簡稱 d2wt

安裝方法啥啥的很簡單,可以看這個帖子:

Dota 2自定義遊戲工具安裝和開啟遊戲的方法|dota2 rpg AMHC

(現在只需要更新了DOTA2Reborn,並且是64位系統,就自動擁有編輯器,以上方法已過期)

2、先摸索地形編輯,嗯,這玩意兒嘛,就是摸著摸著就會用了,你可以看看官方文檔里關於地形製作的一些快捷鍵啊什麼的,摸索個三五天大概能拼湊一個地形出來了

---------------------(2015年5月13日更新)--------------------------------------

地形方面的進階可以看這篇教程(2015年5月13日更新)

DOTA2 地形編輯器高級教學(第一部分)|dota2 rpg AMHC -

----------------------------------------------------------------------------------------------

3、KV文件,這個是一個簡單的樹狀結構,來存儲包含了一組組及其對應的嵌套數據。

KeysValue的作用主要是英雄、單位、技能和物品等等的編寫,在Scripts的npc文件夾下

---------------------(2015年5月13日更新)--------------------------------------

單位的創建

----------------------------------------------------------------------------------------------

你可以參照D2WT里的兩個範例地圖來編寫。

一定要參考,不然你會覺得無從下手。

範例在dota 2 betadota_ugc文件夾里可以找到。

單位大概是這麼寫的:(2015年6月30日更新)

"DOTAUnits"
{
// 這個單位包括了npc_units_custom中【所有的】鍵值
// 一般來說的是用不到全部的鍵值,所以這個模板僅供參考,你可以注釋掉不用的部分

"npc_dota_base_units"//內部名稱
{
// 基礎設置
//----------------------------------------------------------------
"BaseClass" "npc_dota_base" // 單位繼承的類,是必須填寫的,常用的有:生物npc_dota_creature、建築npc_dota_building、計時器npc_dota_thinker
"Level" "1" // 單位等級
"Model" "models/development/invisiblebox.mdl" // 模型文件
"ModelScale" "0.8" // 模型大小,
"MinimapIcon" "minimap_candybucket" // 小地圖圖標
"MinimapIconSize" "1000" // 小地圖圖標尺寸
"UnitLabel" "healing_ward" // 單位標籤,可以是任何名字字元,使用Lua代碼GetUnitLabel()可以獲取到這裡的鍵值
"ConsideredHero" "1" // 作為英雄,提供英雄風格的生命值條。"DOTA_UNIT_TARGET_FLAG_NOT_CREEP_HERO" 的數據驅動標記
"IsAncient" "0" // 是否為遠古生物,0代表不是。"DOTA_UNIT_TARGET_FLAG_NOT_ANCIENTS"的數據驅動標記
"IsNeutralUnitType" "0" // 是否是中立單位,相關Lua函數: IsNeutralUnitType()
"CanBeDominated" "1" // 可否被支配
"AutoAttacksByDefault" "1" // 是否自動攻擊,0為不自動攻擊
"ShouldDoFlyHeightVisual" "0" // 飛行高度,傳說中沒用
"WakesNeutrals" "1" // 喚醒中立生物
"SelectionGroup" "string" // 選擇組,使得該類型的所有單位可以使用tab成組切換
"SelectOnSpawn" "1" // 出生選擇,強制單位加入英雄的選擇中,即使選項中的"自動選擇召喚單位"是關閉的。被用在死靈飛龍的小龍上
"IgnoreAddSummonedToSelection" "1" // 忽略自動選擇召喚單位,設置為1時,使得"自動選擇召喚單位" 忽略這個單位,用於元素分離

// 聲音 SoundSet 加上正確的 GameSoundsFile 可以提供攻擊和腳步聲等音效
// SoundSet 字元串是每個英雄聲音的第一部分,可以在Dota2聲音編輯器中查找到
// IdleSoundLoop 將會在單位產生後持續被播放,某些英雄並沒有定義這個循環聲音,但是如果你在這裡增加一個不可循環聲音,則可以作為誕生音效使用
"SoundSet" "Hero_DragonKnight"
"GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_dragon_knight.vsndevts"
"IdleSoundLoop" "Hero_DragonKnight.Tutorial_Intro"

"HasInventory" "1" // 是否有物品欄
// 相關Lua函數: HasInventory() 和 SetHasInventory(bool)
// SetHasInventory(true) 對之前沒有定義為"HasInventory" "1" 的單位沒有任何效果

// 技能設置
//----------------------------------------------------------------
"AbilityLayout" "" // 技能槽數量,最低4個,最高為6個,單位可以同時擁有最多16個技能
"Ability1" "" // 技能 1.
"Ability2" "" // 技能 2.
"Ability3" "" // 技能 3.
"Ability4" "" // 技能 4.
"Ability5" "" // 技能 5.
"Ability6" "" // 技能 6.
"Ability7" "" // 技能 7 -最高就顯示6個技能,後面添加的技能將不顯示
"Ability8" "" // 技能 8 -最高就顯示6個技能,後面添加的技能將不顯示

// 護甲和魔抗設置
//----------------------------------------------------------------
"ArmorPhysical" "0" // 基礎護甲
"MagicalResistance" "0" // 基礎魔抗

// 攻擊設置
//----------------------------------------------------------------
"AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" // 攻擊類型:DOTA_UNIT_CAP_NO_ATTACK 不能攻擊
// DOTA_UNIT_CAP_MELEE_ATTACK 近戰
// DOTA_UNIT_CAP_RANGED_ATTACK 遠程
"AttackDamageMin" "100" // 最小傷害
"AttackDamageMax" "100" // 最大傷害
"AttackRate" "1.7" // 攻擊間隔
"AttackAnimationPoint" "0.75" // 攻擊前搖
"AttackAcquisitionRange" "800" // 警戒範圍
"AttackRange" "600" // 攻擊範圍
"AttackRangeBuffer" "250" // 攻擊緩衝範圍(不會取消攻擊的額外射程範圍)
"ProjectileModel" "" // 投射物,填寫特效路徑,只有投射物特效才行
"ProjectileSpeed" "900" // 投射速率
"AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" //

// 屬性設置
//----------------------------------------------------------------
"AttributePrimary" "DOTA_ATTRIBUTE_STRENGTH" //主屬性類型
"AttributeBaseStrength" "0" // 基礎力量
"AttributeStrengthGain" "0" // 力量成長
"AttributeBaseIntelligence" "0" // 基礎智力
"AttributeIntelligenceGain" "0" // 智力成長
"AttributeBaseAgility" "0" // 基礎敏捷
"AttributeAgilityGain" "0" // 敏捷成長

// 擊殺獎勵設置
//----------------------------------------------------------------
"BountyXP" "0" // 經驗獎勵
"BountyGoldMin" "0" // 最小金錢獎勵
"BountyGoldMax" "0" // 最大金錢獎勵

// 邊界設置
//----------------------------------------------------------------
"BoundsHullName" "DOTA_HULL_SIZE_HERO" // 碰撞邊界類型,以下為單位尺寸參數:
// 值 Hammer中的單位半徑
// DOTA_HULL_SIZE_SMALL 8
// DOTA_HULL_SIZE_REGULAR 16
// DOTA_HULL_SIZE_SIEGE 16
// DOTA_HULL_SIZE_HERO 24
// DOTA_HULL_SIZE_HUGE 80
// DOTA_HULL_SIZE_BUILDING 81
// DOTA_HULL_SIZE_FILLER 96
// DOTA_HULL_SIZE_BARRACKS 144
// DOTA_HULL_SIZE_TOWER 144
"RingRadius" "50" // 選擇圈半徑
"HealthBarOffset" "-1" // 血條高度,預設值為 "-1",意味著使用默認的模型高度

// 移動設置
//----------------------------------------------------------------
"MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" // 移動類型
//DOTA_UNIT_CAP_MOVE_NONE 不能移動
//DOTA_UNIT_CAP_MOVE_GROUND 地面
//DOTA_UNIT_CAP_MOVE_FLY 飛行
"MovementSpeed" "300" // 移動速度
"MovementTurnRate" "0.5" // 轉身速度
"HasAggressiveStance" "0" // 單位會在接近敵人時切換空閑/跑步的移動動畫,比如亞巴頓的模型
"FollowRange" "100" // 最低跟隨範圍

// 狀態設置
//----------------------------------------------------------------
"StatusHealth" "150" // 基礎生命值
"StatusHealthRegen" "0" // 生命恢復速度,負值無效
"StatusMana" "0" // 基礎魔法值,設置為0會導致沒有魔法條
"StatusManaRegen" "0" // 魔法恢復速度,負值無效
"StatusStartingMana" "-1" // 單位誕生時的魔法值,-1意味著默認滿魔法值

// 攻防類型設置
//----------------------------------------------------------------
"TeamName" "DOTA_TEAM_NEUTRALS" // 所屬隊伍,關係不大
"CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_HERO" // 攻擊的傷害類型,攻擊類型表如下:
//名稱 等價
//普通 DOTA_COMBAT_CLASS_ATTACK_BASIC
//穿刺 DOTA_COMBAT_CLASS_ATTACK_PIERCE
//攻城 DOTA_COMBAT_CLASS_ATTACK_SIEGE
//混亂 DOTA_COMBAT_CLASS_ATTACK_LIGHT
//英雄 DOTA_COMBAT_CLASS_ATTACK_HERO
"CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_HERO" // 護甲類型,護甲類型表如下:
//名稱 等價
//無甲 DOTA_COMBAT_CLASS_DEFEND_SOFT
//輕甲 DOTA_COMBAT_CLASS_DEFEND_WEAK
//中甲 DOTA_COMBAT_CLASS_DEFEND_BASIC
//重甲 DOTA_COMBAT_CLASS_DEFEND_STRONG
//建築 DOTA_COMBAT_CLASS_DEFEND_STRUCTURE
//英雄 DOTA_COMBAT_CLASS_DEFEND_HERO

"UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" //單位關係類,比如建築BUILDING的仇恨優先順序低於HERO或DEFAULT
//列表如下
//DOTA_NPC_UNIT_RELATIONSHIP_TYPE_BARRACKS
//DOTA_NPC_UNIT_RELATIONSHIP_TYPE_BUILDING
//DOTA_NPC_UNIT_RELATIONSHIP_TYPE_COURIER
//DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT
//DOTA_NPC_UNIT_RELATIONSHIP_TYPE_HERO
//DOTA_NPC_UNIT_RELATIONSHIP_TYPE_SIEGE
//DOTA_NPC_UNIT_RELATIONSHIP_TYPE_WARD

// 視野設置
//----------------------------------------------------------------
"VisionDaytimeRange" "1200" // 白天視野範圍
"VisionNighttimeRange" "800" // 夜晚視野範圍

// 腳本設置
//----------------------------------------------------------------
"vscript" "scripts/vscripts/AI.lua" // 這會在單位誕生後立即裝載一個腳本文件
// 使用誕生函數 ( entityKeyValues ) 可以啟動一個計時器來進行任何操作

// Creature Block
//----------------------------------------------------------------
"Creature" // 這段KV針對基礎類npc_dota_creature
{
// 單位使用飾品
"AttachWearables"
{
"Wearable1" { "ItemDef" "63" } // 每個"IdemDef" 的整數值可以在items_game.txt中找到
"Wearable2" { "ItemDef" "64" } // 注意:最近的飾品模型在Source 2中尚不可用,試圖使用這些代碼會失敗
"Wearable3" { "ItemDef" "65" } // 如果你想確保模型存在,可以使用模型瀏覽器(model browser)查找其英雄名稱
"Wearable4" { "ItemDef" "66" }
"Wearable5" { "ItemDef" "67" }
"Wearable6" { "ItemDef" "68" }
}

"DisableClumpingBehavior" "1" // 這個理論上會改變單位與其他單位的碰撞行為
"CanRespawn" "1" // 能夠重生,傳說中沒用
"DisableResistance" "75.0" // 控制抗性,按照百分比減少大部分眩暈的時間

// 升級參數,每次升級會獲取的獎勵
"HPGain" "500" // 升級增加生命值上限
"DamageGain" "25" // 升級增加攻擊力
"ArmorGain" "10" // 升級增加護甲
"MagicResistGain" "10" // 升級增加魔抗
"MoveSpeedGain" "10" // 升級增加移動速度
"BountyGain" "30" // 升級增加賞金獎勵
"XPGain" "100" // 升級增加經驗值上限

// 數據驅動生物AI
"DefaultState" "Invade"
"States"
{
"Invade"
{
"Name" "Invade"
"Aggression" "70.0" // 在該生命值百分比,傾向於攻擊並釋放進攻性技能
"Avoidance" "30.0" // 在該生命值百分制比單位逃跑,設置為0時,該生物會跟你死磕到底
"Support" "0.0" // 開始釋放防禦性技能的生命值百分比
"RoamDistance" "1000.0" // 逃跑時單位會跑出的距離,與Avoidance參數一同使用
}
}

// 進攻性技能AI
"OffensiveAbilities"
{
"Ability1" // 該技能還沒有冷卻時,嘗試在任何地方使用其它技能
{
"Name" "creature_force_of_nature"
"UseOnTrees" "1"
"AOE" "1"
"Radius" "100"
}
"Ability2" // 需要在275範圍內有至少兩個單位
{
"Name" "ursa_earth_shock"
"AOE" "1"
"Radius" "275"
"MinimumTargets" "2"
}
"Ability3" // 不會對已經擁有狀態的敵人重複使用Debuff
{
"Name" "lesser_nightcrawler_pounce"
"Damage" "1"
"Debuff" "1"
}
"Ability4" // 不會對眩暈的敵人重複使用眩暈
{
"Name" "holdout_gyrocopter_homing_missile"
"Damage" "1"
"Stun" "1"
}
}

// 防禦性技能AI
"DefensiveAbilities"
{
"Ability1" // 不會重複使用Buff
{
"Name" "treant_living_armor"
"Buff" "1"
}
"Ability2" // "UseSelfishly" 意味著優先對自己使用,"UseAtHealthPercent" 意味在該生命值百分比強制使用
{
"Name" "creature_zombie_berserk"
"UseSelfishly" "1"
"Buff" "1"
"UseAtHealthPercent" "50"
}
"Ability3" // 當在650範圍內有至少3個可被治療的單位時使用
{
"Name" "creature_summon_undead"
"Heal" "1"
"AOE" "1"
"Radius" "650"
"MinimumTargets" "3"
}
}

// 逃跑技能AI
"EscapeAbilities"
{
"Ability1" // 生命值低於一定百分比時觸發
{
"Name" "lesser_nightcrawler_pounce"
}
}

// 單位裝備物品,單位必須設置 "HasInventory" "1" 才能使用
"EquippedItems"
{
"ForceStaff" { "Item" "item_force_staff" }
"PhaseBoots" { "Item" "item_phase_boots" }
"Drums"
{
"Item" "item_ancient_janggo"
"Charges" "10"
}
"Urn"
{
"Item" "item_urn_of_shadows"
"Charges" "10"
}
}
}
}
}

關於技能的寫法很酷炫,有modifier和內置的計時器(think),這就意味著在製作技能的時候就無比的方便

---------------------(2015年5月13日更新)--------------------------------------

KV技能方面的進階可以看這篇教程

[教程翻譯]數據驅動技能解析|dota2 rpg AMHC -

----------------------------------------------------------------------------------------------

"OnSpellStart() "
{
"Stun"
{
"Target" "TARGET"
"Duration""1"
}
"ApplyModifier"
{
"modifierName" "modifer_myability_1_time_stun"
"Target" "TARGET"
}
}

"Modifiers"
{

"modifier_myability_1_time_stun"
{
"Duration" "2.2"
"ThinkInetrval""1"
"OnThinkInterval"
{
"Stun"
{
"Target" "TARGET"
"Duration" "1"
}
}
}
}

這樣可以實現 施法時目標暈一秒 然後隔一秒 暈一秒

當然你可以用循環計時器做非常非常多的事~

自己研究研究~篇幅有限~不做贅述了

4、觸發 LUA的編寫

這個涉及到一些複雜的技能,還有遊戲規則,傷害系統,任務系統等等等等,難度比較大的

首先是要學LUA的語法,然後看官方提供的api。API和LUA可以幫你實現非常非常多的事,只要你掌握了他們,

API和常量之類的,官方的文檔里都有,去看……

主要還是以自學為主吧… 表示答主也不知從何講起。

LUA教程:

LUA學習教程和LUA代碼編輯器下載|dota2 rpg AMHC

API查詢:

Dota 2 Workshop Tools/Scripting/API

5、模型

這些比較專業,我涉及不多。模型的話可以使用FBX OBJ DMX SMD 四種格式 如果網上有資源,可以使用網上的導入進自定義地圖。

---------------------(2015年5月13日更新)--------------------------------------

導入模型到DOTA2的方法|dota2 rpg AMHC -

6、特效(這個好難呀)

---------------------(2015年5月13日更新)--------------------------------------

Dota2技能教程-特效的創建

粒子特效簡易教程|dota2 rpg AMHC -

最後:時間有限,寫的比較倉促

在自學過程中遇到什麼問題,歡迎來AMHC官方論壇提問。

dota2 rpg 自定義地圖-AMHC

提問區:

求助答疑區 中國DOTA2 RPG DOTA2地圖門戶

最後附上教程匯總的鏈接:

Dota2編輯器入門指南|dota2 rpg AMHC -

第一課?入門必讀?我該怎麼開始製作地圖第一步?(2015年5月31日|dota2 rpg AMHC -

(↑這一篇請一定要看喲)

感謝大家的支持

一起創造趣味吧!~~~


作者你太牛了!膜拜!


推薦閱讀:

dota2為什麼菜鳥都喜歡打c位?
如何評價yyf和sansheng(狗哥)solo時的言論?
DOTA 2 中有哪些好玩的野路子?
dota2天梯7000分和年薪100W,你更願意炫耀哪個?
如何評價EG在TI5中祭出炸彈人?

TAG:刀塔DOTA2 |