minetest-modding-tutorial/html/germanDE.html

179 lines
8.5 KiB
HTML
Raw Normal View History

2012-02-20 22:40:56 -08:00
<html>
<h2>
Minetest-c55 Modding in Lua
</h2>
<table with="100%">
<td width="90%">
<h3>
Einf<6E>hrung:
</h3>
Minetest-c55 (<a href="http://c55.me/minetest/">test.mine.bz</a>) ist ein Minecraft-Klon, entwickelt vom finnischen Programmierer 'celeron55'.
Es verf<72>gt unter anderem <20>ber eine sogenannte ScriptAPI, die zur Programmierung von Mods eingesetzt wird.
Dieses Tutorial soll erkl<6B>ren, wie die Entwicklung von Mods funktioniert.
</td>
<td width="20%"><img src="1.png" width="128" height="128" title="Das Minetest Logo" /></td>
</table>
<img src="2.png" title="Eine typische Minetest Landschaft" />
<h3>
Vorraussetzungen:
</h3>
<p>
Um dieses Tutorial richtig verstehen zu k<>nnen, sollten Sie grundlegende Kenntnisse in der Programmierung, bevorzugt Lua haben.
</p>
<h3>
Kapitel 0: Anlegen eines Mods
</h3>
<p>
Um einen Mod zu programmieren, muss unter dem Verzeichnis ~/.minetest/usermods ein Ordner mit dem Namen des Mods angelegt werden. Darin muss zum einen die Datei 'init.lua', die die Programme enth<74>lt und ein weiterer Ordner mit dem Namen 'textures' angelegt werden.
</p>
<h3>
Kapitel 1: Der erste Mod!
</h3>
<p>
Als ersten Mod werden Sie einen Holzblock erstellen, der zu Dekorationszwecken verwendet werden kann. Dazu wird der Ordner 'tutorial' und die dazugeh<65>rigen Dateien wie in Kapitel 0 beschrieben erstellt.<br />
In die init.lua muss der folgende Quellcode eingef<65>gt werden:
</p>
<tt>
<pre>
minetest.register_node("tutorial:holz",{
tile_images = {"holz.png"},
material = minetest.digprop_constanttime(1),
})
</pre>
</tt>
<p>
In den Ordner textures muss die Datei 'holz.png' aus dem Projektordner 'Texturen' kopiert werden. Wenn minetest nun gestartet wird, wird dabei automatisch der Quellcode kompiliert und geladen.<br />
Nun 'ingame' das Chatfenster mit 'T' <20>ffnen und sich durch <i>/giveme tutorial:holz</i> einen Holzblock erschummeln. Fertig ist der erste Mod!<br />
Nehmen wir einmal den Quellcode auseinander:<br />
Die Funktion <tt>minetest.register_node</tt> ist daf<61>r verantwortlich, neue Bl<42>cke zum Spiel hinzuzuf<75>gen.<br />
Als Parameter m<>ssen zum einen der Namen des neuen Blocks ("tutorial:holz") sowie eine Lua-Tabelle mit verschiedenen Parametern <20>bergeben werden.<br />
Darunter befindet sich <tt>tile_images</tt>, welches die Textur des Blocks vorgibt, und mit Komma getrennt <tt>material</tt>, was die Eigenschaften bez<65>glich der Abbaugeschwindigkeit angibt. <tt>minetest.digprop_constanttime(1)</tt> gibt demzufolge an, dass der Spieler, egal welches Werkzeug er verwendet, 1 Sekunde zum Abbauen des Blocks braucht.<br />
Alternativ k<>nnte man zum Beispiel auch<br />
<tt> material = minetest.digprop_woodlike(1.5),</tt><br />
verwenden. Dadurch braucht das Abbauen des Blocks 1.5 mal so lang, als bei einem normalen Holzblock.<br />
Au<41>erdem bevorzugt dieser Wert auch <20>xte, da diese Holz schneller abbauen als andere Werkzeuge.<br />
</p>
<h3>
Kapitel 2: Crafting!
</h3>
<p>
Obwohl das Spiel Minetest im Gegensatz zu MineCraft das Wort nicht im Namen tr<74>gt, ist Crafting dennoch ein grundlegender Bestandteil des Spielprinzips. Als Crafting bezeichnet man das Herstellen von Gegenst<73>nden, indem man andere Gegenst<73>nde kombiniert.<br />
So wird z.B. eine Steinaxt aus St<53>cken und Steinen hergestellt:<br />
<img src="3.png" title="So craftet man eine Steinaxt" /> <br /> <br />
Um das Deko-Holz aus Kapitel 1 auch craften zu k<>nnen , m<>ssen Sie den folgenden Code in die init.lua einf<6E>gen:
</p>
<tt>
<pre>
minetest.register_craft({
output = '"tutorial:holz" 2',
recipe = {
{'default:wood', 'default:wood', ''},
{'default:wood', 'default:wood', ''},
{'', '', ''},
}
})
</pre>
</tt>
<p>
Die Funktion <tt>minetest.register_craft()</tt> registriert einen Crafting-Vorgang. Der Parameter <tt>output</tt> gibt an, welcher Gegenstand beim Vorgang herauskommt, hier unser Holz. Die 2 gibt an, dass 2 Bl<42>cke Holz entstehen. Das Rezept unten gibt an, woraus das Holz 'gecraftet' werden kann;<br />
<img src="4.png" title="So craftet man das Deko-Holz" /> <br />
Jeder String steht f<>r ein Feld beim Crafting. Probieren Sie auch andere Kombinationen aus!
</p>
<p>
Was bedeutet eigentlich das default vor wood?<br />
'default' steht ,wie tutorial:* f<>r den tutorial-mod, f<>r den default-mod. Dieser definiert alle grundlegenden im Spiel vorkommende Gegenst<73>nde.<br />
Der default mod findet sich bei einer run-in-place-version von minetest unter minetest/data/mods/default/init.lua. <br />
Darin enthalten ist auch z.B. default:wood.<br />
</p>
<h3>
Kaptiel 3: ABMs & Positionen!
</h3>
<p>
ABMs sind Arbeitsbeschaffungsma<6D>nahmen f<>r Bl<42>cke, Sie verschaffen unserem Tutorial-Holz sinnlose Aufgaben. Wie w<>re es, wenn das Tutorial-Holz einfach nach einer bestimmten Zeit wieder zu normalem Holz wird?<br />
Dazu m<>ssen Sie diesen Code noch an die init.lua dranh<6E>ngen:
</p>
<tt>
<pre>
minetest.register_abm(
{nodenames = {"tutorial:holz"},
interval = 30,
chance = 1,
action = function(pos)
minetest.env:add_node(pos, {name="default:wood"})
end,
})
</pre>
</tt>
<p>
Die Funktion <tt>minetest.register_abm</tt> registriert eine f<>r jeden Block einer Sorte auszuf<75>hrende Aktion. <tt>nodenames = {"tutorial:holz"}</tt> gibt an, dass die Aktion f<>r alle Tutorial-Holzbl<62>cke ausgef<65>hrt wird. Probieren Sie doch auch einmal "default:stone", um auch alle Steinbl<62>cke zu verwandeln. <tt>interval = 30</tt> bedeutet, dass die Aktion alle 30 Sekunden ausgef<65>hrt wird und <tt>chance = 1</tt> dass die Wahrscheinlichkeit daf<61>r 1 (also immer) betr<74>gt. Als Aktion (<tt>action</tt>) kann nun eine Funktion gesetzt werden, die <tt>pos</tt> (die Position des tutorial-Holzblockes) als Parameter hat.<br />
Mit <tt>minetest.env:add_node(pos, NodeTable)</tt> kann nun ein Block an der Position <tt>pos</tt> mit den Attributen in NodeTable hinzugef<65>gt werden. Um zu definieren, dass es sich um einen Default-Holzblock handelt, reicht es den Namen anzugeben.<br />
Lehnen Sie sich jetzt zur<75>ck und schauen Sie zu, wie sich Ihre Freunde aufregen, dass Ihre Kreationen aus Deko-Holz wieder zu Standard-Holz werden.
</p>
<p>
Angenommen, Sie wollen jetzt aber erreichen, dass auf jedem Erde-mit-Gras-Block hohes Gras w<>chst (also default:junglegrass). Dazu m<>ssen Sie die Position <tt>pos</tt> modifizieren k<>nnen.<br />
Dazu m<>ssen Sie wissen, dass <tt>pos</tt> eine Tabelle ist die die folgenden Variablen enth<74>lt: x, y, z. <br />
x und z sind Koordinaten in der Blockwelt nach Vorne-Hinten, Rechts-Links.<br />
y hingegen ist die Oben-Unten-Koordinate (je h<>her, desto gr<67><72>er y).<br />
Um nun hohes Gras <20>ber Erde-mit-Gras Bl<42>cken wachsen zu lassen, k<>nnen Sie den folgenden Code verwenden:
</p>
<tt>
<pre>
minetest.register_abm(
{nodenames = {"default:dirt_with_grass"},
interval = 1,
chance = 100,
action = function(pos)
pos.y=pos.y+1
minetest.env:add_node(pos, {name="default:junglegrass"})
end,
})
</pre>
</tt>
<p>
Die Zeile <tt>pos.y=pos.y+1</tt> manipuliert die Position so, dass es sich nun um die Position direkt <20>ber dem Erde-mit-Gras-Block handelt. Das Ausf<73>hr-Intervall betr<74>gt hier 1 Sekunde, die Wahrscheinlichkeit, dass die Funktion aber wirklich ausgef<65>hrt wird liegt bei 1/100. So wird Ihr minetest-Garten langsam, aber sicher mit hohem Gras <20>berwuchert.
</p>
<p>
Dies ist nur eine kurze Einf<6E>hrung in Minetest Lua Modding. Eine englische Fassung dieses Tutorials finden Sie unter <a href="https://github.com/Jeija/minetest-modding-tutorial/blob/master/mtmoddeven.txt">https://github.com/Jeija/minetest-modding-tutorial/blob/master/mtmoddeven.txt</a>. Die englische Fassung ist umfangreicher als die deutsche Version.
</p>
<p>
Ich hoffe, dass Sie hiermit schon einen kurzen Einblick in die Modprogrammierung erhalten haben und diese Kenntnisse auch bei anderen Programmen hilfreich sind.
</p>
<p>
F<>r weitere Informationen steht Ihnen das <a href="http://c55.me/minetest/wiki/doku.php?id=code:lua_api">Wiki von Minetest</a> zur Verf<72>gung.
</p>
<p>
2012-02-20 22:48:42 -08:00
Beide Links dienen nur als Kurzreferenz. Au<41>erdem k<>nnen Sie im <a href="http://c55.me/minetest/forum/">Minetestforum</a> Ihre Fragen loswerden oder Ihre selbstgeschriebenen Mods pr<70>sentieren.<br />s
2012-02-20 22:40:56 -08:00
</p>
2012-02-20 22:48:42 -08:00
</html>