Wie auch bei dem resource manager tutorial ist mir heir langweilig... also mache ich mal wieder nen Tutorial (wird ja auch langsam ma Zeit
Automaton:
Den Automaton zieht ihr euch erstmal
.Nun gibt es 2 möglichkeiten: entweder ihr benutzt ein komplett neues script oder ihr fügt etwas zur example.atmt hinzu. Ich werde zuerst erläutern wie man die Grundvorraussetzungen für ein eigenes Script erfüllt. Den rest könnt ihr dann auf example.atmt und auf euer eigenes script beziehen.
Kapitel 1 und 2 NUR wenn ihr ein komplet neues script erstellt.
Inhaltsverzeichnis:
1. Kapitel - So gehts los
2. Kapitel - Erste Abstimmungen
3. Kapitel - Variablen
4. Kapitel - if - Abfragen
5. Kapitel - Funktionen
6. Kapitel - Mein erstes Command
7. Kapitel - Interaktion mit dem Spiel
1. Kapitel - So gehts los:
Erstellt eine neue Datei (keinen ordner) und nennt sie meinscript.atmt.
Solltet ihr eine Frage bekommen ob ihr den Dateityp wirklich ändern wollt, dann seid ihr richtig. Andernfalls geht auf Extras -> Ordneroptionen -> Ansicht. Dort nehmt ihr den Haken bei "Erweiterungen bei bekannten Dateitypen ausblenden" weg. Nun ändert den namen der Datei nochmal und bestätigt bei der Frage ob ihr den Dateityp wirklich ändern wollt.
2. Kapitel - Erste Abstimmungen:
Als erstes legt ihr 2 arrays (eine für die funktionen und eine für die variablen) an (Müsst ihr nicht verstehen, einfach machen).
Code:
local funktionenprefix = { }
local variablenprefix = { }
3. Kapitel - Variablen:
Variablen kennen manche vielleicht schon aus dem Schulunterricht:
Es sind Buchstaben oder Wörter, denen ein bestimmter Wert zugeordnet wird, und der verändert werden sowie abgefragt werden kann.
Um das zu verdeutlichen:
Code:
variablenprefix.testvariable = 5
Man kann Variablen auch miteinander verrechnet werden lassen.
Code:
variablenprefix.faktor = 5 variablenprefix.faktor2 = 6 variablenprefix.produkt = variablenprefix.faktor * variablenprefix.faktor2
Aufgabe:
Definiere 3 Variablen. Die ersten beiden sind die Summanten und die dritte Variable soll die Summe der beiden ersten sein.
Lösung:
Code:
variablenprefix.summant = 5 variablenprefix.summant2 = 6 variablenprefix.summe = variablenprefix.summant + variablenprefix.summant2
4. Kapitel - if-Abfragen:
If - Abfragen sind neben den Variablen die wichtigsten Elemente des Programmierens. Ohne sie könnten all unsere Programme gar nicht existieren.
Es ist eigentlich simpel, denn sie folgen folgendem Schema:
Code:
if (Bedingung) then -code- end
Code:
if (1 == 1) then -code- end
Trifft die Bedingung zu, so wird der inhalt der if-Abfrage ausgefürt, andernfalls wird er übersprungen:
Code:
if (1 == 1) then variablenprefix.test = 2 end
Nun etwas komplexeres, da 1 ja logischerweise immer 1 ist...
Code:
if (variablenprefix.zahl >= 2) then variablenprefix.test = 2 end
Code:
variablenprefix.zahl = 5 if (variablenprefix.zahl2 == nil) then variablenprefix.zahl2 = 0 end if (variablenprefix.zahl >= variablenprefix.zahl2) then variablenprefix.zahl2 = variablenprefix.zahl2 + 1 end
Das "nil" in der ersten if-Abfrage hat jede Variable als Wert, wenn man ihr noch keinen Wert zugewiesen hat. Mit dieser Abfrage gehe ich sicher, dass "zahl2" wenn sie noch keinen Wert hat, den Wert 0 bekommt.
Wir sehen außerdem, dass "zahl" am anfang auf 5 gesetzt wird. In der 2. if-Abfrage wird geschaut, ob "zahl" größer oder gleich "zahl2" ist, wenn das zutrifft, wird "zahl2" um 1 erhöht (variablenprefix.zahl2 = variablenprefix.zahl2 + 1). Somit merken so manche, dass die 2. if-Abfrage nur 6 mal hintereinaner ausgeführt werden kann (der gesamte code wird natürlich von alleine mehrmals ausgeführt) bis der inhalt der 2. in-abfrage übersprungen wird.
Aufgabe:
Warum ist das so?
Lösung:
Da "zahl2" in jedem Durchgang um eins erhöht wird, ist sie nach dem sechsten Durchgang auf 6 gesetzt worden. Somit ist "zahl" nicht mehr höher oder gleich "zahl2" und somit wird der inhalt nicht mehr ausgeführt.
Jetzt kommen wir zu dem "else" Befehl. Er ist ebenfalls wichtig in den if-Abfragen:
Code:
variablenprefix.zahl = 5 if (variablenprefix.zahl2 == nil) then variablenprefix.zahl2 = 0 end if (variablenprefix.zahl >= variablenprefix.zahl2) then variablenprefix.zahl2 = variablenprefix.zahl2 + 1 else variablenprefix.durchgelaufen = "ja" end
Nun jedoch zu "else". Vielleicht kannst du dir schon denken was es bedeutet:
Wenn in der if-Abfrage die bedingung nicht zutrifft und ein "else" in diesem schema vorhanden ist, so wird anstatt dem inhalt der if-Abfrage der inhalt des "else" ausgeführt. Das heißt:
Ist die if abfrage 6 mal durchgelaufen, wird beim 7. mal anstatt "zahl2" zu erhöhen, "durchgelaufen" auf "ja" gesetzt.
Es gibt auch den "else if" Befehl, der recht leicht ist.
Er bedeutet so viel wie "else", nur mit einer zusätzlichen bedingung:
z.b.:
Code:
if(1 == 2) then -code 1- else if(1 > 2) then -code 2- else -code 3- end
Code:
if (variablenprefix.zahl >= variablenprefix.zahl2) or (variablenprefix.zahl2 >= variablenprefix.zahl3) then -code- end
Der inhalt der if-Abfrage wird dann ausgeführt, wenn entweder die erste, oder die zweite oder auch beide bedingungen zutreffen.
Code:
if (variablenprefix.zahl >= variablenprefix.zahl2) and (variablenprefix.zahl2 >= variablenprefix.zahl3) then -code- end
Nur, wenn die erste UND die zweite Bedingung zutreffen, wird der inhalt der if-Abfrage ausgeführt
Für if-Abfragen gibt es folgende Operatoren:
< größer
> kleiner
== ist gleich (vorsicht, 2 gleichzeichen)
<= größer oder gleich
>= kleiner oder gleich
~= ist nicht gleich
Wenn du das alles verstanden hast, bist du schonmal weit genug für die basis des programmierens.
5. Kapitel - Funktionen:
Funktionen sind sozusagen die Essenz von automaton scripts. Befehle werden so definiert, dass die die funktionen ausführen, wir sind also schon ganz nah dran:
Code:
function funktionenprefix.testfunktion ( Arguments ) -code- end
Nun erdenken wir uns mal einen Code:
Code:
function funktionenprefix.testfunktion ( Arguments , Device )
if(Arguments == "") or (Arguments == nil) then
return true
end
end
Code:
function funktionenprefix.testfunktion ( Arguments , Device )
if(Arguments == "") or (Arguments == nil) then
OutputF ( Device, NAME_Log, "No argument given.", Arguments )
return true
end
end
Code:
function funktionenprefix.testfunktion ( Arguments , Device )
if(Arguments == "") or (Arguments == nil) then
OutputF ( Device, NAME_Log, "No argument given.", Arguments )
return true
else
if(Arguments > 5) then
OutputF ( Device, NAME_Log, "The argument is bigger than 5.", Arguments )
else
OutputF ( Device, NAME_Log, "The argument is lower than 5.", Arguments )
end
end
return true
end
NICHT VERGESSEN: das return true am ende hinmachen!
Ich denke damit ist für den Anfang alles über die funktionen klar.
6. Kapitel - Mein erstes Command:
Man benutzt:
Code:
Register ( funktionenprefix, "rubrik" ) AddCommand ( funktionenname, "Commandname", "Art der eingabe", "Beschreibung" )
Code:
local funktionenprefix = { }
local variablenprefix = { }
function funktionenprefix.testfunktion ( Arguments , Device )
if(Arguments == "") or (Arguments == nil) then
OutputF ( Device, NAME_Log, "No argument given.", Arguments )
return true
else
if(Arguments > 5) then
OutputF ( Device, NAME_Log, "The argument is bigger than 5.", Arguments )
else if(Arguments < 5) then
OutputF ( Device, NAME_Log, "The argument is lower than 5.",Arguments )
else
OutputF ( Device, NAME_Log, "The argument is 5.",Arguments )
end
end
return true
end
Register ( funktionenprefix, "commands" )
AddCommand ( funktionenprefix.testfunktion, "testcommand", "<ID>", "Checks if the number is bigger or smaller than 5." )
7. Kapitel - Interaktion mit dem Spiel:
Bis jetzt haben die Scripts ja noch nichts mit FlyFF zu tun und ich glaube kaum, dass ihr mit einem Bot für ein online mmorpg einfach nur Zahlenjonglieren wollt...
Also zeige ich euch hier, wie ihr werte aus dem Spiel herausnimmt und auch teilweise verändert:
Wir beschäftigen uns zuerst mit "GetPlayer ()" und "GetTarget ()". Ja, ihr seht richtig: in die Klammern kommt nichts, sie sind aber trotzdem vorhanden!
"GetPlayer ()" gibt uns unseren Chara aus und "GetTarget ()" gibt und unser Ziel aus, wenn wir kein Ziel haben, wird der wert "nil" ausgegeben.
Das verstehen wahrscheinlich nicht alle, deshalb werde ich das an einem kurzen Beispiel erläutern:
Code:
if(GetTarget () == nil) variablenprefix.ziel = GetPlayer () else variablenprefix.ziel = GetTarget () end
Code:
function funktionenprefix.heal ( Device )
if(GetTarget () == nil)
variablenprefix.ziel = GetPlayer ()
else
variablenprefix.ziel = GetTarget ()
end
UseSkill ( variablenprefix.ziel , 3 )
return true
end
Demnach führt dieses Script den skill heal auf unser Ziel (oder wenn keins markiert ist auf uns selbst) aus.
__________________________________________________ ________
Update: Inhaltsverzeichnis hinzugefügt und im "else if" Abteil mehr erklärt.
Update 2: Kapitel "Interaktion mit dem Spiel" hinzugefügt.
Hoffe das hilft euch faulen säcken auf die sprünge
mfg Tom94
-sticky-






