Skip to content

Commit 9ee28a9

Browse files
committed
Merge branch 'vitepress' into source
2 parents 3b9c518 + 67af40e commit 9ee28a9

107 files changed

Lines changed: 3913 additions & 20040 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
node_modules
2-
.docusaurus
2+
.vitepress/cache
3+
.vitepress/dist
34
/build
45
api/dist/

.prettierignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,6 @@
55
!/_articles/panorama/webpack.md
66
!/_articles/scripting/vector-math.md
77

8-
.docusaurus
8+
.vitepress/cache
9+
.vitepress/dist
910
/build

.vitepress/config.mts

Lines changed: 292 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,292 @@
1+
import { defineConfig } from "vitepress";
2+
3+
export default defineConfig({
4+
title: "ModDota",
5+
description: "Community-driven Dota 2 modding resource",
6+
lang: "en-US",
7+
head: [["link", { rel: "icon", href: "/images/favicon.ico" }]],
8+
srcDir: "_articles",
9+
outDir: "build",
10+
cleanUrls: true,
11+
ignoreDeadLinks: [/\.fbx$/],
12+
13+
markdown: {
14+
lineNumbers: true,
15+
},
16+
17+
themeConfig: {
18+
logo: "/images/logo.svg",
19+
20+
nav: [
21+
{
22+
text: "Lua API",
23+
link: "https://moddota.com/api/",
24+
},
25+
{
26+
text: "Panorama API",
27+
link: "https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Panorama/Javascript/API",
28+
},
29+
],
30+
31+
socialLinks: [{ icon: "discord", link: "https://discord.gg/gRmZgvz" }],
32+
33+
sidebar: [
34+
{ text: "Getting Started", link: "/getting-started" },
35+
{ text: "Scripting Introduction", link: "/scripting-introduction" },
36+
{
37+
text: "Typescript",
38+
collapsed: true,
39+
items: [
40+
{ text: "Introduction", link: "/scripting/Typescript/typescript-introduction" },
41+
{ text: "Ability", link: "/scripting/Typescript/typescript-ability" },
42+
{ text: "Modifier", link: "/scripting/Typescript/typescript-modifier" },
43+
{ text: "Events", link: "/scripting/Typescript/typescript-events" },
44+
{ text: "Tooltip Generator", link: "/scripting/Typescript/tooltip-generator" },
45+
],
46+
},
47+
{
48+
text: "Abilities, items, modifiers",
49+
collapsed: true,
50+
items: [
51+
{ text: "Ability KeyValues", link: "/abilities/ability-keyvalues" },
52+
{ text: "Item KeyValues", link: "/abilities/item-keyvalues" },
53+
{
54+
text: "The Importance of AbilityValues Values",
55+
link: "/abilities/the-importance-of-abilityvalues-values",
56+
},
57+
{
58+
text: "Passing AbilityValues Values into Lua",
59+
link: "/abilities/passing-abilityvalues-values-into-lua",
60+
},
61+
{ text: "AbilityDuration Tooltips", link: "/abilities/abilityduration-tooltips" },
62+
{ text: "Simple Custom Ability", link: "/abilities/simple-custom-ability" },
63+
{ text: "Creating Innate Abilities", link: "/abilities/creating-innate-abilities" },
64+
{ text: "Making Any Ability Use Charges", link: "/abilities/making-any-ability-use-charges" },
65+
{ text: "Calling Spells with SetCursor", link: "/abilities/calling-spells-with-setcursor" },
66+
{
67+
text: "Lua Abilities and Modifiers",
68+
link: "https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Lua_Abilities_and_Modifiers",
69+
},
70+
{ text: "Lua Item Tutorial", link: "/abilities/lua-item-tutorial" },
71+
{
72+
text: "Lua Modifiers",
73+
collapsed: true,
74+
items: [
75+
{ text: "Extending Hero/NPC API", link: "/abilities/lua-modifiers/1" },
76+
{ text: "Linken's Sphere & Lotus Orb", link: "/abilities/lua-modifiers/2" },
77+
{ text: "Transformations", link: "/abilities/lua-modifiers/3" },
78+
{ text: "Enchanting Trees", link: "/abilities/lua-modifiers/4" },
79+
{ text: "Custom Barriers", link: "/abilities/lua-modifiers/5" },
80+
],
81+
},
82+
{
83+
text: "Reutilizing Built-in Modifiers",
84+
link: "/abilities/reutilizing-built-in-modifiers",
85+
},
86+
{
87+
text: "Datadriven",
88+
collapsed: true,
89+
items: [
90+
{
91+
text: "Ability Events & Modifiers",
92+
link: "/abilities/datadriven/datadriven-ability-events-modifiers",
93+
},
94+
{ text: "All About the Target", link: "/abilities/datadriven/all-about-the-target" },
95+
{
96+
text: "Channeling Animations",
97+
link: "/abilities/datadriven/channeling-animations",
98+
},
99+
{
100+
text: "Invisibility Ability Example",
101+
link: "/abilities/datadriven/invisibility-ability-example",
102+
},
103+
{
104+
text: "Illusion Ability Example",
105+
link: "/abilities/datadriven/illusion-ability-example",
106+
},
107+
{
108+
text: "Rotate Ability Example",
109+
link: "/abilities/datadriven/rotate-ability-example",
110+
},
111+
{
112+
text: "Point Channeling AoE Example",
113+
link: "/abilities/datadriven/point-channeling-aoe-ability-example",
114+
},
115+
{
116+
text: "Hero & Creep Modifier Durations",
117+
link: "/abilities/datadriven/apply-hero-and-creep-modifier-durations",
118+
},
119+
{
120+
text: "Physics Ability Example (Exorcism)",
121+
link: "/abilities/datadriven/physics-ability-example-exorcism",
122+
},
123+
],
124+
},
125+
{
126+
text: "Modifier Properties in Tooltips",
127+
link: "/abilities/modifier-properties-in-tooltips",
128+
},
129+
{ text: "Server to Client", link: "/abilities/server-to-client" },
130+
],
131+
},
132+
{
133+
text: "Units",
134+
collapsed: true,
135+
items: [
136+
{ text: "Unit KeyValues", link: "/units/unit-keyvalues" },
137+
{ text: "Unit Producing Buildings", link: "/units/unit-producing-buildings" },
138+
{ text: "Creating Units with a Duration", link: "/units/creating-units-with-a-duration" },
139+
{ text: "Adding a Simple AI to Units", link: "/units/adding-a-very-simple-ai-to-units" },
140+
{ text: "Simple Neutral AI", link: "/units/simple-neutral-ai" },
141+
{
142+
text: "Creature AttachWearable Blocks",
143+
link: "/units/create-creature-attachwearable-blocks-directly-from-the-keyvalues",
144+
},
145+
],
146+
},
147+
{
148+
text: "Scripting",
149+
collapsed: true,
150+
items: [
151+
{ text: "Custom Mana System", link: "/scripting/custom-mana-system" },
152+
{ text: "Item Restrictions/Requirements", link: "/scripting/item-restrictions-requirements" },
153+
{ text: "Item Drop System", link: "/scripting/item-drop-system" },
154+
{ text: "Making an RPG-like Looting Chest", link: "/scripting/making-a-rpg-like-looting-chest" },
155+
{ text: "Scripted Shop Spawning", link: "/scripting/scripted-shop-spawning" },
156+
{ text: "Lava Damage", link: "/scripting/lava-damage" },
157+
{ text: "Using Dota Filters", link: "/scripting/using-dota-filters" },
158+
{ text: "Particle Attachment", link: "/scripting/particle-attachment" },
159+
{ text: "Vector Math", link: "/scripting/vector-math" },
160+
{
161+
text: "Precache: Fixing and Avoiding Issues",
162+
link: "/scripting/precache-fixing-and-avoiding-issues",
163+
},
164+
{
165+
text: "Custom NetTables",
166+
link: "https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Custom_Nettables",
167+
},
168+
{ text: "Advanced Looting Chest", link: "/scripting/advanced-looting-chest" },
169+
],
170+
},
171+
{
172+
text: "Panorama UI",
173+
collapsed: true,
174+
items: [
175+
{
176+
text: "Introduction",
177+
link: "https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Panorama",
178+
},
179+
{ text: "Inclusive Panorama UI", link: "/panorama/inclusive-panorama-ui" },
180+
{
181+
text: "Panorama UI with TypeScript",
182+
link: "/panorama/introduction-to-panorama-ui-with-typescript",
183+
},
184+
{ text: "Keybindings", link: "/panorama/keybindings" },
185+
{ text: "DOTAScenePanel", link: "/panorama/dotascenepanel" },
186+
{ text: "Button Examples", link: "/panorama/button-examples" },
187+
{
188+
text: "Custom Game Setup",
189+
link: "https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Custom_Game_Setup",
190+
},
191+
{ text: "Hiding HUD with SetHUDVisible", link: "/panorama/hiding-hud-with-sethudvisible" },
192+
{ text: "Webpack", link: "/panorama/webpack" },
193+
{ text: "React", link: "/panorama/react" },
194+
],
195+
},
196+
{
197+
text: "Assets",
198+
collapsed: true,
199+
items: [
200+
{ text: "Asset File Type Reference", link: "/assets/asset-file-type-reference" },
201+
{
202+
text: "Maps",
203+
collapsed: true,
204+
items: [
205+
{ text: "Hammer Tutorials", link: "/assets/maps/hammer-tutorials" },
206+
{
207+
text: "Making Skip/Clip Blocks from Models",
208+
link: "/assets/maps/making-skip-clip-blocks-out-of-models",
209+
},
210+
],
211+
},
212+
{
213+
text: "Models",
214+
collapsed: true,
215+
items: [
216+
{ text: "MDL to VMDL Conversion", link: "/assets/models/mdl-to-vmdl-conversion" },
217+
{
218+
text: "Adding Hitbox to Models Without a Bone",
219+
link: "/assets/models/adding-hitbox-to-models-without-a-bone",
220+
},
221+
{
222+
text: "Importing Models & Material Editor",
223+
link: "/assets/models/importing-models-and-using-material-editor",
224+
},
225+
{
226+
text: "Exporting Models & Materials/Textures",
227+
link: "/assets/models/exporting-models-and-materials-textures",
228+
},
229+
{
230+
text: "Custom Hero Models & Animations",
231+
link: "/assets/models/custom-hero-models-materials-animations",
232+
},
233+
],
234+
},
235+
{
236+
text: "Particles",
237+
collapsed: true,
238+
items: [
239+
{ text: "Particle Tutorial", link: "/assets/particles/particle-tutorial" },
240+
{ text: "Particle Basics", link: "/assets/particles/particle-basics" },
241+
{ text: "Chaos Wave Particle", link: "/assets/particles/chaos-wave-particle" },
242+
{
243+
text: "Falling Cherry Blossom Petal",
244+
link: "/assets/particles/falling-cherry-blossom-petal-for-spring-mood-particle",
245+
},
246+
{ text: "Volcano Particle", link: "/assets/particles/volcano-particle" },
247+
{ text: "Status Effects", link: "/assets/particles/status-effects" },
248+
],
249+
},
250+
{ text: "Custom Sounds", link: "/assets/custom-sounds" },
251+
{
252+
text: "Extracting & Compiling VTEX Files",
253+
link: "/assets/extracting-and-compiling-vtex-files",
254+
},
255+
{ text: "Custom Minimap Icons", link: "/assets/custom-minimap-icons" },
256+
],
257+
},
258+
{
259+
text: "Tools",
260+
collapsed: true,
261+
items: [
262+
{ text: "Setting Up for Collaboration", link: "/tools/setting-up-for-collaboration" },
263+
{ text: "Useful Console Commands", link: "/tools/useful-console-commands" },
264+
{ text: "Setting Up with GitHub", link: "/tools/setting-up-your-addon-with-github" },
265+
{ text: "Combining KV Files Using #base", link: "/tools/combining-kv-files-using-base" },
266+
{ text: "Improving vConsole", link: "/tools/improvement-vConsole" },
267+
{ text: "GitHub Repos and Search", link: "/tools/github-repos-and-search" },
268+
],
269+
},
270+
{ text: "Contribute", link: "/contribute" },
271+
],
272+
273+
externalLinkIcon: true,
274+
outline: [2, 3],
275+
276+
editLink: {
277+
pattern: "https://github.com/ModDota/moddota.github.io/edit/source/_articles/:path",
278+
},
279+
280+
search: {
281+
provider: "local",
282+
},
283+
},
284+
285+
vite: {
286+
publicDir: "../static",
287+
},
288+
289+
sitemap: {
290+
hostname: "https://moddota.com/",
291+
},
292+
});
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<script setup lang="ts">
2+
const props = defineProps<{
3+
id: string;
4+
aspectRatio?: number;
5+
hd?: string;
6+
}>();
7+
8+
const ratio = props.aspectRatio ?? 4 / 3;
9+
const paddingBottom = `${(1 / ratio) * 100}%`;
10+
const src = `https://gfycat.com/ifr/${props.id}?hd=${props.hd ?? "0"}`;
11+
</script>
12+
13+
<template>
14+
<p :style="{ position: 'relative', paddingBottom }">
15+
<iframe
16+
:src="src"
17+
scrolling="no"
18+
frameborder="0"
19+
allowfullscreen
20+
width="100%"
21+
height="100%"
22+
style="position: absolute; top: 0; left: 0"
23+
/>
24+
</p>
25+
</template>
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<script setup lang="ts">
2+
import { withBase } from "vitepress";
3+
4+
const props = defineProps<{
5+
path: string;
6+
controls?: boolean;
7+
}>();
8+
</script>
9+
10+
<template>
11+
<video width="100%" height="100%" autoplay muted loop :controls="props.controls ?? false">
12+
<source :src="withBase(props.path)" type="video/mp4" />
13+
</video>
14+
</template>
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<script setup lang="ts">
2+
const props = defineProps<{
3+
id?: string;
4+
playlistId?: string;
5+
aspectRatio?: number;
6+
}>();
7+
8+
const ratio = props.aspectRatio ?? 16 / 9;
9+
const paddingBottom = `${(1 / ratio) * 100}%`;
10+
const embedUrl = props.playlistId
11+
? `https://www.youtube.com/embed/videoseries?list=${props.playlistId}`
12+
: `https://www.youtube.com/embed/${props.id}`;
13+
</script>
14+
15+
<template>
16+
<p :style="{ position: 'relative', paddingBottom }">
17+
<iframe
18+
:src="embedUrl"
19+
frameborder="0"
20+
allowfullscreen
21+
width="100%"
22+
height="100%"
23+
style="position: absolute; top: 0; left: 0"
24+
/>
25+
</p>
26+
</template>

0 commit comments

Comments
 (0)