Om in GTA IV te kunnen scripten maken we gebruik van de
.NET Scripthook. Ik heb hem zelf even geüpload zodat je hem ook kan downloaden mocht de downloadlink daar niet meer werken: scripthookdotnet.zip Pak dit archief uit in je GTA IV map (standaard te vinden in C:\Program Files\Rockstar Games\Grand Theft Auto IV). De bedoeling is dat ScriptHook.dll en ScriptHookDotNet.asi in de GTA IV map terecht komen en dat er een nieuwe map aangemaakt werd genaamd scripts. In deze map zullen wij onze toekomstige scripts plaatsen. De map scripts bevat ook nog een map for Developers, welke op zijn beurt enkele voorbeeldscripts bevat én belangrijk: de ScriptHookDotNet.dll in de submap bin. Deze DLL zullen we straks nodig hebben om zelf scripts te schrijven! Het bestand ScriptHookDotNet.asi dat in je GTA IV map staat zal enkel werken als je een Asi loader of alternatief geïnstalleerd hebt!
[*]Visual Studio
In deze tutorial zal ik Visual Studio Professional 2012 gebruiken, de Express-versie daarvan is gratis te downloaden op de
website van Microsoft. Als je student bent kan je via de Microsoft DreamSpark-website de Professional-versie gratis downloaden, maar voor hetgeen ik je hier zal leren voldoet de Express-versie. Na het downloaden en installeren van Visual Studio zal je bij het eerste maal opstarten de vraag krijgen in welk soort omgeving (environment) je wilt werken: selecteer hier Visual C# Development Settings. Als je de vraag niet gekregen hebt, of je hebt het programma al eerder geïnstalleerd dan kan je dit nog altijd aanpassen door naar Tools -> Import and Export Settings... te gaan.
[*]Bij voorkeur ervaring in het programmeren (van C#), indien je dit niet hebt lees je best deze tutorials even door.
[*]Je gezond verstand
Een eerste script
Een project aanmaken
Na het opstarten van Visual Studio kan je, zoals te verwachten, een nieuw project aanmaken door naar File -> New -> Project... te gaan (sneltoets Ctrl + Shift + N). Hierna zal er een venster geopend worden. Selecteer hier Class Library en geef een gepaste naam aan het project (in mijn geval is dit "IVScriptingTutorial"). Klik daarna op OK.
Als alles goed gegaan is zou je nu in de Solution Explorer het project moeten zien dat je net hebt aangemaakt, met al een eerste klasse-bestand genaamd Class1.cs. Dit bestand zullen we straks hernoemen en aanvullen met code. Maar eerst moeten we nog enkele aanpassingen aan het project maken, we moeten namelijk nog een referentie toevoegen naar het DLL-bestand dat bij de .NET Scripthook zat.
Referenties toevoegen
Klik met je rechtermuisknop op je project in de Solution Explorer en klik op Add Reference... (of klik in de menubalk op Project -> Add Reference...). Er zal een nieuw venster, de Reference Manager, verschijnen, ga hier naar Browse en klik rechtsonder op de knop Browse..., zoek de ScriptHookDotNet.dll (normaal in C:\Program Files\Rockstar Games\Grand Theft Auto IV\scripts\for Developers\bin) en selecteer deze.
Verder zullen we ook nog andere referenties toevoegen die standaard in het .NET framework zitten. Ga in de Reference Manager naar Assemblies -> Framework (als je dat niet ziet, zoek dan naar .NET) en zorg dat de checkboxen van System.Drawing en System.Windows.Forms aangevinkt zijn. Alle configuraties van het project zijn nu gedaan, nu zullen we een héél kort script schrijven om te testen of alles werkt!
Hallo GTA IV!
Open het bestand Class1.cs, als dit nog niet geopend is. Bovenaan het bestand staan er verschillende regels die de syntax using Xxx.Yyy.Zzz; hebben. Dit geeft aan dat we een bepaalde referentie willen gebruiken. Breidt dit uit met onderstaande regels, om aan te geven dat we de referenties, die we daarnet aan het project toegevoegd hebben, in dit bestand willen gebruiken. Deze referenties bevatten verschillende functies, klassen en andere dingen die erg handig zijn om te gebruiken.
using System.Windows.Forms;
using System.Drawing;
using GTA;
In principe zijn deze 3 using regels voldoende, en kunnen we degene die er al stonden verwijderen, aangezien we die niet gaan gebruiken. Onder de using-regels zien we het volgende staan:
namespace IVScriptingTutorial
{
public class Class1
{
}
}
Eerst zeggen we dat we in de namespace van het project willen werken: dit wilt zeggen dat alles wat we tussen de accolades {} hierna schrijven bereikbaar is vanuit het project IVScriptingTutorial. Dit lijkt nu nogal vanzelfsprekend, maar als we later meerdere bestanden gaan aanmaken moeten we zeker zijn dat we vanuit één bestand aan aangemaakte klassen uit een ander bestand kunnen opvragen. Daarna definiëren we een klasse genaamd Class1 (je mag gerust deze naam veranderen). Als je niet weet wat een klasse is kan je de tutorial die ik in het begin van de tutorial gegeven hebt even doorlezen, maar voor nu is het nog niet zo belangrijk wat een klasse precies is. In deze klassen zullen we ons eerste script schrijven, maar om dat te doen moeten we zeker zijn dat de klasse 'opgestart' wordt. Met de .NET Scripthook kan dit heel gemakkelijk door de klasse te laten overerven van de klasse Script: dit doe je door achter de klasse definitie : Script te schrijven.
public class Class1 : Script
{
}
Als een object van deze klasse aangemaakt wordt gebeurt er nu nog niets, want we hebben nog niets tussen deze accolades geschreven. We zullen eerst een constructor aanmaken, dit is een blok code die automatisch wordt uitgevoerd bij het aanmaken van een object van een bepaalde klasse. Wat een object en klasse precies is, zal ik in later gedeelte uitleggen. Een constructor heeft altijd dezelfde naam als de klasse, in dit geval dus Class1:
public class Class1 : Script
{
public Class1()
{
// Hier komt de code
}
}
Wat we nu gaan doen is een methode aanmaken, waarvan we willen dat deze bij het tekenen van elk frame uitgevoerd wordt. We noemen deze methode bijvoorbeeld tekenElkFrame. Deze methode aanmaken gebeurt op een ongeveer gelijke manier als het aanmaken van de constructor. Verder staan er tussen de haakjes nu 2 parameters. Wat die zijn en doen leg ik later uit.
public class Class1 : Script
{
public Class1()
{
// Hier komt de code
}
public void tekenElkFrame(object sender, GraphicsEventArgs e)
{
e.Graphics.DrawText("Hallo GTA IV!", 10, 20);
}
}
Zoals je ziet is de methode tekenElkFrame al ingevuld met een regel code die echt iets doet. Deze regel tekent de tekst "Halllo GTA IV!" op het scherm, op positie (10, 20). Dat wil zeggen, de 10e pixel van links en de 20e pixel van boven. Gewoon de methode aanmaken is nog niet genoeg: deze wordt nu nog nergens uitgevoerd. In de constructor zullen we deze methode meegeven als handler en zullen we zeggen dat deze moet uitgevoerd worden bij het tekenen van elk frame.
public class Class1 : Script
{
public Class1()
{
this.PerFrameDrawing += new GraphicsEventHandler(tekenElkFrame);
}
public void tekenElkFrame(object sender, GraphicsEventArgs e)
{
e.Graphics.DrawText("Hallo GTA IV!", 10, 20);
}
}
Ons eerste script is nu af! Nu moeten we het nog omvormen tot een juist bestand zodat het herkent kan worden door de Scripthook in GTA IV.
Omvormen tot één .net.dll-bestand
Erg moeilijk is deze stap niet, maar wel cruciaal als je je script wil uitproberen. In de menubalk klik je op Build -> Build Solution (sneltoets F6). Als alles goed is gegaan zou je onderaan het venster de melding Build succeeded moeten zien staan. Als hier Build failed staat dan is er ergens iets mis in je script. In dat geval moet je even kijken naar de Error list en de errors verbeteren (waarschuwingen hoef je je niets van aan te trekken). Als je de fout niet vindt dan moet je je script hier maar eens posten samen met de errors die je krijgt. Nu zal een bestand NaamVanJeProject.dll aangemaakt worden in de Debug-map van je project. Standaard vind je dit hier: Documents\Visual Studio 2012\Projects\<NAAM SOLUTION>\<NAAM PROJECT>\bin\Debug. Als het niet in de Debug map staat, dan waarschijnlijk in de Release map. Je kopieert dit .dll-bestand naar de scripts map in je GTA IV installatiemap en hernoemt dit naar NaamVanJeProject.net.dll. Nu zou je script moeten werken. Als je GTA IV nu opstart zal je de tekst "Hallo GTA IV!" te zien krijgen in je linkerbovenhoek, zoals op onderstaande screenshot.
GTA IV: Scripting Tutorial in C#
Gelieve hier niet te reageren. Bij vragen, opmerkingen of complimenten (
) kan je terecht in het reactietopic.
Inhoud
Benodigdheden
- Om in GTA IV te kunnen scripten maken we gebruik van de
.NET Scripthook. Ik heb hem zelf even geüpload zodat je hem ook kan downloaden mocht de downloadlink daar niet meer werken:scripthookdotnet.zip
Pak dit archief uit in je GTA IV map (standaard te vinden in C:\Program Files\Rockstar Games\Grand Theft Auto IV). De bedoeling is dat ScriptHook.dll en ScriptHookDotNet.asi in de GTA IV map terecht komen en dat er een nieuwe map aangemaakt werd genaamd scripts. In deze map zullen wij onze toekomstige scripts plaatsen. De map scripts bevat ook nog een map for Developers, welke op zijn beurt enkele voorbeeldscripts bevat én belangrijk: de ScriptHookDotNet.dll in de submap bin. Deze DLL zullen we straks nodig hebben om zelf scripts te schrijven!
Het bestand ScriptHookDotNet.asi dat in je GTA IV map staat zal enkel werken als je een Asi loader of alternatief geïnstalleerd hebt!
[*]Visual Studio
- In deze tutorial zal ik Visual Studio Professional 2012 gebruiken, de Express-versie daarvan is gratis te downloaden op de
website van Microsoft. Als je student bent kan je via de Microsoft DreamSpark-website de Professional-versie gratis downloaden, maar voor hetgeen ik je hier zal leren voldoet de Express-versie.Na het downloaden en installeren van Visual Studio zal je bij het eerste maal opstarten de vraag krijgen in welk soort omgeving (environment) je wilt werken: selecteer hier Visual C# Development Settings. Als je de vraag niet gekregen hebt, of je hebt het programma al eerder geïnstalleerd dan kan je dit nog altijd aanpassen door naar Tools -> Import and Export Settings... te gaan.
[*]Bij voorkeur ervaring in het programmeren (van C#), indien je dit niet hebt lees je best deze tutorials even door.
[*]Je gezond verstand
Een eerste script
Een project aanmaken
Na het opstarten van Visual Studio kan je, zoals te verwachten, een nieuw project aanmaken door naar File -> New -> Project... te gaan (sneltoets Ctrl + Shift + N). Hierna zal er een venster geopend worden. Selecteer hier Class Library en geef een gepaste naam aan het project (in mijn geval is dit "IVScriptingTutorial"). Klik daarna op OK.
Als alles goed gegaan is zou je nu in de Solution Explorer het project moeten zien dat je net hebt aangemaakt, met al een eerste klasse-bestand genaamd Class1.cs. Dit bestand zullen we straks hernoemen en aanvullen met code. Maar eerst moeten we nog enkele aanpassingen aan het project maken, we moeten namelijk nog een referentie toevoegen naar het DLL-bestand dat bij de .NET Scripthook zat.
Referenties toevoegen
Klik met je rechtermuisknop op je project in de Solution Explorer en klik op Add Reference... (of klik in de menubalk op Project -> Add Reference...). Er zal een nieuw venster, de Reference Manager, verschijnen, ga hier naar Browse en klik rechtsonder op de knop Browse..., zoek de ScriptHookDotNet.dll (normaal in C:\Program Files\Rockstar Games\Grand Theft Auto IV\scripts\for Developers\bin) en selecteer deze.
Verder zullen we ook nog andere referenties toevoegen die standaard in het .NET framework zitten. Ga in de Reference Manager naar Assemblies -> Framework (als je dat niet ziet, zoek dan naar .NET) en zorg dat de checkboxen van System.Drawing en System.Windows.Forms aangevinkt zijn.
Alle configuraties van het project zijn nu gedaan, nu zullen we een héél kort script schrijven om te testen of alles werkt!
Hallo GTA IV!
Open het bestand Class1.cs, als dit nog niet geopend is. Bovenaan het bestand staan er verschillende regels die de syntax using Xxx.Yyy.Zzz; hebben. Dit geeft aan dat we een bepaalde referentie willen gebruiken. Breidt dit uit met onderstaande regels, om aan te geven dat we de referenties, die we daarnet aan het project toegevoegd hebben, in dit bestand willen gebruiken. Deze referenties bevatten verschillende functies, klassen en andere dingen die erg handig zijn om te gebruiken.
In principe zijn deze 3 using regels voldoende, en kunnen we degene die er al stonden verwijderen, aangezien we die niet gaan gebruiken. Onder de using-regels zien we het volgende staan:
Eerst zeggen we dat we in de namespace van het project willen werken: dit wilt zeggen dat alles wat we tussen de accolades {} hierna schrijven bereikbaar is vanuit het project IVScriptingTutorial. Dit lijkt nu nogal vanzelfsprekend, maar als we later meerdere bestanden gaan aanmaken moeten we zeker zijn dat we vanuit één bestand aan aangemaakte klassen uit een ander bestand kunnen opvragen.
Daarna definiëren we een klasse genaamd Class1 (je mag gerust deze naam veranderen). Als je niet weet wat een klasse is kan je de tutorial die ik in het begin van de tutorial gegeven hebt even doorlezen, maar voor nu is het nog niet zo belangrijk wat een klasse precies is. In deze klassen zullen we ons eerste script schrijven, maar om dat te doen moeten we zeker zijn dat de klasse 'opgestart' wordt. Met de .NET Scripthook kan dit heel gemakkelijk door de klasse te laten overerven van de klasse Script: dit doe je door achter de klasse definitie : Script te schrijven.
Als een object van deze klasse aangemaakt wordt gebeurt er nu nog niets, want we hebben nog niets tussen deze accolades geschreven. We zullen eerst een constructor aanmaken, dit is een blok code die automatisch wordt uitgevoerd bij het aanmaken van een object van een bepaalde klasse. Wat een object en klasse precies is, zal ik in later gedeelte uitleggen.
Een constructor heeft altijd dezelfde naam als de klasse, in dit geval dus Class1:
Wat we nu gaan doen is een methode aanmaken, waarvan we willen dat deze bij het tekenen van elk frame uitgevoerd wordt. We noemen deze methode bijvoorbeeld tekenElkFrame. Deze methode aanmaken gebeurt op een ongeveer gelijke manier als het aanmaken van de constructor. Verder staan er tussen de haakjes nu 2 parameters. Wat die zijn en doen leg ik later uit.
Zoals je ziet is de methode tekenElkFrame al ingevuld met een regel code die echt iets doet. Deze regel tekent de tekst "Halllo GTA IV!" op het scherm, op positie (10, 20). Dat wil zeggen, de 10e pixel van links en de 20e pixel van boven.
Gewoon de methode aanmaken is nog niet genoeg: deze wordt nu nog nergens uitgevoerd. In de constructor zullen we deze methode meegeven als handler en zullen we zeggen dat deze moet uitgevoerd worden bij het tekenen van elk frame.
Ons eerste script is nu af! Nu moeten we het nog omvormen tot een juist bestand zodat het herkent kan worden door de Scripthook in GTA IV.
Omvormen tot één .net.dll-bestand
Erg moeilijk is deze stap niet, maar wel cruciaal als je je script wil uitproberen. In de menubalk klik je op Build -> Build Solution (sneltoets F6). Als alles goed is gegaan zou je onderaan het venster de melding Build succeeded moeten zien staan. Als hier Build failed staat dan is er ergens iets mis in je script. In dat geval moet je even kijken naar de Error list en de errors verbeteren (waarschuwingen hoef je je niets van aan te trekken). Als je de fout niet vindt dan moet je je script hier maar eens posten samen met de errors die je krijgt.
Nu zal een bestand NaamVanJeProject.dll aangemaakt worden in de Debug-map van je project. Standaard vind je dit hier: Documents\Visual Studio 2012\Projects\<NAAM SOLUTION>\<NAAM PROJECT>\bin\Debug. Als het niet in de Debug map staat, dan waarschijnlijk in de Release map. Je kopieert dit .dll-bestand naar de scripts map in je GTA IV installatiemap en hernoemt dit naar NaamVanJeProject.net.dll.
Nu zou je script moeten werken. Als je GTA IV nu opstart zal je de tekst "Hallo GTA IV!" te zien krijgen in je linkerbovenhoek, zoals op onderstaande screenshot.
Voor de volledigheid upload ik hier nog even het class-bestand en de .net.dll:
Class1.zip
IVScriptingTutorial.net.zip