gta-worldmods.de/forum
Homepage Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite
gta-worldmods.de/forum » Grand Theft Auto IV » Editing Fragen » [TUT] .Net Scripts für GTA IV schreiben » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Zum Ende der Seite springen [TUT] .Net Scripts für GTA IV schreiben
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Erdgnome
Geldeintreiber


images/avatars/avatar-4681.jpg

Dabei seit: 18.11.2008
Old nickname here: DMA TAKE 2

[TUT] .Net Scripts für GTA IV schreiben Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

GTAIV Scripts mit .Net schreiben

  • Vorwort
  • Was brauchen wir?
  • Grundlagen
  • Wir schreiben ein Script


Vorwort
Dieses Tutorial hat nichts mit dem ALICE Scripts Tutorial zutun.
Ich schreibe dieses Tutorial aus dem Grunde, das mein altes Tutorial
relativ viele Unterschiede zur 0.3.2 Version hatte.
Genau das kann euch oder uns bei .Net nicht passieren.
Außerdem ist die Übersicht ernorm gesteigert.
Leider kann ich hier wirklich nur die C# Grundlagen nieder schreiben,
denn alles andere würde zuviel Zeit kosten.
Wer sich weiter in C# vertiefen möchte, dem empfehle ich ein Buch
mit Microsoft Zertifikat.

Unter Umständen kann es sein, das euer Script oder ASI.Net nicht auf 1.0.3 läuft.
Wenn das der Fall sein sollte, legt eine zweite Installation an, auf welcher 1.0.2 läuft!

Außerdem danke an ZAZ (er hat mich darauf aufmerksam gemacht) und an
alle anderen Coder die ich kenne.

Was brauchen wir?
Als IDE (Integrierte Entwicklungsumgebung) würde ich Microsoft Visual Studio verwenden.
Die Express Version ist kostenlos, nach 30Tagen muss man sich allerdings bei Microsoft
für umsonst registrieren, aber das ist nicht weiter tragisch.
Finden könnt ihr es hier.

Dies ist die C# Version, den ich möchte nicht weiter auf Script.Net,
Visual Basic.Net & co mich speziallisieren.

Und den ASI .Net Plugin.
http://www.gtaforums.com/index.php?s=ee0...howtopic=392325

Grundlagen
Nun C# ist eine Objekt Orientiere Sprache.
Jede Klasse hat ihre eigenen Objekte, welche unterschiedliche Sichtbarkeitsbereiche haben.
Allerdings spreche ich weiter unten nur kurz die Objekt Orientiere Programmierung an,
da wir sie bei GTA IV nicht wirklich brauchen werden.

Kommentare
In C# gibt es 2 verschiedene Typen.
Einzeilen Kommentare, welche mit // beginnen und Blockkommentare, welche sich meist über mehrere Zeilen
erstrecken. Diese beginnen mit /* und enden mit */.
Als hinter bzw. in den Kommentaren wird ignoriert!

Variablen
Diese können verschiedene Werte besitzen.
Im Unterschied zu typenlosen Sprachen, wie Lua, muss bei C# immer ein Type mit gegeben werden.
Für uns wichtig sind allerdings nur diese paar nativen:
code:
1:
2:
3:
4:
bool - 1 bit groß, kann nur true (wahr) oder false (unwahr) abspeichern.
int - 32 bit groß, kann eine große Zahlenmenge speichern.
String - ? bit groß, kann Zeichenketten abspeichern.
char - ? bit groß, kann Zeichen abspeichern.

Desweiteren gibt es noch die IV Typen/Klassen/Strukturen:
code:
1:
2:
3:
Group - eine Gruppierung
Model - Ped Modell
Ped - Ped selbst


Bedingungen
Als Bedigungsprüfungen gibt es if und else.
Mit if prüfen wir einen Wert auf seine richtigkeit.
Wenn das nicht zutrifft, er also nichtig ist, wird else ausgeführt.
Auf einen if Block muss kein else Block folgen!
Die Blöcke werden in geschweiften Klammern definiert.
Ab und an trifft man auch auf Blöcke die nicht einer Schleife sitzen.
Das hat damit zutun, das dann nur die nächste Zeile als Block gelesen wird.
(Spart Zeilenplatz bei guter einrückung!)
Wichtig, alles außer Bedingugen und Blockendungen brauchen ein ; am Ende!
Ein kleines Beispiel:
code:
1:
2:
3:
4:
5:
6:
7:
8:
int r = 3; // r ist nun 3 vom Typen Integer
if(r == 3) // ist r gleich 3?
{
    Game.DisplayText("r is 3"); // Wenn r gleich 3 ist!
}
else
    Game.DisplayText("r is not 3"); // Ein Beispiel von else, diesmal ohne Blockklammern!

Kurze erklärung:
== steht für gleich, != für nicht gleich, < für kleiner als und > für größer als.
Außerdem kann man die negation ! auch voranstellen und somit den Effekt umkehren.
Evt. begegnet man if Schleifen wo kein Operator drin steht.
Das bedeutet dann: if(r).
Dies wird ausgeführt, wenn r NICHT 0 ist.
if(!r) wird also ausgeführt wenn r 0 ist.
Es ist mehr eine verkürzung für schreibfaule und bools.
Da bool nur wahr (also 1) und unwahr (also 0) als Wert besitzen kann.
Achtung: Bei Visual Basic ist bool mit 0 und -1 bestückt!

Funktionen
Beginnen mit dem Typen und darauf folgt der Name.
In der Klammer stehen evt. Parameter und dann folgt der Block.
Im Block kann mit return ein Wert wiedergegeben werden.
(Nur der Wert des Typen).
Wichtig, wenn kein Wert wiedergeben werden soll, dann benutzt den Typen void.
So kann eine Funktion so aussehen:
code:
1:
2:
3:
4:
5:
6:
void HalloWelt(String SecondHalf)
{
    Game.DisplayText("Test "+SecondHalf);
}
// Aufruf:
HalloWelt("Yes");

Würde jetzt Test Yes im Spiel ausgeben.

Objekt Orientierte Programmierung und IV Scripting
Wie gesagt, ich schneide dieses Thema nur kurz an.
Wer mehr wissen möchte, benötigt ein Buch mit Thema C#.

Wie erstellen wir eine Klasse?
Mit dem Schlüsselwort class.
Davor kommt der gültigkeitsbereich.
Hier würde ich public wählen, da private wenig Sinn macht.
Nun folgt die Erbung auf eine bereits existierende Klasse.
Dies brauchen wir, damit unser Script die nötigen Funktionen kennt.

Also sieht unsere erstellte Klasse inklusive Block jetzt so aus:
code:
1:
2:
3:
public class TestScript : Script
{
}

Mit dem : erben wir die Klasse Script.

Jede Funktion und oder Variable benötigt in C# auf Klassenebene einen Gültigkeitsbereich oder Zugriffsrechte.
Gegeben sind:
public,private,protected.
Sie sprechen für sich.

Aber wichtiger als alles andere, ist nun ersteinmal einen Konstruktur zu erstellen.
Er besitzt die selben Zugriffsrechte wie die der Klasse (public z.B.) und ist eigendlich eine Funktion.
Ein Unterschied besteht aber.
Und zwar kann er nichts wiedergeben.
Genauso wie er auch keinen Type braucht.

Wichtig, er wird nur beim laden der Klasse einmal aufgerufen.
Mit ihm kann man also Default Werte gut setzen. (Mir viel keine bessere Erklärung ein.)

Alle Funktionen (Auch Callbacks) der Klasse Script die wir geerbt haben, sind protected.
D.h. wir erstellen unsere auch procteted.
Dann benötigen wir noch das Schlüsselwort override, da wir die Funktion ja überschreiben wollen.
(override kann man auch 1:1 ins deutsche so übersetzen)

Beispiel das Callback/Funktion Tick() welche in X Abstand aufgerufen wird:
(Dies erreichen wir, indem wir im Konstruktor die variable Interval auf 250 setzen!)
code:
1:
2:
3:
4:
procteted override void Tick()
{
    Player.Character.Health = 100; // Spieler Leben auf 100 setzen.
}


Alles andere erlernt ihr mit der Zeit.
Schaut euch ruhig die Beispiel Scripts an.

Wir schreiben ein Script
Diesmal verweise ich einfach auf die Beispielscripts, die dem .Net ScriptHook beiliegen!
Als erstes legt ihr eine neue .cs Datei in eurem /PfadZuIv/scripts/ Ordner an.
Nun öffnet ihr sie mit Visual Studio, erstellt eure Scripts und speichert dies einfach ab.
Nun das Spiel noch starten, und das wars eigendlich auch schon.
Nun sollte euer Script laufen.

Nachtrag:
Ihr könnt auch Native Funktionen aufrufen, die nicht gelistet sind.
Native.Function.Call("NAME_OF_NATIVE_FUNCTION", a, b, c)

__________________

Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von Erdgnome: 15.04.2009 09:30.

15.04.2009 08:50 Erdgnome ist offline E-Mail an Erdgnome senden Beiträge von Erdgnome suchen Nehmen Sie Erdgnome in Ihre Freundesliste auf
Aschratt Aschratt ist männlich
Moderator


images/avatars/avatar-531.gif

Dabei seit: 01.04.2006
Nation: Germany
City: Karl-Marx-Stadt

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Nettes Tutorial, aber da C# oder .NET prinzipiell schon etwas komplizierter ist empfehle ich jedem, der das hier gelernte verstehen will sich die Openbook's von Galileocomputing anzuschauen. Im Notfall geht auch Visual Basic. Die sind ziemlich gut und vermitteln ein solides Grundwissen:

- http://openbook.galileocomputing.de/visual_csharp/
- http://openbook.galileocomputing.de/visualbasic_2008/

Und man merkt, dass du C++ programmierst tongue11

Beispiel Vererbung: Private macht bei .NET prinzipiell schon Sinn, denn in .NET Framework ist es so, dass die Gültigkeitsbereiche und Zugriffsspezifizierer an den Namespace gebunden sind (Im übrigen auch bei CLI). Das wiederrum macht eine Klasse in einem Namespace für Referenzierungen sichtbar, oder eben nicht. Da es sich hier um eine Klasse handelt, die nicht referenziert werden braucht (Das wäre eigentlich nicht sinnvoll) und die keine Vererbung erlauben sollte (Sonst könnte man von aussen über den Source die Funktionen überlagern, überladen oder überschreiben, was auch keinen Sinn hat), wäre der ideale Ansatz hier "private sealed" (sealed verbietet Vererbung).

Sonst ist es ein nettes Tutorial good

__________________

15.04.2009 21:16 Aschratt ist offline E-Mail an Aschratt senden Homepage von Aschratt Beiträge von Aschratt suchen Nehmen Sie Aschratt in Ihre Freundesliste auf Fügen Sie Aschratt in Ihre Kontaktliste ein AIM-Name von Aschratt: Rattasch YIM-Name von Aschratt: rattasch MSN Passport-Profil von Aschratt anzeigen
Erdgnome
Geldeintreiber


images/avatars/avatar-4681.jpg

Dabei seit: 18.11.2008
Old nickname here: DMA TAKE 2

Themenstarter Thema begonnen von Erdgnome
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hm.. siehst, so tief hab ich mich nie in C# eingearbeitet. großes Lachen
Aber wieder was gelernt.

Und das Tut muss auch noch mit einem guten Beispiel ausgebaut werden.
Aber da lass ich mir Zeit bis Sonntag für.

__________________

15.04.2009 21:51 Erdgnome ist offline E-Mail an Erdgnome senden Beiträge von Erdgnome suchen Nehmen Sie Erdgnome in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
gta-worldmods.de/forum » Grand Theft Auto IV » Editing Fragen » [TUT] .Net Scripts für GTA IV schreiben

Impressum

gta-worldmods.de EXILE GTA Modding
Francais English Russian Polish
Forensoftware: Burning Board, entwickelt von WoltLab GmbH