SCM threads (GTA Vice City)
In deze tutorial van Wauzie wordt uitgelegd hoe SCM threads in GTA Vice City werken aan de hand van een script waarmee je een auto kunt kopen. Deze tutorial is bedoeld voor modders die al een beetje ervaring hebben met SCM scripting, en het plaatsen van voertuigen, hidden packages, wapens, etc. al onder de knie hebben.
Benodigdheden
- Mission Builder v1.3
- Player Position Tool
Uitleg
Voordat we beginnen worden hier een aantal dingen uitgelegd:
X Y Z coordinaat
|
Vaak zie je coördinaten staan in codes. Deze moet je halen uit GTA Vice City met de Player Position Tool. Druk in GTA Vice City op F4 en het coördinaat verschijnt in de tool. Haal wel de komma's weg. |
0001: wait 0 ms
|
Deze code zorgt ervoor hoelang het duurt voordat de volgende regel wordt gelezen. Het is normaal om de tijd op 100 te zetten. 1000 Ms = 1 seconde. |
00D6: if 0
|
Deze code zorgt ervoor dat in de volgende regel(s) iets gecheckt wordt. Er staat IF 0 als er een check wordt gedaan, IF 1 als er 2 worden gedaan, enzovoort. |
004D: jump_if_false ££Label00B8E0
|
Deze code volgt na een IF. Als het niet klopt wat er in de IF wordt gecheckt wordt er naar een label gejumpt. Anders wordt de label uitgevoerd tenzij je eerst in een marker moet staan. |
0002: jump ££Label00B720
|
Er wordt gejumpt naar een label. Vaak wordt deze gebruikt om de hoofdlabel telkens te herhalen zodat die telkens wordt uitgevoerd. |
Allereerst zoek je naar create_thread
. Je moet nu zoiets vinden:
create_thread ££Label01085A 004F: create_thread ££Label00F6B2 004F: create_thread ££Label00FA50 004F: create_thread ££Label00F893 004F: create_thread ££Label00FC0D 004F: create_thread ££Label010A41 004F: create_thread ££Label01074B 004F: create_thread ££Label010B6C 004F: create_thread ££Label010C5D 004F: create_thread ££Label010D4E 004F: create_thread ££Label010959 004F: create_thread ££Label010FA9 004F: create_thread ££Label01255A 004F: create_thread ££Label01038B 004F: create_thread ££Label01047B 004F: create_thread ££Label01056B 004F: create_thread ££Label01065B 004F: create_thread ££Label00FEB2 004F: create_thread ££Label00DEDB
004F:
Kopieer hier een regel van en geef het Label een naam:
004F: create_thread ££Labelbuy
Deze code zorgt ervoor dat GTA Vice City je thread gaat lezen. Zonder deze code gebeurt er niets. Nu gaan we de thread beginnen:
:Labelbuy 0001: wait 100 ms 03A4: name_thread "BUY"
:Labelbuy | De naam van het label. Deze moet overeenkomen met de create_thread code, dus LABELBUY (De twee pondtekens worden vervangen door een dubbele punt) |
0001: wait 0 ms | Geeft aan hoe lang het duurt voordat het spel de volgende regel gaat lezen, het is het handig om daarbij 100 in te vullen. 1000 ms is 1 echte seconde. |
03A4: name_thread "BUY1" | Geeft aan hoe de thread heet. Tussen de haakjes moet je een naam invullen. Deze code is niet noodzakelijk. |
Nu gaan we het volgende label maken. Neem twee enters en maak een nieuw label: [b]:Labelbuyload[/b]. Je hoeft geen jumps te maken want de main leest gewoon door.
:Labelbuy 0001: wait 0 ms 03A4: name_thread "BUY" :labelbuyload 03BC: $3F = create_sphere -1734.270 -1708.423 13.887 5.0 0247: request_model #DELUXO 038B: load_requested_models[/quote]
03BC: $3F = create_sphere -1734.270 -1708.423 13.887 5.0 | Er wordt nu een sphere gemaakt: een rondje waarin je kan gaan staan. $3F = de naam van de sphere. |
0247: request_model #DELUXO | Hier wordt aangegeven welke models het spel straks nodig heeft, deze stap is niet noodzakelijk maar het spel zal minder snel vastlopen. |
0038B: load_requested_models | Nu gaat het spel de models die nodig zijn laden (In dit geval die van de Deluxo). |
We gaan nu de laatste label maken.
:Labelbuy 0001: wait 0 ms 03A4: name_thread "BUY" :labelbuyload 03BC: $3F = create_sphere -1734.270 -1708.423 13.887 5.0 0247: request_model #DELUXO 038B: load_requested_models :Labelbuy2 0001: wait 0 ms 00d6: if 0 00e3: player $PLAYER_CHAR 0 ()near_point -1734.270 -1708.423 radius 1.0 1.0 004d: jump_if_false ££Labelbuy2 00D6: if 0 010A: player $PLAYER_CHAR money > 2500 004d: jump_if_false ££Labelbuy2 0109: player $PLAYER_CHAR money += -2500 00A5: $10 = create_car #DELUXO at -1724.941 -1707.464 14.387 0175: set_car $10 z_angle_to 0.0 0001: wait 5000 ms 0002: jump ££Labelbuy2[/quote]
00d6: if 0 | VC gaat nu iets checken. Wat hij gaat checken staat in de volgende regel. |
00e3: player $PLAYER_CHAR 0 ()near_point -1734.270 -1708.423 radius 1.0 1.0 | De IF 0 die in de vorige regel stond gaat checken of deze regel klopt, hij gaat checken of de player (Tommy) in de buurt van het coördinaat is. Erna zie je staan RADIUS 1.0 1.0. Dit geeft de grootte van het gebied rond de coördinaat aan. 2.0 is normaal. |
004d: jump_if_false ££Labelbuy2 | Deze regel wordt ingeschakeld als de regel die hierboven staat niet klopt; Tommy is niet in de buurt van de coördinaat. Er wordt verwezen naar de label: ££Labelbuy2 (de dubbele punt wordt vervangen door twee pondtekens). Nu gaat VC weer lezen vanaf :Labelbuy2, pas als klopt wat in de IF 0 staat, gaat hij de volgende regel lezen.
Nu komt er weer een IF 0; oftewel een nieuwe check. Er staat: 010A: player $PLAYER_CHAR money > 2500. Hierin wordt gecheckt of dat de player genoeg geld heeft, als het ware staat er: heeft de player meer geld dan 2500. Zoniet gaat hij weer terug naar het begin van de label (door de JUMP_IF_FALSE code). |
0109: player $PLAYER_CHAR money += -2500 | Nu gaan we over tot actie: er wordt 2500 geld van de Player afgetrokken. |
[b]00A5: $10 = create_car #DELUXO at -1724.941 -1707.464 14.387 | Er wordt een auto gemaakt. De auto verschijnt op de coördinaat. $10 = de autonaam. |
0175: set_car $10 z_angle_to 0.0 | Deze regel geeft de draaihoek van de auto aan. Als je goed kijkt zie je dat er verwezen wordt naar de car $10 |
0001: wait 5000 ms | Er wordt weer een wait geplaatst. Deze moet hoog zijn want anders wordt er gelijk weer een auto neergezet als je geld genoeg hebt, er moet genoeg tijd zijn om uit de marker te komen. |
0002: jump ££Labelbuy2 | Nu jumpt VC weer terug naar het begin van de label. Dit zorgt ervoor dat je nog een keer de auto kan kopen. Als je wilt dat je maar één keer een auto kan kopen vervang je deze regel door: 004E: end_thread . Er wordt voor gezorgd dat de thread uitgeschakeld wordt.
|
Nu is de thread af en je kan door in een marker te gaan staan een car kopen. Druk op F7 en alles wordt opgeslagen. Als er geen foutmeldingen worden gemeld kan je het gaan testen in GTA Vice City.
Externe links
- Threads, de basis - Forumversie van deze tutorial op GTAForum.nl.