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