GTAGames.nl

Spheres, icons en markers scripten (GTA San Andreas)

Van WikiGTA - De Nederlandse Grand Theft Auto Walkthrough!
Ga naar: navigatie, zoeken

Hoofdpagina > Modding > Modding Tutorial List > Spheres, icons en markers scripten


Inleiding

Allereerst: wat zijn Spheres en markers? Met icons worden de tekentjes bedoeld op de radar linksonder in beeld en markers zijn pijltjes boven hoofden van actors en/of boven auto’s. Met spheres worden de rode rondjes bedoeld, die je bijvoorbeeld tijdens het spelen van een missie te zien kunt krijgen. Je kunt met één commando zowel een icon als een sphere creëren, je kunt ook alleen een sphere of alleen een icon creëren. Je hebt ook icons die je altijd ziet, en icons die je alleen ziet wanneer je in de buurt bent. Ik zal ze allemaal uitleggen.


Sphere

 03BC: 10@ = create_sphere_at 2488.5601 -1666.84 13.38 radius 5.0

Dit is de code voor alleen een sphere. De 10@ is hier de naam van de sphere (die kan je later gebruiken als je wat met de sphere gaat doen). Vervolgens zijn er de x, y en z-coordinaat en tot slot ook radius. Dat betekent de doorsnede van de sphere. Die kan je dus klein maken (1.0), maar ook vrij groot (5.0) of heel groot (10.0). 1.0 is ongeveer het formaat van een sphere wanneer je in een missie bent.

Icon en Sphere die je altijd ziet

 02A7: $ICON_SPHERE_CJ = create_icon_marker_and_sphere $ICON_CJ at $X_JOHNSON_HOUSE $Y_JOHNSON_HOUSE $Z_JOHNSON_HOUSE

Altijd is niet helemaal waar, wanneer in je in een missie zit, zie je ze niet. Maar voor de rest zie je ze altijd. Markers én spheres.

  • De $ICON_CJ is niets minder als gewoon het getal wat bij de icon van CJ hoort. Die kan je opzoeken in de help-files van Sannybuilder.
  • $X_JOHNSON_HOUSE, $Y_JOHNSON_HOUSE en $Z_JOHNSON_HOUSE, zijn de variabelen die eerder gedefinieerd zijn (als getallen dus). Is ook wel logisch, aangezien de coördinaten van het Johnson House natuurlijk vaak in het spel voorkomen, en dan hoeven ze niet iedere keer de coördinaten op te schrijven maar gewoon zo’n makkelijk herkenbare variabele.
  • $ICON_SPHERE_CJ is de naam, waar je dus op terug kunt vallen (bijvoorbeeld voor het verwijderen van die markers).

Icon (zonder sphere) die je altijd ziet

 02A8: $marker03 = create_marker 23 at 658.0068 -1866.3127 4.4537[/code]

Dit is een code voor een icon marker zonder sphere. Met andere woorden, je ziet die links onderin op de radar, maar je ziet niet een rood rondje als je er bent. Eerst dus weer de naam, in dit geval $MARKER_EMMETS_GUN, daarna het commando (dus dat je een icon marker wilt, maar geen sphere). De 18 betekent het soort tekentje. Welke je wilt kan je vinden in sannybuilder >> help >> contents >> SCM Documentation >> SA >> Radar Icons. 18 is het pistooltje van Emmet (eigenlijk ook logisch, gezien de naam van deze regel). Je kunt daar dus al die nummers invullen die je in die lijst ziet. Vervolgens de coördinaten, en je hebt het op je radar staan.

Icon en Sphere die je alleen ziet als je dichtbij bent

 0570: $icon_en_sphere  = create_asset_radar_marker_with_icon 36 at 1837.3643 -1974.4963 12.5469

Zoals je ziet zijn er maar 2 dingen veranderd. Het getal van de opcode is nu 0570 (eerst 02A7), en het commando is ook net even anders. Maar het idee is hetzelfde, de 36 is het getal van de icon die je kunt opzoeken in de lijst en daarna ook nog de coördinaten.

Icon die je alleen ziet als je dichtbij bent

 04CE: $icon = create_icon_marker_without_sphere 12 at 2447.3643 -1974.4963 12.5469

Ik denk dat het nu al wel voor zich spreekt, maar ik wilde hem er toch bijzetten.

Markers

Markers zijn pijlen die je boven een object, actor of auto plaatst. Je ziet dan tegelijkertijd een vierkantje op je radar (die hoef je er niet zelf bij te voegen dus). Er zijn natuurlijk ook markers in allerlei soorten en maten. Daarvoor gebruik je de volgende codes:

 0187: $m1 = create_marker_above_actor 10@  
 0186: $m2 = create_marker_above_car $greenwood
 03DC: $m3 = create_marker_above_pickup $wapen
 0188: $m4 = create_marker_above_object $object

De eerste is dus om een marker te plaatsen boven een actor, de tweede boven een auto, de derde boven een pick up en de vierde boven een object. Spreekt eigenlijk voor zich, als je de codes bekijkt.

Het zijn echter wel verschillende opcodes en verschillende commando’s. Wat achter de eerste $ staat, is de naam van deze regel. Wat achter de tweede $ staat, is de naam van de auto/actor/object/pickup, die je eerder (tijdens het spawnen) al gedefinieerd hebt.

Met die marker kan je natuurlijk ook allerlei dingen doen, zoals bijvoorbeeld het vierkantje op de radar kleiner (of groter) maken. Die ga ik nu niet allemaal uitleggen, want het is niet zo van belang. Alleen het kleuren maken wil ik nog wel even uitleggen, omdat dat wel leuk is in een mod. Mocht er iemand zijn die graag heeft dat ik wat extra details geeft, moet die dat even zeggen. ;)

Er zijn verschillende kleuren. Je kunt elke marker dus een kleur geven. Dat kan je door een andere regel toe te voegen:

 0165: set_marker $m1 color_to 1

Een lijstje met kleuren: 0= red 1= green 2= light blue 3= white 4= light yellow

Destroy

Uiteindelijk moet je alles ook nog destroyen, zodat de marker/sphere/icon er niet meer is. Dat doe je als volgt:

 0164: disable_marker $m1

of (Sannybuilder manier):

 Marker.Disable($m1)

Voorbeeld

De pijl op de greenwood uit de vorige tutorial, geeft als code:

 //Load models
 0247: load_model #GREENWOO 
 038B: load_requested_models 
 
 :MODEL_LOAD
 00D6: if  
 8248:   not model #GREENWOO available 
 004D: jump_if_false @MODEL_SPAWN											  
 0001: wait 0 ms 
 0002: jump @MODEL_LOAD
 
 :MODEL_SPAWN
 00A5: $greenwood = create_car #GREENWOO at 2458.2483 -1659.0264 13.3047 
 Car.Angle($greenwood)= 270.0
 0186: $m1 = create_marker_above_car $greenwood
 wait 5000 ms
 Marker.Disable($m1)
 
 0249: release_model #GREENWOO

Hier spawnt dus een Greenwood, met daarop een pijl. Na 5000 ms (5 seconden) verdwijnt de pijl.

Volledige code

De volledige code in een stripped file:

 {
   use macro (Ctrl+J) "headsa"
   to insert a file header      
 }
 {$VERSION 3.0.0000}                                                               
   
 thread 'MAIN'
  var
   $PLAYER_CHAR: Player 
  end // var
 01F0: set_max_wanted_level_to 6 
 set_wb_check_to 0 
 00C0: set_current_time 8 0 
 04E4: unknown_refresh_game_renderer_at 2488.5601 -1666.84 
 Camera.SetAtPos(2488.5601, -1666.84, 13.38)
 $PLAYER_CHAR = Player.Create(#NULL, 2488.5601, -1666.84, 13.38)
 $PLAYER_ACTOR = Actor.EmulateFromPlayer($PLAYER_CHAR)
 07AF: $PLAYER_GROUP = player $PLAYER_CHAR group
 Camera.SetBehindPlayer
 set_weather 0          
 wait 0 ms
 $PLAYER_CHAR.SetClothes("PLAYER_FACE", "HEAD", Head)
 $PLAYER_CHAR.SetClothes("JEANSDENIM", "JEANS", Legs)                          
 $PLAYER_CHAR.SetClothes("SNEAKERBINCBLK", "SNEAKER", Shoes)
 $PLAYER_CHAR.SetClothes("VEST", "VEST", Torso)
 $PLAYER_CHAR.Build
 $PLAYER_CHAR.CanMove = True
 fade 1 (out) 0 ms                     
 select_interior 0
 0629: change_stat 181 (islands unlocked) to 4
 016C: restart_if_wasted at 2027.77 -1420.52 15.99 angle 137.0 for_town_number 0
 016D: restart_if_busted at 1550.68 -1675.49 14.51 angle 90.0 for_town_number 0
 0180: set_on_mission_flag_to $ONMISSION // Note: your missions have to use the variable defined here ($ONMISSION)
 03E6: remove_text_box
 create_thread @SPHERE 
 
 // IDLE LOOP
 :leeg
 wait 500
 jump @leeg
 
 end_thread 
 
 :SPHERE
 thread 'SPHERE'
 
 //Load models
 0247: load_model #GREENWOO 
 038B: load_requested_models 
 
 :MODEL_LOAD
 00D6: if  
 8248:   not model #GREENWOO available 
 004D: jump_if_false @MODEL_SPAWN                                              
 0001: wait 0 ms 
 0002: jump @MODEL_LOAD
 
 :MODEL_SPAWN
 00A5: $greenwood = create_car #GREENWOO at 2458.2483 -1659.0264 13.3047 
 Car.Angle($greenwood)= 270.0
 0186: $m1 = create_marker_above_car $greenwood
 wait 5000 ms
 Marker.Disable($m1)
 
 0249: release_model #GREENWOO
 end_thread

Werkende sphere

Nou hebben we een sphere, maar houd er rekening mee dat dat alleen nog maar de sphere is. Er gebeurt dus niets als je in de sphere gaat staan, ook niet als je daarachter code hebt geschreven. Dan moet je de volgende code toevoegen:

 00EC:   actor $PLAYER_ACTOR 0 near_point $c1 $c2 radius 1.0 1.0

Hier zegt hij dus dat de PLAYER_ACTOR (in dit geval de variabele voor de speler zelf) in de buurt is van de coördinaten $c1 (x) en $c2 (y), met een radius van 1.0.

Voor als je in een auto erin moet gaan staan:

 00EE:   actor $PLAYER_ACTOR 0 near_point 2067.4 -1831.2 radius 15.0 15.0 in_car

Werkt hetzelfde, let wel op dat het een andere opcode is en dus niet alleen in_car erachter schrijven!

Je kunt ook een specifieke auto erin laten staan, en dat doe je zo:

 01AE:   car $greenwood sphere 0 near_point -2614.6282 1398.4735 radius 5.0 5.0 stopped

Het spreekt allemaal voor zich, maar de code is altijd net even anders.

Met deze tutorials zou je al een missie kunnen maken, en dat zullen we dan ook maar gaan doen in de volgende tutorial!