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] ALICE Scripts mit LUA » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Zum Ende der Seite springen [TUT] ALICE Scripts mit LUA
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] ALICE Scripts mit LUA Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Tutorial für GTAIV Scripting (ALICE)

Dies ist ein Tutorial für das Scripten für GTAIV mit Lua.
Als erstes benötigt ihr Alice welches ihr hier (http://www.gtaforums.com/index.php?showtopic=386816) bekommt.
Downloaded es euch und installiert es nach der ReadMe in euren GTAIV Ordner.

grundlagen für ein Script

Vorher aber erzähl ich euch die Grundlagen.

Mit -- erstellt ihr einen Kommentar, alles hinter dem Kommentar wird nicht mehr gewertet und fällt weg.
Beispiel:
code:
1:
irgendwas hier bla -- Das hier wird ignoriert!

Desweiteren gibt es Variablen.
Man kann ihnen einen festen Bereich zuordnen mit local und global für Tables. (Später mehr dazu)
Normalerweise erstellt man sie aber einfach so im Script Augenzwinkern
code:
1:
myvar = 2 -- myvar ist nun 2

Tables sind eine Art Farm welche unendlich groß ist.
Man erstellt sie durch local mytable = {}
Man kann ihnen schon bei dem erstellen Werte geben, z.b.:
code:
1:
local mytable = { geld = 1000, leben = 99 }

Nun hat mytable 2 table's mit je einem Name und einem Wert.

Aufrufen könnt ihr dies so:
code:
1:
mytable.geld

Bedingungen und Schleifen:
If
Mit einer If schleife könnt ihr überprüfen ob ein Wert stimmt.
Hier ein kleines Beispiel:
code:
1:
2:
3:
4:
myvar = 3 -- myvar hat den wert 3
if myvar == 3 then -- wenn myvar gleich 3 ist dann
    tu_etwas
end

Als vergleichs Operatoren gibt es:
code:
1:
2:
3:
4:
5:
6:
== gleich
~= ungleich
< kleiner als
> größer als
<= kleiner als oder gleich
>= größer als oder gleich

Außerdem gibt es noch logische Verknüpfungen:
code:
1:
2:
3:
and und
or oder
not nicht

Beispiel:
code:
1:
2:
3:
local mytable = { geld = 30, leben = 99 }
if mytable.geld == 30 and mytable.leben == 99 then -- Wenn mytable.geld gleich 30 ist und mytable.leben gleich 99
end


Also können wir uns If immer so vorstellen:
code:
1:
2:
3:
if anweisung then
    etwas tun
end


For
For zählt von einem bestimmten wert rauf oder herab und führt ihn so oft aus.
For können wir uns so vorstellen:
code:
1:
2:
for variable = start_wert, end_wert, zählschritt do
end

Ein beispiel:
code:
1:
2:
3:
for i = 1, 10, 1 do
    print i
end

Das würde nun
1
2
3
4
5
..
Ausgeben.
So verarbeitet das der Computer:
code:
1:
2:
3:
4:
5:
6:
startwert ist 1
beenden bei 10
i + 0 = 1
i + 1 = 2
i + 1 = 3
i + 1 = 4

Erzählt also immer 1 hinzu, zu dem vorherigen Wert.

While
While funktioniert so ähnlich wie if, wenn der Wert wahr ist (z.b. i = 0 while(i ~= 0) do i = i + 1 end)
wird der Quellcode ausgeführt.
Dabei verändert sich evt. der Wert und die Bedingung wird unwahr.
Wir stellen uns while also so vor:
code:
1:
2:
3:
while bedingung do
    etwas tun
end

While wird ins deutsche als "während" übersetzt, vllt. wird dadurch die Funktion deutlicher.

Funktionen
Eine Funktion beinhaltet einen Code welcher aber erst ausgeführt wird wenn die Funktion aufgerufen wird.
Ein Beispiel:
code:
1:
2:
3:
4:
function testfunction()
    print("Hallo Welt") -- Dies wird nicht ausgeführt.
end
testfunction() -- nun wird erst Hallo Welt ausgegeben

Funktionen können aber auch Parameter enthalten wie hier:
code:
1:
2:
3:
4:
5:
function hallo(der_rest)
    print("Hallo ")
    print(der_rest) -- der_rest ist ein parameter
end
hallo("Welt") -- der_rest = "Welt" , also unser Parameter


Unser erstes Script

So da ihr nun wisst wie Lua funktioniert können wir ja unser erstes GTAIV Script schreiben.
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
-- Example Alexander Blade (some elements)
PLAYER_ID, PLAYER_INDEX, PLAYER_CHAR -- Globale Variablen
local playerPosition = { X = 0, Y = 0, Z = 0} -- Unser Table

function InitScript()
	Wait(10000)
end

function WaitForPlayerPoolCreation()
	while (IsPlayerPoolCreated() == 0) do
		Wait(2000)
	end
end

function WaitForValidPlayer()
	PLAYER_CHAR = 0
	repeat 
		CallNative("GET_PLAYER_ID")
		PLAYER_ID = GetIntResult()
			if (PLAYER_ID >= 0) then
			PushInt(PLAYER_ID)
			CallNative("CONVERT_INT_TO_PLAYERINDEX")
			PLAYER_INDEX = GetIntResult()
			PushInt(PLAYER_INDEX)
			PushVarPtr()	
			CallNative("GET_PLAYER_CHAR")
			PLAYER_CHAR = GetIntParam(1)
			if (PLAYER_CHAR <= 0) then
					Wait(1000)
			end  
		end 
	until (PLAYER_CHAR > 0)  
end	

function GetPlayerCoords()
	PushInt(PLAYER_CHAR)
	PushVarPtr()
	PushVarPtr()
	PushVarPtr()
	CallNative("GET_CHAR_COORDINATES")
	playerPosition.X = GetFloatParam(1)
	playerPosition.Y = GetFloatParam(2)
	playerPosition.Z = GetFloatParam(3)
end

function SaveCoordsToLog()
	PrintFloatToLog(playerPosition.X)
	PrintFloatToLog(playerPosition.Y)
	PrintFloatToLog(playerPosition.Z)
end

function main()
	InitScript()
	while true do
		WaitForPlayerPoolCreation()
		WaitForValidPlayer() 
		GetPlayerCoords()
		SaveCoordsToLog()
	    	Wait(2000)
	end  
	Wait(300)	
end

-- start
main();

Speichert dies nun im GTAIV\Alice ordner.

Analyse:
Wir haben 3 Globale Variablen 1 Table.

Unsere erste erstellte Funktion lautet InitScript().
In ihr steht nicht viel.
Mit Wait(Millisekunden) haltet ihr das Script für diese Millisekunden zahl an. (Hier 10000 = 10 sec)

Unsere nächste Funktion ist da schon Interessanter.
Die While läuft solange wie kein Spieler erstellt wurde.

Nun schauen wir uns WaitForValidPlayer an, diese sieht etwas kompilizierter aus, ist aber im Prinziep einfach.
Als erstes wird PLAYER_CHAR auf 0 gesetzt.
repeat ist nichts anderes als While nur das erst der inhalt ausgeführt wird und dann geprüft.
Mit CallNative ruft ihr eine Native Funktion auf.
Hier "CONVERT_INT_TO_PLAYERINDEX".
code:
1:
PLAYER_ID = GetIntResult()

Hier wird die Spielerid auf den Wert gesetzt den CONVERT_INT_TO_PLAYERINDEX zurück gibt.
Den Wert holen wir uns über GetIntResult()

Nun prüfen wir ob die Spielerid größer oder gleich 0 ist (und nicht z.B. -1).

Mit PushInt(WERT) legen wir Wert auf den Stack, welche sich die Funktion (CallNative) als Parameter braucht

Mit GetFloatParam(WERT) bekommt ihr den Wert von der Funktion zurück (WERT ist dabei die Rückgabe position).
Die Native Funktion GET_CHAR_COORDINATES hat z.B. 3 Rückgabewerte 1 ist der erste, 2 der zweite ...

PrintFloatToLog(WERT) speichert in die Logdatei von Alice WERT (Muss eine Kommazahl sein, ansonsten Float durch
Int oder String ersetzten! Beispiel: PrintIntToLog(WERT))

Wichtig ist bei main() das diese Funktion sich nie schließt.
Das macht ihr mit while true (zu deutsch:
code:
1:
Während wahr

Diese While bricht nie ab da sie ja immer Wahr ist.

Zu guter letzt ruft ihr main() in eurem Script auf.

Schon habt ihr euren ersten Positionsspeicherer geschrieben ;x

__________________

24.12.2008 11:14 Erdgnome ist offline E-Mail an Erdgnome senden Beiträge von Erdgnome suchen Nehmen Sie Erdgnome in Ihre Freundesliste auf
ZAZ
Informant


Dabei seit: 08.04.2006

RE: [TUT] ALICE Scripts mit LUA Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Na sowas, nun ist ja Alice schon älter als unser Jahr 2009 und hat auch schon richtige Wellen geschlagen.
Aber trotzdem bin Ich der erste, der hier seinen Senf abgibt.
Das Script oben stürtzt bei mir ab, liegt vielleicht an der Alice version, momentan 0.3.2 für GTA4-3.Patch.
Aber den code PrintFloatToLog kann ich gut gebrauchen.
Ich hab ja schon viel probiert, um die Werte meiner Variablen anzuzeigen, aber alles erfolglos.
Mit PRINTINT oder PRINTFLOAT stürtzts ab oder geht gar nix.
Immerhin funktioniert folgender code sehr schön:
PRINT_STRING_WITH_LITERAL_STRING_NOW("STRING","Hollo User",3000,1)

Achja, netter Tut good , vielleicht kannst Du ja noch ein Script posten, das auch bei Alice 0.3.2 funktioniert.

//Aschratt: GTA IV Modding kommt eh seehhhhrrr langsam nur in die Gänge... Aber R* is selbst schuld... Augenzwinkern

__________________

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von ZAZ: 14.04.2009 20:56.

14.04.2009 20:54 ZAZ ist offline E-Mail an ZAZ senden Beiträge von ZAZ suchen Nehmen Sie ZAZ in Ihre Freundesliste auf
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

Ja, ich denke ich muss das komplette Tutorial überarbeiten.
Die Alice 3.2 Scripte sind komplett anders.
Ich setz mich da jetzt mal ran. Augenzwinkern

__________________

14.04.2009 21:08 Erdgnome ist offline E-Mail an Erdgnome senden Beiträge von Erdgnome suchen Nehmen Sie Erdgnome in Ihre Freundesliste auf
ZAZ
Informant


Dabei seit: 08.04.2006

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

Zitat:
//Aschratt: GTA IV Modding kommt eh seehhhhrrr langsam nur in die Gänge... Aber R* is selbst schuld.
Na da regt sich ja was. Wie siehts mit Dir aus, schon was in Richtung Alice probiert?
Ja die GTA4 modding scene hält sich bescheiden obwohl recht früh die ersten tools breit standen. Viele waren daran interessiert die waffen zu frisieren oder sich nen anderen Vorteil im MP zu verschaffen.
Aber die meisten sind froh wenn ihr game überhaupt funktioniert, besonders der Multiplayer und lassens wohl lieber so wie es ist.
Und dann fehlen noch diejenigen, deren Hardwareleistung nicht ausreicht und die Kiddies, die es nicht kriegen.

__________________

15.04.2009 00:45 ZAZ ist offline E-Mail an ZAZ senden Beiträge von ZAZ suchen Nehmen Sie ZAZ in Ihre Freundesliste auf
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

[PLATZHALTER]

Ich muss es doch noch eben bearbeiten, hab nen kleinen aber feinen Fehler in meinem Tut gefunden.

__________________

16.04.2009 21:59 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

@ZAZ: Nun, ich finde die ganzen Checksum-Checks für Dateien für den Multiplayer affig. Lieber hätte Rockstar nen Mod Support machen können. Mit ALICE habe ich mich bisher nicht groß beschäftigt. Dazu habe ich z.Z. einfach keine Zeit. Ich habe mich Anfangs mal mit den Paths beschäftigt und dafür eine C++ Libary geschrieben, aber sonst habe ich auch noch nicht viel an GTA IV gemacht. Ich finde SA macht mehr Spaß tongue11

__________________

17.04.2009 15:29 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
Performer Performer ist männlich
Letzte Chance


Dabei seit: 08.06.2010

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

GTA 4 ist auch komplett anders aufgebaut als San Andreas.

Beinahe jedes Spiel hat Mods. Aber es kommt immer darauf an, ob ein Mod schwer oder leicht zu erstellen ist, für das jeweilige Spiel.

Bei GTA 4 wurde es erschwert, da Rockstar Modding nicht gerne sieht. Bis zuM Hot Coffee Mod wurden Modder noch unterstützt.

Heute ist auf Grund dieses Skandals alles erschwert worden. Damit so in Disaster nicht iweder kommt Augenzwinkern

Mit jedem neuen Patch wird das Modding zusätzlich erschwer, weil R* immer wieder was ändert... Und das ist auch der Sinn und ZWeck Augenzwinkern

Ich halte micha su GTA 4 Modding solange raus. bis endlich das nächste GTA Rasukommt. Dann sind nämlich die Entwickler mehr auf das Neu Realese fixiert Augenzwinkern Und ich rate euch das auch zu tun. Bevor man für jede Version das TUT neu Schreibt streicheln
30.07.2010 17:29 Performer ist offline Beiträge von Performer suchen Nehmen Sie Performer in Ihre Freundesliste auf
d0ne
Geldeintreiber


images/avatars/avatar-5677.png

Dabei seit: 24.07.2009
Old nickname here: JVZ

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

Der Hot Coffee war ja nicht unsere Schuld, hab die perversen eingebaut oder nicht?

__________________

30.07.2010 20:43 d0ne ist offline E-Mail an d0ne senden Beiträge von d0ne suchen Nehmen Sie d0ne in Ihre Freundesliste auf
Performer Performer ist männlich
Letzte Chance


Dabei seit: 08.06.2010

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

Aber trozdem hat dann jeder Volltrottel freien Zugang zu den Daten. und meistens wird R* dann dafür verantwortlich gemacht, oder?
30.07.2010 22:35 Performer ist offline Beiträge von Performer suchen Nehmen Sie Performer in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
gta-worldmods.de/forum » Grand Theft Auto IV » Editing Fragen » [TUT] ALICE Scripts mit LUA

Impressum

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